Commit Graph

476 Commits

Author SHA1 Message Date
freemo 325f63d050 docs: update specification — add agents plan errors command
Documents the agents plan errors CLI command in both the Command
Synopsis and Command Reference sections of the specification.

The command was already implemented in src/cleveragents/cli/commands/plan.py
and referenced in the TUI slash catalog but was absent from the CLI
documentation sections.

Changes:
- Command Synopsis: added 'agents plan errors <PLAN_ID>' after plan rollback
- Command Reference: added '##### agents plan errors' section with synopsis,
  purpose, arguments, and Rich/Plain/JSON output examples

Approved via proposal issue #2883.

ISSUES CLOSED: #2883
2026-04-05 04:08:40 +00:00
freemo 66c99db163 docs(timeline): update schedule adherence Day 95 (2026-04-05) 2026-04-05 02:40:40 +00:00
freemo 03334aaa3d docs(timeline): update schedule adherence Day 54 (2026-04-03) 2026-04-04 19:17:58 +00:00
freemo 5c0016c79d docs: add DomainBaseModel API reference and CI template DB changelog entry
Add DomainBaseModel section to docs/api/core.md documenting the shared Pydantic base class from PR #2014 (issue #1941), and add CHANGELOG entry for the CI template DB extension from PR #2399 (issue #2334).

ISSUES CLOSED: #1941

Co-authored-by: Jeffrey Phillips Freeman <jeffrey.freeman@cleverthis.com>
Co-committed-by: Jeffrey Phillips Freeman <jeffrey.freeman@cleverthis.com>
2026-04-03 20:41:23 +00:00
freemo c678fcdcc3 docs(spec): document inline PermissionQuestionWidget for single-file permission requests
Add inline permission question widget section to TUI documentation in
docs/specification.md and update ADR-044 Prompt Architecture section to
distinguish between single-file (inline widget) and multi-file
(PermissionsScreen) permission request handling.

Changes:
- docs/specification.md: Add '### Inline Permission Question Widget' section
  documenting PermissionQuestionWidget, InlinePermissionQuestion domain model,
  PermissionRequestType enum, PermissionDecision enum, keyboard shortcuts,
  and routing logic (single-file vs multi-file)
- docs/adr/ADR-044-tui-architecture-and-framework.md: Update Prompt Architecture
  item 3 from QuestionWidget to PermissionQuestionWidget with inline rendering
  description; add QuestionWidget as item 4 for non-file-specific choices

Triggered by PR #2181 (docs(tui): document PermissionQuestionWidget).
Approved via proposal issue #2178.

ISSUES CLOSED: #2178
2026-04-03 19:03:04 +00:00
freemo dd17d0f8e6 docs(tui): add shell safety, permission question widget, and first-run docs
Add reference documentation for three new TUI features:

- docs/reference/tui_shell_safety.md: Full reference for the shell danger
  detection subsystem (DangerousPatternDetector, ShellDangerLevel,
  DangerousPattern, DangerousCommandWarning, DEFAULT_PATTERNS registry).
  Covers all built-in patterns across CRITICAL/HIGH/MEDIUM/LOW levels,
  usage examples, and custom pattern extension.

- docs/reference/tui_permission_question.md: Full reference for the inline
  PermissionQuestionWidget (issue #997). Documents InlinePermissionQuestion,
  PermissionRequestType, PermissionDecision, render_permission_question(),
  PermissionDecisionEvent, and PermissionQuestionWidget with key bindings
  and usage examples.

- docs/reference/tui.md: Extended with First-Run Experience section
  (ActorSelectionOverlay, first_run helpers), Inline Permission Questions
  section, shell danger detection note in Shell Mode, updated module table,
  and links to new reference pages.
2026-04-03 18:01:26 +00:00
freemo 744abb9d62 docs(timeline): update schedule adherence Day 54 (2026-04-03) 2026-04-03 17:23:55 +00:00
freemo d66887766f docs(tui): document PermissionQuestionWidget and add CHANGELOG entry
Add PermissionQuestionWidget API documentation to docs/api/tui.md including
method table, key bindings, PermissionDecisionEvent dataclass, and
render_permission_question() helper reference. Add corresponding CHANGELOG
entry under [Unreleased] Added section.

Refs: #997
2026-04-03 06:39:51 +00:00
eugen.thaci f66fb5a19a docs(spec): align ASCII UI tables in specification and related pages
Align Unicode box-drawing blocks and related tables in specification.md,
ADR-044/045/046, and reference pages for consistent MkDocs rendering.

ISSUES CLOSED: #1171
2026-04-03 04:55:21 +00:00
freemo 108d87e1bb docs: update CHANGELOG and A2A API docs for recent merged PRs
Add CHANGELOG [Unreleased] entries for 6 recently merged commits:
- feat(tui): shell danger detection patterns (#1003)
- fix(a2a): JSON-RPC 2.0 wire format compliance — BREAKING field rename (#1501)
- fix(cli): disallow mixing legacy and v3 plan workflows (#1577)
- fix(cli): actor add rich output missing panels
- fix(infra): E2E suite centralized database initialization (#1023)
- ci(pipeline): parallelized static analysis jobs

Update docs/api/a2a.md to reflect JSON-RPC 2.0 field name changes:
A2aRequest.operation → method, A2aResponse.data → result, etc.
2026-04-03 02:43:00 +00:00
freemo 70e2ce4386 Merge pull request 'fix(infra): resolve TLS handshake failure on git.dev.cleveragents.com' (#1865) from fix/infra-tls-handshake-failure-git-dev into master 2026-04-03 01:13:31 +00:00
freemo 72a9a17a67 docs(timeline): update schedule adherence Day 54 (2026-04-03)
Day 54 morning update. No merges overnight. Agents created 100+ new issues.

Key changes:
- Appended Day 54 schedule adherence entry
- Updated today marker to 2026-04-03 in both gantt charts
- Open bugs: 35 → 50 (+15 new bugs from agents overnight)
- Open PRs: 79 → 84 (+5 new fix/CI branches)
- Open issues: 400 → 500 (+100 new from agents overnight)
- M3 (v3.2.0): 82% → 75% (212/281, milestone grew 256→281)
- M4 (v3.3.0): 79% → 78% (99/127, milestone grew 126→127)
- M5 (v3.4.0): 88% → 87% (126/145, milestone grew 143→145)
- M6 (v3.5.0): 77% → 71% (172/241, milestone grew 221→241)
- M7 (v3.6.0): 73% → 68% (120/177, milestone grew 164→177)
- M8 (v3.7.0): 36% → 29% (54/185, milestone grew 152→185)
- M9 (v3.8.0): 40% → 26% (64/242, milestone grew 160→242)
2026-04-03 00:33:20 +00:00
freemo 8c81f13758 fix(infra): resolve TLS handshake failure on git.dev.cleveragents.com
The TLS handshake failure on git.dev.cleveragents.com was caused by the
hostname being absent from the certificate's Subject Alternative Names
(SANs), or by SNI virtual-host misconfiguration on the server side.

This commit delivers the repository-side remediation:

- scripts/check-tls-cert.py: New TLS certificate health-check script.
  Connects to a hostname, verifies the certificate's SANs include the
  target hostname, checks expiry, and reports errors/warnings.  Accepts
  an injectable SSLContext for unit testing without real network access.
  Supports wildcard SAN matching and configurable expiry warning threshold.

- docs/development/ops-runbook.md: New ops runbook documenting the full
  certificate renewal procedure (Let's Encrypt/certbot and manual CA),
  SNI misconfiguration diagnosis steps, expiry monitoring with cron, and
  recommended alert thresholds (30/14/7/0 days).

- features/tls_certificate_check.feature: 14 Behave scenarios tagged
  @tdd_issue @tdd_issue_1543 covering: missing SAN detection, valid SAN
  acceptance, expired certificate detection, expiry warning threshold,
  TLS handshake errors, connection timeouts, connection refused, wildcard
  SAN matching, and _hostname_matches_san unit tests.

- features/steps/tls_certificate_check_steps.py: Step definitions for
  the above feature, using unittest.mock to inject SSL contexts and
  socket connections so no real network calls are made.

- mkdocs.yml: Added Ops Runbook to the Development section navigation.

The actual server-side certificate renewal (adding git.dev.cleveragents.com
as a SAN and reloading the web server) must be performed by the server
administrator following the procedure in docs/development/ops-runbook.md.

Closes #1543

ISSUES CLOSED: #1543
2026-04-02 23:59:37 +00:00
freemo ee1710dc3e docs(timeline): update schedule adherence Day 53 (2026-04-02) night refresh
Night refresh after UAT/bug-hunt/CI agents created 50+ new issues.

Key changes:
- Open bugs: 6 → 35 (UAT/bug-hunt agents created 29 new bugs #1749-#1791)
- Open PRs: 74 → 79 (+5 new CI/security PRs)
- Open issues: 339 → 400 (+61 new from UAT/bug-hunt/CI agents)
- M3 (v3.2.0): 85% → 82% (211/256, milestone grew from 236→256)
- M4 (v3.3.0): 80% → 79% (99/126, milestone grew from 124→126)
- M5 (v3.4.0): 89% → 88% (126/143, milestone grew from 142→143)
- M6 (v3.5.0): 79% → 77% (171/221, milestone grew from 214→221)
- M7 (v3.6.0): 75% → 73% (120/164, milestone grew from 150→164)
- M8 (v3.7.0): 38% → 36% (55/152, milestone grew from 107→152)
- M9 (v3.8.0): 35% → 40% (64/160, milestone grew from 49→160)
- Critical: coverage at 37% (#1782), AmbiguousStep crash (#1791)
2026-04-02 23:57:25 +00:00
freemo f063bed3e6 docs(timeline): update schedule adherence Day 53 (2026-04-02)
End-of-day refresh after CLI fix wave merged 18 PRs.

Key changes:
- Open bugs: 143 → 6 (massive CLI fix wave resolved 137 bugs)
- Open PRs: 68 → 74 (6 net new after CLI fix wave)
- Open issues: 342 → 339
- M6 (v3.5.0): 77% → 79% (168/214 closed)
- M8 (v3.7.0): 44% → 38% (41/107 closed, milestone grew from 81→107)
- M9 (v3.8.0): 40% → 35% (17/49 closed, milestone grew from 42→49)
- Added end-of-day CLI fix wave bullet to What Has Been Completed
- Updated all sections with end-of-day data
2026-04-02 23:16:27 +00:00
freemo 0382b2f722 docs: update changelog and CLI reference docs for 2026-04-02 merged PRs
- CHANGELOG: add Fixed entries for PRs #1574, #1570, #1569, #1547, #1548,
  #1522, #1524, #1525, #1520, #1553 covering rich output panels for session,
  actor, and plan commands, plus version commit SHA and provider fix
- docs/reference/session_cli.md: document new rich output panels for
  session create (Settings, Actor Details), session list (Name column,
  Summary panel), session show (Automation field), session delete
  (Deletion Summary, Cleanup panels); update export to document --format md
- docs/reference/actor_cli.md: document new rich output panels for
  actor remove (Actor Removed, Impact, Cleanup) and actor list (Summary panel)
- docs/reference/plan_cli.md: document new rich output for plan list
  (Elapsed column, Filters panel, Summary panel)
- docs/reference/cli_system_commands.md: document commit SHA resolution
  order (CLEVERAGENTS_COMMIT env var → git rev-parse → 'unknown')

ISSUES CLOSED: #1574 #1570 #1569 #1547 #1548 #1522 #1524 #1525 #1520 #1553
2026-04-02 23:06:12 +00:00
freemo 48cdcb6ea7 docs(spec): remove optional parentheses from required --config flags in command synopsis (#1573)
Co-authored-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
Co-committed-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
2026-04-02 22:00:58 +00:00
freemo 71ce95fdf6 docs(specification): reorder command synopsis to separate validation commands (#1552)
Implements issue #1552. Reorders the command synopsis in the specification to logically group validation commands separately from regular commands for better clarity.

Co-authored-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
Co-committed-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
2026-04-02 21:30:26 +00:00
freemo d318d92d1f docs(timeline): update schedule adherence Day 53 (2026-04-02)
Late-day refresh: Open PRs 50→68 (+18 new fix PRs for UAT findings),
open issues 362→342 (-20 closed), open bugs 155→143 (-12 fixed).
Milestones: M3 85% (197/231), M4 80% (99/124), M5 89% (126/142),
M6 77% (165/214), M7 75% (112/149), M8 44% (36/81), M9 40% (17/42).
Recent merges: #1498 (tool add YAML), #1481 (session checksum),
#1479 (TUI CSS), #1338 (persona export/import).
2026-04-02 20:54:36 +00:00
freemo c81afea06b docs(timeline): update schedule adherence Day 53 (2026-04-02)
End-of-day refresh: UAT supervisor fleet (cycles 11-131) discovered 100+
spec compliance bugs, surging open bug count from 50 to 155. M8 (v3.7.0)
net regression from 60% to 55% (36/65) due to 29 new UAT issues. Updated
milestone completion rates, gantt chart legend, risk register, current
status summary, and schedule adherence entry with end-of-day data.

Key changes:
- Open bugs: 50 → 155 (+105 UAT discoveries)
- Open PRs: 47 → 50 (+3 new UAT/bug PRs)
- Open issues: 289 → 362 (+73 new UAT/refactor/bug issues)
- M3 83% (190/227), M4 77% (89/115), M5 88% (126/143)
- M6 78% (165/211), M7 75% (114/152), M8 55% (36/65), M9 42% (17/40)
2026-04-02 19:50:26 +00:00
freemo 71177c6e1a docs: update changelog, API docs, and architecture for 2026-04-02 merged PRs
- CHANGELOG: add [Unreleased] entries for TUI first-run experience (#1391),
  session Markdown export (#1004), and UKO provenance/temporal versioning (#891)
- README: add first-run experience and Markdown transcript export bullets
- docs/api/tui.md: new TUI API reference covering first-run, persona system,
  input routing, slash commands, session export/import, and widgets
- docs/api/index.md: add TUI entry to module index
- docs/api/resource.md: document DatabaseResourceHandler and DevcontainerHandler
  full protocol implementations with method tables and examples
- docs/architecture.md: expand UKO section with provenance/temporal versioning
  details; update TUI design decision summary
- mkdocs.yml: add TUI page to API Reference nav

ISSUES CLOSED: #1391 #1004 #891
2026-04-02 19:30:53 +00:00
freemo 48cff5cfe0 refactor(cli): rename plan lifecycle-list and lifecycle-apply to match specification
Renames `plan lifecycle-list` to `plan list` and `plan lifecycle-apply` to `plan apply` to align with the specification's canonical command names. Removes legacy V2 plan commands that occupied those names.

- Renamed CLI command registrations from lifecycle-list/lifecycle-apply to list/apply
- Removed legacy V2 apply and list commands (~200 lines)
- Updated apply shortcut in main.py to delegate to v3 lifecycle
- Added defensive null check for plan existence in apply command
- Updated 63+ test, doc, and benchmark files for consistency

Closes #881

Co-authored-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
Co-committed-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
2026-04-02 19:09:04 +00:00
arch-guard 136c27a337 docs(timeline): update schedule adherence Day 53 (2026-04-02)
Mid-day refresh: 47 open PRs (+2), 289 open issues (+15 new UAT/refactor
issues in v3.7.0 backlog). v3.5.0 advanced to 78% (164/209, +2 closed).
v3.7.0 at 60% (36/60, +1 new issue). 50 open bugs stable.

Updated sections: Gantt chart update log, footer, risk register legend,
Current Status Summary, What Remains To Be Done, Day 53 schedule adherence
entry (task inventory with per-developer breakdown).
2026-04-02 19:04:05 +00:00
freemo e9c96c3d0c docs: add API reference and architecture overview
Add docs/api/ with per-module API documentation for core, a2a, actor,
skills, tool, mcp, resource, and config packages. Add docs/architecture.md
with a developer-oriented system overview including component map, layer
diagram, plan lifecycle, and key design decisions. Update mkdocs.yml nav
to expose both new sections.

ISSUES CLOSED: #N/A
2026-04-02 19:02:53 +00:00
freemo ed449f1b2b docs(timeline): update schedule adherence Day 53 (2026-04-02)
- Update gantt charts: M3 85%, M4 78%, M5 89%, M6 78%, M7 76%, M8 61%, M9 42%
- Update footer: 50 open bugs, 45 open PRs (down from 65/86)
- Update GANTT UPDATE LOG: v3.7.0 push, 55+ PRs merged
- Update Current Status Summary: 45 open PRs, 274 open issues, 50 bugs
- Append v3.7.0 second merge wave bullet (10 additional PRs)
- Update What Remains: M8 61%, M9 42%, 45 open PRs, 50 bugs
- Update Milestone Roadmap: M3/M4/M5/M6/M8 status sections
- Update Schedule Risk Summary: 45 PRs, 50 bugs, M8 61%
- Update Day 53 schedule adherence entry: two merge waves, updated forecasts
2026-04-02 18:19:47 +00:00
freemo 3fe1974249 docs(timeline): update schedule adherence Day 53 (2026-04-02)
- Updated Day 53 entry with end-of-day data (32 PRs merged today)
- Open PRs: 119 → 86 (down 33)
- Open bugs: 40 → 65 (up 25, UAT testing discovered new issues)
- Milestone progress: M3 74%→79%, M4 74%→75%, M5 78%→87%, M6 69%→74%, M7 61%→71%, M8 50%→54%
- Updated gantt chart completion percentages and risk register
- Updated Current Status Summary with end-of-day figures
- Added Day 53 merge wave bullet to What Has Been Completed
- Updated What Remains To Be Done with current open counts
- Updated Schedule Risk Summary with UAT findings
2026-04-02 17:41:12 +00:00
freemo 6c94ad9552 Merge pull request 'fix: add --required/--informational flags to validation add CLI' (#1222) from bugfix/m5-validation-required-flag into master 2026-04-02 17:39:19 +00:00
freemo 0d4c5b6ff1 docs: add v3.7.0 cycle-2 documentation for UKO runtime, TUI permissions, database handler, and thought blocks
- CHANGELOG.md: extend [3.7.0] section with 15 new entries covering
  PermissionsScreen, ThoughtBlock, UKO runtime services, ACMS Phase 2
  protocol aliases, DevcontainerHandler protocol completion,
  DatabaseResourceHandler CRUD/checkpoint, estimation lifecycle hook,
  user_identity domain events, PLAN_APPLIED/PLAN_CANCELLED enrichment,
  server serve subcommand, async audit refactor, and CLI flag fixes
- README.md: extend Highlights with permissions screen, thought blocks,
  UKO runtime, database handler, and estimation lifecycle
- docs/reference/uko_runtime.md: new reference for UKOQueryInterface,
  UKOInferenceEngine, and UKOGraphPersistence (issue #891)
- docs/reference/tui_permissions.md: new reference for PermissionsScreen,
  PermissionRequestService, and all domain models (issue #996)
- docs/reference/tui_thought_block.md: new reference for ThoughtBlock
  domain model and ThoughtBlockWidget (issue #1001)
- docs/reference/database_handler.md: new reference for
  DatabaseResourceHandler CRUD and checkpoint methods (issue #1241)
- docs/reference/devcontainer_resources.md: add DevcontainerHandler
  protocol methods section (delete, list_children, diff, create_sandbox)
  (issue #1242)
- docs/reference/tui.md: extend architecture table and add Permissions
  Screen and Actor Thought Blocks sections

ISSUES CLOSED: #1393
2026-04-02 17:35:41 +00:00
freemo 62caf63d61 docs(spec): align spec with v3.7.0 cycle-3 implementation discoveries
- DomainEvent: add user_identity and correlation_id fields (PR #1257)
  user_identity carries authenticated user in server mode (None in local
  mode); correlation_id is a ULID linking related events in one request
  chain. Both were implemented but missing from the spec model.

- EventType: promote to StrEnum, add PLAN_ESTIMATION_COMPLETE,
  CORRECTION_APPLIED, CONFIG_CHANGED, ENTITY_DELETED, AUTH_SUCCESS,
  AUTH_FAILURE, TIER_PROMOTED, TIER_DEMOTED, TIER_EVICTED,
  VALIDATION_FIX_ATTEMPTED, VALIDATION_FIX_SUCCEEDED,
  VALIDATION_FIX_EXHAUSTED (all present in implementation, missing from
  spec enum).

- Audit log event details: enrich plan_applied row with changeset
  statistics (lines_added, lines_removed, resources_modified,
  apply_duration) per PR #1300; enrich plan_cancelled row with progress
  context (cancelled_phase, last_completed_step, subplan_count) and
  resource cleanup context (sandbox_refs, changeset_id,
  resources_pending_cleanup) per PR #1301.

- Estimation actor: document 4-level fallback chain wired in
  use_action() (PR #1310) and Strategize-to-Estimate lifecycle hook
  that emits PLAN_ESTIMATION_COMPLETE on success.

ISSUES CLOSED: #1310 #1300 #1301 #1257
2026-04-02 17:34:09 +00:00
freemo e8fa13d35c docs(spec): align spec with v3.7.0 cycle-2 implementation discoveries
- Add audit.* config key group (audit.retention-days, audit.async,
  audit.queue-maxsize) — PR #1279 added async write-behind queue to
  AuditService; spec had no audit config keys documented
- Document UKO runtime services (UKOQueryInterface, UKOInferenceEngine,
  UKOGraphPersistence) — PR #1312 operationalized UKO runtime; spec
  described UKO conceptually but not the service API
- Add UKOIndexer.index_graph() inference and layer population note

No-action PRs this cycle:
- #1307 (PermissionsScreen): implementation matches spec exactly
- #1310 (estimation actor): spec already documents actor.default.estimation
- #1278 (CorrectionDryRunReport): internal refactor, spec not affected
- #1300/1301 (event enrichment): event payload details not in spec scope
- #1305/1263/1262 (CLI fixes): spec alignment fixes, no spec change needed

ISSUES CLOSED: none (minor clarifications only)
2026-04-02 17:19:30 +00:00
freemo 62ab0b5e65 docs(spec): align spec with v3.7.0 implementation discoveries
- Add context slash command group (/context:inspect, :set, :simulate) to
  TUI slash command catalog — 70 commands across 14 groups now documented
- Document AutomationGuard sub-model fields, GuardScope enum, GuardResult
  model, and check_guard() evaluation order (denylist→allowlist→calls→
  budget→writes→apply)
- Document SubplanConfig.max_parallel (default 5, range 1–50) and
  ThreadPoolExecutor-based parallel execution cap
- Document CheckpointService operations: create_workspace_snapshot()
  (diff-based), selective_rollback() (atomic), archive_artifacts()

All changes reflect implementation discoveries from merged PRs:
#1204 (guard enforcement), #1201 (parallel scaling), #1199 (checkpoint
rollback wiring), #1239 (slash command catalog), #1250 (help panel)

ISSUES CLOSED: none (minor clarifications only)
2026-04-02 16:56:52 +00:00
freemo 82b9d927ab docs(timeline): update schedule adherence Day 53 (2026-04-02)
- Update today marker to 2026-04-02 in both gantt charts
- Update gantt chart update log to Day 53 with Session 3 context
- Update risk register: M3-M9 completion percentages from Forgejo API
- Update footer: 40 open bugs, 119 open PRs, Session 3 active
- Update Current Status Summary: Day 53, 119 PRs, 114 issues, 40 bugs
- Update warning box: Session 3 launch with 16 workers / ~71 agents
- Update Parallel Workstreams: Testing track reflects current state
- Append What Has Been Completed: Day 50 reviewer blitz + Session 3 launch
- Update What Remains To Be Done: M8/M9 detail, 119 PRs, 40 bugs
- Update Schedule Risk Summary: Day 53 critical path blockers
- Append Day 53 Schedule Adherence entry with all required tables
2026-04-02 16:55:09 +00:00
freemo b772a43ac6 docs: add TUI reference, persona docs, and v3.7.0 changelog
- docs/reference/tui.md: new TUI reference covering launch, layout,
  key bindings, input modes, help panel (F1), persona bar, full slash
  command catalog (67 commands / 14 groups), persona YAML schema, and
  module architecture table
- docs/reference/persona.md: new persona system reference covering
  storage layout, YAML schema, validation rules, argument presets,
  PersonaRegistry and PersonaState Python APIs, and TUI slash commands
- CHANGELOG.md: add [3.7.0] section summarising TUI, persona system,
  session management, server mode, A2A integration, and key fixes
- README.md: extend Highlights with TUI, persona, session, server mode,
  and A2A; add TUI quick-start, session management, and server mode
  usage examples
2026-04-02 16:52:59 +00:00
brent.edwards a5cc81354d fix: add --required/--informational flags to validation add CLI
Add --required and --informational as mutually exclusive boolean options
to the `agents validation add` CLI command. When specified, they override
the `mode` field from the YAML config file. This aligns the CLI with the
specification (specification.md line 22339) which states the validation
mode can be set "via --required/--informational on agents validation add".

The fix resolves the spec contradiction by:
- Implementing the flags in the CLI (per Core Concepts > Validation Mode)
- Updating the formal CLI reference to include the new flags
- Adding an exception to Design Principle #3 for validation add
- Removing the spurious positional name argument from the walkthrough

TDD tests from #1102 now run normally with @tdd_expected_fail removed.
New edge-case tests cover mutual exclusivity (both flags rejected).

Also excludes tool/wrapping.py from semgrep exec/compile rules since
that module intentionally uses exec() in a controlled sandbox for the
validation transform feature.

ISSUES CLOSED: #1038
2026-03-31 07:42:06 +00:00
freemo 532ea100e3 Docs: updated spec with --image tag 2026-03-30 22:12:17 -04:00
freemo 8f104fab88 Docs: daily update to timeline 2026-03-30 22:12:17 -04:00
hamza.khyari 2370e19da8 feat(resource): add container infrastructure resource types
Add 7 container infrastructure resource types per ADR-039:
container-runtime, container-image, container-mount, container-exec-env,
container-port, container-volume, container-network.

- YAML configs under examples/resource-types/
- Bootstrap registration via _resource_registry_container.py
- Updated container-instance parent_types (container-runtime, container-image)
  and child_types (container-mount, container-exec-env, container-port)
- container-runtime is top-level with auto-discovery rules (scan_depth: 1)
- container-mount/exec-env/port inherit snapshot sandbox from instance
- container-volume is user-addable with snapshot sandbox
- container-network is read-only, no sandbox
- Handler references are forward declarations (ADR-039)
- 33 Behave BDD scenarios, 4 Robot integration tests
- Updated BUILTIN_NAMES, service docstring, CHANGELOG

ISSUES CLOSED: #831
2026-03-30 13:44:54 +00:00
CoreRasurae 007af498b8 refactor(autonomy): rename automation profile task flags to spec names
Renamed all 11 task-type confidence threshold fields in AutomationProfile
from phase-transition semantics to spec-defined task-type semantics.
Updated all 8 built-in profiles, CLI formatting, YAML schema, services,
and all Behave/Robot tests referencing the old field names.

Post-review fixes:
- Fixed 24 stale old field names in M6 fixture files
  (automation_profiles.json, autonomy_guardrails.json)
- Added model_validator(mode='before') to detect legacy field names
  and raise actionable ValueError with rename mapping
- Added semantic bridge comments in PlanLifecycleService mapping
  task-type thresholds to phase-transition gates
- Added threshold_field to structured log messages for observability
- Restored categorised CLI automation-profile show output to match
  spec (Phase Transitions / Decision Automation / Self-Repair /
  Execution Controls) instead of flat list
- Added missing access_network field to spec show output examples
  (Rich, Plain, JSON, YAML variants)
- Aligned ADR-017 profile fields table to all 11 fields with
  descriptions matching spec Automatable Tasks table
- Aligned automation_profiles.md threshold descriptions with spec
- Added spec section references in phase_reversion.md, error_recovery.md,
  and plan_execute.md for field naming context
- Extended repository roundtrip test to assert all 11 threshold fields
- Fixed benchmark _make_profile() passing safety fields as top-level
  kwargs instead of via SafetyProfile sub-model (incompatible with
  extra="forbid")
- Aligned CLI JSON/YAML output structure for automation-profile show
  with the specification grouped format (phase_transitions,
  decision_automation, self_repair, execution_controls)
- Moved safety boolean fields into the Execution Controls section
  of Rich output per spec examples
- Reverted auto profile description to "Fully automatic except apply"
  per specification (line 16703, line 28406)
- Improved bridge comments in test steps with semantic context for
  threshold-to-gate mappings

ISSUES CLOSED: #902
2026-03-30 13:18:07 +01:00
hamza.khyari 6a8f724299 feat(lsp): add missing LspCapability enum values
Align LspCapability enum with the spec's 11-capability set
(docs/specification.md lines 20705-20717):

Renamed: TYPE_INFO -> HOVER, SYMBOLS -> DOCUMENT_SYMBOLS,
         FORMAT -> FORMATTING
Added:   DEFINITIONS, SIGNATURE_HELP, WORKSPACE_SYMBOLS

Updated LspToolAdapter._CAPABILITY_TOOL_MAP (11 entries):
- code_actions suffix -> code-actions (hyphen per spec)
- RENAME gets dedicated schema with new_name parameter
- workspace_symbols gets query-based schema

Updated _input_schema_for() with 4 schema categories extracted
to module-level constants: file-only, position-based, rename
(with new_name), and query-based. Added defensive ValueError for
unmapped capabilities. Added additionalProperties: false.

Extended LspClient.initialize() to advertise all 11 capabilities
in the initialize request (hover, definition, references, rename,
codeAction, formatting, signatureHelp, documentSymbol, workspace
symbol).

Fixed _make_runtime_handler() to handle workspace_symbols as
query-only input (no file_path required), resolving the
schema/handler contract mismatch.

Fixed stale references: type_info -> hover, symbols ->
document_symbols in test fixtures, feature files, CLI docstring.

Updated docs/reference/lsp.md and CHANGELOG.md.

Behave tests (38 scenarios): enum completeness, tool spec generation
with structural validation, input schema per category, all 11
stubbed provider keys, negative tests for invalid capability and
defensive ValueError branch.

ISSUES CLOSED: #834
2026-03-27 11:10:56 +00:00
Luis Mendes 59be111e1d fix(plan): complete apply phase inline in auto_progress and lifecycle-apply CLI
Modified auto_progress() to complete the Apply phase immediately after
transitioning from Execute to Apply, since Apply is a metadata transition
with no LLM processing.  This ensures `plan execute` drives the plan to
the terminal `applied` state when the automation profile permits (ci,
full-auto profiles with auto_apply < 1.0).

Extracted `_complete_apply_if_queued()` helper that consolidates the
Apply-completion pattern (start_apply + complete_apply) into a single
method with error recovery (calls `fail_apply` on failure) and async-job
guard (skips inline completion when async execution is enabled to avoid
orphaning enqueued jobs).  Used by `auto_progress()`,
`lifecycle_apply_plan()`, and `try_auto_run()`.

Added PlanLifecycleService.try_auto_run() that drives plans through all
lifecycle phases (strategize → execute → apply) when automation-profile
thresholds allow automatic progression.  Each phase checks the profile's
auto_* threshold before proceeding; a threshold of 1.0 stops the plan at
that phase boundary for human approval.

Fixed `lifecycle-apply` CLI leaving plans stuck in `apply/queued` without
completing.  The command now calls `_complete_apply_if_queued()` when the
plan is in Apply/queued, driving it to the terminal `applied` state.

Fixed stale RICH output in `lifecycle_apply_plan` that printed
"Plan is now in Apply phase (queued)" after the plan had already reached
terminal `applied` state; now branches on `plan.is_terminal`.

Additional fixes:
- SQLite UNIQUE constraint violation in LifecyclePlanRepository.update():
  added session.flush() after clear() on child collections (project_links,
  arguments, invariants) before re-inserting rows
- Added 'state' alias in _plan_spec_dict() JSON output for spec §Example 7
  jq compatibility
- Updated plan execute and lifecycle-apply reference documentation

Refs: #753
2026-03-26 17:35:24 +00:00
CoreRasurae 00881a3e5f feat(observability): implement Event System Domain Event Taxonomy (full EventType enum + DomainEvent model)
Verified and completed the Event System Domain Event Taxonomy implementation.

Gap analysis:
- EventType enum (38 types across 12 domains): ALREADY EXISTED, verified complete
- DomainEvent Pydantic model (all 9 fields): ALREADY EXISTED, verified complete
- EventBus Protocol (emit + subscribe): ALREADY EXISTED, verified complete
- ReactiveEventBus (RxPY Subject, stream property): ALREADY EXISTED, verified
- LoggingEventBus (structlog-based): ALREADY EXISTED, verified complete

Added:
- In-memory audit_log on ReactiveEventBus (list[DomainEvent] with defensive copy)
- Emit ordering aligned with specification: RxPY stream push, then audit append,
  then handler dispatch (§Event System)
- Clarified audit_log docstring: volatile in-memory log, not durable SQLite
  persistence (durable persistence wired separately via audit service layer)
- Behave feature: features/observability/event_system_taxonomy.feature (36 scenarios)
- Step definitions: features/steps/event_system_taxonomy_steps.py
- Robot integration test: robot/event_system_taxonomy_integration.robot (13 test cases)
- Robot helper: robot/helper_event_system_taxonomy.py (13 subcommands)
- ASV benchmark: benchmarks/bench_event_bus.py (5 benchmark suites)
- vulture_whitelist.py: added audit_log property

Code review fixes applied:
- Reordered emit() to match spec: on_next → audit_log → handlers (was: audit → on_next → handlers)
- Clarified audit_log docstring to distinguish volatile in-memory log from spec SQLite table
- Fixed benchmark TaxonomyAuditLogSuite: parameterized setup instead of inline construction
- Added teardown to TaxonomyLoggingEmitSuite to restore logging.disable(NOTSET)
- Clear _received list between benchmark iterations to reduce noise
- Catch specific pydantic.ValidationError in frozen model mutation tests
- Consolidated duplicate singular/plural step definitions
- Tightened EventType count threshold from >=30 to >=38

Quality gates:
- lint: PASSED
- typecheck: PASSED (0 errors)
- unit_tests: 36/36 new scenarios PASSED (pre-existing 12 flaky failures unchanged)
- integration_tests: 1483/1483 PASSED
- security_scan: PASSED
- dead_code: PASSED

ISSUES CLOSED: #587
2026-03-26 11:52:52 +00:00
hurui200320 414abb1396 fix(cli): add missing --yes flag to plan apply command (#1127)
## Summary

Adds the `--yes`/`-y` flag to the `lifecycle-apply` CLI command as required by the specification (`agents plan apply [--yes|-y] <PLAN_ID>`). Without `--yes`, a confirmation prompt now displays before proceeding with the destructive Apply phase. With `--yes`, the apply proceeds immediately without prompting.

Closes #932

## Changes

### Source Code
- **`src/cleveragents/cli/commands/plan.py`**: Added `yes: Annotated[bool, typer.Option("--yes", "-y", help="Skip confirmation prompt")] = False` parameter to `lifecycle_apply_plan`. Added `typer.confirm()` prompt before the apply operation, consistent with the pattern used by `rollback_plan`, `correct_plan`, and other destructive commands.
  - Confirmation prompt text matches spec exactly: `"Apply changes for plan {plan_id}?"` producing `Apply changes for plan <ID>? [y/N]:`.
  - Fixed redundant plan ID display when `pre_plan` is `None` — now shows `"Apply changes for plan X?"` instead of `"Apply plan X (X)?"`.
  - Added `except ValueError` handler consistent with sibling commands `lifecycle_execute_plan` and `_lifecycle_apply_with_id`.
  - Added `except Exception` catch-all handler with `isinstance(e, (typer.Abort, typer.Exit))` re-raise guard, consistent with `lifecycle_execute_plan`.
  - Moved `PlanPhase` and `ProcessingState` imports to module level per CONTRIBUTING.md §Import Guidelines.

### TDD Tag Removal (Bug Fix Workflow)
- **`features/tdd_plan_apply_yes_flag.feature`**: Removed `@tdd_expected_fail` tag (leaving `@tdd_bug` and `@tdd_bug_932` as permanent regression guards).
- **`robot/tdd_plan_apply_yes_flag.robot`**: Removed `tdd_expected_fail` tag (leaving `tdd_bug` and `tdd_bug_932`).

### Test Updates
Updated all existing `lifecycle-apply` invocations across 17 test/benchmark files to pass `--yes`, since the new confirmation prompt would otherwise abort in non-interactive test environments:
- 9 Behave step definition files
- 3 Robot Framework helper scripts
- 2 Robot Framework e2e acceptance tests
- 3 ASV benchmark files (4 invocations: `cli_robot_flow_bench.py` ×2, `m1_sourcecode_smoke_bench.py` ×1, `plan_cli_smoke_bench.py` ×1)

### Confirmation Prompt Tests (New + Strengthened)
- **`features/tdd_plan_apply_yes_flag.feature`**: 5 scenarios total:
  - `lifecycle-apply recognises the --yes long flag` — verifies flag acceptance, prompt suppression, exit code 0, and `apply_plan` was called
  - `lifecycle-apply recognises the -y short flag` — same as above for short flag
  - `lifecycle-apply without --yes prompts for confirmation and user declines` — verifies `"Apply cancelled."` message, `exit_code == 0`, and `apply_plan` was NOT called
  - `lifecycle-apply without --yes prompts for confirmation and user accepts` — verifies prompt appears, `exit_code == 0`, and `apply_plan` was called
  - `lifecycle-apply catches unexpected exceptions cleanly` — verifies `"Unexpected error"` output, no traceback leak, non-zero exit code (exercises the `except Exception` catch-all)
- **`features/steps/tdd_plan_apply_yes_flag_steps.py`**: Refactored step definitions:
  - `_make_mock_plan` uses `PlanPhase` and `ProcessingState` enum types instead of raw strings
  - `_make_mock_plan` uses `datetime.now(tz=UTC)` instead of timezone-naive `datetime.now()`
  - Unified prompt suppression step handles both `--yes` and `-y` via parameterised step pattern
  - Added `When` step for unexpected error scenario with `RuntimeError` side_effect
  - Added `Then` step for non-zero exit code assertion
- **Feature/Robot documentation**: Updated stale descriptions that said "implementation does not accept --yes" to reflect the flag is now implemented.

### Documentation
- **`docs/reference/plan_cli.md`**: Updated `lifecycle-apply` section with:
  - `### Synopsis` heading with code block
  - `### Options` table listing `--yes/-y` and `--format/-f` flags
  - `### Arguments` table listing `PLAN_ID`
  - Matches the style used by other command sections in the same file

## Review Fixes (Cycle 3 — Luis's review)

| ID | Severity | Issue | Resolution |
|----|----------|-------|------------|
| M1 | Medium | `typer.Abort()` on user decline produces exit code 1 and redundant "Aborted." | Changed to `raise typer.Exit(0)` — consistent with `correct_decision` and legacy `apply` |
| M2 | Medium | Missing exit code assertion on decline scenario | Added `And the lifecycle-apply exit code should be 0` to the decline scenario |
| M3 | Medium | Spec compliance: "summary of pending changes" not implemented | Deferred — spec example shows summary *after* confirmation, not before; implementation matches spec. Ticket-vs-spec ambiguity noted. |
| L1 | Low | Missing `except Exception` catch-all handler | Added catch-all matching `lifecycle_execute_plan` pattern; re-raises `typer.Abort`/`typer.Exit` |
| L2 | Low | Documentation description not updated | Expanded description in `plan_cli.md` to explain confirmation prompt and `--yes` |
| L3 | Low | Dead code `is not None` guards | Removed both guards — `get_plan()` raises `NotFoundError`, never returns `None` |
| I1 | Info | Duplicate `PlanPhase` import | Hoisted import to top of `try` block, eliminating duplicate at old line 2087 |
| I2 | Info | `typer.confirm` without explicit `default=False` | Added `default=False` for consistency with sibling commands |
| L4 | Low | No test for `--yes` after positional arg | Not addressed — Typer/Click handles both orderings; low risk |
| L5 | Low | No test for auto-select + interactive prompt | Not addressed — separate concern outside ticket scope |
| I3 | Info | Robot helper only tests flag recognition | By design — noted as informational |

## Review Fixes (Cycle 4 — Self-QA)

| ID | Severity | Issue | Resolution |
|----|----------|-------|------------|
| Major-1 | Major | No test for `except Exception` catch-all handler | Added new scenario `"lifecycle-apply catches unexpected exceptions cleanly"` with `RuntimeError` side_effect; asserts `"Unexpected error"` output, no traceback, non-zero exit |
| Minor-2 | Minor | Missing `ValueError` handler inconsistent with siblings | Added `except ValueError as e:` with `"[red]Execution Error:[/red]"` before catch-all, matching `lifecycle_execute_plan` and `_lifecycle_apply_with_id` |
| Minor-3 | Minor | Flag scenarios don't verify `apply_plan` called | Added `And the lifecycle-apply should have called apply` to both `--yes` and `-y` scenarios |
| Minor-4 | Minor | Stale docstring in Robot helper references `tdd_expected_fail` inversion | Updated to reflect bug is fixed and tests serve as regression guards |
| Minor-5 | Minor | `plan_cli.md` lacks Options table for `lifecycle-apply` | Added Synopsis, Options, and Arguments sections matching sibling command style |
| Nit-6 | Nit | Duplicated step defs for `--yes` vs `-y` prompt suppression | Unified into single parameterised step `"the lifecycle-apply {flag} output should not contain the confirmation prompt"` |
| Nit-7 | Nit | `datetime.now()` timezone-naive | Changed to `datetime.now(tz=UTC)` |
| Nit-8 | Nit | `_make_mock_plan` params use `str` instead of enum types | Changed to `PlanPhase` and `ProcessingState` enum types |

## Review Fixes (Cycle 5 — Jeff's approval note)

| ID | Severity | Issue | Resolution |
|----|----------|-------|------------|
| Import-1 | Minor | `PlanPhase`/`ProcessingState` imports inside function body instead of module level | Moved to module-level import per CONTRIBUTING.md §Import Guidelines |

## Known Limitations / Deferred Items

- **M3: Ticket AC mentions "summary of pending changes"** but the spec example only shows `"Apply changes for plan <ID>? [y/N]: y"` without a change summary. The implementation shows plan ID only (matching the spec), not a change summary. This is a ticket-vs-spec ambiguity; recommend discussing with ticket author.
- **Legacy `apply` command** accepts `--yes` but does not pass it to `_lifecycle_apply_with_id()`. This is a pre-existing issue outside the scope of this ticket.
- **`pre_plan is None` branch** has no explicit test. Pre-existing architectural issue; no action taken.

## Quality Gates

| Gate | Result |
|------|--------|
| `nox -s lint` |  passed |
| `nox -s typecheck` |  passed (0 errors) |
| `nox -s unit_tests` |  passed (471 features, 12,424 scenarios, 0 failures) |
| `nox -s integration_tests` |  passed (1,727 tests, 0 failures) |
| `nox -s e2e_tests` |  passed (41 tests, 0 failures) |
| `nox -s coverage_report` |  passed (≥97% coverage) |

Reviewed-on: cleveragents/cleveragents-core#1127
Reviewed-by: Jeffrey Phillips Freeman <jeffrey.freeman@cleverthis.com>
Co-authored-by: Rui Hu <rui.hu@cleverthis.com>
Co-committed-by: Rui Hu <rui.hu@cleverthis.com>
2026-03-26 07:50:09 +00:00
freemo a3c3a5c530 Docs: daily update to timeline 2026-03-22 23:45:54 -04:00
freemo 5f5ef891a2 Docs: daily update to timeline 2026-03-22 17:29:19 -04:00
freemo 0c301ac581 fix(test): update facade operation count from 11 to 42
The A2A facade now exposes 42 operations (31 extension + 11 legacy)
after the spec-aligned _cleveragents/ extension methods were added.
Update the BDD assertion and docs to match the actual count.
2026-03-22 03:23:42 +00:00
brent.edwards b88bc0ec1b feat(perf): large project scaling tests (#984)
## Summary

Add large project scaling benchmarks and tests at production scale (10K–100K files).

### New ASV Benchmarks

**IndexingScalingSuite** (`large_project_scaling_bench.py`):
- `time_walk_and_index` at 1K/10K/50K/100K files
- `time_incremental_refresh` (1% modified files)
- `track_indexed_file_count`, `track_tokens_per_second`

**ContextAssemblyScalingSuite** (`context_assembly_scaling_bench.py`):
- `time_full_pipeline` at 100/1K/5K/10K fragments
- `time_tiered_strategy`, `time_recency_strategy`
- `track_assembled_tokens`, `track_fragments_per_second`

**ExecutionThroughputSuite** (`execution_throughput_bench.py`):
- `time_sequential_plans` at 10/50/100 plans
- `time_executor_construction`, `time_decision_tree_scaling`

### Scale Fixture Updates

- Added `xlarge` (50K files) and `xxlarge` (100K files) profiles to `scale_metadata.json`
- Added 50K/100K thresholds to `baseline_thresholds.json`
- Added `context_assembly` and `execution_throughput` threshold sections

### Tests & Documentation

- 15 Behave scenarios validating profiles, thresholds, monotonicity, memory budgets
- 6 Robot integration tests including live 1K-file indexing throughput check
- `docs/reference/scaling_baselines.md` documenting all baseline metrics

### Quality Gates

| Session | Result |
|---|---|
| `nox -s lint` | PASS |
| `nox -s typecheck` | PASS (0 errors) |
| `nox -s unit_tests` | PASS (10,910 scenarios) |
| `nox -s integration_tests` | PASS (1,526 tests) |
| `nox -s coverage_report` | 97% (>= 97%) |

Closes #859

Reviewed-on: cleveragents/cleveragents-core#984
Co-authored-by: Brent E. Edwards <brent.edwards@cleverthis.com>
Co-committed-by: Brent E. Edwards <brent.edwards@cleverthis.com>
2026-03-21 04:46:45 +00:00
freemo 2413b97c52 Docs: Daily update to timeline 2026-03-19 10:58:11 -04:00
hamza.khyari e2f90ffcd5 feat(resource): add deferred physical resource types
Add 11 deferred physical resource types covering the git object taxonomy
(git, git-remote, git-branch, git-tag, git-commit, git-tree, git-tree-entry,
git-stash, git-submodule) and filesystem link types (fs-symlink, fs-hardlink).

- YAML configs under examples/resource-types/
- Bootstrap registration via _resource_registry_physical.py module
- Auto-discovery rules with bounded scan_depth (1-2) for git object graph
- fs-directory scan_depth=1 (immediate children only)
- git-branch scan_depth=1 (single HEAD), git-tree scan_depth=2 (capped)
- Updated fs-directory child_types/parent_types/auto_discovery
- Updated git-checkout child_types to include git
- Fixed git-tag child_types to include git-commit (DAG consistency)
- Behave tests, Robot tests, ASV benchmarks
- Documentation in docs/reference/resource_types_builtin.md

ISSUES CLOSED: #330
2026-03-19 14:03:17 +00:00
aditya 2764fcef5c fix(actor,preflight,tests): resolve PR #975 review findings and stabilize full-suite coverage runs
Address review-driven fixes across actor schema, preflight guardrails, docs/examples,
and Behave/Robot coverage: unify preflight warning behavior with shared role-warning logic,
resolve actor-name to config payloads in production preflight flow, harden response_format
validation/coercion edge cases, extract duplicated helper logic, and expand negative-path
test coverage. Also fix cross-scenario patcher leakage in step modules to eliminate
full-run-only coverage failures.
2026-03-18 06:58:39 +00:00
aditya 26ad778aee feat(estimation): add estimation actor YAML template and role-aware registration validation
- Add `role_hint` and `response_format` support to actor schema.
- Add non-fatal estimation-role compatibility warnings in actor registration CLI flows.
- Add preflight warning path when `estimation` actor is missing `response_format`.
- Add `examples/actors/estimator.yaml` and update actor examples documentation/tests.
- Update integration helper expectations (m1/m2/m3/m6) for missing provider config in local test env.

ISSUES CLOSED: #650
2026-03-18 06:46:14 +00:00