1058341dd15e89e180bbfa72f8da8d891dd912e2
102 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
2658deee94 |
feat(auto-agents): PR State Warmer substrate + supporting infra
Adds a long-lived sidecar (pr_state_warmer.py) that polls Forgejo's /pulls endpoint every 30s and writes the full PR snapshot to a shared SQLite store, eliminating the dispatcher's per-cycle cold-cache stalls (24-30s rebuilds on flaky cycles) and the silent 50-PR pagination cap on the legacy single-page fetch. Substrate - tools/_pr_state_cache.py — SQLite store with (owner, repo) PK, WAL mode, additive v2→v3 migration (comments_refreshed_updated_at), bounded fcntl.flock migration lock, threading.Lock for per-process init, @_with_reheal decorator (catches OperationalError no-such- table + DatabaseError corruption with file quarantine), atomic TEMP-table chunking for >32k seen-set, _normalize_updated_at to canonicalize Forgejo tz-marker drift - tools/pr_state_warmer.py — poll/upsert/vanish/comments-refresh loop with fcntl.flock singleton (rejects second warmer), bounded comments-refresh cap, persistent deferral via SQL pending query, PermissionError-tolerant lock setup, cold-start log suppression - tools/_pr_classification_cache.py — three-layer fall-through (warmer cache → list cache → live fetch) with staleness gate (PR_STATE_WARMER_STALE_AFTER_S floored at 30s in prod) Comments cache hardening - Bot-filter at write time drops bot status/claim/release/sentinel while preserving **Implementation Attempt** markers (94.6% reduction on bot-heavy PRs like #30's 19k-comment thread) - _normalize_since_cursor strips microsecond precision before building ?since= query (fixes the live-observed Forgejo HTTP 422 bug on PRs #25 + #28); handles uppercase Z, lowercase z, ±HH:MM offsets (including non-zero like +05:30), naive ISO - Lazy migration of legacy null-key by_author entries on _read_cache - _newest_cursor walks tail-back skipping malformed entries Supporting infrastructure (cumulative dmpipeline-v2 work) - Telemetry server: SSE live tail, run-sessions enumeration, cost/token tracking, app.js UI rewrite with collapsible sections - MCP servers (mcp_ci_server, mcp_forgejo_server, mcp_git_server, mcp_handoff_server, mcp_graphify_server) for opencode worker context access - Live log writer (tools/live_log_writer.py) — SSE-streaming dispatcher event log - Tier-dispatcher escalation flow with prompts trimmed for budget - Shared bot-logins resolver (tools/_bot_logins.py) replacing two drift-prone copies - token_usage_audit.py for opencode cost analysis Tests - 2259 passing across 65 changed/new files - New suites: test_pr_state_cache, test_pr_state_warmer, test_pr_state_warmer_integration, test_pr_classification_cache, test_pr_list_cache_backoff, test_mcp_* (5 servers), test_live_log_writer_sse, test_telemetry_run_sessions, test_review_post_ready_label - Test_pr_comments_cache expanded with bot-filter coverage, cursor-normalization regression pins, format-drift, atomicity, failed-comments-not-stamped (silent-data-loss class) - Parametrized @_with_reheal coverage across 7 wrapped APIs - Real fault-inject atomicity test for chunked mark_vanished path via Connection wrapper class - Subprocess-based singleton flock test (cross-process contract) - Event-driven SIGTERM-mid-poll test (no fixed-sleep flake) Architecture notes - Schema v3 migration is additive (ALTER ADD COLUMN); v0/v1 still need destructive rebuild because pre-v2 column shape lacks owner/repo. Cross-process drop-table-ping-pong prevented by the fcntl migration lock + per-process _initialized flag. - Comments-refresh deferral is persistent via comments_refreshed_updated_at column — survives warmer restart, picks up next cycle even if PR didn't change again. Replaces in-memory changed_numbers list. - Rollback path: PR_STATE_WARMER_PREFER=0 bypasses the warmer cache and reverts to live-fetch behavior. PR_STATE_CACHE_DISABLE=1 short-circuits the warmer process at startup. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
1eac4ea233 |
refactor(auto-agents): manifest-driven tier-model registry, slot-based naming
Replace the scattered per-agent .txt-file mapping (whose names embedded model-family identity like tier-qwen-med and tier-kimi and went stale the moment a model was swapped) with a single source-of-truth manifest at .opencode/models/tiers.yaml. The four tier slots get model-agnostic slot-based names (tier-min, tier-0, tier-1, tier-2); the model in each slot is configured ONLY in the manifest. Derived artifacts (per-agent .txt files and the mapping table block in tier-dispatcher.md) are now generated by tools/sync_tier_models.py. A drift-detection test in tests/auto_agents/test_tier_model_registry.py fails CI if any derived file diverges from the manifest, if an agent referenced by the manifest lacks an agent file, if the manifest cites a provider not declared in opencode.json, or if opencode.json carries a stale tier-* entry. To swap a model in a slot: edit tiers.yaml -> run python3 tools/sync_tier_models.py -> commit. The runtime dispatcher re-reads the .txt files per cycle (no restart); the static OpenCode config path needs a server restart. Tier rename mapping (escalation_tier integers UNCHANGED): tier-qwen-small -> tier-min (slot -1) tier-qwen-med -> tier-0 (slot 0, default first attempt) tier-qwen-large -> tier-1 (slot 1) tier-kimi -> tier-2 (slot 2) Vestigial tier-* agents removed (declared but never in the active mapping): tier-haiku, tier-sonnet, tier-opus, tier-codex, tier-gpt5-mini, tier-gpt5-nano, tier-o4-mini. estimator-implementation.md now reasons in capability descriptors (cheapest / default / advanced / complex) instead of model-family labels (qwen-small / qwen-med / qwen-large / kimi), so the estimator stays correct across model swaps. The stale "default tier = gpt-5-mini" docstring claim (already drifted to claude-haiku-4-5) is removed. Companion prose updates across every consumer of tier names: - Agent prompts: tier-dispatcher.md, implementation-worker.md, estimator-implementation.md - Skills: implementer-pr-context, implementer-workspace - Python: dispatch_implementer.py, _opencode_worker.py, _pr_context_sentinel.py, implementer_workspace.py, setup_auto_labels.py, _attempt_history.py - Tests: test_worker_permissions.py (parametrize list + byte-identity test now covers 4 slot files instead of 3 family-named files), test_opencode_worker_models.py (synthetic-fixture names updated) - Docs: .opencode/models/README.md, docs/development/models.md, docs/development/agent-system-specification.md, docs/development/auto-agents-tier-2-3-plan.md, docs/development/implementer-in-cycle-escalation-plan.md, docs/development/final-working-harvest-plan.md Validation: 1625 tests pass (+6 net new from the tier-registry test file), 3 skipped. python3 tools/sync_tier_models.py --check exits 0. local_ci_gate.sh --gate lint PASS. Files: 9 added, 22 deleted, 18 modified. The drift-detection test ran green on every step of the refactor, catching one out-of-sync .txt file before commit. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
d3d66f3726 |
feat(auto-agents): in-cycle implementer tier escalation 0→1→2
Adds a flag-gated escalation loop to the implementer dispatcher (`IMPLEMENTER_ESCALATION_ENABLED=1`, default OFF). When the worker fails in a way the predicate determines escalation can help, the dispatcher holds the claim, resets the worktree to the prefetched head_sha, refreshes the TTL via _claim_runtime.claim_pr, applies the next-tier label, and re-runs the worker at the next tier — all within the same cycle. Bounded by per-failure-class budgets in _implementer_escalation.BUDGET_PER_FAILURE_CLASS. Tier 2 (tier-kimi) is default-ON with a kill-switch flag (IMPLEMENTER_ESCALATION_TIER2_ENABLED=0). Cross-cycle resumption: the dispatcher reads auto/last-attempt-tier-N at cycle start and seeds start_tier = min(N+1, max_tier) so crash recovery skips known-failed tiers. Worker holds release across the cycle via the new release_claim_on_exit: false directive — eliminates the inter-tier claim-absent race window. Behaviour preservation: flag=0 path is byte-equivalent to the pre-feature build (worker prompt unchanged, Phase 4 row schema unchanged, status-comment fingerprint unchanged). Issue work (new_issue work group) always takes the legacy path even with the flag on. Supersedes the cross-cycle-only Phase 5c scheme in auto-agents-tier-2-3-plan.md (now updated to point at the new plan doc and the dual-role label semantics). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
0150c4fbc0 |
feat(auto-agents): Tier 1+2 follow-ups from 2026-05-11 post-mortem
R1: bake 20-min bash timeout into quality-gates skill recipes so the first cold-cache --fast call no longer trips OpenCode's 120 s default (recovered ~2 min that was lost on the 2026-05-11 PR #30 cycle to timeout-and-retry). R2: plumb subagent_max_depth from _archive_subagent_tree's BFS walk through SessionResult -> SessionContext -> extract_phase4_ telemetry so the field stops landing as null on real multi-tier cycles. Distinguishes None (walk failed / unknown) from 0 (measured-flat). +7 behavioural tests, 4 existing tests updated to consume the new (paths, max_depth) tuple. R3: throttled operator-visible "worker still in-flight" log line every 120 s (configurable via DISPATCHER_HEARTBEAT_LOG_INTERVAL_SECONDS) so a 20-min worker turn emits ~10 status lines instead of going completely silent between session-start and session-end. +5 tests covering env-var override, defaults, garbage-rejection, end-to-end emission, and short-cycle suppression. R4: triaged 25 errored steps in fork-local unit_tests -- conclusive finding that they're caused by Rich Console defaulting to 80-col width in non-TTY CliRunner mode, truncating asserted column headers. Pre-existing on every branch, unrelated to auto-agents. Documented in the Tier 2/3 plan so future operators don't re-spend the diagnostic time. R5: short-circuit tier-dispatcher's estimator call on first attempts via new optional escalation_tier_hint parameter; implementation-worker now hard-codes hint=0. Saves ~30-60 s wall-clock per cycle on the common case (estimator's recommendation converged on Tier 0 in every observed cycle to date; sample too small for a confidence interval). Future-proof: the hint becomes dynamic when the auto/last-attempt-tier-N label scheme lands. +2 static lint tests pin the contract. Pre-commit polish (P0/P1/P2 from the consolidated critique): - Renumber tier-dispatcher CRITICAL rules 6,9,7,8 -> 6,7,8,9 - End-to-end pin tests for the R2 closure-mutation chain (subagent_max_depth=1 and =None paths) - Deterministic time.monotonic mock in heartbeat tests so they no longer depend on real-clock timing - Reject bool from extract_phase4_telemetry's int check (bool is subclass of int in Python -- would slip True/False through as 1/0) - Replace d.get("_subagent_depth") or 0 footgun with int(d.get(..., 0)) - Document DISPATCHER_HEARTBEAT_LOG_INTERVAL_SECONDS as a startup-only knob - Calibrate the "~95% Tier 0" claim to "Tier 0 in every observed cycle, n=1" - Document the reviewer-side R2 asymmetry (SessionContext carries the field; reviewer telemetry sink doesn't emit yet) - Add R5 rollback procedure - Trim duplicated R5 rationale prose in implementation-worker.md - Add reviewer back-compat test for SessionContext with the new subagent_max_depth field Tests: 1238 passed (+3 net-new), 3 skipped. Lint + typecheck clean. Validated via the local_ci_gate.sh wrapper. |
||
|
|
132a5a2269 |
feat(auto-agents): centralise model registry under .opencode/models with session-create model stamp
Every agent's model assignment now lives in a single-line text file at
.opencode/models/<name>.txt; default.txt is the 27-agent catch-all.
opencode.json's agent.<name>.model uses
{file:./.opencode/models/<name>.txt} interpolation, and
tools/_opencode_worker.py reads the same files at session-create to
stamp the resolved model on the session record (observability + drift
sentinel; OpenCode does NOT propagate session-level model to
prompt_async — schema for that is undocumented and deferred to Stage
2). 39 .md frontmatter `model:` lines stripped; the two intentional
inheritors (task-implementor, agent-evolution-pool-supervisor) keep
their model-less frontmatter.
Operator workflow for swapping a model is now: edit
.opencode/models/<role>.txt, restart OpenCode so opencode.json's
{file:...} re-resolves, run the dispatcher. Live-swap without restart
was attempted (override on prompt_async); OpenCode 0.x silently
dropped those requests (200 OK, no assistant message) and the
prompt_async override was reverted. The session-create override
remains for observability + drift detection.
End-to-end validation (2026-05-10): dispatch_review.py on PR #25 with
default.txt=openai/gpt-5-mini produced a clean REQUEST_CHANGES review
in 26 s for ~$0.016; dispatch_implementer.py on PR #30 with
tier-qwen-* files remapped to openai/{gpt-5-nano, gpt-5-mini,
gpt-5-codex} ran the full implementation-worker → tier-dispatcher →
estimator-implementation → tier-qwen-med → task-implementor →
git-isolator-util chain in 16 min with model=gpt-5-mini end-to-end.
Also documents the printenv VAR form as the only allowed env-read in
implementation-worker.md and task-implementor.md (live testing
showed the worker burning 2–4 turns on permission-denied
trial-and-error trying printf and echo variants).
Tests: 21 in tests/auto_agents/test_opencode_worker_models.py
(resolver semantics with caplog assertions on every malformed-input
path; session-create body shape; prompt_async body never carries
model; three repo-level invariants — every {file:...} reference
resolves, every .md is wired or in the inheritor allowlist, no .md
has a model: frontmatter). 1027 auto_agents tests pass / 3 skipped.
Note: .opencode/models/default.txt and the three tier-qwen-*.txt
files are committed with their OpenAI swaps in place (gpt-5-mini,
gpt-5-nano, gpt-5-mini, gpt-5-codex respectively) because the
CleverThis HuggingFace endpoints are paused. Revert with `git diff
HEAD~1 -- .opencode/models/*.txt | git apply -R` if/when they come
back.
Co-authored-by: Cursor <cursoragent@cursor.com>
|
||
|
|
355af84fb1 |
refactor(auto-agents): hard-switch supervisor decommission + implementer parity
Combines the 2026-05-09 hard-switch decommissioning of the LLM
implementation/pr-review supervisors with the Phase 2/3/4/5b
implementer parity work (prefetch + preclone + telemetry + operator-
status comments) and the third/fourth-round critique cleanup.
Removed
- .opencode/agents/implementation-supervisor.md (340 LoC)
- .opencode/agents/pr-review-supervisor.md (348 LoC)
- _dispatch_runtime.assert_no_legacy_supervisor +
detect_legacy_supervisor_sessions and the SUPERVISOR_TAGS /
SUPERVISOR_OVERRIDE_ENV plumbing in both dispatchers, along with
the five supervisor-coexistence tests in test_dispatch_runtime.py
- _watchdog_helpers.parse_truthy_env + watchdog_check.py
--check-env mode + their dedicated unit tests (the legacy
DISPATCHERS_RUNNING gate had no callers after the watchdog
rewrite became unconditional)
Added
- tools/_implementer_prefetch.py — pre-dispatch Forgejo fetches
(PR/issue body, diff, CI status, comments, reviews, linked
issues, Epic) per work group
- tools/_implementer_prompt.py — pure-function prompt assembly
with UNTRUSTED CONTENT fences and shared
PR_COMPLIANCE_CHECKLIST / OUTPUT_CONTRACT
- tools/_phase4_telemetry.py — extractor + JSONL sink for the
Phase 4 plan metrics
- tools/_status_comments.py — per-fingerprint operator-status
comment substrate, namespaced for reviewer + implementer
- _dispatch_runtime.SessionContext dataclass + SIGTERM/SIGINT
cooperative claim release with synchronous handler
- TestSupervisorAgentsDecommissioned and
TestAutoAgentsMdIsWatchdogOnly anti-regression lints (glob over
*supervisor*.md in .opencode/agents/, plus body keyword bans
and bash allow-list lint)
- pyproject.toml `slow` marker registration for the subprocess
SIGTERM smoke test
- tests/auto_agents/fixtures/{phase4-acceptance.yaml,
phase4-session-output-sample.txt}
Rewritten
- .opencode/agents/auto-agents.md from supervisor-fleet manager
(~545 LoC) to dispatcher heartbeat watchdog (~184 LoC); host
init system / process manager (systemd / runit / docker) is now
the explicit restart authority instead of "host-level process
supervisor"
- AGENTS.md production-launch story (Shells A-D) reflects the
deterministic-Python orchestration boundary; the bot-identity
fork-mode paragraph reads from FORGEJO_OWNER / FORGEJO_REPO
env vars instead of the deleted hard-coded supervisor flags
- tools/launch_fork.sh header documents three host-level entry
points (dispatchers-launcher.sh, opencode-builder.sh,
merge_drive.py)
- worker self-descriptions (implementation-worker.md,
pr-review-worker.md) refer to the dispatcher / merge driver
instead of the deleted supervisors; session-health-quick-util.md
and async-agent-util.md treat -SUP-suffixed sessions as
flag-and-escalate signals
Tests: 1006 passed, 3 skipped, 0 failed under tests/auto_agents/.
Lint: zero new ruff errors on touched files; three pre-existing
errors in tools/_pr_diff.py at lines blamed to 2026-05-07.
Operator note: the only in-process rollback knob for prefetch
issues is IMPLEMENTER_DISPATCHER_PREFETCH=0 (and the matching
IMPLEMENTER_DISPATCHER_PRECLONE=0). Anything beyond that is git
revert of this commit. Residual doc surface in the
auto-agents-system and supervised-workers skill READMEs is
documentation-only; the agent files those READMEs reference no
longer exist.
Co-authored-by: Cursor <cursoragent@cursor.com>
|
||
|
|
720b633b1d |
docs: flag dispatcher throughput regression as immediate post-soak follow-up
The 2026-05-09 parity audit against agents/final-working surfaced one
HIGH-severity regression in the new dispatcher: workers run strictly
serially (no ThreadPoolExecutor / asyncio anywhere in
_dispatch_runtime.py), where the legacy LLM supervisors ran
max_workers=4 concurrent workers. ~4x wallclock throughput penalty on
backlog burndown.
Document this in docs/development/auto-agents-tier-2-3-plan.md as a
new Tracking subsection ("Open - immediate follow-up after dispatcher
soak") with full acceptance criteria (--workers N flag wrapping the
per-item cycle loop in ThreadPoolExecutor, default 1 for safety; six
concrete test cases; cycle_failure_budget must remain cycle-level not
per-worker) so the fix is ready to pick up the moment the serial
dispatcher demonstrates >= 1 week of clean production runtime. The
soak-first ordering is deliberate: known-good serial baseline makes
concurrency bugs much easier to attribute. Operator-side multi-process
fallback (sharding via distinct LOCK_PATH/HEARTBEAT_PATH per process)
also documented for hosts that cannot wait for the in-process fix.
Cross-referenced from the existing "Cross-cutting work" section so a
reader scanning the plan top-to-bottom sees the dependency before
reaching Tracking. CHANGELOG updated.
Co-authored-by: Cursor <cursoragent@cursor.com>
|
||
|
|
2f1be34d12 |
feat(auto-agents): implementer parity — verify-invariant verifiers, implementer-helpers skill, watchdog gate, _opencode_worker audit
Closes the four open items in `docs/development/auto-agents-tier-2-3-plan.md` § "Revised remaining scope (2026-05-08)" plus three rounds of fresh-eyes critique fold-in (rounds 3, 5, and post-round-5 polish). Highlights: - New continuous invariant verifiers on a shared `_verify_common.py` substrate: `verify_review_invariant.py` (R1: approval-without-CI) and `verify_implementer_invariant.py` (I1: head-commit fails commit-lint, I2: PR description missing Epic reference). Strictly additive cron-job- shaped scripts that open idempotent `auto/invariant-violation` issues; safe to run every 15 minutes in production. - New `implementer-helpers` skill at `.opencode/skills/implementer-helpers/SKILL.md` + CLI at `tools/implementer_validate.py` (4 subcommands: validate-commit-message, validate-pr-compliance, validate-file-budget, validate-changelog). Mirrors the reviewer side; `tools/_commit_lint.py` is shared so a future change to commit policy updates one place. - `auto-agents.md` watchdog gate: `DISPATCHERS_RUNNING=1` puts the primary orchestrator into watchdog-only mode. Heartbeat resolution + age computation factored into `tools/_watchdog_helpers.py` + the CLI `tools/watchdog_check.py` so the agent only needs `python3 tools/watchdog_check.py *` and `sleep *` bash permissions. The reader honours the env-var override first, then falls back to a freshest-mtime scan across `/var/run` / `$XDG_RUNTIME_DIR` / `/tmp` (deliberately diverging from the dispatcher's first-existing fallback to guard against stale heartbeats from previous root-owned sessions masking healthy user-mode heartbeats). - `_opencode_worker.py` audit: structured `error_kind` classification at every transport-error / timeout return site, plumbed through `_dispatch_runtime.py` into the cycle-log; new `_request_read` retry helper (3 × 0.5s linear backoff, transport-only) wrapping every idempotent read in a worker session so a single transient flap on a polling GET cannot trash a 10-minute worker session. - Static heredoc lint at `tests/auto_agents/test_prompt_heredoc_lint.py` glob-walks every agent prompt and skill recipe markdown, rejecting any heredoc bash recipe in a fenced code block (per `bash-commands.md` rule 2 — heredocs fail at OpenCode's permission-engine parse time). - `bash-commands.md` rule 2 + its fix-it advice both lead with apostrophe-safe `printf "%s" "<body>"` (double-quoted) form; single-quoted form documented as the fragile JSON-only fallback. - `CHANGELOG.md` carries the full multi-round narrative (round 3 CRITICAL/HIGH/MEDIUM/LOW fold-in, round 5 docstring drift + telemetry refactor + broader heredoc lint scope, post-round-5 doc-drift polish). Net delta: +911 passing tests / 3 skipped (was 825 / 3); ruff clean on every new file; pre-existing lint debt in `_dispatch_runtime.py`, `_opencode_worker.py`, `conftest.py`, `_commit_lint.py` unchanged and out of scope for this commit. Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
ed8dd31b35 |
docs(plan): mark Tier 2/3 dispatcher work shipped; revise remaining scope
The reviewer/implementer dispatchers and the review-helpers skill landed between 2026-05-04 and 2026-05-08. The plan document still read as a deferred forward-looking design. Update it to mark every shipped deliverable with a status entry + module pointer, explain how the skill pattern (a second deterministic surface inside the worker session) changed the architectural calculus, and replace the original Tier-3 deliverable list with a four-item revised remaining scope: verify-*-invariant cron jobs, implementer-helpers skill, auto-agents.md watchdog gate, _opencode_worker.py audit (~5 engineering days total). Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
703a7c9090 |
feat(auto-agents): Phase A — conflict_drive.py deterministic conflict-resolution driver
Implement Tier 1.5 conflict resolution as a peer driver to merge_drive.py that honours the same hard invariant: every commit on master came from a SHA whose CI passed against the exact current master. New components - tools/conflict_drive.py: deterministic driver that picks PRs labelled auto/needs-conflict-resolution, claims them via the shared auto/claimed-merge label, attempts a deterministic rebase with deepen-on-demand fallback, dispatches conflict-resolver-worker on conflict, force-pushes with --force-with-lease, and clears the label for merge_drive to re-pick. Includes 24h retry budget, escalation to auto/needs-implementer, single-instance lock + heartbeat, opt-in TOCTOU mitigations (CONFLICT_DRIVER_CYCLE_JITTER_SECONDS, CONFLICT_DRIVER_VERIFY_CLAIM), startup TTL constraint and required- labels assertions, and full SQLite telemetry. - tools/_claim_runtime.py: shared HTTP/lock/heartbeat/claim primitives extracted from merge_drive.py (driver-aware claim/release markers, injectable op_label_map). merge_drive re-exports for back-compat. - tools/_opencode_worker.py: blocking Python client for the OpenCode HTTP API with O(N) string-aware bracket matcher for tolerant JSON extraction from worker output. - .opencode/agents/conflict-resolver-worker.md: subagent definition with tight permissions and "always finish, never abort, never --skip" doctrine. - tools/inject_synthetic_conflict.py: CLI that creates PRs on a test fork with guaranteed conflicts (trivial / multi-commit / unresolvable) for end-to-end testing. Telemetry & dashboard - tools/_forgejo_cache.py: new conflict_drive_cycles table, cycle-level escalated_count, indexed retry-budget query, mark_*_escalated helper. - tools/render-pr-velocity.py + pr-velocity.canvas.template.tsx: conflict-resolution activity section showing 7-day cycle counts, resolved/escalated/timeout/push-rejected breakdowns. Open-issue dependency check - tools/merge_drive.py: pr_is_eligible now consults Forgejo's blocks endpoint and applies auto/blocked-by-deps when any open dependency exists. Read-only predicate _pr_has_open_dependencies; label mutations live with the eligibility caller. - tools/setup_auto_labels.py: provisions auto/blocked-by-deps. Documentation - docs/development/conflict-drive-plan.md: full plan including TOCTOU race documentation (§3.3.1) with implementation/test pointers. - AGENTS.md: operator-facing section on conflict_drive.py and the expanded label registry. Tests - 300 unit tests pass / 1 skipped (opt-in fork integration test). - Coverage includes JSON extractor fuzz, push-stderr classification, PAT scrub, deepen-on-demand fallback, retry budget escalation, cycle-level escalated_count stamping, claim collision detection (latest-claim-only with marker-primary identity), jitter wiring, and verify_claim_after_apply plumbing. Quality invariant unchanged: conflict_drive.py only operates on PR head branches, never on master. CI gating on the train-merge SHA continues to enforce the exact-current-master rule for everything that lands. Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
f358cb7363 |
feat(auto-agents): Tier 1 mutual-respect claim contract
Extend the deterministic merge driver's auto/claimed-merge contract to a
three-way symmetric mutex covering all auto-agents fleet workers, so the
merge driver, reviewer pool, and implementer pool stop racing on the same
PRs and orphaned claims are bounded by a TTL-based sweep.
Patch A — wrapper opt-in (7 files):
Add excludeClaimed: true to every list_prs_*.ts wrapper used by
pr-review-supervisor and implementation-supervisor. Reviewer /
implementer pools now never see PRs carrying any auto/claimed-*
label, closing the "comments on a mid-train PR" race.
Worker claim/release wiring:
pr-review-worker.md (Startup step 3 / 1800 s TTL) and
implementation-worker.md (Startup step 5 / 7200 s TTL, pr_fix only)
invoke claim_pr.ts at start-of-work and through a new "Release and
Exit" subsection at every termination path. Adds one bash permission
(npx --yes tsx*claim_pr.ts*) and one skill allow each.
Driver sweep coverage:
merge_drive.py grows ALL_CLAIM_LABELS and sweep_all_expired_claims;
sweep_expired_claims gains an optional label parameter (default =
CLAIM_LABEL, backward compatible). run_one_cycle exposes
swept_by_label per cycle so operators see per-label orphan rates.
Foreign labels are swept with an empty session-exclusion set because
the driver never owns them.
Tests:
Four new tests in tests/auto_agents/test_merge_drive.py covering the
parameterised sweep, the all-labels iterator, per-label sweep results,
and the ALL_CLAIM_LABELS <-> registry contract. Full auto_agents
suite: 176 -> 180 tests, 100% pass.
Docs:
- AGENTS.md: new "Tier 1 mutual-respect claim contract" subsection;
auto-* label registry rows for claimed-implementer /
claimed-reviewer updated to reflect new owners and sweep coverage.
- CHANGELOG.md: detailed Added entry under [Unreleased].
- docs/development/auto-agents-tier-2-3-plan.md: new plan capturing
deferred Tier 2 (shared claim-runtime module + deterministic
dispatchers) and Tier 3 (full deterministic drivers analogous to
merge_drive.py) with concrete deliverables and decision gates.
What this Tier deliberately does NOT do: replace LLM supervisor
sessions, change worker dispatch, or touch the actual review /
implementation logic. The supervisors still poll wrappers and dispatch
workers; the workers still do the real LLM work. Only the orchestration
bookkeeping around them gained a deterministic claim contract.
Co-authored-by: Cursor <cursoragent@cursor.com>
|
||
|
|
afc17b22c5 |
feat(architecture-pool-supervisor): add milestone assignment to spec PRs
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 |
||
|
|
44fc7411f9 |
ci: move benchmark regression job out of default PR workflow
CI / helm (pull_request) Successful in 31s
CI / push-validation (pull_request) Successful in 32s
CI / build (pull_request) Successful in 1m2s
CI / lint (pull_request) Successful in 1m7s
CI / quality (pull_request) Successful in 1m21s
CI / typecheck (pull_request) Successful in 1m29s
CI / security (pull_request) Successful in 1m36s
CI / integration_tests (pull_request) Successful in 3m55s
CI / e2e_tests (pull_request) Successful in 4m26s
CI / unit_tests (pull_request) Successful in 5m56s
CI / docker (pull_request) Successful in 1m32s
CI / coverage (pull_request) Successful in 11m8s
CI / status-check (pull_request) Successful in 3s
CI / push-validation (push) Successful in 25s
CI / helm (push) Successful in 30s
CI / build (push) Successful in 51s
CI / lint (push) Successful in 55s
CI / quality (push) Successful in 1m10s
CI / typecheck (push) Successful in 1m31s
CI / security (push) Successful in 1m36s
CI / e2e_tests (push) Successful in 4m10s
CI / integration_tests (push) Successful in 4m20s
CI / unit_tests (push) Successful in 4m28s
CI / docker (push) Successful in 1m42s
CI / coverage (push) Successful in 11m23s
CI / status-check (push) Successful in 4s
CI / benchmark-publish (pull_request) Has been skipped
CI / benchmark-regression (push) Has been skipped
CI / benchmark-publish (push) Failing after 21m14s
CI / benchmark-regression (pull_request) Failing after 31m46s
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 |
||
|
|
0c5b140d29 |
fix(database): include alembic files in package distribution
CI / push-validation (pull_request) Successful in 18s
CI / lint (pull_request) Successful in 26s
CI / helm (pull_request) Successful in 38s
CI / build (pull_request) Successful in 48s
CI / quality (pull_request) Successful in 54s
CI / security (pull_request) Successful in 55s
CI / typecheck (pull_request) Successful in 57s
CI / e2e_tests (pull_request) Successful in 4m48s
CI / unit_tests (pull_request) Successful in 8m5s
CI / integration_tests (pull_request) Successful in 9m23s
CI / docker (pull_request) Successful in 1m23s
CI / coverage (pull_request) Successful in 12m29s
CI / benchmark-regression (push) Failing after 0s
CI / benchmark-publish (push) Failing after 0s
CI / status-check (pull_request) Successful in 1s
CI / push-validation (push) Successful in 12s
CI / helm (push) Successful in 29s
CI / build (push) Successful in 3m23s
CI / lint (push) Successful in 3m38s
CI / quality (push) Successful in 3m40s
CI / security (push) Successful in 4m3s
CI / typecheck (push) Successful in 4m5s
CI / e2e_tests (push) Successful in 6m42s
CI / unit_tests (push) Successful in 10m7s
CI / integration_tests (push) Successful in 10m13s
CI / docker (push) Successful in 1m46s
CI / coverage (push) Successful in 10m58s
CI / status-check (push) Successful in 2s
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 |
||
|
|
6559a0e9df |
docs: integrate docs-writer automation tracking workflows
CI / lint (pull_request) Successful in 51s
CI / quality (pull_request) Successful in 49s
CI / typecheck (pull_request) Successful in 58s
CI / security (pull_request) Successful in 53s
CI / build (pull_request) Successful in 24s
CI / push-validation (pull_request) Successful in 20s
CI / helm (pull_request) Successful in 23s
CI / e2e_tests (pull_request) Successful in 4m3s
CI / integration_tests (pull_request) Successful in 8m37s
CI / unit_tests (pull_request) Successful in 11m26s
CI / coverage (pull_request) Successful in 14m48s
CI / docker (pull_request) Successful in 11s
CI / status-check (pull_request) Successful in 1s
CI / lint (push) Successful in 19s
CI / quality (push) Successful in 45s
CI / security (push) Successful in 1m0s
CI / typecheck (push) Successful in 1m29s
CI / build (push) Successful in 39s
CI / helm (push) Successful in 25s
CI / push-validation (push) Successful in 18s
CI / e2e_tests (push) Successful in 4m42s
CI / integration_tests (push) Successful in 7m12s
CI / unit_tests (push) Successful in 8m52s
CI / coverage (push) Successful in 13m35s
CI / docker (push) Successful in 16s
CI / status-check (push) Successful in 1s
- document docs-writer responsibilities and automation tracking requirements\n- enforce automation tracking label validation and clean coverage regression tags\n\nISSUES CLOSED: #7616 # Conflicts: # CHANGELOG.md # docs/development/automation-tracking.md # docs/development/docs-writer.md # mkdocs.yml |
||
|
|
c5820266fd |
Build: improced merge agent logic to ensure faster and more effective merging into master
CI / benchmark-publish (push) Waiting to run
CI / lint (push) Successful in 29s
CI / typecheck (push) Successful in 1m10s
CI / security (push) Successful in 1m6s
CI / quality (push) Successful in 31s
CI / benchmark-regression (push) Waiting to run
CI / build (push) Successful in 32s
CI / helm (push) Successful in 37s
CI / push-validation (push) Successful in 29s
CI / e2e_tests (push) Successful in 3m11s
CI / integration_tests (push) Successful in 4m22s
CI / unit_tests (push) Successful in 6m2s
CI / docker (push) Successful in 1m39s
CI / coverage (push) Successful in 11m15s
CI / status-check (push) Successful in 1s
|
||
|
|
56a430d31f |
refactor(agents): rename backlog-grooming to grooming, fix tier selector dispatch
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 |
||
|
|
8692bb46e5 |
build: Refactored agent definitions to be simpler and less contention
CI / benchmark-publish (push) Waiting to run
CI / push-validation (push) Successful in 18s
CI / helm (push) Successful in 25s
CI / lint (push) Successful in 28s
CI / quality (push) Successful in 55s
CI / e2e_tests (push) Successful in 3m4s
CI / build (push) Successful in 3m20s
CI / typecheck (push) Successful in 3m59s
CI / security (push) Successful in 4m5s
CI / benchmark-regression (push) Waiting to run
CI / unit_tests (push) Successful in 7m44s
CI / docker (push) Successful in 1m19s
CI / integration_tests (push) Successful in 9m56s
CI / coverage (push) Successful in 11m47s
CI / status-check (push) Successful in 1s
|
||
|
|
b89b781881 |
docs(spec): add Section 22 — Division of Responsibilities and Redundancy Model
CI / lint (push) Waiting to run
CI / typecheck (push) Waiting to run
CI / security (push) Waiting to run
CI / quality (push) Waiting to run
CI / unit_tests (push) Waiting to run
CI / integration_tests (push) Waiting to run
CI / e2e_tests (push) Waiting to run
CI / coverage (push) Blocked by required conditions
CI / benchmark-regression (push) Blocked by required conditions
CI / benchmark-publish (push) Waiting to run
CI / build (push) Waiting to run
CI / docker (push) Blocked by required conditions
CI / helm (push) Waiting to run
CI / push-validation (push) Waiting to run
CI / status-check (push) Blocked by required conditions
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 |
||
|
|
c76433f756 |
docs(tracking): document automation-tracking-manager centralization
CI / lint (pull_request) Successful in 39s
CI / push-validation (pull_request) Successful in 29s
CI / build (pull_request) Successful in 35s
CI / helm (pull_request) Successful in 34s
CI / quality (pull_request) Successful in 45s
CI / security (pull_request) Successful in 57s
CI / typecheck (pull_request) Successful in 1m4s
CI / e2e_tests (pull_request) Successful in 3m19s
CI / integration_tests (pull_request) Successful in 4m12s
CI / unit_tests (pull_request) Successful in 5m20s
CI / docker (pull_request) Successful in 11s
CI / coverage (pull_request) Successful in 13m7s
CI / status-check (pull_request) Successful in 9s
CI / benchmark-publish (pull_request) Has been cancelled
CI / benchmark-regression (pull_request) Has been cancelled
|
||
|
|
7e66e57c21 |
docs(spec): final pass — structural integrity audit
CI / benchmark-publish (push) Waiting to run
CI / helm (push) Successful in 23s
CI / lint (push) Successful in 28s
CI / build (push) Successful in 32s
CI / push-validation (push) Successful in 35s
CI / quality (push) Successful in 40s
CI / security (push) Successful in 59s
CI / typecheck (push) Successful in 1m0s
CI / benchmark-regression (push) Waiting to run
CI / e2e_tests (push) Successful in 3m18s
CI / integration_tests (push) Successful in 4m14s
CI / unit_tests (push) Successful in 5m41s
CI / docker (push) Successful in 10s
CI / coverage (push) Successful in 11m28s
CI / status-check (push) Successful in 1s
- Fixed duplicate section number: two §2.4 -> renamed first to §2.3.1 - Verified all section cross-references valid - Verified Appendix A model/mode data matches frontmatter (10 samples) - Verified mkdocs.yml navigation entry - Comprehensive stale-name sweep: zero hits across all files - Added v1.36.0 revision entry with final statistics |
||
|
|
3a69aef505 |
docs(spec): twentieth pass achieving spec-wide dual-account coherence
- Fixed Glossary: HAL9000 definition updated for dual-account architecture - Fixed Section 6.17.2: "two-step" -> "dual-account" in protocol text - Fixed Section 12.1.2: PR Reviewer table, description, and permissions rationale all updated for curl-based dual-account review protocol - Fixed Section 19.5: Security Model rewritten from "single bot account" to dual-account with separate permission scopes per account - Fixed 2 remaining "Two-Step Review Protocol" references - Added v1.35.0 revision entry |
||
|
|
05e5b26f2a |
docs(spec): nineteenth pass fixing diagram, MCP tool refs, and edit:deny count
- Fixed Section 6.17.2 diagram: removed orphaned single-account nodes, updated to show curl with FORGEJO_REVIEWER_PAT - Fixed Section 6.17.2 step text: forgejo_create_pull_review -> curl - Fixed edit:deny count from 41 to 42 - Added missing separator after diagram - Added v1.34.0 revision entry |
||
|
|
edbb3471b0 |
docs(spec): eighteenth pass fixing review template gaps and credential completeness
- Updated Section 6.17 introduction to include FORGEJO_REVIEWER_PASSWORD - Updated Section 6.17 env table descriptions for clarity - Added v1.33.0 revision entry for template and credential fixes |
||
|
|
5dda3a2c43 |
docs(spec): seventeenth pass documenting MCP token limitation and curl workaround
- Added Section 6.17.0: MCP Token Limitation — single server-level token, no per-call override, PR Reviewer must use curl for writes - Rewrote Section 21.22: "Total Bash Lockdown" -> "Restricted Bash with curl" - Added READ-via-MCP/WRITE-via-curl operation table - Added v1.32.0 revision entry |
||
|
|
6baf921b52 |
docs(spec): sixteenth pass adding FORGEJO_REVIEWER_PASSWORD and purging stale language
- Added FORGEJO_REVIEWER_PASSWORD to Section 6.17 env table and Appendix C - Purged all remaining "self-approval"/"shared bot account" language from spec - Updated Sections 8.3.2 and 8.3.3 for dual-account architecture - Added v1.31.0 revision entry |
||
|
|
fcff61e1b5 |
docs(spec): fifteenth pass introducing dual-account architecture
- Rewrote Section 6.17: "Shared Bot Account Problem" -> "Dual-Account Architecture" - New env vars: FORGEJO_REVIEWER_PAT, FORGEJO_REVIEWER_USERNAME - Formal APPROVED reviews are now the primary approval path - Updated Section 6.17.2: "Two-Step" -> "Dual-Account Review Protocol" - Updated Appendix C environment variable table - Added v1.30.0 revision entry |
||
|
|
4029a3331a |
docs(spec): fourteenth pass adding subagent specialization principle
CI / benchmark-publish (push) Waiting to run
CI / lint (push) Successful in 32s
CI / push-validation (push) Successful in 23s
CI / helm (push) Successful in 34s
CI / quality (push) Successful in 36s
CI / build (push) Successful in 36s
CI / security (push) Successful in 1m4s
CI / typecheck (push) Successful in 1m8s
CI / benchmark-regression (push) Waiting to run
CI / integration_tests (push) Successful in 4m7s
CI / e2e_tests (push) Successful in 4m15s
CI / unit_tests (push) Successful in 5m21s
CI / docker (push) Successful in 1m20s
CI / coverage (push) Successful in 11m8s
CI / status-check (push) Successful in 2s
- Added Section 6.0: Subagent Specialization Principle (centralize, dont duplicate) - Updated Section 5.3.4: interval calculation now ATM-centralized - Updated Section 5.4: 11 operations (added CYCLE_ANNOUNCEMENT_REVIEW) - Added v1.29.0 revision entry: 17 duplicated blocks removed |
||
|
|
c29975de8f |
docs(spec): thirteenth pass documenting body template field enforcement
- Added v1.28.0: all 18 status-creating agents now have Estimated Cycle Interval in their actual body templates, not just in reference notes |
||
|
|
c70adfbbe5 |
docs(spec): twelfth pass documenting tracking reference reorder across all agents
- Added v1.27.0 entry: all 17 agents fixed with correct READ-before-CREATE order - All agents now include rolling average interval defaults and Estimated Cycle Interval requirement |
||
|
|
8443facae2 |
docs(spec): eleventh pass adding cycle interval, dual cleanup, and continuity
- Added Section 5.3.4: Estimated Cycle Interval (rolling average 90/10) - Added Section 5.3.5: Dual Status Issue Cleanup (agent-side + groomer-side) - Added Section 5.3.6: Cycle Number Continuity Across Sessions - Updated Section 5.6 body template with mandatory Estimated Cycle Interval field - Added v1.26.0 revision entry |
||
|
|
276ce39908 |
docs(spec): tenth pass adding startup state recovery protocol
- Added Section 5.3.3: Startup State Recovery Protocol with mandatory read-then-delete-then-create sequence - Agent-specific recovery table for IPS, PR pools, watchdog, product-builder - Offline duration behavior rules (5min = normal, 2h+ = full re-scan) - Enhanced READ_TRACKING_STATE return schema in Section 5.4 - Added v1.25.0 revision entry |
||
|
|
5615468303 |
docs(spec): ninth pass completing tracking protocol rollout documentation
- Added v1.24.0 entry documenting 12 agent fixes across 13 files - All 19 supervisor/orchestrator agents now have complete tracking protocol |
||
|
|
d3165fcb37 |
docs(spec): eighth pass comprehensive automation tracking system rewrite
- Rewrote Section 5.2 (Status Issues): one-at-a-time invariant, close-ALL-then-create protocol - Added Section 5.3.1 (Announcement Lifecycle): mandatory self-review every 3 cycles - Added Section 5.3.2 (Consumption Protocol): per-agent triage table with 3 read depth levels - Status issues now use explicit "Status:" prefix to distinguish from announcements - Announcements require Priority/* labels for triage - Added v1.23.0 revision entry |
||
|
|
93eb5d8e95 |
docs(spec): seventh pass adding directory layout and subsystem verification
- Added Section 2.4 (Directory Layout) documenting full .opencode/ structure - Verified 3-Tier Approval Detection matches implementation exactly - Verified Mandatory Merge Verification matches merge_safety.md exactly - Confirmed zero remaining stale names/labels/prefixes across all files - Added v1.22.0 revision entry |
||
|
|
dd68f47b0e |
docs(spec): sixth pass documenting universal label deny rule and permission audit
- Expanded Section 6.19 to document universal forgejo_add_issue_labels deny rule with 2 exceptions - Added v1.21.0 revision entry documenting 6 agent fixes - Verified 41 edit:deny and 3 webfetch:allow match spec claims exactly |
||
|
|
d4bf789989 |
docs(spec): fifth pass adding permission audit results to revision history
- Added v1.20.0 documenting 3 agent permission bugs fixed - All 79 agents task permissions verified against spec subagent claims |
||
|
|
dbd90975c0 |
docs(spec): fourth pass fixing broken cross-references and stale work types
- Fixed broken Section 20.4 reference (section was removed in v1.16.0) - Fixed wrong Section 13.2 reference (should be Section 11.2 for escalation) - Replaced stale stale-check work type with awaiting-review in Section 10.1 - Added v1.19.0 revision entry |
||
|
|
0902a4508d |
docs(spec): third pass fixing Appendix A model and adding revision history
- Fixed build-opencode model in Appendix A from (not specified) to claude-sonnet-4-6 - Added v1.18.0 revision entry documenting 6 functional bugs fixed in agent definitions |
||
|
|
2488a34bc8 |
docs(spec): second pass adding pagination, PR ownership, and reviewer lockdown
- Added Section 6.20: Forgejo API Pagination Requirement - Added Section 6.21: PR Ownership Detection rules - Expanded Section 8.1.2: three mandatory PR dispatch rules, updated scoring table - Added Section 21.22: PR Reviewer total bash lockdown permissions - Fixed Appendix A note: ASV Benchmarker is subagent not primary - Added revision history entry v1.17.0 |
||
|
|
d8a31527f3 |
feat(docs): create agent system specification
CI / push-validation (push) Successful in 17s
CI / helm (push) Successful in 23s
CI / build (push) Successful in 28s
CI / lint (push) Successful in 32s
CI / quality (push) Successful in 33s
CI / typecheck (push) Successful in 54s
CI / security (push) Successful in 1m11s
CI / benchmark-regression (push) Has been skipped
CI / e2e_tests (push) Successful in 3m20s
CI / integration_tests (push) Successful in 4m1s
CI / unit_tests (push) Successful in 5m16s
CI / docker (push) Successful in 1m55s
CI / coverage (push) Successful in 10m19s
CI / status-check (push) Successful in 1s
CI / benchmark-publish (push) Successful in 1h13m44s
- Adds a comprehensive specification for the autonomous agent system. - Details the intended behavior, interactions, and design of all agents. - Includes Kroki-based diagrams for workflows and interactions. - Serves as the source of truth for agent implementation. |
||
|
|
79359baff3 |
docs: update CHANGELOG and automation-tracking for recent agent changes
CI / push-validation (pull_request) Successful in 17s
CI / build (pull_request) Successful in 21s
CI / helm (pull_request) Successful in 22s
CI / lint (pull_request) Successful in 33s
CI / quality (pull_request) Successful in 41s
CI / typecheck (pull_request) Successful in 50s
CI / security (pull_request) Successful in 1m12s
CI / e2e_tests (pull_request) Successful in 3m2s
CI / benchmark-publish (pull_request) Has been skipped
CI / integration_tests (pull_request) Successful in 4m2s
CI / unit_tests (pull_request) Successful in 5m10s
CI / docker (pull_request) Successful in 21s
CI / coverage (pull_request) Successful in 10m26s
CI / status-check (pull_request) Successful in 1s
CI / benchmark-regression (pull_request) Successful in 58m15s
ISSUES CLOSED: #7116 |
||
|
|
97c45ab780 |
chore(policy): reduce PR review requirement from 2 approvals to 1
CI / helm (push) Successful in 23s
CI / build (push) Successful in 24s
CI / push-validation (push) Successful in 30s
CI / lint (push) Successful in 35s
CI / quality (push) Successful in 42s
CI / typecheck (push) Successful in 53s
CI / security (push) Successful in 59s
CI / e2e_tests (push) Successful in 3m11s
CI / integration_tests (push) Successful in 4m1s
CI / unit_tests (push) Successful in 5m12s
CI / docker (push) Successful in 1m18s
CI / coverage (push) Successful in 11m2s
CI / status-check (push) Successful in 9s
CI / benchmark-publish (push) Has been cancelled
CI / benchmark-regression (push) Has been cancelled
- Update CONTRIBUTING.md to require only 1 approving review instead of 2
- Allow self-approval including for automated bot PRs (HAL9000)
- Approval can be formal review OR approval comment (LGTM, Approved, ✅)
- Remove distinction between human and bot PRs in review requirements
- Update agent definitions to reflect new policy
- Update system watchdog and documentation to match new requirements
This change unblocks PR merges while maintaining quality through CI checks
and still requiring at least one approval before merge.
|
||
|
|
8109091bc3 |
docs: update remaining references to renamed agents
CI / lint (push) Successful in 28s
CI / quality (push) Successful in 33s
CI / push-validation (push) Successful in 21s
CI / build (push) Successful in 23s
CI / helm (push) Successful in 23s
CI / typecheck (push) Successful in 53s
CI / security (push) Successful in 1m12s
CI / benchmark-regression (push) Has been skipped
CI / e2e_tests (push) Successful in 3m0s
CI / integration_tests (push) Successful in 3m58s
CI / unit_tests (push) Successful in 5m3s
CI / docker (push) Successful in 1m20s
CI / coverage (push) Successful in 10m18s
CI / status-check (push) Successful in 1s
CI / benchmark-publish (push) Successful in 1h13m36s
- Fix automation-tracking.md to use new pool supervisor names - Update session_state.md to reference implementation-pool-supervisor - Fix pr-status-analyzer.md to reference pr-ci-test-fixer |
||
|
|
a3762a4cc2 |
docs: add invariant-reconciliation module guide, extend automation tracking docs, update mkdocs nav
CI / lint (push) Successful in 25s
CI / security (push) Successful in 59s
CI / quality (push) Successful in 45s
CI / typecheck (push) Successful in 1m9s
CI / push-validation (push) Successful in 26s
CI / build (push) Successful in 49s
CI / helm (push) Successful in 42s
CI / e2e_tests (push) Successful in 4m18s
CI / integration_tests (push) Successful in 4m28s
CI / unit_tests (push) Successful in 5m47s
CI / docker (push) Successful in 11s
CI / coverage (push) Successful in 11m48s
CI / status-check (push) Successful in 1s
CI / benchmark-regression (push) Has been skipped
CI / benchmark-publish (push) Has been cancelled
docs: add invariant-reconciliation module guide, extend automation tracking docs, update mkdocs nav - Add docs/modules/invariant-reconciliation.md: module guide for InvariantReconciliationActor (v3.8.0) - Extend docs/development/automation-tracking.md: all 16 supervisors, centralized tracking manager - Update mkdocs.yml: add Modules nav section, Custom Sandbox Strategy to Development ISSUES CLOSED: #5700 Co-authored-by: CleverThis <hal9000@cleverthis.com> Co-committed-by: CleverThis <hal9000@cleverthis.com> |
||
|
|
014033eed9 |
feat: enhance automation tracking with health monitoring and recovery
CI / build (push) Successful in 19s
CI / helm (push) Successful in 32s
CI / push-validation (push) Successful in 17s
CI / lint (push) Failing after 40s
CI / quality (push) Successful in 40s
CI / typecheck (push) Successful in 50s
CI / security (push) Successful in 1m1s
CI / coverage (push) Has been skipped
CI / benchmark-regression (push) Has been skipped
CI / e2e_tests (push) Successful in 3m8s
CI / integration_tests (push) Failing after 4m2s
CI / unit_tests (push) Successful in 5m13s
CI / docker (push) Has been skipped
CI / status-check (push) Failing after 1s
CI / benchmark-publish (push) Has been cancelled
Add comprehensive automated health monitoring and recovery capabilities to the automation tracking system for proactive agent management. **Major Enhancements:** 1. **Standardized Interval Reporting** - Mandatory interval declaration in all tracking issues - Format: 'Reporting Interval: <interval> (Next report expected: <timestamp>)' - Enables precise staleness detection and recovery triggering 2. **Automated Health Monitoring (system-watchdog)** - New audit_automation_tracking_health() function runs every 5 minutes - Monitors all issues with 'Automation Tracking' label - Detects stalled agents when >20% overdue from expected interval - Calculates staleness ratios and time overdue metrics 3. **Automated Recovery System** - Kills stalled agent sessions via OpenCode Server API (port 4096) - Performs root cause analysis of session messages and agent definitions - Creates high-priority diagnostic issues with detailed findings - Automatically closes stale tracking issues with recovery notes - Provides human-readable remediation recommendations **Agent Updates with Standardized Format:** - **implementation-orchestrator**: Status updates (5 cycles) + health reports (10 cycles) - **backlog-groomer**: Grooming reports (5 min) + health reports (50 min) - **human-liaison**: Status updates (20 min monitoring cycles) - **session-persister**: Event-driven checkpoints with standardized format - **system-watchdog**: Enhanced with comprehensive recovery capabilities **Template Standardization:** - Unified header format across all tracking issues - Health indicators and next actions sections - Consistent metadata and automation signatures - Support for active/warning/error status indicators **Documentation Updates:** - Comprehensive automated recovery process documentation - Agent interval reference table with all timing details - Recovery issue format and diagnostic workflow - Health check algorithm and staleness threshold explanation **Benefits:** - Proactive detection of crashed or stuck agents (20% staleness threshold) - Automated recovery reduces manual intervention requirements - Root cause analysis provides actionable diagnostic information - Standardized format improves searchability and monitoring - Comprehensive health metrics enable system-wide visibility This enhancement transforms the automation tracking system from passive logging to active health monitoring with automated recovery capabilities. |
||
|
|
a323f07783 |
feat: implement new automation tracking system for agent supervision
CI / push-validation (push) Successful in 16s
CI / build (push) Successful in 19s
CI / helm (push) Successful in 23s
CI / lint (push) Failing after 35s
CI / quality (push) Successful in 43s
CI / security (push) Successful in 52s
CI / typecheck (push) Successful in 1m3s
CI / coverage (push) Has been skipped
CI / benchmark-regression (push) Has been skipped
CI / integration_tests (push) Failing after 4m4s
CI / unit_tests (push) Successful in 4m58s
CI / docker (push) Has been skipped
CI / e2e_tests (push) Successful in 6m24s
CI / status-check (push) Failing after 1s
CI / benchmark-publish (push) Has been cancelled
Replace shared session state issue tracking with individual tracking issues per agent to reduce noise and improve searchability. **Agent Updates:** - session-persister: [AUTO-SESSION] prefix with cycle management - implementation-orchestrator: [AUTO-IMP-POOL] prefix for health reports - system-watchdog: [AUTO-WATCHDOG] prefix for system health - backlog-groomer: [AUTO-GROOMER] prefix + backup cleanup functionality - human-liaison: [AUTO-LIAISON] prefix for status updates **New Features:** - Standardized issue title format: [AUTO-<PREFIX>] <TYPE> (Cycle <N>) - Announcement format: [AUTO-<PREFIX>] Announce: <message> - Automatic cleanup to prevent issue accumulation - Required 'Automation Tracking' label for filtering - Validation script for format compliance **Documentation:** - Complete system documentation at docs/development/automation-tracking.md - Added to mkdocs.yml navigation - Validation script at scripts/validate_automation_tracking.py **Benefits:** - Reduced noise from shared tracking issue - Better searchability with agent-specific prefixes - Cleaner history per agent type - Easier debugging with focused issue threads - Automatic cleanup prevents accumulation Closes automation tracking system implementation requirements. |
||
|
|
194c830f98 |
fix(ci): resolve repository push failure in CI pipeline
ci.yml / fix(ci): resolve repository push failure in CI pipeline (push) Failing after 0s
Reviewed and APPROVED. Closes CI push failure issue. |
||
|
|
c14f2d0a54 |
docs(development): add system watchdog architecture and audit reference
CI / typecheck (pull_request) Successful in 47s
CI / quality (pull_request) Successful in 34s
CI / security (pull_request) Successful in 58s
CI / lint (pull_request) Successful in 3m24s
CI / build (pull_request) Successful in 19s
CI / helm (pull_request) Successful in 23s
CI / unit_tests (pull_request) Successful in 6m34s
CI / docker (pull_request) Successful in 11s
CI / e2e_tests (pull_request) Successful in 17m49s
CI / coverage (pull_request) Successful in 11m9s
CI / integration_tests (pull_request) Successful in 22m29s
CI / status-check (pull_request) Successful in 1s
CI / benchmark-publish (pull_request) Has been skipped
CI / benchmark-regression (pull_request) Successful in 56m7s
Document the ca-system-watchdog continuous monitoring agent: - All 12 audit descriptions with severity levels and detection patterns - Session introspection via OpenCode Server API (Audits 6, 11, 12) - Finding severity table and action dispatch table - Health reporting format and configuration parameters - Constraints and related documentation links Add System Watchdog entry to mkdocs.yml Development nav section. Covers commits |
||
|
|
8c81f13758 |
fix(infra): resolve TLS handshake failure on git.dev.cleveragents.com
CI / benchmark-publish (pull_request) Has been skipped
CI / build (pull_request) Successful in 18s
CI / helm (pull_request) Successful in 24s
CI / lint (pull_request) Failing after 28s
CI / quality (pull_request) Successful in 35s
CI / security (pull_request) Failing after 48s
CI / typecheck (pull_request) Failing after 50s
CI / coverage (pull_request) Has been skipped
CI / benchmark-regression (pull_request) Has been skipped
CI / unit_tests (pull_request) Failing after 1m46s
CI / docker (pull_request) Has been skipped
CI / e2e_tests (pull_request) Failing after 13m19s
CI / integration_tests (pull_request) Failing after 21m9s
CI / status-check (pull_request) Failing after 1s
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 |