CHANGELOG.md and CONTRIBUTORS.md both referenced #10590, which is an
open PR not an issue. The correct issue is #8616. Also removed the
duplicate ### Added heading in CHANGELOG.md that preceded the entry.
CONTRIBUTORS.md now references PR #11106 / issue #8616.
ISSUES CLOSED: #8616
Implement the ContextStrategy Protocol for pluggable context assembly strategies
in the ACMS pipeline. Includes six built-in strategies, a StrategyRegistry service
with plugin discovery support, thread-safe operations, and comprehensive BDD tests.
ISSUES CLOSED: #10590
Per project import rules, all imports must appear at the top of the file.
The ContextAssemblyPipeline import was inside the @then step function body;
moved it to the module-level imports section alongside other production-code
imports.
ISSUES CLOSED: #10027
ACMSExecutePhaseContextAssembler previously instantiated the plain
ACMSPipeline when no pipeline was explicitly provided, missing production
Phase 1 optimizations including confidence-weighted strategy selection,
proportional budget allocation with min-budget enforcement, parallel
strategy execution with circuit breaking, and per-stage timing instrumentation.
The default is now ContextAssemblyPipeline which provides all of these
capabilities while remaining a drop-in replacement for ACMSPipeline.
ISSUES CLOSED: #10027
- Remove unused TYPE_CHECKING imports (DomainContextStrategy, StrategyCapabilities) from acms_service.py — they are only referenced in docstrings, not type annotations, causing F401 lint errors. This resolves the lint failure that was introduced by the prior commit b5b08e25's attempt to move them into the TYPE_CHECKING block.
- Fix line-length violation (E501) on StrategyCapabilities docstring — shortened :mod: directive reference to fit 88-char limit.
ISSUES CLOSED: #10590
- Add CHANGELOG entry under [Unreleased] Added section documenting the
ContextStrategy protocol, six built-in strategies, StrategyRegistry,
and 77 Behave test scenarios.
- Update CONTRIBUTORS.md with HAL 9000's contribution for PR #10590.
ISSUES CLOSED: #10590
- actor.py, actor_run.py: extend except to catch typer.Exit alongside
click.exceptions.Exit so unknown actor name exits are not swallowed by
the generic Exception handler, causing wrong exit codes in integration tests
- db_repositories_cov_r3_steps.py: initialize context.drcov3_error = None
before the try block so the @then assertion does not raise AttributeError
on the successful-prune path
- plan_correct_revert_append_modes_steps.py: fix import path from
src.cleveragents to cleveragents (package installs without the src. prefix)
Consolidate the four extended @when variants (with guidance, without
--yes, with --yes, with --dry-run) into a single @when step that reads
option flags from context variables set by @given steps. Behave's
registration-time conflict detection uses re.search without end anchors,
so the base mode "{mode}" pattern falsely matched all four longer
variants as prefixes.
Also:
- Add decision ID validation to the @when step so the "decision not
found" scenario actually raises an error instead of silently passing
- Rename "affected decisions" @then step to avoid pattern collision with
the identical step already defined in correction_flows_steps.py
- Fix ruff format violations (wrapped long decorator and assertion lines)
ISSUES CLOSED: #9286
Add BDD feature file and step definitions for plan correction functionality.
Implements support for both revert mode (prunes decision tree and re-executes LLM)
and append mode (adds guidance without re-executing).
Features:
- Revert mode with confirmation prompt and --yes flag support
- Append mode with guidance text support
- Dry-run mode for impact analysis
- Plan and decision ID validation
- Non-correctable plan state rejection
- Decision tree persistence to database
ISSUES CLOSED: #9286
The CREATE_TRACKING_ISSUE and CREATE_ANNOUNCEMENT_ISSUE scenarios in
features/automation_tracking_mandatory_labels.feature used Behave tables
without explicit column headers, but the step implementations index rows
by row["name"] / row["value"]. Behave was treating the first data row as
the heading row, raising KeyError('"value" is not a row heading') and
erroring both scenarios.
Add the missing `| name | value |` header row to both tables so the
indexed access works as written. Also apply `ruff format` to the steps
module to satisfy the lint/format gate (trailing commas in dict literals
and parenthesised long assert messages).
ISSUES CLOSED: #3105
Updated automation-tracking-manager.md to enforce mandatory labels on all tracking issues:
- Status tracking issues now require both 'Automation Tracking' and 'Priority/Medium' labels
- Announcement issues require both 'Automation Tracking' and a priority label
- Added critical rule #4 to enforce label application with failure handling
- Added comprehensive BDD tests to verify mandatory label application
ISSUES CLOSED: #3105
Add the second blank line before the "# --- Scope Chain Resolver ---"
section divider to satisfy ruff format. CI lint was failing because
ruff format --check wanted to reformat this single file.
Refs: #939, #5705
Update plugin_extension_points.feature and step definitions to reflect
the addition of the ScopeChainResolverExtension as the 31st extension
point. The PR added the extension point but forgot to update the existing
test file that hardcoded the count as 30.
ISSUES CLOSED: #5705
- Add ScopeChainResolverExtension protocol to extension_protocols.py
- Register scope.chain_resolver as 31st extension point in extension_catalog.py
- Implement BDD tests for scope chain resolver registration and invocation
- Update extension point count from 30 to 31
- Support custom entity name resolution through pluggable scope resolvers
Closes#5705
- Remove duplicate step definitions from tui_persona_cycle_steps.py that
conflicted with tui_persona_system_steps.py (a temporary TUI persona
registry, set active persona, active persona assertions)
- Fix unquoted step parameter in @then step to use quoted {persona_name}
matching the feature file syntax
- Add docstrings to export_persona, import_persona, load_state, save_state,
get_last_persona, set_last_persona in registry.py
- Add docstrings to active_name, active_persona, set_active_persona,
current_preset in state.py
- Add CHANGELOG entry for PersonaRegistry and PersonaState.cycle_persona()
ISSUES CLOSED: #5314
The seven record_* methods previously each duplicated the validate +
snapshot + record + log + except pattern, inflating uncovered-line
counts and producing ruff-format violations. Centralise that boilerplate
in a single _record helper; each public method now delegates with just
the decision type + log label.
Also realigns features/execute_decision_recording.feature with its
steps: split combined Then steps, fix alt=/alts= mismatch, change
mentions "X" to mentions="X", and add a missing space in the
res_select scenario. Adds hardcoded steps for the empty-string error
cases (behave's `{q}` placeholder needs >=1 char), plus scenarios for
plan_id construction validation and whitespace-only inputs.
Fixes the CI / lint failure (ruff format) and the CI / unit_tests
failure (11 errored scenarios in execute_decision_recording.feature).
ISSUES CLOSED: #8477
Epic #8477: added ExecutePhaseDecisionHook as the Execute-phase mirror of
StrategizeDecisionHook. Provides six recording methods for implementation
choices, tool invocations, error recovery, validation responses, subplan
spawn, and resource selection during execution contexts. Captures full
context snapshots with SHA-256 hashes and persists decisions atomically
via DecisionService. Includes comprehensive Behave test coverage.
ISSUES CLOSED: #8477