Wire subplan_service from the DI container into _get_plan_executor() so
PlanExecutor can spawn child plans during the Execute phase. When
SubplanService is available but SubplanExecutionService is not explicitly
injected, _execute_subplans() now lazily creates a SubplanExecutionService
on-the-fly using the parent plan's subplan_config and the new
_execute_child_plan callback.
- _get_plan_executor(): retrieve subplan_service from container, pass to
PlanExecutor constructor
- _execute_subplans(): lazily build SubplanExecutionService when only
SubplanService is wired (Forgejo #10268)
- _execute_child_plan(): new PlanExecutor method that runs a child plan's
strategize + execute phases, registered as executor_fn callback
ISSUES CLOSED: #10268
Replace all remaining AUTO-BUG-POOL references with correct AUTO-BUG-SUP in agent-system-specification.md, automation-tracking.md documentation and agent-system-specification.md spec document, replaced with correct `AUTO-BUG-SUP` prefix used by the bug-hunt-pool-supervisor agent (#7875).
ISSUES CLOSED: #7875
GitCheckoutHandler.discover_children() and FsDirectoryHandler.discover_children()
now call discover_devcontainers() after scanning for fs-directory children. Any
.devcontainer/devcontainer.json or root-level .devcontainer.json found at the
resource location is registered as a devcontainer-instance child resource with
provisioning_state: discovered. Named configurations are also discovered and carry
the configuration name in the config_name property.
This wires the previously-isolated discover_devcontainers() function into the
production code path, enabling the spec's zero-configuration devcontainer experience.
ISSUES CLOSED: #4740
Update docs/quickstart.md to use correct CLI command signatures:
- Replace 'cleveragents plan --project' with 'cleveragents plan use <action> --project'
- Replace 'cleveragents apply --project' with 'cleveragents plan list' + 'cleveragents plan apply <plan-id>'
Addresses reviewer non-blocking suggestion to verify CLI commands match
actual signatures before merging.
Add Robot regression coverage for `actor remove --format json`, document the flag in the CLI synopsis, and record the fix in the changelog.\n\nISSUES CLOSED: #6491
Remove the [:8] truncation from session IDs in the Rich table row,
Most Recent summary, and Oldest summary fields of list_sessions()
and _session_list_dict(). Session IDs are 26-character ULIDs and
must be usable directly for copy-paste into session tell, session
show, and other session commands. The structured output (JSON/YAML)
already used full IDs in the sessions[*].id field, but the summary
panel leaked the truncation into those formats as well.
Added Behave scenarios:
- Rich table displays full 26-character ULIDs (scoped to table region)
- Summary panel shows full ULIDs for unnamed sessions (scoped to panel)
- Summary panel shows session names for named sessions
- Full ULID from list output works with session tell (round-trip,
uses parsed ULID, not hardcoded constant)
Review Cycle 2 fixes:
- docs/specification.md: Updated YAML output example to full ULIDs
- docs/showcase/*.md: Updated all example output blocks to full ULIDs
- docs/reference/session_cli.md: Replaced placeholder with full ULID
- features/session_cli.feature: Consecutive When steps -> And
- features/steps/session_cli_steps.py: Summary panel asserts both IDs,
8-char negative guard in table output, ULID capture scoped to table
region with fixture verification, named-session absence check for
second session
- CHANGELOG.md: Added [Unreleased] entry for the behavioral change
ISSUES CLOSED: #10970
Extract _get_api_key() and _create_provider_instance() as a single internal
factory that handles all provider types, including MOCK. Both create_llm() and
create_ai_provider() now delegate to _create_provider_instance(), eliminating
the duplicated if/elif provider-switching chains and the divergence between the
two code paths. Adding a new provider now requires touching exactly one place.
Key changes:
- New _get_api_key(provider_type) consolidates API key lookup and validation
that was previously duplicated across create_llm(), _create_provider_llm(),
and every branch of create_ai_provider().
- New _create_provider_instance() is the unified raw-LLM factory, replacing
_create_provider_llm() and the specialised adapter constructors in
create_ai_provider(). MOCK is now handled here via FakeListLLM.
- create_ai_provider() wraps all providers uniformly in LangChainChatProvider
instead of using specialised adapters (OpenAIChatProvider, AnthropicChatProvider,
GoogleChatProvider, OpenRouterChatProvider) for the four primary providers.
- create_llm() drops its own API key validation block; validation now happens
inside _create_provider_instance() via _get_api_key().
- All BDD scenarios updated: _create_provider_llm references become
_create_provider_instance, and provider-type assertions on create_ai_provider
results are updated to LangChainChatProvider.
Review fixes (Cycle 2):
- Add _coerce_env_bool() for consistent boolean env-var coercion in
CLEVERAGENTS_ALLOW_MOCK_PROVIDER checks.
- Introduce _ApiKeyMissing sentinel to distinguish 'not provided' from None
in provider configuration.
- Set MOCK supports_streaming=False in DEFAULT_CAPABILITIES to align with
FakeListLLM semantics.
- Make MOCK is_configured conditional on CLEVERAGENTS_ALLOW_MOCK_PROVIDER.
- Use FakeListLLM(responses=['mock response'] * 10) to prevent IndexError
in multi-step workflows.
- Strip max_retries from kwargs before passing to LangChain constructors.
- Extract _resolve_provider_type() helper shared by create_llm() and
create_ai_provider() to reduce duplication and improve readability.
- Ensure __api_key_sentinel flows through factory_kwargs even when api_key
is None, avoiding double _get_api_key() calls.
- Add CHANGELOG env-var documentation and providers.md env-var table.
- Resolve template DB lock issues by persisting in-memory SQLite via
VACUUM INTO instead of direct file creation on tmpfs.
ISSUES CLOSED: #10949
- docs/api/actor.md: Add InvariantReconciliationActor section documenting
the built-in reconciliation actor introduced in v3.8.0, including the
reconciliation algorithm, ReconciliationResult/ConflictRecord/ScopeInvariants
data classes, standalone reconcile_invariants() function, DI registration,
and failure behaviour.
- docs/modules/devcontainer-discovery.md: New module guide for the
devcontainer auto-discovery system (v3.8.0 fix#2615), covering
DevcontainerDiscoveryResult, discover_devcontainers(), is_trigger_type(),
monorepo named-config support, and gotchas.
- mkdocs.yml: Add 'Devcontainer Auto-Discovery' to the Modules nav section,
alongside shell-safety, uko-provenance, invariant-reconciliation,
context-hydration, and git-worktree-sandbox module docs.
- robot/coverage_threshold.robot: Add tdd_issue and tdd_issue_4305 tags
to the Noxfile Contains Coverage Threshold Constant test case.
ISSUES CLOSED: #4485
Completely removed all legacy plan commands from the CLI:
- Removed tell, build, new, current, cd, continue CLI commands
- Removed programmatic wrapper functions (tell_command, build_command, etc.)
- Removed legacy deprecation message
- Updated help text to indicate V3 Plan Lifecycle exclusively
- Removed stale references to tell/build in help output and command validation
Removes the legacy 'tell' and 'build' CLI shortcuts from main.py:
- Removed echo lines advertising tell/build commands
- Removed tell/build from valid_cmds list
- Removed tell/build from _LIGHTWEIGHT_COMMANDS frozenset
- These dead entries were preventing helpful error messages
Test infrastructure improvements:
- Event bus exception test: Patch the module-level logger during emit() so that
structlog.testing.capture_logs() can capture the logs. Without patching, the
module-level logger created at import time is not captured by the context manager.
- Session create/list commands: Suppress cleveragents.mcp logger to CRITICAL level
during JSON/YAML output formatting to prevent health check warnings with ANSI codes
from being written to stdout before JSON output, which breaks JSON parsing.
- Extended plan_cli_coverage_boost with scenarios for estimation_result,
invariants, execution_environment, validation_summary, and checkpoint
coverage in _plan_spec_dict
Documentation:
- Created docs/Legacy_to_V3_Guide.md with comprehensive migration instructions
- Updated CONTRIBUTING.md to document removal of legacy workflow
- Updated CHANGELOG.md to reference issue #4181 instead of PR #10800
ISSUES CLOSED: #4181
Update the Automatic Checkpoint Triggers table and configuration reference
in docs/specification.md to use the trigger names that match the actual
implementation in ToolRunner and config_service.py:
- on_tool_write → before_tool_execute
- on_tool_write_complete → after_tool_execute
The implementation (PR #3474) chose before_/after_ prefix pattern for
consistency with event naming conventions and because _execute is more
precise than _write. The spec was not updated at that time.
ISSUES CLOSED: #4745
Add mirrored versions of root CHANGELOG.md and CONTRIBUTING.md to the docs tree.
Add migration headers noting these are mirrors of the authoritative root files.
Update mkdocs.yml navigation to include both new pages between FAQ and Reference.
Update docs/specification.md to clarify that agents validation attach
extra arguments use --key value named option format (not positional
[<ARGS>...] format). Updates synopsis, argument description, and all
inline references across the specification.
ISSUES CLOSED: #4747
Register the existing audit-log-and-security.md example in the showcase registry
(examples.json) so it appears alongside other CLI tool examples.
Includes 17 audit commands covering list, show, count, and prune
operations with all filter options.
Closes#10824
- Update trigger names from 'on_tool_write' and 'on_tool_write_complete' to 'before_tool_execute' and 'after_tool_execute' to match the actual implementation in config_service.py
- Correct config key path from 'core.checkpoints.auto_create_on' to 'checkpoints.auto_create_on' to match the actual configuration structure
- Update TOML configuration examples to use comma-separated string format instead of array format, matching the actual ConfigService implementation
- Update references to trigger names in the CLI Usage section to use the correct names
- Fix invariant glossary entry: reconciliation now documented as occurring
at each phase boundary (before Strategize, Execute, Apply, and after Apply)
rather than only at start of Strategize (closes#9899)
- Add Multi-Phase Invariant Enforcement note to Plan Lifecycle section
- Add ACMS Thread Safety subsection documenting threading.RLock concurrency
contract for ContextAssemblyPipeline and all context stores (closes#9859)
- Append M7: Advanced Concepts and Deferred Features (v3.6.0) milestone spec
section covering advanced invariant lifecycle, ACMS observability, plan
hierarchy enhancements, and CLI communication pattern migration
- Add ADR-049: CLI Communication Pattern documenting local CLI exemption
from A2A boundary requirement and M9 migration path
- Add docs/api/action.md: full API reference for ActionConfigSchema and ActionArgumentSchema — field tables, factory methods, camelCase compat mapping, env-var interpolation, database integrity note, and complete YAML example
- Update docs/api/index.md: add cleveragents.action entry to module index
- Update mkdocs.yml: add 'Action Schema: api/action.md' to the API Reference nav
- Update CHANGELOG.md [Unreleased] Fixed: document plan use UNIQUE constraint violation fix (#4174, #4197)
- Clarify from_yaml_file ValueError semantics, document inputs_schema type as dict[str, Any] | None, and update A2A ASV benchmarks to pass method= requests after JSON-RPC migration
ISSUES CLOSED: #7472
- update agents diagnostics examples to show all provider checks across rich, plain, JSON, and YAML formats
- refresh error scenario samples to reflect the expanded provider coverage and recommendation counts
- align CLI diagnostics output with the spec by adding explicit provider display names and consistent ordering
Closes#5320
Restore original permission structure and model configuration while adding
only the changes needed for issue #7521: forgejo_update_pull_request
permission and PR Workflow for Major Changes documentation section.
Fixes addressed:
- Restore flat permission format (was incorrectly restructured to nested)
- Restore model to claude-haiku-4-5 with reasoningEffort max
- Restore removed critical rules (6: label delegation, 7: pagination)
- Restore removed permission denials (*, doom_loop, question, etc.)
- Add CHANGELOG.md entry for this feature
- Restore CONTRIBUTORS.md to master (remove unrelated changes)
ISSUES CLOSED: #7521
# Conflicts:
# CONTRIBUTORS.md
Extract the benchmark-regression job from the default PR CI workflow
into a dedicated scheduled workflow (.forgejo/workflows/benchmark-scheduled.yml).
The benchmark job was blocking PR feedback for 99-132 minutes even when
lint/typecheck/tests passed in under 20 minutes. The new workflow runs:
- Nightly regression tests (2 AM UTC) comparing HEAD against master
- Weekly full benchmark suite (3 AM UTC Sundays) for trend analysis
- Manual dispatch trigger for ad-hoc benchmark validation
AWS S3 integration stores benchmark results for historical trend analysis.
Documentation updated in docs/development/ci-cd.md.
CONTRIBUTORS.md updated with benchmark workflow separation contribution.
ISSUES CLOSED: #9040
# Conflicts:
# CONTRIBUTORS.md
# Conflicts:
# CONTRIBUTORS.md
Move alembic configuration and migration files from repository root into the
Python package structure to ensure they are included in the wheel distribution.
This fix resolves the FileNotFoundError when running `agents init` in Docker
containers or any environment using the built wheel distribution.
Changes:
- Move alembic/ directory from repo root to
src/cleveragents/infrastructure/database/migrations/
- Move alembic.ini to the same new location and update script_location setting
- Update MigrationRunner._find_alembic_ini() to search from the new canonical
location within the package
- Update create_template_db.py to point to the new alembic.ini location
- Update documentation references to reflect new migration file locations
- Create __init__.py for migrations package
- The env.py file is imported when running tests that verify all modules can be
imported without errors. However, context.config is only available when alembic
is actually running migrations, not during normal module imports. This caused
an AttributeError when the test tried to import the migrations.env module.
- Fix by using getattr() with a default value to safely access context.config,
and guard all code that uses config with None checks. This allows the module
to be safely imported while still functioning correctly during migrations.
Testing:
- Verified MigrationRunner can locate alembic.ini in new location
- Tested agents init succeeds in creating project with database
- Template database creation works correctly
- All migration tests should pass without changes
Alembic files now follow standard Python packaging conventions, making them
automatically included in wheel distributions without special configuration.
ISSUES CLOSED: #4180
Updates the A2A Protocol section to reflect the rename of A2aRequest/
A2aResponse fields to standard JSON-RPC 2.0 names (method, id, result,
error). Documents A2aVersionNegotiator for backward compatibility.
Closes#8787
Add comprehensive API documentation for the cleveragents.acms package,
covering the four-layer UKO ontology hierarchy (Layer 0-3), all public
types (VocabularyRegistry, ProvenanceInfo, UKOClass, UKOProperty,
UKOVocabulary, Layer2Dependency, ParadigmVocabulary), detail level maps
(DetailLevelMapBuilder, build_detail_level_map, build_effective_map,
resolve_detail_level), and all Layer 3 language vocabulary types for
Python, TypeScript, Rust, and Java.
- Add docs/api/acms.md with full API reference and usage example
- Update docs/api/index.md to include ACMS/UKO in the module index
- Update mkdocs.yml nav to include the new ACMS/UKO page
- Update CHANGELOG.md [Unreleased] with the documentation addition
Renamed backlog-grooming-pool-supervisor to grooming-pool-supervisor and
backlog-grooming-worker to grooming-worker. The grooming agents now analyze
all open issues AND pull requests (not just the backlog). Workers perform a
full 10-point quality analysis on a single item instead of processing
batches. PRs with unaddressed reviews are prioritized. PR labels are synced
from linked issues. Workers post [GROOMED] markers for tracking.
Fixed critical issue: implementation-pool-supervisor now correctly dispatches
workers through tier selectors (tier-haiku/codex/sonnet/opus) instead of
launching implementation-worker directly, ensuring the escalation model
actually sets the correct model tier. Added implementation-worker to all
four tier selector task permissions.
Updated session tags from AUTO-BLOG to AUTO-GROOM. Updated specification
sections 4.2.1, 5.5, 5.5.1, 9.7, and architecture diagram.
ISSUES CLOSED: n/a
Three implementation contracts clarified in response to security/correctness
bugs surfaced by the bug hunt pool:
1. Path containment: Sandbox path validation MUST use Path.is_relative_to()
not string prefix comparison. String prefix allows /tmp/sandboxmalicious
to pass a /tmp/sandbox root check. Canonical implementation provided.
2. Datetime handling: All stored ISO timestamp comparisons MUST parse back
to timezone-aware datetime objects before comparing. String comparison
of ISO timestamps is incorrect when timezone offsets differ in format.
Canonical parse_utc_ts() pattern provided.
3. Plugin protocol validation: Protocol compliance MUST be checked
structurally via issubclass() — never by instantiating the plugin class.
Instantiation runs __init__ side effects before the plugin is approved.
These are minor clarifications (implementation contracts, not architectural
changes) added to the existing Security and Extensibility sections.
Refs: BUG-HUNT issues #7336 (path traversal), #7341 (datetime comparison),
#7331 (plugin instantiation)
- Add docs/modules/context-hydration.md: documents the ACMS context
hydration pipeline (context_tier_hydrator) that fixes the empty
ContextTierService bug (#1028). Covers hydrate_tiers_from_project,
hydrate_tiers_for_plan, file listing strategies, limits, and
fragment metadata.
- Add docs/modules/git-worktree-sandbox.md: documents the
GitWorktreeSandbox class that isolates plan apply changes in a
dedicated git branch/worktree and merges back on commit (#4454).
Covers full lifecycle, error types, branch naming, and fallback
for non-git projects.
- Update docs/architecture.md: add Git Worktree Sandbox Apply section
and extend ACMS section with context hydration note.
- Update mkdocs.yml: add both new module pages to the Modules nav.
ISSUES CLOSED: #6841
Add comprehensive responsibility-first analysis of the entire agent system
covering 144 named responsibilities (R-01 through R-144) organized into 8
categories with 29 sub-categories and complete bidirectional cross-references.
Key additions:
- Section 22.0: Categorized Responsibility Index with navigation guide
- Section 7.9: Universal Supervisor Responsibilities (13 shared baseline)
- Section 22.145: Redundancy Analysis Summary with depth distribution,
highest-redundancy items, most cross-referenced agents, and 5 named
redundancy patterns
- 30 agent back-reference tables covering ~50 individual agents
- Category introductions explaining scope and significance
- 6th foundational principle (Defense-in-Depth) added to Section 1.1
Categories: A (Development Lifecycle, 50 items), B (Quality Assurance),
C (Ticket Hygiene), D (Architecture), E (Operational Health),
F (Human Interaction), G (Strategic Governance), H (Project Standards).
ISSUES CLOSED: N/A
Refresh Day 100 entries using Forgejo telemetry across both cycle snapshots to capture scope expansion, milestone progress, and active session data.\n\n- Update today marker and Gantt update log for Day 100\n- Capture scope expansion metrics and milestone completion percentages\n- Refresh risk register, status summary, and track/milestone forecasts\n- Append Day 100 cycle-2 schedule adherence tables for teams and milestones\n- Note infrastructure changes (review requirement, supervisor additions)\n\nISSUES CLOSED: #6975