Is this system actually delivering, and are its controls actually running? Every figure below is read from one of two raw-data collectors at generation time -- none is hand-typed.
The headline question. Both counts below are from the SAME window (the span covered by the advisor's retained actions/*.json ledger) so they are comparable to each other -- never compared against an all-time total, which would silently overstate the human share.
window: advisor actions/*.json 2026-08-18T20:57:32+00:00 .. 2026-09-02T11:39:15+00:00
axiom-mr)of 9 total merged in window (axiom-agent-authored, all repos)
Issues eligible → selected → agent run → branch pushed → MR opened → reviewed → approved → merged → deployed → issue closed. Each stage is labelled with the time window it was actually measured over (24h vs all-time vs a current repo-level snapshot) so stages are never silently conflated onto one axis.
Three DISTINCT numbers, never conflated: a merged MR is not the same thing as a closed issue, and a closed issue is not always closed by its merge.
| Repo | MR | Title | MR state | Issue | Issue state | Attempts | Verdict history |
|---|---|---|---|---|---|---|---|
| axiom-agent | #1251 | fix(#407): the ALREADY-IN-MAIN backlog check is evidence-verified and loud, not a quiet empty queue | open | 407 | open | 4 | |
| axiom-agent | #1215 | fix(#399): consume the wake's mr_reviews send_back verdicts instead of discarding them | open | 399 | closed | 5 | |
| axiom-agent | #1197 | fix(#396): the mutation check reports its three distinct states, never collapsing INDETERMINATE into DOES NOT BIND | open | 396 | open | 2 | |
| axiom-agent | #1184 | feat(#390): the wake queue report names every MR it did not review and counts evidence vs reviewed | open | NOT MEASURED | NOT MEASURED | NOT MEASURED | no verdict history issue join: PR title did not match the fix(#N)/test(#N) convention this join relies on: 'feat(#390): the wake queue report names every MR it did not review and counts evidence vs reviewed' -- issue link not inferred, not guessed attempts: no task file derivable without a resolved issue number |
| axiom-agent | #1137 | chore(reconcile): non-destructively incorporate remote tip da3939aca7b7 (enigma/axiom-agent#826) tree unchanged from d9 | open | NOT MEASURED | NOT MEASURED | NOT MEASURED | no verdict history issue join: PR title did not match the fix(#N)/test(#N) convention this join relies on: 'chore(reconcile): non-destructively incorporate remote tip da3939aca7b7 (enigma/axiom-agent#826) tree unchanged from d9' -- issue link not inferred, not guessed attempts: no task file derivable without a resolved issue number |
| axiom-agent | #1118 | fix(#359): consume the wake's mr_reviews send_back verdicts instead of discarding them | open | 359 | open | 6 | |
| axiom-agent | #1097 | fix(#375): prior-wake-created issues are a promotion candidate source, every exclusion records its filter and reason | open | 375 | open | 2 | |
| axiom-agent | #1064 | chore(reconcile): non-destructively incorporate remote tip 1d1aafab4698 (enigma/axiom-agent#826) tree unchanged from 6a | open | NOT MEASURED | NOT MEASURED | NOT MEASURED | no verdict history issue join: PR title did not match the fix(#N)/test(#N) convention this join relies on: 'chore(reconcile): non-destructively incorporate remote tip 1d1aafab4698 (enigma/axiom-agent#826) tree unchanged from 6a' -- issue link not inferred, not guessed attempts: no task file derivable without a resolved issue number |
| axiom-agent | #1036 | fix(#374): add the per-MR-head execution harness the review phase was missing | open | 374 | open | 4 | |
| axiom-agent | #999 | test(#352): pin the push proxy, issue selector, and backlog policy to one shared active-repo set | closed | 352 | closed | 10 | |
| axiom-agent | #982 | chore(reconcile): non-destructively incorporate remote tip 5e2349e4beb5 (enigma/axiom-agent#826) tree unchanged from 71 | open | NOT MEASURED | NOT MEASURED | NOT MEASURED | no verdict history issue join: PR title did not match the fix(#N)/test(#N) convention this join relies on: 'chore(reconcile): non-destructively incorporate remote tip 5e2349e4beb5 (enigma/axiom-agent#826) tree unchanged from 71' -- issue link not inferred, not guessed attempts: no task file derivable without a resolved issue number |
| axiom-agent | #973 | test(#233): prove the #223 alarm tests on the durable file and a semantic issue reference | open | 233 | open | 3 | |
| axiom-agent | #967 | chore(reconcile): non-destructively incorporate remote tip 53718292f35e (enigma/axiom-agent#826) tree unchanged from 5f | open | NOT MEASURED | NOT MEASURED | NOT MEASURED | no verdict history issue join: PR title did not match the fix(#N)/test(#N) convention this join relies on: 'chore(reconcile): non-destructively incorporate remote tip 53718292f35e (enigma/axiom-agent#826) tree unchanged from 5f' -- issue link not inferred, not guessed attempts: no task file derivable without a resolved issue number |
| axiom-agent | #953 | fix(#369): the ALREADY-IN-MAIN detector only flags on an explicit closing reference for that exact issue | closed | 369 | closed | 4 | |
| axiom-agent | #882 | feat(advisor): review-evidence harness re-run an MR's criteria at its head SHA and record what was observed | closed | NOT MEASURED | NOT MEASURED | NOT MEASURED | no verdict history issue join: PR title did not match the fix(#N)/test(#N) convention this join relies on: "feat(advisor): review-evidence harness re-run an MR's criteria at its head SHA and record what was observed" -- issue link not inferred, not guessed attempts: no task file derivable without a resolved issue number |
| axiom-agent | #879 | feat(#365): add the git-worktree execution backend for the evidence gatherer | closed | NOT MEASURED | NOT MEASURED | NOT MEASURED | no verdict history issue join: PR title did not match the fix(#N)/test(#N) convention this join relies on: 'feat(#365): add the git-worktree execution backend for the evidence gatherer' -- issue link not inferred, not guessed attempts: no task file derivable without a resolved issue number |
| axiom-agent | #877 | feat(#360): add a per-PR evidence gatherer that runs criteria against PR heads | closed | NOT MEASURED | NOT MEASURED | NOT MEASURED | no verdict history issue join: PR title did not match the fix(#N)/test(#N) convention this join relies on: 'feat(#360): add a per-PR evidence gatherer that runs criteria against PR heads' -- issue link not inferred, not guessed attempts: no task file derivable without a resolved issue number |
| axiom-agent | #852 | fix(#353): add the MR execution harness the wake's rule reads evidence from | closed | 353 | closed | 7 | |
| axiom-agent | #849 | fix(#347): re-measure the task-file ceremony bar after the capability section's wording drifted | open | 347 | open | 4 | |
| axiom-agent | #784 | fix(#339): axiom-mr: waits on a red gate, misreads a PushRejected 500 as "already up to date", and is itself untracked; | open | 339 | open | 8 | |
| axiom-agent | #755 | test(#333): prove check 9's drift comparison passes after make install | closed | 333 | closed | 1 | |
| axiom-agent | #745 | fix(#331): expire the in-process inbox claim once the durable ledger still has attempts left | closed | 331 | closed | 3 | |
| axiom-agent | #575 | fix(#210): fence the inlined issue body in the generated task file as untrusted external content | open | 210 | open | 8 | |
| axiom-agent | #523 | fix(#173): selfcheck asserts /tmp/.git does not exist (stray-tmp-git check) | closed | 173 | closed | 6 | |
| axiom-agent | #418 | fix(#253): refuse a contract that declares two steps sharing one command signature | open | 253 | open | 9 | |
| axiom-agent | #330 | test(#231): prove a bare numeric string 'number' is refused, binding the no-coercion contract | closed | 231 | open | 3 | |
| axiom-agent | #316 | fix(#280): UNGUARDED[#154]: the code fix is correct but NO test catches its regression - reintroducing the exact bug lea | closed | 280 | closed | 2 | |
| axiom-agent | #315 | fix(#235): pin the selector's allow-label and deny-list checks as exact set membership | closed | 235 | closed | 7 | |
| axiom-agent | #110 | test: ps proof push | closed | NOT MEASURED | NOT MEASURED | NOT MEASURED | no verdict history issue join: PR title did not match the fix(#N)/test(#N) convention this join relies on: 'test: ps proof push' -- issue link not inferred, not guessed attempts: no task file derivable without a resolved issue number |
| axiom-agent | #109 | test: prove axiom-agent uid can push via the outbox push-proxy | closed | NOT MEASURED | NOT MEASURED | NOT MEASURED | no verdict history issue join: PR title did not match the fix(#N)/test(#N) convention this join relies on: 'test: prove axiom-agent uid can push via the outbox push-proxy' -- issue link not inferred, not guessed attempts: no task file derivable without a resolved issue number |
Per-MR review-round sequences from the advisor's decisions/*.json. An approve round whose head_sha is superseded by a later commit is a real approval, killed before it ever reached a merge -- flagged below rather than folded silently into "approved".
rows with no `repo` field cannot be joined to a specific MR; counted here, excluded from per_mr below rather than silently dropped
| MR | Rounds | Verdict sequence | Head-sha changes | Approvals (ever) | Invalidated approvals |
|---|---|---|---|---|---|
| enigma/secrets#77 | 184 | 0 | 1 | 0 | |
| enigma/advisor#79 | 183 | approve at round 6 invalidated at round 20 by commit 8393dd097706; approve at round 7 invalidated at round 20 by commit 8393dd097706; approve at round 12 invalidated at round 20 by commit 8393dd097706; approve at round 15 invalidated at round 20 by commit 8393dd097706; approve at round 18 invalidated at round 20 by commit 8393dd097706; approve at round 19 invalidated at round 20 by commit 8393dd097706 |
2 | 25 | 6 |
| enigma/axiom-agent#392 | 81 | 0 | 0 | 0 | |
| enigma/axiom-agent#418 | 81 | approve at round 10 invalidated at round 11 by commit 3d72b6e286cb |
1 | 1 | 1 |
| enigma/axiom-agent#452 | 81 | 0 | 0 | 0 | |
| enigma/axiom-agent#454 | 81 | approve at round 3 invalidated at round 4 by commit 33fab85c937b; approve at round 28 invalidated at round 40 by commit 33fab85c937b |
5 | 2 | 2 |
| enigma/axiom-agent#575 | 80 | 2 | 0 | 0 | |
| enigma/sdlc#111 | 68 | 1 | 0 | 0 | |
| enigma/secrets#62 | 62 | 1 | 0 | 0 | |
| enigma/sdlc#107 | 57 | 1 | 0 | 0 | |
| enigma/sdlc#108 | 57 | 3 | 1 | 0 | |
| enigma/sdlc#109 | 57 | 1 | 0 | 0 | |
| enigma/axiom-agent#879 | 55 | 0 | 0 | 0 | |
| enigma/sdlc#10 | 54 | 0 | 0 | 0 | |
| enigma/secrets#9 | 54 | 1 | 0 | 0 | |
| enigma/sdlc#13 | 53 | 0 | 0 | 0 | |
| enigma/secrets#5 | 53 | 0 | 0 | 0 | |
| enigma/sdlc#48 | 53 | 0 | 0 | 0 | |
| enigma/axiom#46 | 53 | 0 | 0 | 0 | |
| enigma/secrets#14 | 53 | 0 | 0 | 0 | |
| enigma/secrets#24 | 53 | 0 | 0 | 0 | |
| enigma/secrets#30 | 53 | 0 | 0 | 0 | |
| enigma/axiom#56 | 52 | 0 | 0 | 0 | |
| enigma/axiom#58 | 52 | 0 | 0 | 0 | |
| enigma/advisor#72 | 52 | 2 | 0 | 0 | |
| enigma/sdlc#113 | 41 | 0 | 0 | 0 | |
| enigma/axiom-agent#852 | 40 | 3 | 0 | 0 | |
| enigma/axiom-agent#953 | 29 | 1 | 0 | 0 | |
| enigma/axiom-agent#755 | 26 | approve at round 1 invalidated at round 2 by commit 1b944d3b9847; approve at round 2 invalidated at round 3 by commit df599088deb2 |
2 | 4 | 2 |
| enigma/axiom-agent#784 | 21 | 2 | 0 | 0 | |
| enigma/advisor#165 | 13 | approve at round 11 invalidated at round 12 by commit 5f9359c3d231 |
4 | 2 | 1 |
| enigma/axiom-agent#523 | 12 | 1 | 1 | 0 | |
| enigma/axiom-agent#1036 | 12 | 2 | 0 | 0 | |
| enigma/axiom-agent#1197 | 12 | 0 | 0 | 0 | |
| enigma/axiom-agent#1215 | 12 | 6 | 0 | 0 | |
| enigma/axiom-agent#999 | 11 | 1 | 0 | 0 | |
| enigma/axiom-agent#458 | 9 | 0 | 0 | 0 | |
| enigma/axiom-agent#447 | 8 | 0 | 5 | 0 | |
| enigma/axiom-agent#1097 | 8 | 2 | 0 | 0 | |
| enigma/advisor#170 | 8 | 1 | 0 | 0 | |
| enigma/axiom-agent#1078 | 7 | 1 | 0 | 0 | |
| enigma/axiom-agent#1081 | 7 | 1 | 2 | 0 | |
| enigma/advisor#169 | 7 | 1 | 0 | 0 | |
| enigma/axiom-agent#1118 | 6 | 0 | 0 | 0 | |
| enigma/axiom-agent#1167 | 6 | 0 | 0 | 0 | |
| enigma/advisor#174 | 6 | approve at round 1 invalidated at round 2 by commit 04ea63c50dcb; approve at round 4 invalidated at round 5 by commit 42cc587bbdbf |
2 | 3 | 2 |
| enigma/axiom-agent#1243 | 5 | 0 | 0 | 0 | |
| enigma/advisor#175 | 5 | 0 | 0 | 0 | |
| enigma/axiom-agent#1245 | 5 | 0 | 0 | 0 | |
| enigma/axiom-agent#675 | 4 | 0 | 1 | 0 | |
| enigma/axiom-agent#1087 | 4 | approve at round 2 invalidated at round 3 by commit 0e383b261eb3 |
1 | 2 | 1 |
| enigma/advisor#159 | 4 | 2 | 1 | 0 | |
| enigma/advisor#177 | 4 | 0 | 0 | 0 | |
| enigma/axiom-agent#745 | 3 | 0 | 0 | 0 | |
| enigma/advisor#136 | 3 | approve at round 1 invalidated at round 2 by commit 86ed9a34408c |
1 | 1 | 1 |
| enigma/axiom-agent#1137 | 3 | 1 | 0 | 0 | |
| enigma/advisor#173 | 3 | approve at round 1 invalidated at round 2 by commit 3a52d814640f |
1 | 2 | 1 |
| enigma/advisor#176 | 3 | approve at round 1 invalidated at round 2 by commit 6fd84f2bfe2c |
1 | 2 | 1 |
| enigma/axiom-agent#1251 | 3 | 1 | 0 | 0 | |
| enigma/axiom-agent#444 | 2 | 0 | 0 | 0 | |
| enigma/advisor#135 | 2 | 1 | 0 | 0 | |
| enigma/axiom-agent#831 | 2 | approve at round 0 invalidated at round 1 by commit 58a75058ac14 |
1 | 2 | 1 |
| enigma/axiom-agent#870 | 2 | 1 | 0 | 0 | |
| enigma/advisor#150 | 2 | 0 | 0 | 0 | |
| enigma/axiom-agent#1094 | 2 | 0 | 1 | 0 | |
| enigma/axiom-agent#1107 | 2 | 0 | 1 | 0 | |
| enigma/advisor#163 | 2 | 0 | 0 | 0 | |
| enigma/advisor#166 | 2 | 1 | 1 | 0 | |
| enigma/advisor#172 | 2 | 1 | 1 | 0 | |
| enigma/sdlc#396 | 1 | 0 | 0 | 0 | |
| enigma/advisor#412 | 1 | 0 | 0 | 0 | |
| enigma/advisor#99 | 1 | 0 | 0 | 0 | |
| enigma/advisor#102 | 1 | 0 | 0 | 0 | |
| enigma/axiom-agent#502 | 1 | 0 | 0 | 0 | |
| enigma/axiom-agent#511 | 1 | 0 | 1 | 0 | |
| enigma/axiom-agent#546 | 1 | 0 | 0 | 0 | |
| enigma/advisor#131 | 1 | 0 | 0 | 0 | |
| enigma/axiom-agent#737 | 1 | 0 | 0 | 0 | |
| enigma/advisor#132 | 1 | 0 | 0 | 0 | |
| enigma/advisor#138 | 1 | 0 | 0 | 0 | |
| enigma/axiom-agent#756 | 1 | 0 | 0 | 0 | |
| enigma/axiom-agent#759 | 1 | 0 | 0 | 0 | |
| enigma/axiom-agent#760 | 1 | 0 | 0 | 0 | |
| enigma/axiom-agent#909 | 1 | 0 | 0 | 0 | |
| enigma/axiom-agent#932 | 1 | 0 | 1 | 0 | |
| enigma/axiom-agent#957 | 1 | 0 | 1 | 0 | |
| enigma/axiom-agent#982 | 1 | 0 | 0 | 0 | |
| enigma/axiom-agent#995 | 1 | 0 | 0 | 0 | |
| enigma/advisor#146 | 1 | 0 | 0 | 0 | |
| enigma/advisor#155 | 1 | 0 | 0 | 0 | |
| enigma/advisor#162 | 1 | 0 | 1 | 0 | |
| enigma/axiom-agent#1168 | 1 | 0 | 0 | 0 | |
| enigma/advisor#168 | 1 | 0 | 1 | 0 | |
| enigma/axiom-agent#1191 | 1 | 0 | 0 | 0 | |
| enigma/axiom-agent#1184 | 1 | 0 | 0 | 0 | |
| enigma/axiom-agent#1223 | 1 | 0 | 0 | 0 | |
| enigma/axiom-agent#1225 | 1 | 0 | 0 | 0 | |
| enigma/axiom-agent#1234 | 1 | 0 | 0 | 0 | |
| enigma/advisor#171 | 1 | 0 | 0 | 0 |
PASSED / FAILED / NEVER_EXECUTED for every repo's CI workflow and its
out-of-band required check. NEVER_EXECUTED (hazard-striped, amber) is deliberately the loudest state here: a
repo with no workflow, or a workflow whose runs-on matches no registered runner, is
NEVER_EXECUTED, not blank and not "unknown".
rollback: 3 TERMINAL: 3 CD: 1972 proceeding: 13 DEPLOY: 1396
| Repo | Installed | Merged (main) | Match |
|---|---|---|---|
| axiom-agent | 0a23d31ab8cc7b99498a61db13d85e442035e0be | 0a23d31ab8cc7b99498a61db13d85e442035e0be | yes |
| advisor | d76ea51eecb927a30b02d5beb06b271372093f27 | d76ea51eecb927a30b02d5beb06b271372093f27 | yes |
Count-floor vs actual, from a real run's evidence -- never a re-derived or assumed pass count. The frozen regression suite is run FRESH by the health collector (never cached), and its own rot (a pinned test that moved or was renamed) is surfaced by name.
| Repo | Floor | Passed | Failed | Skipped | Packages OK | Headroom |
|---|---|---|---|---|---|---|
| sdlc | no floor recorded | NOT MEASURED | NOT MEASURED | NOT MEASURED | NOT MEASURED | n/a |
| axiom | packages=6 | NOT MEASURED | NOT MEASURED | NOT MEASURED | NOT MEASURED | packages=NOT MEASURED |
| axiom-agent | packages=13, tests=812 | 1,742 | 0 | 31 | 29 | packages=+16, tests=+930 |
| advisor | packages=8 | NOT MEASURED | NOT MEASURED | NOT MEASURED | NOT MEASURED | packages=NOT MEASURED |
| jepa | no floor recorded | NOT MEASURED | NOT MEASURED | NOT MEASURED | NOT MEASURED | n/a |
| finetune | no floor recorded | NOT MEASURED | NOT MEASURED | NOT MEASURED | NOT MEASURED | n/a |
| upstream | no floor recorded | NOT MEASURED | NOT MEASURED | NOT MEASURED | NOT MEASURED | n/a |
| secrets | no floor recorded | NOT MEASURED | NOT MEASURED | NOT MEASURED | NOT MEASURED | n/a |
| Issue | Test | Package | Status |
|---|---|---|---|
| 128 | TestSubmit_CommitSubjectSurvivesProxyTransform | ./internal/outbox | notfound |
| 188 | TestExecSchema_DescribesOutputAsBase64 | ./internal/agenttools | notfound |
The knowledge store's own health, and the one metric (N1) that has never been computed anywhere on this host -- rendered explicitly, not as a blank or a zero.
lifecycle breakdown: quarantined=386, active=52
N1 is referenced in axiom-agent-work/NORTH-STAR.md as a compound-gate input (N6 Autonomy: 'AXIOM's N1 on the frozen holdout is not flat or falling') but no code path that computes it was found anywhere on this host (no crates/axiom-ladder or equivalent), and no stored value exists anywhere either. N1 is not a gap in execution -- it is a gap in implementation.
N1 depends on BOTH the N1-computing code and this frozen holdout. Neither existing means N1 is a gap in implementation, not merely a gap in execution.
The union of both collectors' gaps[] arrays, verbatim. This is a
feature, not an appendix: it names exactly what this system cannot currently tell us, and what
instrumentation would fix it. 17 total gap(s).
no eventlog file exists for 4 date(s) within the observed range 20260808-20260901: 20260811, 20260817, 20260824, 20260829 -- a real gap in the record, not interpolated across.
Needed instrumentation: these are real historical gaps and cannot be filled retroactively; going forward, an alert on a missed daily file rotation would surface the next one immediately instead of leaving it to be discovered here
no durable 'issue selected at time T' event exists anywhere in this pipeline: the eventlog event_type vocabulary is heartbeat|tool_call|model_call|turn_record|agent_run|selfcheck|deploy|compaction|incident -- none of these records a selection timestamp. axiom-issue-selector's own decision only ever reaches journald, which is a ~10-day rolling window, not a durable record. Needed: a new eventlog event_type (or detail.event) emitted by axiom-issue-selector.sh at the moment it selects an issue.
Needed instrumentation: a durable issue_selected event in the eventlog schema, emitted by the selector
/var/lib/axiom-check/logs/sdlc-mainbranch-29370380f05f.log exists but contains no recognised test-runner evidence (R8-style allowlist)
could not find an axiom-required-check mainbranch log for axiom in /var/lib/axiom-check/logs: no matching file
/var/lib/axiom-check/logs/advisor-mainbranch-d76ea51eecb9.log exists but contains no recognised test-runner evidence (R8-style allowlist)
could not find an axiom-required-check mainbranch log for jepa in /var/lib/axiom-check/logs: no matching file
could not find an axiom-required-check mainbranch log for finetune in /var/lib/axiom-check/logs: no matching file
could not find an axiom-required-check mainbranch log for upstream in /var/lib/axiom-check/logs: no matching file
/var/lib/axiom-check/logs/secrets-mainbranch-d97fa415d105.log exists but contains no recognised test-runner evidence (R8-style allowlist)
N1 is referenced in axiom-agent-work/NORTH-STAR.md as a compound-gate input (N6 Autonomy: 'AXIOM's N1 on the frozen holdout is not flat or falling') but no code path that computes it was found anywhere on this host (no crates/axiom-ladder or equivalent), and no stored value exists anywhere either. N1 is not a gap in execution -- it is a gap in implementation.
coverage-per-package is not computed: re-running `go test -cover ./...` for every repo on every collection would duplicate axiom-required-check.sh's own ~5-9min run against the same commit. Instrumentation needed: have axiom-required-check.sh persist `go test -cover` output (or a parsed coverage summary) alongside its existing per-sha log so this collector can read it instead of re-running the suite.
the tri-state is computed against each repo's default-branch HEAD and each open MR's CURRENT head only; it does not test the MERGE RESULT. This mirrors axiom-required-check.sh's own documented 'KNOWN LIMITATION, still open': a stale branch can show FAILED for a reason ('rebase needed') that would not survive an actual merge.
REPOS here is axiom-required-check.sh's own repo list (8 repos). enigma/ste-spec exists in Forgejo but carries no axiom-required coverage at all -- that is the gate's own scope, not an omission in this collector.
N1's entire computation pipeline (the X4 axiom-ladder crate and the X0 frozen holdout at /var/lib/axiom-holdout) does not exist on this host. This is not a run that failed to produce a value -- there is no code path that could ever produce one yet. Instrumentation needed: build crates/axiom-ladder per axiom/phases/X4.md and provision /var/lib/axiom-holdout (root:axiom-eval, 0750) per axiom/phases/X0.md.
deploy events are read from only the most recent few days of /var/lib/axiom-agent/eventlog/events-*.jsonl, to keep collection fast; a deploy record older than that window is not surfaced here even if the file is still on disk.
log/disk GROWTH RATE is not computed, only a point-in-time snapshot (system.disk_usage, system.log_file_count). A rate needs a PRIOR snapshot to diff against, which this collector does not persist between runs. Instrumentation needed: either have this collector append its own snapshots to a small local history file it reads back next run, or add real logrotate coverage (confirmed live: none exists for /var/lib/axiom-agent/logs -- see system.logrotate_coverage) so at least the un-rotated-file-count trend becomes self-limiting instead of needing to be measured at all.
journald on this host is a rolling window (measured ~10 days at collection time -- see system.journald_window itself for the measured bounds); every journalctl-sourced count in this document (push-proxy failures, error classes) only reflects that window, not full history.
| Source | Location | Requires sudo | Available |
|---|---|---|---|
| pipeline_metrics_base | /usr/local/bin/axiom-pipeline-metrics --json | internal (self-elevates) | available |
| eventlog_dir | /var/lib/axiom-agent/eventlog | True | available |
| inbox_completions | /var/lib/axiom-agent/eventlog/inbox-completions.jsonl | True | available |
| push_outbox_status | /var/lib/axiom-agent/push-outbox/status | True | available |
| advisor_decisions | /var/lib/axiom-advisor/workspace/decisions | False | available |
| advisor_actions | /var/lib/axiom-advisor/workspace/actions | False | available |
| attestations | /var/lib/axiom-advisor/attestations | True | available |
| forgejo_api | sudo /usr/local/bin/axiom-forgejo api GET ... | True | available |
| forgejo_api_backlog | sudo /usr/local/bin/axiom-forgejo api GET .../issues (paginated) | True | available |
| forgejo_api_open_prs | sudo /usr/local/bin/axiom-forgejo api GET .../pulls?state=open (paginated) | True | available |
Dead sources, never read:
/var/lib/axiom-agent/queue/ — DEAD -- never read by this collector: stale since 2026-08-19; reading it would silently return zeros for an active-seeming but defunct sourceAll-time figures are labelled historical and shown alongside, never instead of, the windowed (last-24h / last-7d) figures: a single defect fix can permanently skew an all-time ratio, so the windowed numbers are the ones that answer "is it better NOW".
| Repo | Open issues | Trend |
|---|---|---|
| axiom-agent | 881 | 0 |
| advisor | 20 | 0 |
| axiom | 35 | 0 |
| sdlc | 69 | 0 |
| secrets | 51 | 0 |
| Total | 1,056 | 0 |
should be 0 in a healthy pipeline; a non-zero recent count means the mutation-check harness's own checkout path is failing again, which makes every affected MR unapprovable regardless of the author's work
| Issue | Satisfied by MR | Wake |
|---|---|---|
| enigma/axiom-agent#333 | enigma/axiom-agent#755 | 20260825T202031Z-1458aa95c41c0018 |
| enigma/axiom-agent#1093 | enigma/advisor#156 | 20260830T194914Z-553dc95cfc0795a2 |
| enigma/axiom-agent#1085 | enigma/advisor#157 | 20260830T194914Z-553dc95cfc0795a2 |
| enigma/axiom-agent#1104 | enigma/advisor#159 | 20260830T235201Z-917c96ba26d3e0d9 |
| enigma/axiom-agent#1141 | enigma/advisor#166 | 20260831T231951Z-59a03e03da1f3bde |
| enigma/axiom-agent#1238 | enigma/axiom-agent#1234 | 20260901T161542Z-16386facc4808120 |
Every currently open PR classified by the FIRST mechanical reason (never the advisor's own free-text wake narrative -- see compute_frozen_pr_classification) it is not reviewable right now. This is the biggest throughput drag when the non-"reviewable now" categories dominate the total.
50 open PRs total, all repos, any author.
| PR | Title | Author | Frozen reason |
|---|---|---|---|
| axiom-agent#1251 | fix(#407): the ALREADY-IN-MAIN backlog check is evidence-verified and loud, not a quiet empty queue | axiom-agent | Already reviewed, head unchanged |
| axiom-agent#1245 | fix: an in-process task-inbox retry re-derives its predecessor's conclusion from scratch | enigma | Already reviewed, head unchanged |
| axiom-agent#1243 | Land the axiom dashboard: autonomy, backlog and evidence-health metrics | enigma | Already reviewed, head unchanged |
| axiom-agent#1215 | fix(#399): consume the wake's mr_reviews send_back verdicts instead of discarding them | axiom-agent | Already reviewed, head unchanged |
| axiom-agent#1197 | fix(#396): the mutation check reports its three distinct states, never collapsing INDETERMINATE into DOES NOT BIND | axiom-agent | Already reviewed, head unchanged |
| axiom-agent#1191 | test(#1166): reproduce check_busy_gate blindness to an in-flight rework claim | opus-advisor | Already reviewed, head unchanged |
| axiom-agent#1184 | feat(#390): the wake queue report names every MR it did not review and counts evidence vs reviewed | axiom-agent | Missing mutation-spec declaration |
| axiom-agent#1167 | fix(#1166): check_busy_gate now sees an in-flight rework claim | enigma | Already reviewed, head unchanged |
| axiom-agent#1137 | chore(reconcile): non-destructively incorporate remote tip da3939aca7b7 (enigma/axiom-agent#826) tree unchanged from d9 | axiom-agent | Missing mutation-spec declaration |
| axiom-agent#1118 | fix(#359): consume the wake's mr_reviews send_back verdicts instead of discarding them | axiom-agent | Already reviewed, head unchanged |
| axiom-agent#1097 | fix(#375): prior-wake-created issues are a promotion candidate source, every exclusion records its filter and reason | axiom-agent | Already reviewed, head unchanged |
| axiom-agent#1081 | fix(#1075): give the rework-round-limit ratchet a non-human reset path | opus-advisor | Already reviewed, head unchanged |
| axiom-agent#1078 | fix(#1074): self-heal a stranded .claimed marker instead of requiring a human | opus-advisor | Already reviewed, head unchanged |
| axiom-agent#1077 | fix(ci): reinstate .forgejo/workflows/ci.yml on the runner's real label | opus-advisor | Missing mutation-spec declaration |
| axiom-agent#1064 | chore(reconcile): non-destructively incorporate remote tip 1d1aafab4698 (enigma/axiom-agent#826) tree unchanged from 6a | axiom-agent | Missing mutation-spec declaration |
| axiom-agent#1036 | fix(#374): add the per-MR-head execution harness the review phase was missing | axiom-agent | Already reviewed, head unchanged |
| axiom-agent#982 | chore(reconcile): non-destructively incorporate remote tip 5e2349e4beb5 (enigma/axiom-agent#826) tree unchanged from 71 | axiom-agent | Missing mutation-spec declaration |
| axiom-agent#973 | test(#233): prove the #223 alarm tests on the durable file and a semantic issue reference | axiom-agent | Missing mutation-spec declaration |
| axiom-agent#967 | chore(reconcile): non-destructively incorporate remote tip 53718292f35e (enigma/axiom-agent#826) tree unchanged from 5f | axiom-agent | Missing mutation-spec declaration |
| axiom-agent#849 | fix(#347): re-measure the task-file ceremony bar after the capability section's wording drifted | axiom-agent | Missing mutation-spec declaration |
| axiom-agent#784 | fix(#339): axiom-mr: waits on a red gate, misreads a PushRejected 500 as "already up to date", and is itself untracked; | axiom-agent | Already reviewed, head unchanged |
| axiom-agent#575 | fix(#210): fence the inlined issue body in the generated task file as untrusted external content | axiom-agent | Already reviewed, head unchanged |
| axiom-agent#454 | fix(#441): make a wedged WIP cap alarm instead of repeating silently | opus-advisor | Already reviewed, head unchanged |
| axiom-agent#452 | fix(#443): watch axiom-deploy.timer for stalled start jobs | opus-advisor | Already reviewed, head unchanged |
| axiom-agent#418 | fix(#253): refuse a contract that declares two steps sharing one command signature | axiom-agent | Already reviewed, head unchanged |
| axiom-agent#392 | fix(deploy): bounds-check mktemp, make axiom-backlog-policy's /run writable | opus-advisor | Already reviewed, head unchanged |
| advisor#177 | fix: bound the backlog's own new-issue creation to a rolling per-day cap | opus-advisor | Already reviewed, head unchanged |
| advisor#175 | fix(axiom-agent#858): catch family-shaped near-duplicate issues via content-word Jaccard | opus-advisor | Already reviewed, head unchanged |
| advisor#169 | test(#1189): reproduce ClaudeInvoker discarding CLI stdout on failure | opus-advisor | Already reviewed, head unchanged |
| advisor#152 | fix(ci): claim CI jobs on the runner's actual label, not "host" | opus-advisor | Missing mutation-spec declaration |
| advisor#79 | fix(#78): bound the total depth of the agent-ready queue, not just per-wake promotions | opus-advisor | Already reviewed, head unchanged |
| advisor#72 | feat(#44): wire self-test and drift to real signals [stacked] | opus-advisor | Already reviewed, head unchanged |
| axiom#59 | feat(ci): add .forgejo/workflows/ci.yml, targeting the runner's real label | opus-advisor | Missing mutation-spec declaration |
| axiom#58 | feat(#57): EdgeCorroborates - a promotion path for quarantined model content that does not weaken the discovered/believed gate | opus-advisor | Already reviewed, head unchanged |
| axiom#56 | fix(#2): a FOUND / NOT_FOUND / INDETERMINATE outcome at the retrieval surface | opus-advisor | Already reviewed, head unchanged |
| axiom#46 | exp(#41): storebench — MemStore measured, PostgreSQL blocked by sandbox | opus-advisor | Already reviewed, head unchanged |
| sdlc#113 | docs(#1180): RCA for the 2026-08-31 autonomous-delivery stall | opus-advisor | Already reviewed, head unchanged |
| sdlc#111 | fix(#110): refuse a secret producer whose output reaches a persistent sink | opus-advisor | Already reviewed, head unchanged |
| sdlc#109 | fix(enforcement): track axiom-forgejo, bounds-check mktemp, fix pipeline masking | opus-advisor | Already reviewed, head unchanged |
| sdlc#107 | fix(guard): content-based judgement for secret-binary mentions, grep patterns, and BYPASS-ATTEMPT | opus-advisor | Already reviewed, head unchanged |
| sdlc#48 | Add a PostgreSQL 19 beta cluster beside PostgreSQL 16 | opus-advisor | Missing mutation-spec declaration |
| sdlc#13 | feat(#8): daily self-test canary | enigma | Already reviewed, head unchanged |
| sdlc#10 | feat(#9): version and harden the advisor MR tool | enigma | Already reviewed, head unchanged |
| secrets#77 | fix(secrets): make install prove provenance against the forge, never a local clone (secrets#76) | opus-advisor | Already reviewed, head unchanged |
| secrets#62 | chore(systemd): track axiom-secret-decrypt-axiom-agent-forge-token.service (sdlc#86) | opus-advisor | Already reviewed, head unchanged |
| secrets#30 | fix(secrets): secret-put refuses to overwrite an existing secret, and the re-key caller that needs the override (secrets#28) | opus-advisor | Already reviewed, head unchanged |
| secrets#24 | test(broker): prove the peercred control across a real process boundary (secrets#16) | opus-advisor | Already reviewed, head unchanged |
| secrets#14 | fix(ci): key the broker skip on source, not on the manifest | enigma | Already reviewed, head unchanged |
| secrets#9 | fix(broker): accept owner/repo in the repo validator (secrets#6) | opus-advisor | Already reviewed, head unchanged |
| secrets#5 | feat(broker): capture capability broker for review (provenance unknown) | enigma | Already reviewed, head unchanged |
Working vs idle, distinguished honestly from a merely-alive process: a heartbeat is not proof of progress, a recent turn_record is.
a heartbeat alone is not proof of a stall -- but it is also not proof of progress; the "latest turn" row above IS: a recent turn_record means the model produced a real step, not just that the process is alive.
Failed axiom-*/advisor-* units
none
Activating oneshots (not necessarily a problem -- see Section D discipline)
advisor-wake.service axiom-dashboard-regenerate.service axiom-required-check.service