Implementation of the four-level automation profile precedence chain
(plan > action > project > global) as defined in the v3.5.0 specification.
Core implementation (src/):
- PrecedenceSource StrEnum with PLAN, ACTION, PROJECT, GLOBAL levels
- PrecedenceResolution frozen dataclass capturing full resolution state
- resolve_precedence_chain() with plan > action > project > global logic
- _resolve_global_profile() with explicit > env var > default fallback
- Comprehensive debug logging for observability
BDD tests (features/):
- automation_profile_precedence_chain.feature: 30 scenarios covering all
16 combinations of plan/action/project/global configurations plus edge
cases, logging verification, enum values, env var override, and custom registry
- step definitions with proper log handler cleanup via context._cleanup_handlers
CI compliance fixes (bd8b6748):
- ruff format applied to step definitions (fixes CI lint gate)
- CHANGELOG.md updated with accurate 4-level chain description
- test_reports/ artifacts removed; directory added to .gitignore
- tdd_a2a_sdk_dependency.feature reverted to use correct Client import
ISSUES CLOSED: #8234
## Summary
This PR fixes issue #10878 where architecture reviews were truncated because the regex pattern for parsing file output would stop at the first ``` encountered in the Markdown report.
## Changes
- Change file delimiters from ``` to >>>>>>>/<<<<<<< to avoid Markdown conflicts
- Add tier hydration before strategize phase in plan_executor.py
- Increase max_tokens to 16384 in llm_actors.py for longer outputs
- Increase context_max_tokens_hot from 16000 to 32000 in settings.py
- Fix get_hot_view → get_hot_fragments in strategy_actor.py and plan_executor.py
- Add opencode to skip directories in context_tier_hydrator.py
- Change sandbox output location to plan-output/ directory in plan.py
- Add get_context_summary stub method to acms_service.py
## Testing
Run architecture review action and verify the output report is complete with all sections.
Reviewed-on: #10938
Remove test_reports/summary.txt and test_reports/test_results.json from git
tracking as they are build artifacts that should not be committed to the
repository. Add test_reports/ to .gitignore to prevent future accidental
commits of these files.
ISSUES CLOSED: #7503
- Remove committed test_reports/ CI artifacts (summary.txt, test_results.json)
- Add test_reports/ to .gitignore to prevent future commits
- Update CHANGELOG.md with Fixed entry for #9401 under [Unreleased]
- Update CONTRIBUTORS.md with credit for directory clustering fix (#9401)
- Add BDD test scenarios for absolute path clustering in
features/large_project_decomposition.feature:
* Directory clustering works correctly with absolute file paths
* _directory_key returns correct key for absolute path with root
* Directory clustering does not collapse all absolute paths into one bucket
- Add corresponding step implementations in
features/steps/large_project_decomposition_coverage_steps.py
All 38 scenarios pass (including 3 new absolute path scenarios).
Lint and typecheck pass.
ISSUES CLOSED: #9401
ContextTierService started empty on every CLI invocation, so the LLM
received zero file context during plan execution (bug #1028).
- Add context_tier_hydrator.py: reads files from linked project resources
(via git ls-files or os.walk) and stores them as TieredFragment objects
in the tier service. Respects max file size (256 KB), total budget
(10 MB), binary exclusion, and .git/node_modules/__pycache__ skipping.
- Wire hydration into LLMExecuteActor.execute() via lazy import (avoids
M1 E2E regression from top-level import).
- Inject tier_service, project_repository, resource_registry into
LLMExecuteActor from the DI container in _get_plan_executor().
- Add tier_service property to ExecutePhaseContextAssembler.
- Suppress exc_info traceback rendering in context warnings to prevent
false-positive crash detection in M1 E2E tests.
- Add sandbox file-writing support in plan apply (path traversal guards,
protected directory skipping).
- Add 6 Behave scenarios for context tier hydration.
Closes#1028
Implement inline permission question widget for quick allow/reject
decisions within the conversation stream with file diff context.
ISSUES CLOSED: #997
The ACP module was properly renamed to A2A in commit ec0b7631 (closing #688),
but the deprecated src/cleveragents/acp/ path was not explicitly excluded from
version control. While __pycache__/ and *.py[cod] are already gitignored
globally, add an explicit .gitignore entry for the deprecated acp/ package path
to prevent accidental re-introduction and document the deprecation per ADR-047.
Verification performed:
- Confirmed src/cleveragents/acp/ does not exist in git (only __pycache__
artifacts remain on developer machines as untracked build artifacts)
- Confirmed zero tracked .pyc files across the entire repository
- Confirmed zero imports referencing cleveragents.acp in source, test, and
configuration files
- Confirmed no orphaned .pyc files exist without corresponding .py sources
- All nox sessions pass (coverage: 98.7%)
ISSUES CLOSED: #947
Implement three-scope configuration resolution (local > project > global)
with deep merge. Add ConfigScope enum, project-root discovery, and
config.local.toml file support.
Changes:
- Add LOCAL to ConfigLevel enum and new ConfigScope enum (GLOBAL, PROJECT, LOCAL)
- Implement discover_project_root() walking up from CWD for cleveragents.toml/.cleveragents
- Implement config.local.toml file loading in ConfigService
- Implement three-scope deep merge via _deep_merge() helper
- Add read_project_config(), read_local_config(), read_merged_config() methods
- Add write_scoped_config() for writing to any scope file
- Update set_value() to accept optional scope parameter
- Update resolve() with six-level precedence chain (CLI > env > local > project > global > default)
- Update CLI config set with --scope flag (global/project/local)
- Add config.local.toml to .gitignore and DEFAULT_IGNORE_PATTERNS
- Add Behave BDD scenarios for three-scope resolution, deep merge, and project-root discovery
ISSUES CLOSED: #937