loki-mode 10.6.11 → 10.6.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +20 -2
  2. package/SKILL.md +2 -2
  3. package/VERSION +1 -1
  4. package/autonomy/lib/backlog.py +19 -3
  5. package/autonomy/lib/fast_verify.py +19 -1
  6. package/autonomy/lib/proof-pr.sh +34 -3
  7. package/autonomy/lib/workspace.py +27 -1
  8. package/autonomy/lib/workspace_metrics.py +85 -0
  9. package/autonomy/lib/worktree_prep.py +45 -3
  10. package/autonomy/loki +62 -3
  11. package/autonomy/run.sh +95 -6
  12. package/autonomy/verify.sh +87 -20
  13. package/dashboard/__init__.py +1 -1
  14. package/dashboard/api_operator.py +27 -0
  15. package/dashboard/api_runs.py +52 -0
  16. package/dashboard/api_workspaces.py +140 -0
  17. package/dashboard/audit.py +8 -2
  18. package/dashboard/server.py +42 -21
  19. package/dashboard/static/index.html +4 -3
  20. package/dashboard/static/proofs.html +5 -0
  21. package/dashboard/static/start.html +32 -1
  22. package/docs/INSTALLATION.md +1 -1
  23. package/docs/SIGNED-RECEIPTS.md +39 -0
  24. package/docs/UNREACHABLE-TESTS.md +1 -1
  25. package/docs/WORKSPACES.md +14 -0
  26. package/docs/audit-logging.md +13 -0
  27. package/docs/dev/release-checklist.md +5 -0
  28. package/docs/exit-codes.md +44 -9
  29. package/docs/v10/BOARD.md +73 -25
  30. package/docs/v10/DECISIONS.md +22 -0
  31. package/docs/v10/GUIDE.md +1 -1
  32. package/docs/v10/PROGRESS.md +54 -0
  33. package/loki-ts/dist/loki.js +545 -536
  34. package/mcp/__init__.py +1 -1
  35. package/mcp/tests/test_v10_tools.py +41 -0
  36. package/mcp/v10_tools.py +13 -0
  37. package/package.json +1 -1
  38. package/packages/control-plane/dist/server.js +14 -1
  39. package/packages/control-plane/drizzle/meta/0001_snapshot.json +364 -0
  40. package/packages/control-plane/src/server/app.ts +7 -1
  41. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  42. package/web-app/dist/assets/{AdminPage-BnPQzCoC.js → AdminPage-oc63I7OH.js} +1 -1
  43. package/web-app/dist/assets/{Avatar-DBpPssag.js → Avatar-BziJJn7b.js} +1 -1
  44. package/web-app/dist/assets/{Badge-CxlVZMg8.js → Badge-DeTNCD_k.js} +1 -1
  45. package/web-app/dist/assets/{Button-BXMmAcji.js → Button-D9wjGlQI.js} +1 -1
  46. package/web-app/dist/assets/{CockpitPage-Birxgrlx.js → CockpitPage-Bw4_akgH.js} +1 -1
  47. package/web-app/dist/assets/{ComparePage-BqqDXwLS.js → ComparePage-XmdsH_wC.js} +1 -1
  48. package/web-app/dist/assets/{ErrorBoundary-C0u7Mi2z.js → ErrorBoundary-B0_IF9Ew.js} +1 -1
  49. package/web-app/dist/assets/{EvidenceReceiptPanel-Cp-3O8W8.js → EvidenceReceiptPanel-Da3d60pX.js} +1 -1
  50. package/web-app/dist/assets/{GitHubIssuesPanel-B_W8k95U.js → GitHubIssuesPanel-D9Jiuoyc.js} +1 -1
  51. package/web-app/dist/assets/{GitHubPRsPanel-BqvyZ1r1.js → GitHubPRsPanel-DQCUsWAb.js} +1 -1
  52. package/web-app/dist/assets/{HomePage-BQ7osrwA.js → HomePage-rfyNY25A.js} +2 -2
  53. package/web-app/dist/assets/{LoginPage-B2aHa3wI.js → LoginPage-BGHFcJj8.js} +1 -1
  54. package/web-app/dist/assets/{MagicPage-DwIxsJzJ.js → MagicPage-CdoeZ5aB.js} +1 -1
  55. package/web-app/dist/assets/{MetricsPage-CRhnEmp8.js → MetricsPage-CwKr2759.js} +2 -2
  56. package/web-app/dist/assets/{NotFoundPage-ByEZNNyC.js → NotFoundPage-9qNm-fWi.js} +1 -1
  57. package/web-app/dist/assets/{ProjectPage-LSU-iiUP.js → ProjectPage-BbeRxI8t.js} +67 -67
  58. package/web-app/dist/assets/{ProjectsPage-lBbt1xYZ.js → ProjectsPage-hw9XHZXR.js} +1 -1
  59. package/web-app/dist/assets/{SettingsPage-DOdfwqdK.js → SettingsPage-Cq6duAHh.js} +1 -1
  60. package/web-app/dist/assets/{ShowcasePage-CjsS6oSQ.js → ShowcasePage-DcpXgNKy.js} +1 -1
  61. package/web-app/dist/assets/{SystemSettingsPage-O-HGI2S_.js → SystemSettingsPage-BMWp2LCp.js} +1 -1
  62. package/web-app/dist/assets/{TeamsPage-Mt8EP17C.js → TeamsPage-Dh1rte-l.js} +1 -1
  63. package/web-app/dist/assets/{TemplatesPage-CVVy4Iz7.js → TemplatesPage-BUIMiu9V.js} +1 -1
  64. package/web-app/dist/assets/{TerminalOutput-XUgC02sX.js → TerminalOutput-g9_MPOQq.js} +1 -1
  65. package/web-app/dist/assets/{activity-DU5SJfx3.js → activity-BYGoe6e6.js} +1 -1
  66. package/web-app/dist/assets/{bell-C5YepG66.js → bell-CxCZpUMb.js} +1 -1
  67. package/web-app/dist/assets/{bot-BRExedZU.js → bot-Cpbkdqjb.js} +1 -1
  68. package/web-app/dist/assets/{check-DsyIFRaT.js → check-fO48BSWF.js} +1 -1
  69. package/web-app/dist/assets/{chevron-left-DdK1iGTs.js → chevron-left-C3J6cmqz.js} +1 -1
  70. package/web-app/dist/assets/{circle-alert-C_4QlfMh.js → circle-alert-DhdR0TJR.js} +1 -1
  71. package/web-app/dist/assets/{clock-BY9MJ-Yl.js → clock-Crp889Lj.js} +1 -1
  72. package/web-app/dist/assets/{cloud-Cl1jOslN.js → cloud-CUoa_Aqa.js} +1 -1
  73. package/web-app/dist/assets/{code-xml-BRRBRbeE.js → code-xml-BZSDiROr.js} +1 -1
  74. package/web-app/dist/assets/{database-BtZdEQTc.js → database-BC_OF6lp.js} +1 -1
  75. package/web-app/dist/assets/{dollar-sign-BqQ0fBnq.js → dollar-sign-DJUXGU2U.js} +1 -1
  76. package/web-app/dist/assets/{file-code-corner-Q9YsC7IC.js → file-code-corner-CwHaIaDe.js} +1 -1
  77. package/web-app/dist/assets/{file-plus-GrZYy7o7.js → file-plus-DD8rC5Gt.js} +1 -1
  78. package/web-app/dist/assets/{globe-CNKuJhK7.js → globe-CwDBjzLT.js} +1 -1
  79. package/web-app/dist/assets/{hammer-Cauj0_Mr.js → hammer-CzeZBlk1.js} +1 -1
  80. package/web-app/dist/assets/{index-4c5tMfoO.js → index-BgFxf62u.js} +3 -3
  81. package/web-app/dist/assets/{layers-IEQ3AZ0i.js → layers-DytzdbMj.js} +1 -1
  82. package/web-app/dist/assets/{loader-circle-DkC6SXf0.js → loader-circle-D8hG34Pb.js} +1 -1
  83. package/web-app/dist/assets/{lock-Db0jlkGG.js → lock-hk6B4D77.js} +1 -1
  84. package/web-app/dist/assets/{package-BkagJWcN.js → package-DO_92_a-.js} +1 -1
  85. package/web-app/dist/assets/{plus-BH3dF7wB.js → plus-BKQDzXcw.js} +1 -1
  86. package/web-app/dist/assets/{refresh-cw-3r-v6CaV.js → refresh-cw-DKTkN-7t.js} +1 -1
  87. package/web-app/dist/assets/{rotate-ccw-DuqsPonD.js → rotate-ccw-Yhmj5NtP.js} +1 -1
  88. package/web-app/dist/assets/{scroll-text-OaKgXAF3.js → scroll-text-Cc-NigJs.js} +1 -1
  89. package/web-app/dist/assets/{server-283wBoqS.js → server-DYIet42E.js} +1 -1
  90. package/web-app/dist/assets/{shield-alert-Cfka1gvI.js → shield-alert-Cy_zkAp6.js} +1 -1
  91. package/web-app/dist/assets/{thumbs-up-Be3PhCnV.js → thumbs-up-DtLybu1S.js} +1 -1
  92. package/web-app/dist/assets/{trash-2-BDKSlpn4.js → trash-2-n9tqmPW_.js} +1 -1
  93. package/web-app/dist/assets/{trending-down-SkioL8cr.js → trending-down-zHpd0XJs.js} +1 -1
  94. package/web-app/dist/assets/{trending-up-CzCzHgB7.js → trending-up-d8bugNud.js} +1 -1
  95. package/web-app/dist/assets/{upload-DlhOQ6b3.js → upload-CkiOu1GK.js} +1 -1
  96. package/web-app/dist/assets/{usePolling-Z7LLnCrf.js → usePolling-B9aSXIDR.js} +1 -1
  97. package/web-app/dist/assets/{user-BKegc_v2.js → user-DbfT_krW.js} +1 -1
  98. package/web-app/dist/index.html +1 -1
package/docs/v10/BOARD.md CHANGED
@@ -250,7 +250,7 @@ set is declared to avoid overlap with those and with each other.
250
250
  | S-188 | BACKLOG 123: overview proof card wording has no test of its own | dashboard-ui/tests/loki-overview-proof-card.node.test.mjs (new) | LOW | node --test dashboard-ui/tests/loki-overview-proof-card.node.test.mjs passes: no proof reads Not evaluated, a headline carries the recorded-copy prefix, gaps null reads uncertainty not measured; deleting the prefix in a scratch copy fails it | released@2026-09-27T20:54Z | Source: 19:57Z cut. Batch 7 (wf_a3ea2c8c-560), build then review. Review APPROVE on 6d965cca; in train 13, main 28e62e44 pushed 20:35:00 (`git ls-remote origin refs/heads/main` = 28e62e44). Published in v9.74.0 (`npm view loki-mode version` = 9.74.0; npm time 2026-09-27T20:54Z). |
251
251
  | S-189 | BACKLOG 114: learning dashboard renders failed metrics and trends reads as no data | dashboard-ui/components/loki-learning-dashboard.js (metrics and trends load plus their two empty branches only), dashboard-ui/tests/loki-learning-dashboard-fetch-error.node.test.mjs (new) | LOW | node --test dashboard-ui/tests/loki-learning-dashboard-fetch-error.node.test.mjs passes: rejected metrics and trends render Could not load; an empty trends response still renders No trend data available | released@2026-09-27T20:54Z | Source: 19:57Z cut. Batch 7 (wf_a3ea2c8c-560), build then review. Review APPROVE on a746655f; in train 13, main 28e62e44 pushed 20:35:00 (`git ls-remote origin refs/heads/main` = 28e62e44). Published in v9.74.0 (`npm view loki-mode version` = 9.74.0; npm time 2026-09-27T20:54Z). |
252
252
  | S-190 | BACKLOG 112: R3 design doc describes project_total_usd as a plain sum | docs/R3-COST-OBSERVABILITY-DESIGN.md | LOW | grep -n 'sum of per-run proof costs' docs/R3-COST-OBSERVABILITY-DESIGN.md exits 1; grep -n project_total_partial docs/R3-COST-OBSERVABILITY-DESIGN.md prints at least one line | released@2026-09-27T21:15Z | Source: 19:57Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Review APPROVE on 1d6786bf; in train 14, main 04af133a pushed 20:58:10 (`git ls-remote origin refs/heads/main` = 04af133a). Published in v9.75.0 (`npm view loki-mode version` = 9.75.0; npm time 2026-09-27T21:15Z). |
253
- | S-191 | Velocity: test-review-assurance-tail.sh (116s) under 60s by running independent cases concurrently, budgets unchanged | tests/test-review-assurance-tail.sh | MEDIUM | time LOKI_TEST_SHARD=0/8 bash tests/test-review-assurance-tail.sh exits 0 with real under 60s and the same pass-count line as the pre-change capture; both timings reported | parked@2026-09-27T21:43Z | Source: 19:57Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit 63396544 kept on branch worktree-wf_ff8d537c-40e-4. |
253
+ | S-191 | Bring tests/test-review-assurance-tail.sh under 60 s wall time with bounded concurrency, keeping every per-case budget and assertion unchanged. | tests/test-review-assurance-tail.sh, tests/shard-durations.tsv (update its row) | RED: `time bash tests/test-review-assurance-tail.sh` over 60 s today (memory says load-flaky). GREEN: under 60 s on 3 consecutive runs, with identical pass counts printed, and every case still runs (compare the case-name lists before and after). Under `LOKI_TEST_JOBS=1` it still passes. Each parallel case uses its own run-owned temp dir; record and wait on your own PIDs only. Reuse built commit 63396544 (branch worktree-wf_ff8d537c-40e-4) as a starting point after rebasing. No CHANGELOG. | MEDIUM | merged@2026-10-03T10:50Z | df4f23207..328ad1f05 on main (MEDIUM TL APPROVE), shard row 116 to 45 |
254
254
  | S-192 | BACKLOG 112: no test drives the web-app WebSocket status push payload for unmeasured cost | web-app/tests/test_status_push_unmeasured.py (new), web-app/server.py (lift the nested status reader only if needed) | MEDIUM | python3 -m pytest -q web-app/tests/test_status_push_unmeasured.py passes: no tokens gives cost null and max_iterations null, priced tokens give a number; forcing 0.0 in a scratch copy fails case 1 | released@2026-09-27T21:15Z | Source: 19:57Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Review APPROVE on 0b6deb16; in train 14, main 04af133a pushed 20:58:10 (`git ls-remote origin refs/heads/main` = 04af133a). Published in v9.75.0 (`npm view loki-mode version` = 9.75.0; npm time 2026-09-27T21:15Z). |
255
255
  | S-193 | Velocity: v10-ops worktree-budget prints how many worktrees a batch may open before dispatch | scripts/v10-ops.sh (new worktree-budget subcommand), tests/test-v10-ops.sh | LOW | bash tests/test-v10-ops.sh exits 0; scripts/v10-ops.sh worktree-budget 15 prints 15 minus the .claude/worktrees entries in git worktree list --porcelain, and at or over the cap prints 0 and exits 1 | released@2026-09-27T21:15Z | Source: 19:57Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Review APPROVE on a0d7a34d; in train 14, main 04af133a pushed 20:58:10 (`git ls-remote origin refs/heads/main` = 04af133a). Published in v9.75.0 (`npm view loki-mode version` = 9.75.0; npm time 2026-09-27T21:15Z). |
256
256
  | S-194 | BACKLOG 108: LOKI_AUTO_PR pushes a branch whose history still holds user files | autonomy/run.sh (create_session_pr only; does not overlap S-175 or S-195), tests/test-auto-pr-agent-committed-refuse.sh (new) | HIGH | bash tests/test-auto-pr-agent-committed-refuse.sh exits 0: auto path with a record makes no push, returns 1 and prints git reset --soft; advisory path prints the cleanup before git push -u; empty record pushes; removing the record read in a scratch copy fails leg 1; bash tests/test-trusted-push-agent-config.sh exits 0 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. 7a4b59d7 review CONCERN; rework in batch 9 (wf_4da25841-89e). Review APPROVE on 52a0ac1e (HIGH re-review APPROVE); in train 16, main 800ac46e pushed 21:25:40 (`git ls-remote origin refs/heads/main` = 800ac46e). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
@@ -292,7 +292,7 @@ set is declared to avoid overlap with those and with each other.
292
292
  | S-230 | BACKLOG 115/118: ProjectWorkspace labels unknown phases building and Replay Build can never appear | web-app/src/components/ProjectWorkspace.tsx (buildPhase memo ~1401-1410 and Replay Build condition ~1488 only; does not overlap S-229), web-app/src/components/ProjectWorkspace.phase.test.mjs (new) | LOW | node --test web-app/src/components/ProjectWorkspace.phase.test.mjs shows an unrecognized phase is not building and a completed idle session shows Replay Build; cd web-app && npx tsc -b exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
293
293
  | S-231 | BACKLOG 52: the Moat suite CI check reads as moat proven at 0 of 9 | .github/workflows/test.yml (moat-suite job name only) | LOW | gh api required_status_checks for main does not list Moat suite (else report-only); git grep -n "name: Moat suite" -- .github prints nothing; git grep -n "Moat suite" -- tests scripts .github lists only the step-summary heading; the next push shows the renamed check | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit 8dddd2d3 kept on branch worktree-wf_6fed529f-a3d-13. |
294
294
  | S-232 | autonomy/loki is linted only inside the sentrux test; the lint suite schedules big files last | tests/run-shellcheck.sh, tests/test-sentrux-init-rules.sh (T6 only) | LOW | LOKI_SHELLCHECK_JOBS=4 bash tests/run-shellcheck.sh exits 0, prints Checked ./autonomy/loki, counts match the pre-change capture plus loki; time bash tests/test-sentrux-init-rules.sh exits 0 with 8 passed under 10s; grep -c shellcheck tests/test-sentrux-init-rules.sh prints 0; both timings reported | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
295
- | S-233 | BACKLOG 72 remainder: refused resume does not name the blocking file or where the earlier commits are | autonomy/run.sh (setup_agent_branch resume block around the no-overwrite-ignore checkout only), tests/test-refused-resume-warning.sh (new) | LOW | bash tests/test-refused-resume-warning.sh exits 0 with the warning naming the conflicting ignored file and the recorded branch; bash tests/test-branch-lifecycle.sh exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
295
+ | S-233 | BACKLOG 72 remainder: refused resume does not name the blocking file or where the earlier commits are | autonomy/run.sh (setup_agent_branch resume block around the no-overwrite-ignore checkout only), tests/test-refused-resume-warning.sh (new) | LOW | bash tests/test-refused-resume-warning.sh exits 0 with the warning naming the conflicting ignored file and the recorded branch; bash tests/test-branch-lifecycle.sh exits 0 | merged@2026-10-03T09:43Z | 1731c5e14. TL APPROVE (red on parent, mutation red, paths with spaces, cap 5, locale-safe fallback). On main: test PASS, bash -n ok, shard 19/0, drift 6/0. Nit: tracked-change refusals also say ignored file(s). |
296
296
  | EV-1 | Eval runner and scorer (eval/loki10/harness.py, run.sh, summarize): fresh clone per run, local bare remote, hidden tests after the arm, nonce-verified grading, pre-arm task_invalid checks, provider-only cost | eval/loki10/{harness.py,run.sh,summarize,lib-tmp.sh,README.md,test-harness.sh,fixtures/} | HIGH | bash eval/loki10/test-harness.sh | released@2026-09-28T01:11Z | D29 gate. Built d63fc5c2 (61 passed, 0 failed); adversarial review REJECT on 3cf723be fixed item by item; merging EV-3 and the task nonce fixes on branch worktree-agent-ad850d483c4960e62. d63fc5c2..68bfbc4f (test-harness 77 passed; no-op baseline graded all 29 tasks not completed, none task_invalid, 108s); main 694866fc. Released v9.80.1 (npm view loki-mode time: 2026-09-28T01:11:53Z). |
297
297
  | EV-2 | Eval task set: 25 or more real tasks with hidden tests (augmentiq, public issues with merged-fix tests, quickstart briefs) | eval/loki10/tasks/ | HIGH | python3 eval/loki10/harness.py validate eval/loki10/tasks/*/ | released@2026-09-28T01:11Z | 29 tasks (augmentiq 1: the repo has only 3 issues; public 14; quickstart 14); re-review APPROVE (every public task red at ref, green at fix); on main 51b37c6f. Released v9.80.1 (npm view loki-mode time: 2026-09-28T01:11:53Z). |
298
298
  | EV-3 | Eval arm config isolation: fresh CLAUDE_CONFIG_DIR per run, one credential passed only to the arm | eval/loki10/harness.py (arm_env, arm_auth), test-harness.sh leg 12, README | HIGH | bash eval/loki10/test-harness.sh | released@2026-09-28T01:11Z | 451ba56c; security review CONCERN (test could not catch a leak) fixed: M1/M2/M4 leak mutations each red; merging into EV-1 branch. 451ba56c (merged via EV-1 branch); main 694866fc. Released v9.80.1 (npm view loki-mode time: 2026-09-28T01:11:53Z). |
@@ -346,7 +346,7 @@ set is declared to avoid overlap with those and with each other.
346
346
  | E-60 | Secret-scan guard before push: scripts/local-ci.sh fast tier runs gitleaks v8.30.0 with .gitleaksignore over origin/main..HEAD when the binary is present (SKIP line, not green, when absent); fixtures must build secret-shaped strings at runtime; entry in docs/v10/GUARDS.md | scripts/local-ci.sh (one step), tests/test-local-ci-gitleaks.sh, docs/v10/GUARDS.md | MEDIUM | bash tests/test-local-ci-gitleaks.sh: a commit adding a planted AKIA fixture fails the step; the same fixture built by concatenation passes | released@2026-09-28T02:38Z | Source: incident 00:45Z. Security Audit gitleaks failed on 9dc0b1d3 and 085306ae (3 findings: deep.test.ts aws-access-token, test-engine10-push-gitlab.sh gitlab-pat, rule_of_two.test.ts generic-api-key, all synthetic), so v9.79.0 and v9.80.0 never reached npm (npm view loki-mode version = 9.78.0). Baselined in 5190756f; local full-history scan shows only local-branch copies. Dispatched. Merged 3ab2a8fa (train E14, rebased on main): engine10 404 pass 0 fail (402 pass 0 fail with claude removed from PATH), tsc exit 0, test-harness 86/0, test-local-ci-gitleaks 6/0, test-engine10-dist 18/0. Released v9.81.0 (npm view loki-mode time: 2026-09-28T02:38:54Z). |
347
347
  | E-61 | A session that exits with an error fails its stage (implement reported done after exit "error" in 1s with 0 tokens) and its stderr tail is kept under the run dir for diagnosis | loki-ts/src/engine10/session.ts (stderr capture only), loki-ts/src/engine10/stages/implement.ts, loki-ts/src/engine10/stages/plan.ts, tests | HIGH | cd loki-ts && bun test tests/engine10/; a stub provider exiting 1 yields stage.failed with the stderr tail path | released@2026-09-28T16:03Z | Source: incident 01:38Z (EV-8 0/5 twice). Opus reviewer. Overlaps E-68 (exit classification) and E-69; builder of E-68 covers the stage-failure part. Wave E19, after E-68 landed (ea288330). D33: states its net core line delta; core must stay under 5,000 (92 lines of headroom shared by E-67, E-66, E-61, M-14, merge order E-67, E-66, E-61); offset any excess by deleting dead core code. Built b5f9f7fe (branch slice-E-61) at 04:30Z; its Opus review died on the 04:48Z access outage. Needs review only; D33 core delta must be checked. Wave E21 (wf_39ab3f7d-8f3). Opus review. Opus APPROVE of b5f9f7fe; merged into train E22 (9042e964): `bun test tests/engine10/` 547 pass 0 fail, tsc 0, `bash tests/test-v10-pulse.sh` 107 passed, `bash eval/loki10/test-harness.sh` 108 passed. Released in v10.2.1 (npm publish 2026-09-28T16:03Z; every cited commit is an ancestor of the v10.2.1 tag; `git merge-base --is-ancestor`). |
348
348
  | E-62 | Eval harness v10 arm defaults to this repo's bin/loki (never the global loki, which was v9.78.0) and the manifest records its path and the agent SDK version; local-ci and the harness refuse when loki-ts/node_modules differs from bun.lock | eval/loki10/harness.py (loki_bin default, manifest), scripts/local-ci.sh (one check), eval/loki10/test-harness.sh (one leg) | HIGH | bash eval/loki10/test-harness.sh; a leg asserts the v10 arm binary is the repo bin/loki | released@2026-09-28T16:03Z | Source: incident 01:38Z. Wave E19, after EV-13 landed (ea288330). Built 3e8f6dc8 (branch slice-E-62). Opus REJECT (reproduced): the new lockfile check in scripts/local-ci.sh is not in _FAST_KEEP, so the fast tier (the only gate) skips it. Next: rework. Wave E21 (wf_39ab3f7d-8f3). r2. r2 3e4f489c Opus APPROVE; conflicts in eval/loki10/test-harness.sh with EV-11a. Next: one engineer rebases EV-11b first, then E-62, onto main. r3 30047e4e Opus APPROVE (includes EV-11b-r2); merged locally; `bash eval/loki10/test-harness.sh` 114 passed 0 failed, validate all ok. Released in v10.2.1 (npm publish 2026-09-28T16:03Z; every cited commit is an ancestor of the v10.2.1 tag; `git merge-base --is-ancestor`). |
349
- | E-63 | Pulse STALE_PROGRESS violation when the newest PROGRESS.md entry is over 35 minutes old | scripts/v10-pulse.sh, tests/test-v10-pulse.sh | MEDIUM | bash tests/test-v10-pulse.sh | approved@2026-09-28T02:50Z | Source: Loki 01:49Z (PROGRESS.md was 100 minutes stale). Built 67c6b8ac, TL APPROVE; train E17 test-v10-pulse 95/0. |
349
+ | E-63 | Pulse STALE_PROGRESS violation when the newest PROGRESS.md entry is over 35 minutes old | scripts/v10-pulse.sh, tests/test-v10-pulse.sh | MEDIUM | bash tests/test-v10-pulse.sh | released@2026-10-03T09:21Z | on main f4876505c; first tag v10.0.0 (drift audit 09:24Z) |
350
350
  | E-64 | Lean small path and model cascade (D31): small tasks get one sonnet implement session with the cached repo map, impacted tests, PR; no plan or Wall unless no relevant tests; opus only on a test failure, reason logged; cost per call type | loki-ts/src/engine10 (implement, fix, plan, wall, sizing, session) | HIGH | cd loki-ts && bun test tests/engine10/; then EV-8 5-task measurement | released@2026-09-28T21:01Z | Source: D30, D31. Opus REJECT (47f0d33a): a non-escalated fix round still runs on the top model while the event says no escalation; does not merge onto main. Rework dispatched. Rework APPROVE (branch worktree-wf_4601e7b3-4d8-1: 70bae9be, db2c104f, 01ff7737): non-escalated fix rounds run on the cheap model and the event records the real model. Not merged; must be re-measured (full small arm) before it becomes the default. Merged c9c15f38 (trainE18), session.ts conflict with E-68 resolved to the 30s heartbeat; `bun test tests/engine10/` 444 pass. Still behind the gate: re-measure before default. Released in v10.5.0 (merge c9c15f38 is an ancestor of v10.5.0). |
351
351
  | E-65 | Session token diet: find and cut what makes one v10 session cost more than raw claude -p on the same task and model | loki-ts/src/engine10, engine10-only flag in loki-ts/src/runner if needed | HIGH | before/after token table on one task, then the EV-8 5 tasks | merged@2026-09-28T02:38Z | Source: EV-8 variant C (a sonnet session $0.155 to $0.32 vs raw opus $0.216 per whole task). Built 92e3c06c: engine sessions 6 tools, no legacy append, no MCP, settingSources project; prefix 20.4k -> 7.1k tokens; 5 tasks on claude-sonnet-5 v10 4/5 $0.1523 per completed vs raw 4/5 $0.2113. Opus CONCERN: M5 (tools spread removed) and M6 (noAppend ignored) survive 1345 tests; rework sent (query()-level assertion, rebase). Opus APPROVE on rework c9a90cce (M5, M6, M7, M8 all red; runner plus engine10 1347 pass 0 fail, also without claude on PATH). Merged 8b76fd9a with dist rebuilt. EV-8 D (opus, lean, no plan or Wall) 4/5 $0.1571 per completed p50 28s; E (sonnet, lean) 4/5 $0.1519 p50 27.5s; raw opus on the same 5 tasks 5/5 $0.2161 p50 41s (~/loki-ci-logs/ev8r-{D,E}/results.jsonl). |
352
352
  | EV-11 | Medium eval tier: 15 multi-file tasks with hidden tests, tier field and --tier selection | eval/loki10/tasks/, eval/loki10/harness.py, run.sh | HIGH | python3 eval/loki10/harness.py validate; no-op baseline grades 15 not completed, 0 invalid | released@2026-09-28T21:01Z | Source: D30. Opus CONCERN: 3 of 15 medium tasks verified (ea04f1e0). Rework dispatched to finish the 15. Rework (branch worktree-wf_4601e7b3-4d8-2, head 5718225a): 4 of 15 medium tasks verified (pub-attrs-1313, pub-click-2869, pub-faker-1817, pub-jinja-1413). Opus CONCERN: 11 tasks still missing; leads in eval/loki10/tasks/INDEX.md. Wave E18 rework: 11 missing medium tasks, branch slice-EV-11-medium-15. Opus REJECT: pub-werkzeug-3121 hidden test not verbatim as claimed; pub-werkzeug-3105 grades a feature deletion as completed. Rework wave E19. Rework r2 f7cf7b58 (branch slice-EV-11-r2). Opus REJECT (reproduced): pub-faker-1817 grades a feature deletion (uniqueness tracking removed) as completed. Next: per-task deletion-mutant audit. Wave E21 (wf_39ab3f7d-8f3). Split EV-11a/EV-11b by task, per-task deletion-mutant audit. EV-11a (02e68591, Opus APPROVE) merged into train E22 (9042e964): `bun test tests/engine10/` 547 pass 0 fail, tsc 0, `bash tests/test-v10-pulse.sh` 107 passed, `bash eval/loki10/test-harness.sh` 108 passed. EV-11b (39ee810b, Opus APPROVE) conflicts with EV-11a in harness.py and test-harness.sh (each resolved the EV-11-r2 merge separately); rebase onto main next. EV-11b r2 0d601f64 Opus APPROVE, merged with E-62-r3; gitleaks v8.30.0 dir scan of eval/loki10/tasks finds only the known pub-werkzeug-3271 pin. Released in v10.5.0 (merge d25f9d43 is an ancestor of v10.5.0). |
@@ -387,7 +387,7 @@ set is declared to avoid overlap with those and with each other.
387
387
  | E-67 | No pause state: unfinishable runs end as a draft PR or an issue comment with the reason within the cap; stdin never read | loki-ts/src/engine10 (machine, supervisor, worker, escalate, session) | HIGH | a stub provider that asks for input ends within the cap with a draft-PR or comment argv | released@2026-09-28T21:01Z | Source: D32. Opus REJECT (reproduced): a hung worker ended FAILED with no draft PR and no comment, after the cap. Rework dispatched. Rework ba679f4e (branch worktree-wf_b707f4ab-24f-2). Opus REJECT: at the default cap the supervisor backstop fires before the worker cap can seal; concern: the diff check misses untracked files and uncommitted work never reaches a PR. Next: rework. Held, no builder since 03:20Z (row was stale, not running). Dispatch after E-61 (session.ts) and the E-66 rebase (supervisor.ts) merge, from rework ba679f4e plus the Opus findings above. D33: states its net core line delta; core must stay under 5,000 (92 lines of headroom shared by E-67, E-66, E-61, M-14, merge order E-67, E-66, E-61); offset any excess by deleting dead core code. D33 update 14:50Z: E-66 and E-61 merged first, core is 4,998 (1 line of headroom); E-67 must be net core negative. r3 Opus REJECT (reproduced): backstopMs = max(0, capS-30)*1000 is 0 when capS <= 30, so the worker is killed at spawn. Next: rework. Wave E26 (wf_9ba5fcaf-75a). Round 5. r5 3e38cd13 opus CONCERN with no blocking: file set widened by the CoS to include autonomy/lib/engine10-push.sh, tests/test-engine10-push.sh and loki-ts/src/engine10/types.ts (earlier opus-reviewed rounds); behaviour note: caps under about 24.8s now go straight to commit, seal and PR. Merged d4a2c620: `bun test tests/engine10/` 632 pass 0 fail, tsc 0, dist 18 passed, push 40 passed; core 4,976 (escalate.ts deleted). Released in v10.5.0 (merge d4a2c620 is an ancestor of v10.5.0). |
388
388
  | E-68 | Per-call deadline at the stage limit, progress every 30s, every exit code classified (125, 143 included), never "cause not classified" | loki-ts/src/engine10/session.ts, failures.ts | HIGH | per-code tests plus a grep test | released@2026-09-28T05:00Z | Source: D32. Opus REJECT (reproduced): a real limit kill reports "exit 143 (SIGTERM)" because the session child traps SIGTERM; the stub test missed it. Rework dispatched. Rework APPROVE (branch worktree-wf_b707f4ab-24f-3: 4dd05bf9, 922bd923): a limit kill is classified from the engine, not the child exit code. Not merged yet. Merged c9c15f38 (trainE18); engine10 `bun test tests/engine10/` 444 pass 0 fail. Released in v10.1.0 (npm publish 2026-09-28T05:00Z; every cited commit is an ancestor of the v10.1.0 tag; `git merge-base --is-ancestor`). |
389
389
  | E-69 | Cost shows "not measured" (or partial), never $0 when unmeasured | output.ts, pr_body.ts, seal.ts, status.ts, dashboard/page.ts, cost.ts | MEDIUM | output and receipt tests for measured, partial, unmeasured | released@2026-09-28T05:00Z | Source: D32 (EV-8 printed $0.00 with 0 tokens). TL CONCERN: genuine-zero test never exercises it; partialCost bypasses the tamper guard; dashboard lacks the partial detail. Rework dispatched. Rework APPROVE (branch worktree-wf_b707f4ab-24f-4: b9825c4c, f42a2aee, 5c66dc55). Not merged yet. Merged c9c15f38 (trainE18); engine10 `bun test tests/engine10/` 444 pass 0 fail. Released in v10.1.0 (npm publish 2026-09-28T05:00Z; every cited commit is an ancestor of the v10.1.0 tag; `git merge-base --is-ancestor`). |
390
- | E-70 | Dashboard shows its and the CLI's version, warns on mismatch; loki dashboard replaces an older Loki dashboard on its port, leaves a non-Loki listener alone | loki-ts/src/engine10/dashboard/ | MEDIUM | version, mismatch, replace and refuse tests | approved@2026-09-28T02:40Z | Source: D32. Built 1397a1f8, TL APPROVE. Merges in the next train. |
390
+ | E-70 | Dashboard shows its and the CLI's version, warns on mismatch; loki dashboard replaces an older Loki dashboard on its port, leaves a non-Loki listener alone | loki-ts/src/engine10/dashboard/ | MEDIUM | version, mismatch, replace and refuse tests | released@2026-10-03T09:21Z | on main 9d0e7b04d; first tag v10.0.0 (drift audit 09:24Z) |
391
391
  | E-71 | Pulse UNEVIDENCED_CLAIM treats M-NN rows like S/E/EV rows (only status and notes cells can claim), so an M row's spec cell never flags | scripts/v10-pulse.sh (the row-id regex in check_unevidenced_claims only), tests/test-v10-pulse.sh | LOW | bash tests/test-v10-pulse.sh; a case with an M row whose Wall cell says "green" is not flagged, and its notes cell still is | released@2026-09-28T05:00Z | Source: pulse flagged M-14 (8f4dc965) for its title "green base is an error", a spec, not a claim. TL APPROVE (sonnet): red without the fix (95 passed 1 failed), `bash tests/test-v10-pulse.sh` 96 passed 0 failed on main. Released in v10.1.0 (npm publish 2026-09-28T05:00Z; merge commit 172bec99 is an ancestor of the v10.1.0 tag, not of v10.0.1). |
392
392
  | E-72 | release.sh --bump-only leaves a dist bundle unchanged when only its debugId differs (no churn in cockpit.js on a version bump) | scripts/release.sh (dist step only), tests/test-release-bump-only.sh | LOW | bash tests/test-release-bump-only.sh | released@2026-09-28T16:03Z | Source: v10.0.1 bump rewrote cockpit.js and .map with only a new debugId; the Release Manager reverted them by hand. TL APPROVE (sonnet): red on pre-fix release.sh (3 passed 3 failed), `bash tests/test-release-bump-only.sh` 6 passed 0 failed on main; registered in run-all-tests. Released in v10.2.1 (npm publish 2026-09-28T16:03Z; every cited commit is an ancestor of the v10.2.1 tag; `git merge-base --is-ancestor`). |
393
393
  | E-73 | Guard (D26): no test writes a hardcoded "far-future" latest version that the current VERSION can overtake; derive it from VERSION instead | tests/test-no-stale-future-version.sh, docs/v10/GUARDS.md (one entry) | LOW | bash tests/test-no-stale-future-version.sh; red on a fixture test that writes latest 9.99.0 against VERSION 10.0.1 | released@2026-09-28T05:00Z | Source: incident 898fa081, v10.0.0 blocked from npm by latest=9.99.0 in tests/test-start-update-hint.sh (fixed 306b6b0c). TL APPROVE (sonnet); `bash tests/test-no-stale-future-version.sh` RESULT: PASS on main; registered in run-all-tests. Released in v10.1.0 (npm publish 2026-09-28T05:00Z; merged with E-71 in train 983dda58, an ancestor of v10.1.0, not of v10.0.1). |
@@ -405,7 +405,7 @@ set is declared to avoid overlap with those and with each other.
405
405
  | EV-12A | Large tasks from real upstream PRs, pool pallets/* (werkzeug incl. #3005/#3006, flask, jinja, click): at least 2 | eval/loki10/tasks/lg-<repo>-<issue>/, eval/loki10/refdiff/lg-<repo>-<issue>.diff (own tasks only) | MEDIUM | per task: measure-size --online rc=0; RED at ref, GREEN at merge_sha via run.sh; no-op not completed; full revert and leave-one-file-out mutants fail; validate rc=0 | parked@2026-09-28T22:22Z | Source: D34. Drift audit 22:22Z: no live agent, wave E27 stopped 18:37Z (founder, over budget); parked until restaffed. |
406
406
  | EV-12B | Large tasks from real upstream PRs, pool attrs, more-itertools, packaging, jsonschema, humanize, faker, arrow: at least 2 | same pattern, own tasks only | MEDIUM | as EV-12A | parked@2026-09-28T22:22Z | Source: D34. Drift audit 22:22Z: no live agent, wave E27 stopped 18:37Z (founder, over budget); parked until restaffed. |
407
407
  | EV-12C | Large tasks from real upstream PRs, pool httpx, rich, marshmallow, requests: at least 2 | same pattern, own tasks only | MEDIUM | as EV-12A | parked@2026-09-28T22:22Z | Source: D34. Drift audit 22:22Z: no live agent, wave E27 stopped 18:37Z (founder, over budget); parked until restaffed. |
408
- | EV-12D | INDEX.md large rows and counts; synthetic lg-* noted rejected (D34), legacy moved to M-27 | eval/loki10/tasks/INDEX.md | LOW | measure-size rc=0 over all tiers; large count at least 5 on main; validate rc=0 | ready@2026-09-28T14:55Z | Source: D34. Depends on EV-12S, EV-12A, EV-12B, EV-12C. |
408
+ | EV-12D | INDEX.md large rows and counts; synthetic lg-* noted rejected (D34), legacy moved to M-27 | eval/loki10/tasks/INDEX.md | LOW | measure-size rc=0 over all tiers; large count at least 5 on main; validate rc=0 | blocked@2026-10-03T08:33Z | Builder stopped, no commit: main has 0 large tasks (14 medium, 8 speed); measure-size rc=0, validate rc=0. Needs EV-12F/EV-12G. INDEX Counts line is also stale (omits 8 speed tasks) |
409
409
  | E-83 | P0 fix-forward: main Tests red on 9d483688 (run 36438012977): modernize codemod spawn without env (spawn env guard) and the prStage bundle marker deleted by the E-66 line offset (dist test) | loki-ts/src/engine10/modernize/codemod.ts, loki-ts/src/engine10/stages/pr.ts | HIGH | `bun test tests/runner/spawn_env_guard.test.ts`; `bash tests/test-engine10-dist.sh` | released@2026-09-28T16:03Z | TL APPROVE (sonnet) on 10391f4a, both reverts reproduce red; merged c5ace6e1: full `cd loki-ts && bun test` 2239 pass 0 fail, dist test 18 passed 0 failed, core 4,999. Released in v10.2.1 (npm publish 2026-09-28T16:03Z; every cited commit is an ancestor of the v10.2.1 tag; `git merge-base --is-ancestor`). |
410
410
  | E-84 | Pulse TRAIN_LATE reads the last train push from the reflog of refs/remotes/origin/main (moves on every push and on fetches of others' pushes), then push-*.log, then UNKNOWN | scripts/v10-pulse.sh (last_train_push_epoch only), tests/test-v10-pulse.sh | MEDIUM | bash tests/test-v10-pulse.sh; fixture: temp repo plus bare remote, a real `git push` makes the check read under 1 min with no push-*.log present; no reflog and no logs reads UNKNOWN | released@2026-09-28T16:03Z | Source: founder 15:09Z; TRAIN_LATE read 681.9 min while trains were pushed at 14:42Z and later, because plain `git push` writes no push-*.log. TL APPROVE (sonnet) on eeace3f6: `bash tests/test-v10-pulse.sh` 109 passed 0 failed; against the old pulse 106 passed 3 failed; live pulse after merge reads "Minutes since last train push: 12.1". Released in v10.2.1 (npm publish 2026-09-28T16:03Z; every cited commit is an ancestor of the v10.2.1 tag; `git merge-base --is-ancestor`). |
411
411
  | E-85 | Security Audit: a narrowly scoped gitleaks allow rule for 40-hex commit pins in eval task.json (repo.ref, merge_sha) so pinned upstream SHAs stop tripping sourcegraph-access-token; CTO approval required (posture: no blanket suppressions) | .gitleaks.toml (or the workflow config), .github/workflows/security-audit.yml | HIGH | a fixture task.json with a 40-hex ref passes; the same string in any other file or key still fails | parked@2026-09-28T21:14Z | Source: v10.2.0 Release 36440534050 blocked by a pinned werkzeug SHA; EV-11b and EV-12A/B/C add more pins. Wave E27 (wf_bcacb1d1-e76). CTO-level opus review. Wave E27 stopped 18:37Z (founder: over budget, load 50). Build 1 commit on slice-E-85-gitleaks-pins, never reviewed. Parked 21:14Z: a regex allow rule for commit-pin shapes conflicts with the exact-fingerprint-only allowlist policy (security rule: no path or rule suppression). Pins are allowlisted per fingerprint with a reason, as done for werkzeug (82e39c29) and E-101 (6358e0a6). |
@@ -483,7 +483,7 @@ set is declared to avoid overlap with those and with each other.
483
483
  | S41-10b | Static-first fixed-rules block for the implement and fix briefs (S41-10 card remainder): a byte-identical rules block in the cache-stable prefix, per-task context after it; drive-letter and ~ plan paths filtered like absolute ones | loki-ts/src/engine10/stages/implement.ts, fix.ts (prefix only), loki-ts/src/e10ext/context.ts and tests | MEDIUM | red first: two different tasks produce byte-identical prefix bytes; core net-zero lines | merged@2026-09-30T19:19Z | Source: S41-10 reviews (APPROVE r2, remainder). |
484
484
  | S41-20h | Medium-task MINING pass (no task building): shortlist 12 candidate merged PRs whose shape survives the one-file probe (a semantic or signature change in file A that an independently tested caller in file B must match; not helper extraction, parameter threading, moved classes or typing-only files), each with a written one-file-fix attempt run against the upstream tests and its result | eval/loki10/tasks/CANDIDATES.md (new) | MEDIUM | every shortlisted PR has a failing one-file attempt recorded with command and rc | merged@2026-09-30T19:19Z | Source: S41-20b/c/d/e/f: 11 of 16 candidates fell to a reviewer one-file fix; S41-20f built 0. |
485
485
  | D44-A | Green main by construction: scripts/train-promote.sh fast-forwards main only to a train SHA with green Tests, Bun Parity and Coverage; pre-push refuses a push to main unless it is Tier B green, a VERSION-only bump on a green parent, or docs-only (LOKI_D44_EMERGENCY override logged) | scripts/train-promote.sh, .githooks/pre-push, tests/test-train-promote.sh, docs/v10/TRAINS.md | HIGH | bash tests/test-train-promote.sh | parked@2026-09-30T20:04Z | Source: D44 item 1. PARKED 20:05Z by the adoption directive (docs/v10/PROGRESS.md 20:05Z); resumes after Tier 0 is green. |
486
- | D44-B | Pulse RELEASE_CADENCE (green unreleased main commit older than 20 min) and MAIN_RED_BY_MERGE; hourly releases per hour into METRICS.md | scripts/v10-pulse.sh, scripts/metrics-releases-append.py, pulse tests | MEDIUM | the pulse test file plus the metrics script self-test | building@2026-09-30T18:11Z | Source: D44 items 5 and 6. |
486
+ | D44-B | Pulse RELEASE_CADENCE (green unreleased main commit older than 20 min) and MAIN_RED_BY_MERGE; hourly releases per hour into METRICS.md | scripts/v10-pulse.sh, scripts/metrics-releases-append.py, pulse tests | MEDIUM | the pulse test file plus the metrics script self-test | parked@2026-10-03T09:21Z | drift audit 09:22Z: building since 2026-09-30 with no live builder or commit; parked, re-slice if still wanted |
487
487
  | D44-C | Structural checks under 10 s each (shard rows, hardcoded paths, registration, doc drift, line budgets) as scripts/structural-checks.sh, run first in Tier A (also on train/** push) and in the local-ci fast tier | scripts/structural-checks.sh, .github/workflows/tier-a.yml, scripts/local-ci.sh, tests/test-structural-checks.sh | MEDIUM | bash tests/test-structural-checks.sh | merged@2026-09-30T18:27Z | Source: D44 item 3; four red mains on 2026-09-30. |
488
488
  | S41-20d | Medium tier growth batch d: 4 new tasks from unused repos under the 2026-09-30 opus criteria (2 behavioral files, not fixed at ref, wrong-fix rejected, solvable from issue, refdiff, provenance) | eval/loki10/tasks/pub-* (new), refdiff, INDEX.md | HIGH | measure-size rc 0 and validate rc 0 on the new tasks | rejected@2026-09-30T18:49Z | Source: D43 item 2 (medium at 12 of 20). |
489
489
  | S41-20e | Medium tier growth batch e: 4 more tasks, repos disjoint from S41-20d | eval/loki10/tasks/pub-* (new), refdiff, INDEX.md | HIGH | as S41-20d | released@2026-09-30T19:22Z | Source: D43 item 2. Released in v10.5.8 (merge 5cdbdc7b is an ancestor of v10.5.8). |
@@ -606,8 +606,8 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
606
606
  | A-04 | loki-seal: a Claude Code skill plus hook that runs the repo's real test suite on the current diff, refuses done on red or on deleted, skipped, xfailed or weakened tests or CI config (diff scan plus a tree hash of existing tests), prints a 5-line receipt; zero model cost, no dangerous flags; self-contained, no LICENSE file; SUBMIT.md drafts only; a 20-second vhs or asciinema script | packages/loki-seal/** | HIGH | fixture repos: deleting a failing test is blocked; a real fix passes; each weakening class caught | released@2026-10-01T00:52Z | Tier 1 wedge; answers issue #42. Released in v10.5.13 (merge a61e1721 is an ancestor of v10.5.13). |
607
607
  | A-04b | loki-seal follow-ups from opus r5: reset the hook-error counter after a successful stop; fall back to stop_hook_active repetition when the tmpdir is read-only or full; tests must write loki-seal-err-* counter files under LOKI_RUN_TMP, not the real os.tmpdir() | packages/loki-seal/** | MEDIUM | package tests plus demo dry-run; no files left in the real tmpdir after the suite | merged@2026-10-01T08:56Z | Source: A-04 opus r5 APPROVE notes. |
608
608
  | A-09 | README under 150 lines (directive item 9): line 1 "Your agent says done. Loki proves it." (veto pending, founder queue 10); line 2 "An autonomous software factory that knows what it is supposed to deliver, and proves it did." (D45); then the loki-seal 20-second GIF (placeholder until recorded), then two install lines (loki-seal first, `npx loki-mode tour` second); flags, internal paths, version stamps and app-builder comparisons move to docs; remove the commercial-editions sentence from the top and the npm total-downloads and Docker pulls badges; define "Seal" in one sentence or stop using the word; package.json description and SKILL.md description use line 2 verbatim (SKILL.md header and footer version rules still apply) | README.md, docs/ (moved sections), package.json (description only), SKILL.md (description only) | MEDIUM | README <= 150 lines; no retracted claims (directive Never list); structural checks (SKILL.md sync, readme version) pass | released@2026-10-01T00:52Z | Source: directive item 9 plus D45. Released in v10.5.13 (merge 38ffd386 is an ancestor of v10.5.13). |
609
- | A-04c | loki-seal reads the delivery contract (D45): from the task or issue the user gave the session (prompt text, a linked issue, a spec file), derive the acceptance checks and refuse "done" until the checks tied to that request pass, not only "the suite is green"; when no contract can be derived, say so on the receipt (NOT VERIFIED: no contract) instead of passing on green alone. Design first (how the hook sees the user request: transcript_path from the hook input, first user message), then build; zero model cost stays a constraint | packages/loki-seal/** | HIGH | fixtures: a session asking for behavior X with a green suite that never tests X is NOT VERIFIED; with a test for X passing it PASSes | building@2026-10-03T08:24Z | r1 d07db333e opus BLOCK: B1 contract blocks drain the shared valve (later skip regression released), B2 conversational/README items block, B3 assertion-free test satisfies item; r2 building |
610
- | A-103b | Seal lists each discarded Wall test in not_proven as "wall test discarded: <path> (<class>)" (A-103 kept seal.ts out of its file set; today only a count appears via base_run not_run) | loki-ts/src/engine10/stages/seal.ts, its test | HIGH | fixture: a discarded Wall file appears by path in not_proven | building@2026-10-03T08:22Z | sonnet builder on main 76b6c58ff (SPEC-F2 seal.ts merged first) |
609
+ | A-04c | loki-seal reads the delivery contract (D45): from the task or issue the user gave the session (prompt text, a linked issue, a spec file), derive the acceptance checks and refuse "done" until the checks tied to that request pass, not only "the suite is green"; when no contract can be derived, say so on the receipt (NOT VERIFIED: no contract) instead of passing on green alone. Design first (how the hook sees the user request: transcript_path from the hook input, first user message), then build; zero model cost stays a constraint | packages/loki-seal/** | HIGH | fixtures: a session asking for behavior X with a green suite that never tests X is NOT VERIFIED; with a test for X passing it PASSes | merged@2026-10-03T09:40Z | 25ea817d6..4c597cc35 (5 rounds cherry-picked; CHANGELOG deduped b3f162d61). Opus r5 APPROVE: N1-N7 closed, seal suite 72/72 on main. Advisory A1 forged runner lines and A3 Known-limits gap filed as A-04d. |
610
+ | A-103b | Seal lists each discarded Wall test in not_proven as "wall test discarded: <path> (<class>)" (A-103 kept seal.ts out of its file set; today only a count appears via base_run not_run) | loki-ts/src/engine10/stages/seal.ts, its test | HIGH | fixture: a discarded Wall file appears by path in not_proven | merged@2026-10-03T08:37Z | main d34a2d519, opus HIGH APPROVE (2 mutations red, engine10 1166/0); dist rebuilt, guard 13/0, seal 54/0. Non-blocking: filter runDir/wall on WALL_PREFIX; not_run suffix assumes the wall.ts removal rule |
611
611
  | A-101 | Receipt canonicalization and verify help (item 1) | see docs/v10/ADOPTION-PLAN.md A-101 | HIGH | first-run-gate assertion per plan card | released@2026-09-30T21:23Z | Wave per plan section 5; one writer per file. Released in v10.5.11 (merge 5ea92836 is an ancestor of v10.5.11). |
612
612
  | A-102 | Test-runner detection: node:test plus fixtures for all six runners (item 1) | see plan A-102 | HIGH | first-run-gate assertion per plan card | released@2026-10-01T00:52Z | Wave per plan section 5; one writer per file. Released in v10.5.13 (merge 0990afb8 is an ancestor of v10.5.13). |
613
613
  | A-104 | Commit only the fix (items 1 and 2, v10) | see plan A-104 | HIGH | first-run-gate assertion per plan card | released@2026-09-30T21:23Z | Wave per plan section 5; one writer per file. Released in v10.5.11 (merge d86a5817 is an ancestor of v10.5.11). |
@@ -615,14 +615,18 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
615
615
  | A-104c | A-104b r2 opus follow-up (code reading, not reproduced): a FAILED run now reaches backstopCommit in supervisor.ts (around lines 93-98 and 229), which runs git add -A with hooks off, so a run whose commit stage failed could still commit Wall files, stray lockfiles and the user's pre-run dirty files, and hasDiff could push them as a draft PR (E-67 behaviour). Reproduce first; then make the backstop honor the same exclusions as the commit stage, or skip it when the commit stage itself failed | loki-ts/src/engine10/supervisor.ts, its test | failed-commit run leaves no new commit with Wall files, lockfiles or pre-run dirty files, and opens no PR | HIGH | merged@2026-10-01T10:03Z | none |
616
616
  | D50-F1 | D50 lift fix 1 (aiq-52, expected no_change_needed): v10 printed ALREADY_SATISFIED but left source changes from implement (harness no_source_diff=false), so it scored not completed; raw sonnet checked first and changed nothing. On ALREADY_SATISFIED, restore source to base before commit, PR or seal; fail closed to FAILED if the restore fails | loki-ts/src/engine10 (outcome path), its tests, dist | fixture with implement edits plus ALREADY_SATISFIED ends with an empty diff, no commit, no PR; VERIFIED runs keep changes | HIGH | merged@2026-10-01T11:45Z f391ba33f (r5, opus approved, train/56) | none |
617
617
  | D50-F2 | D50 lift fix 2 (humanize-174): the task changes behaviour that existing tests encode; raw sonnet fixed code and updated the assertions (2/3), v10 BLOCKED as spec conflict or hit the iteration cap (0/3). Needs a design that permits spec-required assertion changes, recorded in the receipt, without opening a test-weakening loophole. Opus architect first | engine10 intake, plan, wall, verify, seal (per design) | humanize-174-shaped fixture completes with the assertion changes listed in NOT PROVEN; a weakening attack still fails | HIGH | rejected@2026-10-01T12:40Z: S1+S2 (71997e6c, a2941555) opus REJECT. Moat holds (any existing-test edit seals PARTIAL). Blocking: the per-spec label fires on any literal swap whose test calls a task word (if True to False, range(10) to range(0), tolerance 1e-3 to 1e3) and drops the weakened-test flag, a false Seal claim. No lift: context.ts:23 still makes tests append-only, so humanize-174 still ends SPEC_CONFLICT. Rework D50-F2r (honest label) building; lift fix D50-F2-S3 needs a CTO call | none |
618
- | D50-F2r | D50-F2 rework, honest label only: label a test value change only on the expected side of an assert comparison or a parametrize expected value, only when the old or new value appears in the task text; wording 'assertion value changed (not shown to be required by the task): file:line old -> new' and keep the 'weakened test' line beside it; exclude control flow, range, tolerances, approx kwargs, decorators | loki-ts/src/e10ext classifier, engine10 verify and seal wiring, tests, dist | probes C D E F G H K from the F2 review all keep 'weakened test'; A labelled only when 5 appears in the task; verdict PARTIAL in every case | HIGH | building@2026-10-01T13:50Z r3 (r2 38d8ffe7 REJECTED: tolerance column never read in the body passes as expected; token boundaries let -25 match 25; required: seal re-check on the committed blob with verify counts) | none |
618
+ | D50-F2r | D50-F2 rework, honest label only: label a test value change only on the expected side of an assert comparison or a parametrize expected value, only when the old or new value appears in the task text; wording 'assertion value changed (not shown to be required by the task): file:line old -> new' and keep the 'weakened test' line beside it; exclude control flow, range, tolerances, approx kwargs, decorators | loki-ts/src/e10ext classifier, engine10 verify and seal wiring, tests, dist | probes C D E F G H K from the F2 review all keep 'weakened test'; A labelled only when 5 appears in the task; verdict PARTIAL in every case | HIGH | parked@2026-10-03T09:21Z | drift audit 09:22Z: r2 rejected, no live builder since 2026-10-01; parked per D68 drop-red; re-open as a fresh slice when D50-F2-S3 is ranked |
619
619
  | D50-F2-S3 | humanize-174 lift: let the implement brief edit an existing assertion only when the task text states the new expected value; verdict stays PARTIAL, never VERIFIED (moat). CTO call needed first: does a PARTIAL spec-required test edit count as the right outcome, and does the brief license weaken the append-only rule (context.ts:23) | loki-ts/src/e10ext/context.ts, verify and wall policy, eval fixture through implement | humanize-174 fixture through implement ends with code fixed and the spec value assertion changed, PARTIAL with an honest note | HIGH | ready (D53 ruled 12:39Z: VERIFIED allowed when the new literal is verbatim in the issue, the edit changes only that literal in an existing assert, and Wall plus other tests pass; PARTIAL never scores completed; red bypass tests for tolerance, if True to False, deleted assert, literal not in issue) | needs D50-F2r |
620
620
  | D50-F4b | D50-F4 hardening from the opus review (non-blocking): validate base from the worker-written event log as ^[0-9a-f]{40,64}$ before any git call, and skip the backstop when log.verify() fails | loki-ts/src/engine10/supervisor.ts or e10ext/commit_filter.ts, tests | a base of --output=x is refused with no git call; a tampered log runs no backstop | merged@2026-10-03T05:14Z | TL APPROVE (3 mutations red, engine10 net 0); cherry-picked cff3d4ab8, dist 159abf6d6, e10ext+supervisor 122/0. Follow-up (non-blocking): invalid raw base records no notProven reason in the supervisor path | none |
621
- | NPM-LAG | CORRECTED 16:14Z: v10.5.34 (ceb6942a) was accepted by npm at 15:37Z with the notice that it was being processed, and appeared in the registry only at 16:05:58Z (about 29 min; gitHead ceb6942a correct). Not a lost publish, a long npm processing delay, while the Release run already showed success. Guard: publish-npm, post-release-smoke and promote wait up to 45 min for the version (registry, no cache) before declaring it missing, and promote re-triggers when it appears, so a delay is never read as a failure or a pass (10.5.34 smoke failed ETARGET during the lag and skipped promote; rerun 16:30Z); train-cycle merges origin/main back into local main after each release (it stalled at 16:20Z with local main behind its own release) and waits on previous version visible; the release captain (train-cycle.sh) refuses the next release while the previous version is missing from npm | .github/workflows/release.yml publish-npm, scripts/train-cycle.sh, tests | a stubbed npm that never lists the version fails the step; train-cycle logs PREV_NOT_ON_NPM and waits | MEDIUM | review@2026-10-03T08:22Z | a=63ef78416 (train-cycle npm wait, 68/0) b=b2397bd7c (release.yml npm wait + D75b LOWs, 67/0); opus review dispatched |
621
+ | NPM-LAG | CORRECTED 16:14Z: v10.5.34 (ceb6942a) was accepted by npm at 15:37Z with the notice that it was being processed, and appeared in the registry only at 16:05:58Z (about 29 min; gitHead ceb6942a correct). Not a lost publish, a long npm processing delay, while the Release run already showed success. Guard: publish-npm, post-release-smoke and promote wait up to 45 min for the version (registry, no cache) before declaring it missing, and promote re-triggers when it appears, so a delay is never read as a failure or a pass (10.5.34 smoke failed ETARGET during the lag and skipped promote; rerun 16:30Z); train-cycle merges origin/main back into local main after each release (it stalled at 16:20Z with local main behind its own release) and waits on previous version visible; the release captain (train-cycle.sh) refuses the next release while the previous version is missing from npm | .github/workflows/release.yml publish-npm, scripts/train-cycle.sh, tests | a stubbed npm that never lists the version fails the step; train-cycle logs PREV_NOT_ON_NPM and waits | MEDIUM | merged@2026-10-03T08:30Z | opus APPROVE both halves (fail-open probes all fail-closed); b=release.yml npm wait, a=train-cycle PREV_NOT_ON_NPM + sync_local_main; suites 68/0, 67/0, 31/0, 63/0 on main. Note: a failed pre-publish Release now halts later releases until acted on (STALE after 45 min) |
622
622
  | D53-Q1 | CTO call before D50-F2-S3: under D53(a) a bug-report task ('Expected 200, got 404') lets a test change to the buggy value pass the literal-only gate; only Wall coverage of that behaviour stops it. Options: require the new literal to sit on the expected side of an expected/should phrase in the task, or require Wall coverage of the edited assertion | docs/v10/DECISIONS.md D53 | ruling recorded | HIGH | released@2026-10-01T14:20Z (ruled in DECISIONS D53 amendment: literal must be the EXPECTED value in the acceptance criteria with a source span; Wall must cover the behaviour; unclassifiable stays PARTIAL) | none |
623
623
  | D50-F4 | aiq-52 diagnosis: on FAILED, backstopCommit runs git add -A and re-stages the commit stage's exclusions (pre-existing dirt, Wall files, stray lockfiles), so a PR with only setup dirt is pushed. Backstop applies the same exclusions; nothing left means no commit and no PR | loki-ts/src/engine10/supervisor.ts, e10ext helper, tests, dist | preexisting-dirty fixture with FAILED: HEAD equals base and no PR; with a run edit the backstop commit holds only that edit; Wall and stray lockfile never committed | HIGH | merged@2026-10-01T13:50Z 8364a03e (ed8caedf, opus APPROVE r2: filter fixture shows no token, hooks, fsmonitor, textconv or ext-diff with the supervisor env; train/61) | none |
624
- | D50-F5 | aiq-52 lift: already_done.ts findEvidence misses compound task keywords (searchbar vs search-command); add deterministic compound-token matching and a same-stem source plus referencing-test category pair; confirmation still must cite a real hit | loki-ts/src/e10ext/already_done.ts, tests, dist | aiq-52-shaped fixture yields a candidate; unrelated keyword, source without referencing test and short prefix yield none | HIGH | building@2026-10-01T13:50Z r3 (r2 f4aa8cc9 REJECTED: derivational suffixes, authorization vs author.ts, productivity vs product.ts; import detection counts strings, comments and docstrings) | none |
625
- | D50-W1 | CTO call (aiq-52 diagnosis): Wall runs in an empty temp cwd (wall.ts:156-169) with a 90s cap, so on brownfield tasks it writes blind tests and was killed twice; options are read-only repo access for Wall, or a longer cap, each weighed against Wall's from-spec independence (moat) | loki-ts/src/engine10/stages/wall.ts | decision recorded in DECISIONS | HIGH | ready@2026-10-01T14:20Z (ruled: Wall sees runner, layout, style examples and public signatures, never bodies or the diff; lift row required) | none |
624
+ | D50-F5 | aiq-52 lift: already_done.ts findEvidence misses compound task keywords (searchbar vs search-command); add deterministic compound-token matching and a same-stem source plus referencing-test category pair; confirmation still must cite a real hit | loki-ts/src/e10ext/already_done.ts, tests, dist | aiq-52-shaped fixture yields a candidate; unrelated keyword, source without referencing test and short prefix yield none | HIGH | parked@2026-10-03T09:21Z | drift audit 09:22Z: r2 rejected, no live builder since 2026-10-01; parked per D68 drop-red |
625
+ | D50-W1 | CTO call (aiq-52 diagnosis): Wall runs in an empty temp cwd (wall.ts:156-169) with a 90s cap, so on brownfield tasks it writes blind tests and was killed twice; options are read-only repo access for Wall, or a longer cap, each weighed against Wall's from-spec independence (moat) | loki-ts/src/engine10/stages/wall.ts | decision recorded in DECISIONS | HIGH | merged@2026-10-03T08:52Z (decided: D77) | none |
626
+ | W1-S1 | D77 manifest builder: pure buildWallManifest returning signatures-only text from the base tree | loki-ts/src/engine10/wall_manifest.ts (new), loki-ts/tests/engine10/wall_manifest.test.ts | TS and Python fixtures: every exported signature present, body canary absent; style example never imports a named module; output 400 lines or fewer; byte-identical for the same tree | HIGH | merged@2026-10-03T10:50Z | d7285daa3..9da5c123f on main (opus APPROVE r7, 51/0, tsc 0); library only, flag not wired; advisory: invalid-TS keyword after decorator leaks, fold into W1-S2 |
627
+ | W1-S2 | D77 wire manifest into Wall cwd and brief; manifest_sha256 on wall.sealed | loki-ts/src/engine10/stages/wall.ts, loki-ts/tests/engine10/wall.test.ts | cwd holds only task.md, repomap.txt, wall_manifest.txt; body and implement-diff canaries never reach cwd or brief; E-54 and D42(3) tests green | HIGH | review@2026-10-03T11:16Z | r2 3803a5e3f: batch fetch by sha only, regular blobs under 200KB, headers verified, fail closed; replace objects off, 5s timeout, manifest out of brief; 98/0, 3 red on r1. Opus re-review running |
628
+ | W1-S3 | D77 size-tied Wall cap: 90s small, 180s normal, env override clamped to 300s | loki-ts/src/engine10/sizing.ts, loki-ts/src/engine10/stages/wall.ts, loki-ts/tests/engine10/sizing.test.ts | small 90, normal 180, 999 clamps to 300, garbage falls back; killed session copies no file; timeout never already_satisfied | MEDIUM | ready@2026-10-03T08:52Z | Source: D77. Shares wall.ts with W1-S2: build after W1-S2 merges. |
629
+ | W1-S4 | D77 lift row: manifest off versus on | docs/v10/METRICS.md | augmentiq#52 plus 2 brownfield tasks, both arms; Wall timeouts, red-on-base count, completion, cost; logs under ~/loki-ci-logs | MEDIUM | ready@2026-10-03T08:52Z | Source: D77. Depends on W1-S2, W1-S3. Real-model leg: parked until Loki confirms key use. |
626
630
  | P0-backstop-refused | A run refused at intake (dirty tracked tree) still runs backstopCommit (git add -A plus commit) on the user's own branch, landing their dirty and untracked files on main; found by the D50-F1b opus review on base 151aa563 | loki-ts/src/engine10/supervisor.ts, its tests, dist | dirty-README fixture: refusal exit, no new commit on main, README still dirty byte-identical, notes.txt untracked | HIGH | merged@2026-10-01T12:25Z 3c46a2b6 (a70f0980; red 22/1, green 953/0; train/57) | none |
627
631
  | D50-F1c | Re-decision 12:35Z: D50-F1 stays in place (r5, released 10.5.30); B (worktree per run, D50-F1b) stays parked until a dependency strategy exists, because a worktree without node_modules or .venv lost a VERIFIED fixture. This slice fixes the in-place gap the F1b review reproduced: SIGINT or SIGTERM leaves the user's checkout on the loki/e10 run branch and can orphan the worker | loki-ts/src/engine10 supervisor (signal path), e10ext helper if needed, tests, dist | SIGINT and SIGTERM mid-run: original branch checked out, worker PID gone, run branch kept; never reset or discard user files | MEDIUM | merged@2026-10-01T12:55Z 027be0eb (e3773291; signal tests red then green, clean-tree guard added on lead review, engine10 956/0; train/58) | none |
628
632
  | D51-B01 | D51 Phase B B01 (flag LOKI_WORKSPACES, docs/v10/D51-PHASE-B.md): Test harness: register `tests/test-workspace.sh`, which sources `tests/workspace/*.sh` parts (each later slice adds only its own part) | tests/test-workspace.sh, tests/run-all-tests.sh, scripts/local-ci.sh, tests/workspace/00-smoke.sh | runner lists the suite; an empty part dir passes 1/0; shellcheck clean | LOW | merged@2026-10-01T12:46Z 12c4a6d3 (28566052, haiku; workspace, registration, shard, drift, v10-ops, shellcheck all rc 0) | none |
@@ -637,13 +641,14 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
637
641
  | D51-B10 | D51 Phase B B10 (flag LOKI_WORKSPACES, docs/v10/D51-PHASE-B.md): Integration runner plus evidence.json (not a Seal) | autonomy/lib/workspace_integration.py, tests/workspace/70-integration.sh | a passing compose stub gives exit 0 and matching SHAs; a timeout is FAILED, never passed; integration_files absent from every engine worktree | HIGH | parked | needs B08 Superseded 04:45Z: delivered by D65-MULTI 5d9e6b341, C8 089ca0e9e, D61-07 6bf2c7799 (workspace.py runner/after/SKIPPED/killpg/integration.json/task_for, worktree_prep lock+deps, cmd_workspace). |
638
642
  | D51-B11 | D51 Phase B B11 (flag LOKI_WORKSPACES, docs/v10/D51-PHASE-B.md): PR comment with the integration result, via the existing gh token path (no LLM in the step) | autonomy/lib/workspace_comment.py, tests/workspace/80-comment.sh | stub gh receives one comment per PR; the token appears in no log or argv | MEDIUM | merged@2026-10-03T04:49Z | needs B09/B10 04:45Z: deps met by worktree_prep.py (D61-07) and workspace.py (D65-MULTI); still unbuilt. Built c09dfd1eb+933ecc9fc; TL APPROVE r2 (r1 BLOCK: CHANGELOG x279, body perms); test-workspace 14/0 on main. |
639
643
  | D51-B12 | D51 Phase B B12 (flag LOKI_WORKSPACES, docs/v10/D51-PHASE-B.md): CLI `loki workspace` subcommand (list, show, run, status, clean) | autonomy/loki, tests/workspace/90-cli.sh | flag off: the command says it is disabled; `clean` never removes a worktree whose branch has an open PR | MEDIUM | parked | needs B08 Superseded 04:45Z: delivered by D65-MULTI 5d9e6b341, C8 089ca0e9e, D61-07 6bf2c7799 (workspace.py runner/after/SKIPPED/killpg/integration.json/task_for, worktree_prep lock+deps, cmd_workspace). |
640
- | D51-B13 | D51 Phase B B13 (flag LOKI_WORKSPACES, docs/v10/D51-PHASE-B.md): Dashboard endpoints reading group.json; run launches a detached runner | dashboard/api_workspaces.py, dashboard/server.py, tests/dashboard/test_api_workspaces.py | the group survives an app restart; non-loopback Host gets 403; control scope required for run | HIGH | ready | needs B07/B08 |
641
- | D51-B14 | D51 Phase B B14 (flag LOKI_WORKSPACES, docs/v10/D51-PHASE-B.md): Dashboard group card (per-repo rows, integration row, stale-evidence badge) | dashboard/static/start.html | Playwright: a fixture group renders 2 repo rows plus integration; a mismatched head SHA shows stale | LOW | ready | needs B13 |
642
- | D51-B15 | D51 Phase B B15 (flag LOKI_WORKSPACES, docs/v10/D51-PHASE-B.md): 10x metric: PRs per wall-clock hour and per attention minute from group.json timestamps | autonomy/lib/workspace_metrics.py, tests/workspace/95-metrics.sh | a fixture group gives the hand-computed rate; unmeasured runs are reported, not counted as zero | LOW | ready | needs B07 |
643
- | D51-B16 | D51 Phase B B16 (flag LOKI_WORKSPACES, docs/v10/D51-PHASE-B.md): Docs plus flag flip after the whole-feature Wall: a 2-repo fixture (lib and app) ends with 2 PRs and integration passed | docs/WORKSPACES.md, tests/workspace/99-e2e.sh | the e2e part passes on CI with the stub provider; one real run is recorded in METRICS.md | MEDIUM | ready | needs all |
644
- | INTEL-1 | Standards-based receipts (competitive intel 2026-10-01): emit the Seal as an in-toto Statement in a DSSE envelope, verifiable by stock tools (in-toto verify, cosign verify-blob) as well as loki verify; V10-VISION names this stack | loki-ts/src/engine10 seal and receipt export, loki keys, tests, dist | a stock tool verifies a real receipt in a test; a tampered envelope fails both the stock tool and loki verify | HIGH | review@2026-10-03T08:23Z | 65a5b8f8a (DSSE in-toto export/verify, Ed25519 PAE); opus HIGH review dispatched |
644
+ | D51-B13 | D51 Phase B B13 (flag LOKI_WORKSPACES, docs/v10/D51-PHASE-B.md): Dashboard endpoints reading group.json; run launches a detached runner | dashboard/api_workspaces.py, dashboard/server.py, tests/dashboard/test_api_workspaces.py | the group survives an app restart; non-loopback Host gets 403; control scope required for run | HIGH | parked@2026-10-03T09:52Z | superseded by D51-B13r (integration.json, no group.json) |
645
+ | D51-B14 | D51 Phase B B14 (flag LOKI_WORKSPACES, docs/v10/D51-PHASE-B.md): Dashboard group card (per-repo rows, integration row, stale-evidence badge) | dashboard/static/start.html | Playwright: a fixture group renders 2 repo rows plus integration; a mismatched head SHA shows stale | LOW | parked@2026-10-03T09:52Z | superseded by D51-B14r |
646
+ | D51-B15 | D51 Phase B B15 (flag LOKI_WORKSPACES, docs/v10/D51-PHASE-B.md): 10x metric: PRs per wall-clock hour and per attention minute from group.json timestamps | autonomy/lib/workspace_metrics.py, tests/workspace/95-metrics.sh | a fixture group gives the hand-computed rate; unmeasured runs are reported, not counted as zero | LOW | parked@2026-10-03T09:40Z | Superseded by PO-WS-METRICS-1 (624b5d964, merged): integration.json timestamps plus workspace_metrics.py. |
647
+ | D51-B16 | D51 Phase B B16 (flag LOKI_WORKSPACES, docs/v10/D51-PHASE-B.md): Docs plus flag flip after the whole-feature Wall: a 2-repo fixture (lib and app) ends with 2 PRs and integration passed | docs/WORKSPACES.md, tests/workspace/99-e2e.sh | the e2e part passes on CI with the stub provider; one real run is recorded in METRICS.md | MEDIUM | parked@2026-10-03T09:52Z | superseded by D51-B16r (flag flip already landed, D63 C8) |
648
+ | INTEL-1 | Standards-based receipts (competitive intel 2026-10-01): emit the Seal as an in-toto Statement in a DSSE envelope, verifiable by stock tools (in-toto verify, cosign verify-blob) as well as loki verify; V10-VISION names this stack | loki-ts/src/engine10 seal and receipt export, loki keys, tests, dist | a stock tool verifies a real receipt in a test; a tampered envelope fails both the stock tool and loki verify | HIGH | merged@2026-10-03T08:35Z | main c3031c9aa, opus APPROVE (14 probes, dsse+verify_cmd 44/0); dist rebuilt, guard 13/0; follow-ups in INTEL-1b |
649
+ | INTEL-1b | INTEL-1 opus non-blocking follow-ups: (1) all-unknown-keyid multi-sig envelope returns UNCHECKED rc 2 not TAMPERED, and document threshold-of-1; (2) export refuses unless outcome VERIFIED or ALREADY_SATISFIED (a FAILED run exports rc 0 today; docs say "a verified v10 receipt"); (3) envelope on the run-id path requires predicate.run_id equal to the run id, or envelopes only via explicit file path; (4) export reads the receipt once and signs the verified bytes; (5) keyid follows receipt kid after rotation | loki-ts/src (dsse export and verify), loki-ts/tests/engine10/dsse.test.ts, CHANGELOG.md, docs | HIGH | red-then-green test per item; dsse+verify_cmd green; dist guard 13/0 | merged@2026-10-03T08:58Z | merged d64de6b5b, 794566ce6 (opus HIGH r2 APPROVE; 71/0, guard 13/0); r2 92775fa58 in opus HIGH re-review (group export fixed, core delta 0); r1 HIGH BLOCK: export read hook leaked into verifyGroup, so a genuine group receipt read as TAMPERED; r2 fixes in progress; opus HIGH review dispatched for d6c8f797f; Source: INTEL-1 opus review 08:35Z. Sonnet builder dispatched; opus HIGH review after |
645
650
  | INTEL-2 | Visible hard cost cap by default: the v10 start line shows the per-run cap; BUDGET_STOP (exit 3) enforces it; loki.yaml budgets.per_run or --max-cost sets it; conservative default with rationale in DECISIONS. Check what already exists first (BUDGET_STOP, LOKI_E10_CAP_S) | engine10 start line and budget path, loki.yaml schema, docs, tests | a run over the cap stops with exit 3 and BUDGET_STOP; the start line names the cap; the default is recorded in DECISIONS | MEDIUM | merged@2026-10-03T04:26Z | none |
646
- | INTEL-3 | Reviewer-first PR body: delivery contract, each acceptance criterion mapped to changed files and the proving check, then NOT PROVEN, readable in 60 seconds | engine10 pr body rendering, tests | a fixture PR body lists every Wall criterion with its file and check; NOT PROVEN last; under a fixed line budget | MEDIUM | building@2026-10-03T08:26Z | r1 18062ed6d TL BLOCK: every criterion shows all Wall files incl failed/unrun as proving; legacy shape not byte-identical (clip/fit); docs claim unwired body ships; r2 building |
651
+ | INTEL-3 | Reviewer-first PR body: delivery contract, each acceptance criterion mapped to changed files and the proving check, then NOT PROVEN, readable in 60 seconds | engine10 pr body rendering, tests | a fixture PR body lists every Wall criterion with its file and check; NOT PROVEN last; under a fixed line budget | MEDIUM | merged@2026-10-03T08:32Z | main 0bab386c2+d4865ed9e, TL r2 APPROVE (3 mutations red); dist rebuilt, guard 13/0, features 91/0 |
647
652
  | D50-F1b | D50-F1 structural follow-up (CTO call B): run engine10 in a worktree on base per run instead of the user checkout, copying uncommitted user edits in via git stash create; run files stay under the user .loki; PR pushes from the worktree branch; removes the restore and pre-existing-dirty class by construction | loki-ts/src/engine10 supervisor, worker, intake, seal/discard, pr, their tests, dist | user checkout byte-identical after any outcome; dirty user edits visible to the run; ALREADY_SATISFIED leaves no diff; VERIFIED opens the PR from the worktree branch | HIGH | parked@2026-10-01T12:20Z: e69eeec2 REJECTED by opus. Blocking: dirty user edits snapshotted into the pushed branch and receipt base; ignored deps (node_modules, .venv, .env) absent in the worktree, VERIFIED fixture STALLED. Rework needs refuse-dirty in main(), start from HEAD, a dependency strategy (CoW clone or install step) and kill cleanup; CTO call | D50-F1 |
648
653
  | A-120 | One signing key, auto-generated (item 3) | see plan A-120 | HIGH | first-run-gate assertion per plan card | released@2026-10-01T00:52Z | Wave per plan section 5; one writer per file. Released in v10.5.13 (merge 1e1417b9 is an ancestor of v10.5.13). |
649
654
  | A-132 | Legacy: no HANDOFF.md, USAGE.md or lockfile in a fix commit (item 2) | see plan A-132 | MEDIUM | first-run-gate assertion per plan card | released@2026-10-01T00:52Z | Wave per plan section 5; one writer per file. Released in v10.5.13 (merge 297c2d1f is an ancestor of v10.5.13). |
@@ -660,7 +665,7 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
660
665
  | E-156 | Incident 22:00Z: pre-push gitleaks (generic-api-key) blocked train/11 on the key FILE NAME string `.loki/keys/receipt-ed25519.pem` (seal.ts:68, seal.test.ts:174, dist/loki.js:1244); no key material. Fixed by exact .gitleaksignore fingerprints, but any future commit that rewrites the minified dist line re-triggers and can block a release push. Durable fix needs a CTO call: a narrow `.gitleaks.toml` allowlist (regexTarget=secret, `^receipt-ed25519\.pem$`, extend defaults) pushed with LOKI_ALLOW_GITLEAKS_CONFIG_CHANGE=1 plus a test that a real key in the same position is still caught | .gitleaks.toml, tests/test-pre-push-gitleaks.sh | HIGH | real-key fixture still flagged; filename allowed | released@2026-10-01T01:19Z | CTO approval (security scan config) Released in v10.5.14 (merge 314b89fe is an ancestor of v10.5.14). |
661
666
  | E-157 | D46: Security Audit verdict reuse. (a) security-audit.yml also runs on push to train/** so every train tip gets the full --all gitleaks scan before main is fast-forwarded; (b) required-ci reuses the parent Security Audit verdict for an eligible VERSION-only bump under the existing eligibility rule (diff is VERSION plus generated version stamps only, parent run success at that exact SHA). Moat test: a non-VERSION-only bump still re-runs Security Audit. Supersedes FOUNDER-QUEUE 14 | .github/workflows/security-audit.yml, release.yml (required-ci), tests | HIGH | non-VERSION-only bump re-runs the scan | merged@2026-10-01T03:03Z | after slice-D46-ci; r3 opus APPROVE 57b511d2; DROPPED from train/21 (D46): STEP 1 re-indent broke S-132 normalizer parity (test-version-bump-only 28/1), reverted 7d1a0f15, r4 with CI-health |
662
667
  | E-159 | Pre-existing secret-scan gaps found by the E-157 r2 opus reviewer: (a) an evil merge, a merge commit whose OWN content adds a secret (merge -s ours --no-commit, token in the merge commit), is invisible to both the PARENT..SHA range scan and the --all scan (only `gitleaks dir` found it); (b) pinned gitleaks 8.30.0 exits 0 when its internal git log fails (invalid range), a latent fail-open. Fix: --diff-merges=first-parent (or -m) in --log-opts for both modes or a working-tree scan at the release SHA; guard `git rev-list RANGE` success or treat `[git] fatal` as failure | scripts/security-audit-gitleaks.sh, workflows, tests | HIGH | evil-merge and bad-range fixtures fail the scan | merged@2026-10-01T03:03Z | CI-health engineer after E-157 r3; r1 opus REJECT 5f33451d: stdin merge scan false-positives on real history (v10.5.13..14 rc 1), Wall checks skip in CI |
663
- | E-160 | D46 runner contention (peer steer 02:11Z): a green train SHA fast-forwarded to main re-runs Tests (8 shards), Bun Parity, Security Audit and First-run gate on the identical SHA, doubling runner load and queueing the next train. Proposal: on push to main, a first job checks for a successful run of the same workflow at the same SHA from a train/** push and, if found, exits success recording the reused run id (D28: same SHA = same tree); any SHA not train-tested runs in full. CTO call FIRST: OPERATING-MODEL says "Tier B full verification on every main commit (never cancelled on main)"; confirm reuse does not weaken Release required-ci, branch-conditional steps (train vs main), or the Security Audit range (base tag config). Sequence after E-157 r4 (same files) | .github/workflows/test.yml, bun-parity.yml, security-audit.yml, tests/test_release_required_ci.py | HIGH | main push of a train-green SHA records reuse and finishes in under 1 min; an untested SHA runs in full; a train-red SHA is not reused | ready@2026-10-01T02:10Z | CTO decision first; after E-157 |
668
+ | E-160 | D46 runner contention (peer steer 02:11Z): a green train SHA fast-forwarded to main re-runs Tests (8 shards), Bun Parity, Security Audit and First-run gate on the identical SHA, doubling runner load and queueing the next train. Proposal: on push to main, a first job checks for a successful run of the same workflow at the same SHA from a train/** push and, if found, exits success recording the reused run id (D28: same SHA = same tree); any SHA not train-tested runs in full. CTO call FIRST: OPERATING-MODEL says "Tier B full verification on every main commit (never cancelled on main)"; confirm reuse does not weaken Release required-ci, branch-conditional steps (train vs main), or the Security Audit range (base tag config). Sequence after E-157 r4 (same files) | .github/workflows/test.yml, bun-parity.yml, security-audit.yml, tests/test_release_required_ci.py | HIGH | main push of a train-green SHA records reuse and finishes in under 1 min; an untested SHA runs in full; a train-red SHA is not reused | released@2026-10-03T09:41Z | Stale ready row: already merged as 943355729 (opus approved, D55) and shipped in v10.6.0. A 09:40Z builder found no diff. |
664
669
  | E-161 | INCIDENT 02:46Z: an opus reviewer ran `git checkout --detach <tag>` x7 plus a `.gitleaksignore` overwrite in the SHARED main checkout (reflog 02:46:04Z to 02:46:38Z). Cause: its run-owned clone dir was deleted, the next `cd` into a new clone failed, and the shell cwd fell back to the main checkout; every later command ran there. Restored by the Chief of Staff (`git checkout main`, fafe50dd, clean). Guard: v10-guard.sh (PreToolUse) blocks `git checkout`/`git switch`/`git reset`/`git worktree remove` and writes to tracked files when cwd resolves to the main checkout and the caller is an agent (not the leader session); agent prompts use `cd DIR` followed by an exit-on-failure check. Test: a hook test with cwd=main checkout blocks a detached checkout and allows it in a worktree | scripts/v10-guard.sh, tests | HIGH | detached checkout in main checkout blocked; same in a worktree allowed | merged@2026-10-01T06:47Z | GUARDS.md entry |
665
670
  | E-162 | Founder "faster" (03:05Z): slice CI runs only Tier A plus diff-selected suites (the existing Tier A selection), Bun Parity and the structural guards; the full 8-shard Tests stays on train/** and main, and the train stays the release verdict. Frees runners and targets about 2 min slice CI | .github/workflows/test.yml (slice-* job matrix only), tests | HIGH | slice-* push runs no 8-shard matrix; train/** and main still run all 8 shards; a slice touching a suite runs that suite | merged@2026-10-01T05:22Z | after E-157 r4 (same file) |
666
671
  | E-165 | tests/test-mirofish-integration.sh line 413 runs `autonomy/loki start --no-mirofish` in the repo root: a live autonomous build that ran about 45 min, switched a worktree branch to loki/session-* and committed a docs change (found by DOC-02). Guard: the test must run against a run-owned fixture repo with a stub provider and LOKI_NO_BROWSER=1, never the repo root; add a structural guard that no test launches start/run against REPO_ROOT | tests/test-mirofish-integration.sh, a structural guard | HIGH | the test never runs loki start in the repo root; guard catches a planted case | merged@2026-10-01T06:52Z | P0 guard (D26) |
@@ -689,7 +694,7 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
689
694
  | A-121 | v10 signs and verifies natively (item 3) | see plan A-121 | HIGH | first-run-gate assertion per plan card | released@2026-10-01T00:52Z | Wave per plan section 5; one writer per file. Released in v10.5.13 (merge 08b31271 is an ancestor of v10.5.13). |
690
695
  | A-122 | Delete the GPG signing layer (item 3, deletion) | see plan A-122 | HIGH | first-run-gate assertion per plan card | released@2026-10-01T00:52Z | Wave per plan section 5; one writer per file. Released in v10.5.13 (merge cb738c36 is an ancestor of v10.5.13). |
691
696
  | A-121b | A-121 opus note: a receipt downgrade exits 0. Anyone can edit the body, recompute receipt_sha256 and null the jwt to get UNSIGNED rc 0 on `loki verify`, and the legacy deploy gate refuses UNSIGNED but the v10 verify does not. Decide the signed-by-default policy: once a local key exists, UNSIGNED on a receipt from this machine exits non-zero (or the receipt records its kid outside the hashed body) | loki-ts/src/engine10/verify_cmd.ts, stages/seal.ts, tests | HIGH | downgrade fixture exits non-zero | released@2026-10-01T03:00Z | D47 decided: UNSIGNED exits 3 on both engines (verify_cmd.ts EXIT_BY_VERDICT, autonomy/verify.sh _verify_receipt_digest), --allow-unsigned / LOKI_VERIFY_ALLOW_UNSIGNED=1 accepts with explicit line; update tests/test-engine10-live-pr.sh 115-122; verify never creates a key |
692
- | A-121c | A-121b opus finding B: legacy `loki verify` passes a WELL-FORMED token with an unknown kid at rc 0 (`attestation: UNCHECKED`, `VERDICT: VERIFIED`) with or without the local key; engine10 gives rc 2. A forger can always mint such a token, so on legacy a downgrade-to-foreign-kid is a pass. D47 kept legacy UNCHECKED unchanged because it also covers honest cross-machine verification. CTO call: make legacy UNCHECKED non-zero (parity with engine10 rc 2), now that D48 row 2 adds `loki verify --pubkey` as the honest cross-machine path? Also: a missing .loki/state/last-proof-id.txt makes legacy verify skip the receipt check entirely and pass (pre-existing, A-134) | autonomy/loki (_deploy_receipt_verdict, verify), tests | HIGH | unknown-kid forged token exits non-zero on legacy; honest cross-machine path documented | ready@2026-10-01T02:33Z | CTO decision first; after A-121b |
697
+ | A-121c | A-121b opus finding B: legacy `loki verify` passes a WELL-FORMED token with an unknown kid at rc 0 (`attestation: UNCHECKED`, `VERDICT: VERIFIED`) with or without the local key; engine10 gives rc 2. A forger can always mint such a token, so on legacy a downgrade-to-foreign-kid is a pass. D47 kept legacy UNCHECKED unchanged because it also covers honest cross-machine verification. CTO call: make legacy UNCHECKED non-zero (parity with engine10 rc 2), now that D48 row 2 adds `loki verify --pubkey` as the honest cross-machine path? Also: a missing .loki/state/last-proof-id.txt makes legacy verify skip the receipt check entirely and pass (pre-existing, A-134) | autonomy/loki (_deploy_receipt_verdict, verify), tests | HIGH | unknown-kid forged token exits non-zero on legacy; honest cross-machine path documented | merged@2026-10-03T09:18Z | merged 1a8a9c7bc, 15c0a26eb (opus HIGH r2 APPROVE; receipt-order 38/0, quiet-tail 6/0, deploy-receipt-gate 27/0, exit-codes-documented 19/0) |
693
698
  | A-110 | One named outcome, fixed exit ladder, --json (items 1 and 5) | see plan A-110 | HIGH | first-run-gate assertion per plan card | released@2026-10-01T00:52Z | Wave per plan section 5; one writer per file. Released in v10.5.13 (merge 47ac1ccc is an ancestor of v10.5.13). |
694
699
  | A-112 | Baseline subtract: judge only the delta (item 5) | see plan A-112 | HIGH | first-run-gate assertion per plan card | released@2026-10-01T00:52Z | Wave per plan section 5; one writer per file. Released in v10.5.13 (merge 69f1a910 is an ancestor of v10.5.13). |
695
700
  | A-123 | Doctor: only the selected provider blocks, one Ready line (item 3) | see plan A-123 | MEDIUM | first-run-gate assertion per plan card | released@2026-10-01T00:52Z | Wave per plan section 5; one writer per file. Released in v10.5.13 (merge 275b4fc0 is an ancestor of v10.5.13). |
@@ -725,7 +730,7 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
725
730
  | D65-CONT | D65 D63-9: one container for the Control Plane plus Helm and ECS examples | Dockerfile.control-plane, deploy/helm, deploy/ecs, docs | MEDIUM | merged@2026-10-03T02:28Z | train/81 dd2995153, red on Tests (DEPS rows, fixed dc1fa634f); carried in train/82 e072e47a9. |
726
731
  | D65-SPEC-F1 | D12 should-fix from the HIGH re-review: contract read requires a regular file with a size cap (a FIFO at .loki/contract.json hangs seal), and malformed or unreadable criteria add one NOT PROVEN line instead of being dropped | loki-ts/src/features/contract.ts, tests/features/contract.test.ts | MEDIUM | merged@2026-10-03T03:13Z | Review af6ddde5 2026-10-03T03:03Z; fails closed today, no false VERIFIED. TL APPROVE; 92bf182b4 plus D70 default-on 960f4b57c in train/83 1a63ad156. |
727
732
  | D65-SPEC-F2 | D12 should-fix (design): snapshot or hash .loki/contract.json at intake so the implementing agent cannot edit it before seal | loki-ts/src/features/contract.ts, engine10 intake | HIGH | merged@2026-10-03T08:22Z | opus r2 APPROVE (mutation red 2/18); main 4bf62e271 054caef8b + dist 4088f8cb3 |
728
- | D62-VIS-F1 | D12 should-fix: SIGKILL the dev server process group after a short grace (a SIGTERM-ignoring server survives capture); verifyReceipt requires regular files for evidence_screens (path "." throws EISDIR) | loki-ts/src/features/visual_evidence.ts, tests/features/visual_evidence.test.ts | MEDIUM | review@2026-10-03T03:12Z | Review af6ddde5 2026-10-03T03:03Z. Built 77522987a with D70 default-on; opus review (verifier path) incl. moat base-vs-slice. |
733
+ | D62-VIS-F1 | D12 should-fix: SIGKILL the dev server process group after a short grace (a SIGTERM-ignoring server survives capture); verifyReceipt requires regular files for evidence_screens (path "." throws EISDIR) | loki-ts/src/features/visual_evidence.ts, tests/features/visual_evidence.test.ts | MEDIUM | merged@2026-10-03T10:22Z | merged 95254a6cf a8d9873f9 c5a8743d7 (opus r3 APPROVE; finish() reaps groups every exit, mutation red), dist 0ab093f25 guard 13/0, bun 48/0. Advisories A1 pgid reuse, A2 bg dev server killed at worker exit (follow-up) |
729
734
  | D61-03 | D61 slice 3, lean eligibility without a named file behind LOKI_SPEED | engine10/sizing.ts, features/speed/lean_select.ts, tests engine10/sizing_lean.test.ts | MEDIUM | merged@2026-10-03T03:13Z | TL APPROVE; 999ea6af3 in train/83 1a63ad156. |
730
735
  | D61-09 | D61 slice 9, decomposability check with strict-schema confirm | features/speed/decompose_check.ts, tests engine10/decompose_check.test.ts | MEDIUM | merged@2026-10-03T03:13Z | TL APPROVE; 0393c5a6b in train/83 1a63ad156. |
731
736
  | D61-15 | D61 slice 15, live unit grid (dashboard /g/<group>, Control Plane group_id) | features/speed/group_grid.ts, engine10/dashboard, packages/control-plane runs and drizzle 0001 | MEDIUM | merged@2026-10-03T03:14Z | TL APPROVE plus should-fix (400 on bad encoding); 024a4d16b, 79eac0297 on main for train/84. Add a drizzle 0001 snapshot before the next schema change. |
@@ -741,15 +746,15 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
741
746
  | D63-C1 | CP-AUTH: bearer token on /v1/*, refuse non-loopback without token, Host check | control plane app, docs CONTROL-PLANE | HIGH | merged | Round 2 opus APPROVE; merged with C10 as bdf20587f, 180e1e283 (train 86) |
742
747
  | P0-VERIFY-ARG | loki verify without --pubkey drops args[0] and verifies the latest run (false green, from b073d50a1) | loki-ts/src/engine10/keys_cmd.ts, tests | HIGH | merged@2026-10-03T05:03Z | opus r3 APPROVE (B1 core net +2, B2/B3 mutations red, CLI test 7/0); cherry-picked 02e71bd41..78606f613, dist 7bfa73a64, dist guard 13/0 |
743
748
  | D63-C10 | CONTAINERS: token required in image docs, Helm and ECS | Dockerfile.control-plane, deploy/helm, deploy/ecs, docs | MEDIUM | merged | TL APPROVE 645c35a7f (helm required guard mutation red, 46/0); merged 1b2174fff (train 86) |
744
- | D63-C2 | CP-DEFAULT: Control Plane on by default (loopback) | per card C2 | MEDIUM | approved@2026-10-03T03:55Z | Opus APPROVE 00f6741d9; C2-F 3177c28ba TL APPROVE; C2-F2 3fca6590d (preload guard) TL re-check. Train 86. |
749
+ | D63-C2 | CP-DEFAULT: Control Plane on by default (loopback) | per card C2 | MEDIUM | released@2026-10-03T09:21Z | on main d7a097aca, 61d6ce125, 808d373a6; first tag v10.6.9 (drift audit 09:22Z) |
745
750
  | D63-C5 | ROUTING: slack in Bun allowlist, jira:/linear: refs to v10 | bin/loki, per card C5 | MEDIUM | merged@2026-10-03T03:55Z | TL APPROVE 01a057352; cherry-picked 73b867a91 into train 85. |
746
751
  | D63-C8 | WORKSPACES: parallel workspace runs, missing commands | per card C8 | MEDIUM | merged@2026-10-03T04:12Z | TL APPROVE; cherry-picked onto main (allowlist rows for loki workspace/control dropped), pytest 13 pass, test-workspace rc 0, drift rc 0; on train 85 (2cc94a548). |
747
752
  | D63-C9 | MCP: v10 run/status/verify tools, test wired into a runner | mcp/, per card C9 | MEDIUM | merged@2026-10-03T03:55Z | TL APPROVE bb13eb875; cherry-picked 3e686608e into train 85. |
748
753
  | D63-C12 | STUB-INVOKER: LOKI_CLAUDE_CLI alone selects the CLI invoker | engine10/session.ts, docs FIRST-RUN-GATE | HIGH | rejected@2026-10-03T04:12Z | Opus BLOCK (LOKI_CLAUDE_CLI alone records paid runs as $0 cli-invoker-unmetered). Dropped per D72; explicit LOKI_E10_INVOKER=cli serves the stub gate. |
749
754
  | D61-16-F | D61-16 hardening: explicit spec paths, cwd resolve, containment, 1 MB cap, NUL, no fallback after group throw, relevant_files | features/speed/route.ts, supervisor.ts hook | HIGH | merged@2026-10-03T04:12Z | Round 3 opus APPROVE 9e831f447 (O_NONBLOCK FIFO fix, mutation red); cherry-picked 5c31f4fd1, 544355c63, 7d33a5d75; main moat 4 of 9 rc 0; on train 85. |
750
755
  | D63-C4 | BLOCKED-RESUME: loki answer closes the BLOCKED loop | features/blocked_answer.ts, cli.ts, control-plane answer.ts, docs | MEDIUM | merged@2026-10-03T03:55Z | TL APPROVE 7b24ed66b + bdd5018d7; cherry-picked into train 85 (dist 52c3b0e02). |
751
- | D63-C3 | BASH-FLIPS: bare loki opens the Control Plane; workspace gate flips | autonomy/loki, tests/test-ui-bare-loki.sh, docs/dashboard-guide.md | MEDIUM | approved@2026-10-03T03:55Z | TL APPROVE e41381751 + C3-F 362e9c501 (URL path/query/userinfo reject, [::1] leg, 20/0). Train 86 with C2. |
752
- | D63-C11a | E2E-HARNESS: stub-provider E2E harness, legs 1-4 | scripts/e2e-d65.sh, scripts/e2e-d65/ | MEDIUM | approved@2026-10-03T03:55Z | TL APPROVE 50a75bcfa (legs 1-2 PASS, positive control rc 1; legs 3-4 fail on known C2/C5 bugs). BUG-C slack --port 0 for C6 follow-up. Train 86. |
756
+ | D63-C3 | BASH-FLIPS: bare loki opens the Control Plane; workspace gate flips | autonomy/loki, tests/test-ui-bare-loki.sh, docs/dashboard-guide.md | MEDIUM | released@2026-10-03T09:21Z | on main 06579d2f2, 93cf367d8; first tag v10.6.9 (drift audit 09:22Z) |
757
+ | D63-C11a | E2E-HARNESS: stub-provider E2E harness, legs 1-4 | scripts/e2e-d65.sh, scripts/e2e-d65/ | MEDIUM | released@2026-10-03T09:21Z | on main 84e8d89f9; first tag v10.6.9 (drift audit 09:22Z) |
753
758
  | D63-C11b | E2E-LEGS: stub-provider E2E legs 5-9 (Jira, contract, multi-repo, MCP, containers) and E2E-D65.md section 6 | scripts/e2e-d65/legs/05-09, docs/v10/E2E-D65.md | MEDIUM | merged@2026-10-03T05:53Z | Built c32e7c06c: legs 1-6, 8 PASS; 7 FAIL (BUG-5), 9 FAIL (BUG-6); force-fail rc 1; shellcheck clean. Sonnet TL review dispatched. TL APPROVE (leg 6 PASS, force-fail fails=1, shellcheck 0); cherry-picked. Doc table needs a refresh after BUG-5/BUG-6 land. |
754
759
  | D65-BUG5 | Installed package lacks schemas/loki-yaml.schema.json (package.json files), so `loki workspace run` fails rc=2 outside a source checkout | package.json, a packaged-files test, CHANGELOG | LOW | merged@2026-10-03T05:55Z | Found by C11b leg 7. Builder dispatched from 3c47d0f1a. Fix e2abb9d8f (packaged test 14/1 -> 15/0); TL APPROVE (3 packaging suites green); cherry-picked. |
755
760
  | D65-BUG6 | Dockerfile.control-plane omits loki-ts sources imported by packages/control-plane ingest.ts, so docker build fails Could not resolve | Dockerfile.control-plane, .dockerignore, CHANGELOG | MEDIUM | merged@2026-10-03T05:54Z | Found by C11b leg 9. Builder dispatched from 3c47d0f1a. Fix 33e6508c7; TL APPROVE (rebuilt image, /ready 200, test-control-plane 17/0); cherry-picked. Follow-up D65-BUG6-G: static guard that every loki-ts import in packages/control-plane is COPYed by the Dockerfile. |
@@ -764,7 +769,50 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
764
769
  | D65-BUG7 | E2E leg 7: installed `loki workspace run` exits 1 with 0 receipts after BUG-5 (integration.json now written); expected one run per repo and rc 0 | engineer-determined (autonomy/lib workspace path, tests) | MEDIUM | merged | main b5a0085a0 (cherry-pick of 18ca83dd8); TL APPROVE 07:59Z (mutation red 15/1, restored 16/0); dist guard 13/0; e2e-d65 legs=9 fails=0 |
765
770
  | D63-C6 | SLACK: two-way Slack on by default | features/slack_inbound.ts, docs/slack.md, README | HIGH | merged@2026-10-03T04:15Z | Opus round 2 APPROVE; cherry-picked 1acd2a9a2,4b2c242bd,f02609175, dist fc10b503c |
766
771
  | D63-C6-F | SLACK follow-up: sender allowlist, 64 KB task cap, no local paths in replies, strict --port | features/slack_inbound.ts, docs/slack.md | MEDIUM | merged@2026-10-03T04:25Z | TL APPROVE e8837ffa4 (3 mutations red); cherry-picked 2a404421a, dist 7ad4a44e9 |
767
- | P0-CORE-BUDGET | Core engine10 at 5001 lines after D61-13 (budget.test.ts needs < 5000); remove dead core code | loki-ts/src/engine10 | MEDIUM | building@2026-10-03T04:31Z | Blocks train 86 |
772
+ | P0-CORE-BUDGET | Core engine10 at 5001 lines after D61-13 (budget.test.ts needs < 5000); remove dead core code | loki-ts/src/engine10 | MEDIUM | merged@2026-10-03T10:50Z | 77d879908 cherry-picked c0dee1301; second TL (sonnet) BLOCKED only on stale test pins (test-engine10-dist greps intakeStage/prStage; already_done.test imports intakeStage), CoS repinned c9c377563; engine10 bun 1189/0, budget 27/0, tsc 0, engine10-dist 18/0, dist 500d77e24, guard 13/0 |
768
773
  | P0-CONTROL-LINUX | train/85 ubuntu red: control_default timed out because a repo-root node_modules disables bun auto-install (hono missing) | loki-ts/src/commands/control.ts, loki-ts/tests/commands/control_default.test.ts, CHANGELOG.md | HIGH | merged@2026-10-03T04:56Z | opus APPROVE (reproduced in oven/bun:1.3.13; npm tarball uses bundled dist/server.js so no runtime fetch); cherry-picked 2d6e4a77d, dist 377871c88, dist guard 13/0. Follow-up: frozen-lockfile install of packages/control-plane in CI |
769
774
  | D63-C7 | TRACKERS: Jira and Linear intake polish | features/tracker_intake.ts, docs/trackers.md, README | MEDIUM | merged@2026-10-03T03:55Z | TL APPROVE 5c002ae69; cherry-picked 6fd472e1a into train 85. Advisory: suffix/userinfo/port negative tests. |
770
775
  | P0-D66-FENCE | Fix-forward: lean_select value-imported stages/plan (train 83 Coverage red, run 37092508809) | engine10/relevant_files.ts, stages/plan.ts, features/speed/lean_select.ts | MEDIUM | merged@2026-10-03T03:21Z | TL APPROVE; 53182ff94; budget.test 27/0, typecheck rc 0. |
776
+ | PO-CL-1 | CHANGELOG Unreleased hygiene: drop already-shipped duplicates and the stale trailing [Unreleased] heading | CHANGELOG.md | each bullet at most once across Unreleased and released sections; grep -c "^## \[Unreleased\]" is 0; dash guard passes | LOW | merged@2026-10-03T08:53Z | merged ab4dea609 (TL APPROVE); PO batch 08:53Z. Released sections untouched. |
777
+ | PO-DOC-1 | README: document loki verify --export-dsse and loki workspace list/show/run/status | README.md | grep finds export-dsse and "workspace run"; flags match bash autonomy/loki help workspace | LOW | merged@2026-10-03T08:53Z | merged a85806aaf (TL APPROVE); PO batch 08:53Z (PO-DOC-1 and PO-DOC-2 merged into one README slice). |
778
+ | PO-DOC-3 | release-checklist notes the PREV_NOT_ON_NPM refusal; fix the dangling PLATFORM-SUPPORT reference | docs/dev/release-checklist.md, docs/UNREACHABLE-TESTS.md | grep PREV_NOT_ON_NPM release-checklist >= 1; no missing path named | LOW | merged@2026-10-03T08:53Z | merged 739759155 (TL APPROVE); PO batch 08:53Z. |
779
+ | PO-HELP-1 | CLI help: add loki help answer and --export-dsse to loki help verify | autonomy/loki (help functions only) | help answer exits 0 and shows --text; help verify mentions dsse; bash -n; help tests pass | MEDIUM | merged@2026-10-03T09:24Z | merged ef50958a5 (TL APPROVE; help-no-recursion 9/0 on main, red 7/2 at parent) |
780
+ | SEC-SCAN-1 | tests/test-secret-scan.sh 5/1 on main (real AWS key -> got pass/VERIFIED/0, expected fail/BLOCKED/2) | tests/test-secret-scan.sh and the secret-scan gate it exercises | suite green on main; root cause named (host gitleaks dependence vs real gate regression); no gate weakened | MEDIUM | merged@2026-10-03T09:22Z | merged 04f62ff4e (TL APPROVE; root cause: fixture AKIAIOSFODNN7EXAMPLE is gitleaks-allowlisted; 6/0 with and without gitleaks; mutation 3/3 red) |
781
+ | PO-AUDIT-CLI-1 | S-221 re-cut: python3 dashboard/audit.py verify exits 0 on an empty or pre-hash audit dir though it checked nothing; exit 2 with status not_verified, keep valid field and tip untouched | dashboard/audit.py (_unified_cli verify branch and docstring only), tests/dashboard/test_audit_verify_cli_nothing_checked.py (new), docs/audit-logging.md (exit codes), CHANGELOG.md | python3 -m pytest -q tests/dashboard/test_audit_verify_cli_nothing_checked.py (empty dir 2, valid chain 0, tampered 1, tip on empty dir still 0; red on current main); python3 -m pytest -q tests/dashboard/test_audit_verify_nothing_checked.py; bash tests/test-audit-chain-honesty.sh; bash tests/test-audit-js-suites.sh | MEDIUM | merged@2026-10-03T09:27Z | main db276a24e; TL APPROVE (tampered=1, empty=2 nothing_checked); pytest 11 passed |
782
+ | PO-DASH-HONEST-1 | S-222 + S-223 re-cut: skill-session WebSocket push hardcodes running_agents 0; notification triggers panel says No triggers configured after a failed read | dashboard/server.py (skill-session payload near line 1042 and get_notification_triggers only), dashboard-ui/components/loki-notification-center.js (_loadTriggers and empty branch only), tests/dashboard/test_skill_session_ws_running_agents.py (new), tests/dashboard/test_notification_triggers_unreadable.py (new), dashboard-ui/tests/loki-notification-triggers-error.node.test.mjs (new), CHANGELOG.md | pytest on the two new files red then green (running_agents None when unmeasured, triggers null plus error on a corrupt file, [] on a missing one); node --test dashboard-ui/tests/loki-notification-triggers-error.node.test.mjs (error text lacks No triggers configured, empty list keeps it); python3 -m pytest -q tests/dashboard -k "notification or skill_session" | LOW | merged@2026-10-03T09:30Z | main 99674923f; TL APPROVE; pytest 7 passed, node 3/0 |
783
+ | PO-WEB-COST-1 | S-224 re-cut: web-app Evidence Receipt Cost field and Metrics cost trend show a partly priced run (cost_partial true) as a complete cost | web-app/src/components/EvidenceReceiptPanel.tsx (Cost field only), web-app/src/api/client.ts (ProofDetail cost type and cost/timeline runs type only), web-app/src/pages/MetricsPage.tsx (costTrend only), web-app/src/components/EvidenceReceiptPanel.cost.test.mjs (new), CHANGELOG.md | node --test web-app/src/components/EvidenceReceiptPanel.cost.test.mjs (cost_partial true renders at least $1.20, absent keeps $1.20, partial trend label carries (partial); red before); cd web-app && npx tsc -b rc 0 | MEDIUM | merged@2026-10-03T09:27Z | main 4a429626b; TL APPROVE; node 4/0; shard markers fixed 8106e6a72 |
784
+ | PO-STANDALONE-COST-1 | S-225 re-cut: standalone receipts list shows a partly priced run as a complete cost | dashboard-ui/scripts/build-standalone.js (loadReceipts cost cell only), tests/test-receipts-panel.sh (one new leg), CHANGELOG.md | bash tests/test-receipts-panel.sh rc 0 with the new leg asserting at least $X.XX only when cost_partial is true (red before); bash tests/test-budget-banner-dedup.sh rc 0 | LOW | merged@2026-10-03T09:27Z | main f99c8cc64; TL APPROVE; receipts-panel 21/0 |
785
+ | PO-WEB-DEPLOY-1 | S-228 re-cut: DeployConnections connect and disconnect handlers push synthesized default not-connected statuses upward after their own fetch failed | web-app/src/components/DeployConnections.tsx (connect and disconnect handlers only, lines 395-440), web-app/src/components/DeployConnections.propagate.test.mjs (new), CHANGELOG.md | node --test web-app/src/components/DeployConnections.propagate.test.mjs (no synthesized statuses reach onStatusChange after a failed fetch; red before); node --test web-app/src/components/DeployConnections.state.test.mjs; cd web-app && npx tsc -b rc 0 | LOW | merged@2026-10-03T09:30Z | main fd92d52f0 (r2 3ade22ae1 adds runner+shard row, the sole TL finding; CoS verified shard-coverage 19/0, drift 6/0) |
786
+ | PO-WEB-WORKSPACE-1 | S-229 + S-230 re-cut: preview header says Detecting project type forever after a failed preview-info fetch; unknown phases label building and Replay Build can never show (buildPhase returns idle when not building, so the complete branch is unreachable) | web-app/src/components/ProjectWorkspace.tsx (getPreviewInfo call and the two Detecting project type branches ~1877 and ~2093; buildPhase memo ~1401-1410 and Replay Build condition ~1488 only), web-app/src/components/ProjectWorkspace.preview.test.mjs (new), web-app/src/components/ProjectWorkspace.phase.test.mjs (new), CHANGELOG.md | node --test on both new files (rejected fetch renders Could not detect project type; unrecognized phase is not building; completed idle session shows Replay Build; red before); node --test web-app/src/components/ProjectWorkspace.panels.test.mjs; cd web-app && npx tsc -b rc 0 | LOW | merged@2026-10-03T09:30Z | main 38ae6a29c; TL APPROVE; node 16/0 with DEPLOY tests |
787
+ | PO-WS-METRICS-1 | D51-B15 re-cut (its gate B07 was superseded and there is no group.json; runs record only integration.json): record per-repo started_at and finished_at in integration.json, add workspace_metrics.py reporting PRs per wall-clock hour and per attention minute; runs lacking timestamps are reported as unmeasured, never counted as zero | autonomy/lib/workspace.py (run loop and integration.json write only), autonomy/lib/workspace_metrics.py (new), tests/workspace/95-metrics.sh (new, register in the runner and a shard row, timeout -k, shellcheck), docs/WORKSPACES.md, CHANGELOG.md | bash tests/workspace/95-metrics.sh (fixture run gives the hand-computed rate; an old integration.json without timestamps prints unmeasured; red before); bash tests/workspace/50-run.sh and 00-smoke.sh rc 0; structural-checks.sh and shard registration guards rc 0 | MEDIUM | merged@2026-10-03T09:30Z | main 624b5d964; TL APPROVE; test-workspace 19/0 |
788
+ | PO-SESSION-COMMIT-1 | S-219 + S-220 re-cut (legacy run.sh): a failed git add -A makes the session commit silently commit nothing; the untrack step's global git reset drops force-staged agent files from the session commit | autonomy/run.sh (commit_session_changes add block ~11065 and _loki_untrack_agent_committed_user_files ~10985 only), tests/test-session-commit-add-failure.sh (new), tests/test-untrack-keeps-force-staged.sh (new), both registered in the runner with shard rows, CHANGELOG.md | both new tests rc 0 and red when the rc check or git reset -q is restored in a scratch copy; bash tests/test-branch-lifecycle.sh rc 0; bash -n autonomy/run.sh; shellcheck on changed files; structural-checks.sh rc 0 | MEDIUM | merged@2026-10-03T09:40Z | 939e23126. TL APPROVE (exit 128 aborts the add, index restore reproduced, both mutants red). On main: new tests 7/0 and 5/0, bash -n ok, shard 19/0, drift 6/0. |
789
+ | PO-COUNCIL-LABEL-TEST-1 | S-213 re-cut: the Council vote header in cost.html and the council prefix plus title on the proofs.html badge have no test of their own | dashboard-ui/tests/static-council-vote-label.node.test.mjs (new; reads dashboard/static/proofs.html and cost.html, edits neither) | node --test dashboard-ui/tests/static-council-vote-label.node.test.mjs passes (proofs.html line 152 prefix and title, cost.html line 308 header); renaming the header or dropping the title in a scratch copy fails it | LOW | merged@2026-10-03T09:35Z | c331cde1a (r2 23f2c4e5f: content-anchored matching, shard row). CoS verified on main: node --test 2/0, shard coverage 19/0, drift 6/0. Test-only, no CHANGELOG. |
790
+ | PO-P7-SINKS-1 | E-138: P7 no-fabricated-data scanner misses optional-call sinks and one-hop aliases (setRows?.([...]), window[k]?.(rows), const s = setRows; s(rows), a memo that forwards a fabricator result) | tests/moat/p7-no-fabricated-data.sh (and its red and green fixtures under tests/moat/ only) | bash tests/moat/p7-no-fabricated-data.sh with a red and a green fixture per form, each red before the change; the existing fixtures keep their verdicts; moat suite 4/9 or better unchanged | HIGH | merged@2026-10-03T09:46Z | b2b592b29. Opus APPROVE: 13 added findings, 0 removed, real tree 0 findings, each arm mutation-red. On main all four P7 cases PASS. Advisory: SCALAR_READ exclusion has no pinning fixture. |
791
+ | A-04d | A-04c follow-up (opus r5 advisories A1, A3): loki-seal Known limits must name empty body or early return, an assertion only in a helper declared after the test, same-name or keyword collisions across files, and forged runner-format lines printed by a test; fix the README sentence the matched test body must contain an assertion | packages/loki-seal/README.md, packages/loki-seal/skills/loki-seal/SKILL.md, CHANGELOG.md | grep finds each of the four limits in README Known limits; bash packages/loki-seal/test/run.sh 72/0; no code change | LOW | merged@2026-10-03T09:46Z | aa4770f57; seal suite 72/0. Plus 0b-fix: escaped U+2714/U+2716 marks in an A-04c fixture that turned structural-checks emoji scan red on main. |
792
+ | D51-B13r | Read-only workspace runs API over integration.json (runs never produce group.json) | dashboard/api_workspaces.py (new), dashboard/api_operator.py (2 GET routes only), tests/dashboard/test_api_workspaces.py (new) | `python3 -m pytest tests/dashboard/test_api_workspaces.py -q` (red: module absent) | MEDIUM | merged@2026-10-03T10:14Z | merged 6d927b5c6 (TL approve; cherry-pick of 4fbb99b40), wall shard 19/0 drift 6/0 |
793
+ | D51-B14r | Start page "Workspace runs" card: per-repo rows, integration row, stale badge; an unreadable run shows an error, never an empty card | dashboard/static/start.html, dashboard-ui/tests/start-workspace-card.node.test.mjs (new), run-all-tests.sh line | `node --test dashboard-ui/tests/start-workspace-card.node.test.mjs` (red: no card) | LOW | merged@2026-10-03T10:50Z | 1280b2781 + 7329ab5f1 on main (TL APPROVE r2, node 5/0, red 4/1) |
794
+ | D51-B16r | E2E through the real CLI routes, plus the "verify a workspace run" doc | tests/workspace/99-e2e.sh (new), docs/WORKSPACES.md | `bash tests/test-workspace.sh` (red: 99-e2e asserts absent) | MEDIUM | merged@2026-10-03T10:14Z | merged 4341f84a5 (approve; cherry-pick of ef73d6c6d), test-workspace 33/0 |
795
+ | WS-INTERRUPT | SIGTERM/SIGINT writes integration.json status=interrupted; status lists an unreadable run as "unreadable" | autonomy/lib/workspace.py (stop, _runs, status only), tests/workspace/55-interrupt.sh (new) | `bash tests/test-workspace.sh` | MEDIUM | merged@2026-10-03T10:14Z | merged 52f510d71 (approve; cherry-pick of e70cdcc6d) |
796
+ | WS-PREP-BOUND | Bound the prep lock to 120s then FAILED; refuse relative-symlink escape and source-path shebangs | autonomy/lib/worktree_prep.py, tests/test-worktree-prep.py | `python3 tests/test-worktree-prep.py` | MEDIUM | merged@2026-10-03T10:14Z | merged 7c37faa8d (approve; cherry-pick of a2f2718d3), test-worktree-prep OK |
797
+ | P2-FV-EXIT | fast_verify exit codes: INCONCLUSIVE=3, unknown flag=64, missing root=2; retire the overdue pending line | autonomy/lib/fast_verify.py (main only), tests/test-fast-verify.sh, tests/moat/pending.txt (1 line), docs/exit-codes.md (--fast row) | `bash tests/moat/run.sh` no rule failed, P2 passes on both routes | HIGH | merged@2026-10-03T10:22Z | merged c4afa7344 458dfdfb5 (TL r2 APPROVE): --path alias, --help 0; airgap 4/0, fast-verify 17/0, moat P2.fast-verify-inconclusive-not-zero PASS on main |
798
+ | S-215r | proof-pr.sh python cannot be shadowed by a cwd json.py | autonomy/lib/proof-pr.sh (render_evidence_receipt_md), tests/test-proof-pr-no-cwd-shadow.sh (new) | the new test (red on main) | HIGH | merged@2026-10-03T10:14Z | merged c6536dfe2 (opus approve; cherry-pick of b4176f42e). On main checkout proof-pr suite 5/1 only on the .loki/state/provider leg: the gitignored file predates the slice (Sep 30 17:58), environmental; builder worktree 6/0. CoS decision 10:14Z |
799
+ | S-216r | verify.sh python readers are isolated from cwd shadowing | autonomy/verify.sh (reader sites 190,591,1269,1271,1295,1337,1339,1441), tests/test-verify-no-cwd-shadow.sh (new) | the new test | HIGH | merged@2026-10-03T10:35Z | r3 opus APPROVE; cherry-picked 100535de2 f38a93966 77b84becc; main: cwd-shadow 20/0, test-verify 25/0; test now flags only a provider file created during the run (6185c5249); CHANGELOG deduped. Advisories: label no-interpreter as inconclusive, add a dynamic leg for line 3117 |
800
+ | S-218r | _loki_untracked_status cannot run a repo-local fsmonitor | autonomy/run.sh (_loki_untracked_status only), tests/test-untracked-status-fsmonitor.sh (new) | the new test | HIGH | merged@2026-10-03T10:56Z | r5 opus APPROVE (version spoofs, nonce, B1 retry all fail closed); main 0b6604fd9 + CHANGELOG collapse 1ff144efb; fsmonitor 21/0, branch-lifecycle 83/83; advisories A1 digit-length cap, A2 two-call race; in train/95 |
801
+ | HONEST-READ-1 | A corrupt or denied file gives 503 or an error row, never an empty list | dashboard/server.py (list_proofs, memory patterns/episodes/skills/index only), dashboard/static/proofs.html, tests/dashboard/test_unreadable_not_empty.py (new) | `python3 -m pytest tests/dashboard/test_unreadable_not_empty.py -q` | LOW | merged@2026-10-03T10:14Z | merged 05c0940e9 (approve; cherry-pick of a29956235), pytest 12 passed |
802
+ | S-226r | An unmeasured cost reads "unmeasured", not $0.00, in stats and status on both routes (absorbs S-227) | autonomy/loki (cmd_stats, cmd_status budget block), loki-ts/src/commands/stats.ts, loki-ts/src/commands/status.ts (readBudgetField), tests/test-stats-unmeasured-cost.sh + tests/test-status-budget-unmeasured.sh (new) | both new tests plus `cd loki-ts && bun test` | MEDIUM | merged@2026-10-03T10:14Z | merged e2c283a40 (approve; cherry-pick of 72df5665e), stats 8/0 status 8/0 |
803
+ | S-231r | Rename the CI moat job to what it proves | .github/workflows/test.yml (job name and summary echo only) | `git grep -n "name: Moat suite" -- .github` prints nothing | LOW | merged@2026-10-03T11:19Z | d8cb2bc9c on main; TL APPROVE (job id kept, no display-name consumer; CoS verified no protection or ruleset context) |
804
+ | PO-TEST-1 | Tests for scripts/metrics-usage-append.py | tests/test-metrics-usage-append.sh (new), runner and shard registration | red-then-green, shellcheck, structural guards; never writes the real METRICS.md | LOW | merged@2026-10-03T09:01Z | merged 41103e5c3 (TL APPROVE; suite + shard/registration guards green)|
805
+ | PO-TEST-2 | Tests for scripts/check-inline-scripts.js | tests/test-check-inline-scripts.sh (new), runner and shard registration | valid exits 0, broken fixture exits 1, structural guards | LOW | merged@2026-10-03T09:01Z | merged 8b3fa5af4 (TL APPROVE; suite + shard/registration guards green)|
806
+ | PO-TEST-3 | Tests for scripts/clean-test-branches.sh safety rules | tests/test-clean-test-branches.sh (new), runner and shard registration | refusals proven in a throwaway repo; mutation dropping main refusal goes red; structural guards | MEDIUM | merged@2026-10-03T09:01Z | merged 75953c210 (TL APPROVE; suite + shard/registration guards green)|
807
+ | P7-SCALAR-PIN | Pin the P7 SCALAR_READ exclusion with honest fixtures, so a regression that flags `.length`, `[0]` or `.find(` reaching a sink (or a widening that lets a fabricated array through) goes red. | tests/moat/p7-no-fabricated-data.sh only | Add honest fixtures `const n = getRows(d).length; setCount(n);`, `setFirst(getRows(d)[0])`, `setHit(getRows(d).find(x=>x.ok))` with expected 0 findings. RED: temporarily change `if not SCALAR_READ.match(tail): return True` (line ~1243) to `return True` and run `bash tests/moat/p7-no-fabricated-data.sh` -> the new fixtures fail. GREEN: revert -> `bash tests/moat/p7-no-fabricated-data.sh` exit 0, and every existing fixture keeps its expected count. Also `bash tests/moat/run.sh` shows the P7 verdict unchanged. Do NOT touch pending.txt. No CHANGELOG line (test-only). | HIGH | building@2026-10-03T11:12Z | re-cut dispatched (sonnet): CoS decision, no scanner change; fixtures via the path that reaches SCALAR_READ only, plus a fabricated-array negative; opus review after |
808
+ | SEAL-FORGED-LINES | loki-seal refuses VERIFIED when the parsed passing lines disagree with the runner's own summary counts, so a test that prints forged `ok N - name` or `--- PASS:` lines cannot fake delivery. | packages/loki-seal/bin/contract.js (passing() and its caller), packages/loki-seal/test/seal.test.js, packages/loki-seal/README.md (Known limits ~44), CHANGELOG.md | RED: new seal.test.js cases: (a) TAP output with `ok 1 - x` printed by the test body plus summary `# pass 0` / `# fail 1`; (b) pytest output with `test_x PASSED` plus `1 failed, 0 passed`; (c) an id that appears both passed and failed. Each expects NOT VERIFIED with reason "runner output inconsistent". `bash packages/loki-seal/test/run.sh` fails on the new cases before the change (baseline 72/0). GREEN: after the change, `bash packages/loki-seal/test/run.sh` passes all cases (75+/0) and the existing 72 stay green. When no summary line exists, current behavior is unchanged (document this in Known limits). CHANGELOG: "loki-seal: forged runner pass lines that contradict the runner summary now give NOT VERIFIED." | HIGH | review@2026-10-03T11:09Z | r3 4cf7d7cc3: one parsed record set feeds coverage and count, suite/header-shaped lines never cover; 90/0, 6 red on r2. Opus re-review running |
809
+ | HONEST-READ-2 | /api runs never claim "recorded no run_id" or "no per-iteration records" when the events or iteration files were unreadable or corrupt; they say unreadable, with the errno. | dashboard/api_runs.py, tests/dashboard/test_api_runs_unreadable.py (new), tests/run-all-tests.sh (run_test line), tests/shard-durations.tsv (row), CHANGELOG.md | RED: new pytest: (a) events file chmod 000 -> list_runs reason must contain "unreadable", not "no run id found"; (b) iteration dir with only corrupt JSON -> reason "unreadable or corrupt", not "no per-iteration records"; (c) missing file (ENOENT) keeps today's "no ..." wording. Skip (a) when running as root. `python3 -m pytest -q tests/dashboard/test_api_runs_unreadable.py` red before. GREEN: same command passes; `python3 -m pytest -q tests/dashboard` stays green. Register `run_test "Dashboard api_runs unreadable reads (HONEST-READ-2)" "timeout -k 10 120 python3 -m pytest -q $SCRIPT_DIR/dashboard/test_api_runs_unreadable.py"` plus the shard row `Dashboard api_runs unreadable reads (HONEST-READ-2)<TAB>5`, then run the structural guards for new test files. CHANGELOG: "Dashboard runs view reports unreadable or corrupt run records instead of claiming none were recorded." | MEDIUM | merged@2026-10-03T10:50Z | b8b30f271 on main (MEDIUM TL APPROVE) |
810
+ | BACKLOG-LEDGER-FAILCLOSED | `loki backlog` daily budget cap fails closed: a corrupt or unreadable spend ledger stops new units with BUDGET_STOP "ledger unreadable" instead of reading $0 spent, and add_spend never overwrites a corrupt ledger (move it aside to .corrupt-<ts>). | autonomy/lib/backlog.py (spent_today, add_spend, cap check ~383), tests/test-backlog.sh, CHANGELOG.md | RED: add a case to tests/test-backlog.sh with HOME pointing at a run-owned temp dir, `~/.loki/backlog-spend.json` containing `{not json`, a daily cap of $1, and a stub loki. Expect status "BUDGET_STOP: ... ledger unreadable" and no unit started; today the cap reads 0.0 and units run. A second case checks that after add_spend the corrupt bytes survive in backlog-spend.json.corrupt-*. `bash tests/test-backlog.sh` red before. GREEN: same passes; `bash tests/test-backlog-units.sh` stays green; a missing ledger (ENOENT) still means $0 spent. No cap configured means no behavior change. CHANGELOG: "loki backlog: a corrupt spend ledger now stops new units when a daily budget is set, instead of reading as $0 spent." | MEDIUM | merged@2026-10-03T10:50Z | 4dd5faf62 on main (MEDIUM TL APPROVE) |
811
+ | MCP-RUN-EXIT | MCP v10_run reports an early loki crash (exit code plus the last 20 log lines) instead of returning run_id None with no error. | mcp/v10_tools.py, mcp/tests/test_v10_tools.py | RED: new test: monkeypatch the loki binary to a stub that exits 2 immediately and writes "boom" to the log. Expect a result with `error` containing "exited 2" and "boom"; today it is `{"run_id": None, "pid":..., "log_path":...}`. `python3 -m pytest -q mcp/tests/test_v10_tools.py` red before. GREEN: same passes and `bash tests/test-mcp-server.sh` (test 13 at :204) stays green. A still-running process with no run id yet keeps today's shape. CHANGELOG: "MCP loki run now returns the exit code and log tail when loki exits before a run starts." | LOW | merged@2026-10-03T10:46Z | 01c8c0e6c cherry-picked (TL APPROVE; pytest 18/0, red 2 on revert, test-mcp-server 13/0) |
812
+ | CTRL-STATUS-RUNS | `loki control status` (TS route) prints "runs: unknown (<reason>)" when /v1/runs fails or has no total, never "0 runs". | loki-ts/src/commands/control.ts, loki-ts/tests/commands/control.test.ts (new or existing), CHANGELOG.md | RED: test with a fetch stub that returns 500, and one that returns `{}` -> output must not match /\b0 runs\b/ and must contain "unknown". `cd loki-ts && bun test tests/commands/control.test.ts` red before. GREEN: same passes; a stub with total 3 prints "3 runs"; `cd loki-ts && bun run build` then `bash tests/test-release-dist-guard.sh`. The bash cmd_control in autonomy/loki is in-flight (S-226r); file a follow-up instead of editing it. CHANGELOG: "loki control status shows runs as unknown when the control plane cannot be read." | LOW | merged@2026-10-03T10:50Z | cf9da0c41 on main (TL APPROVE); bash cmd_control same default left for S-226r |
813
+ | CP-BAD-ENCODING | The control-plane server returns 400 for malformed percent-encoding instead of a 500 from an unguarded decodeURIComponent. | packages/control-plane/src/server/app.ts, packages/control-plane/test/server/bad-encoding.test.ts (new) | RED: request `/v1/runs/%E0%A4%A` (and a path with a lone `%`) -> expect 400 and a JSON error; today it is 500. `cd packages/control-plane && bun test test/server/bad-encoding.test.ts` red before. GREEN: same passes and `bash tests/test-control-plane.sh` stays green. CHANGELOG: "control plane: malformed URL encoding returns 400." | LOW | merged@2026-10-03T10:50Z | e14b650ab on main (TL APPROVE) |
814
+ | CP-DRIZZLE-SNAP | Add the missing drizzle 0001 snapshot so `db:generate` on an unchanged schema produces no spurious migration. | packages/control-plane/drizzle/meta/0001_snapshot.json (new) | RED: in a run-owned scratch copy (`loki_run_tmp_create`, then `cp -R packages/control-plane "$LOKI_RUN_TMP/cp"`), run `cd "$LOKI_RUN_TMP/cp" && bun run db:generate` -> a 0002_*.sql appears for the unchanged schema. GREEN: generate the snapshot, repeat in a fresh copy -> no new file, and `git diff --stat` shows only the snapshot. Then `bash tests/test-control-plane.sh` passes. Clean up with loki_run_tmp_cleanup. No CHANGELOG (internal). | LOW | merged@2026-10-03T10:50Z | 28e1556c4 on main (TL APPROVE) |
815
+ | CP-COPY-GUARD-2 | Harden the control-plane Docker COPY guard so it also catches dynamic import(), a second import on one line, and transitive loki-ts value imports missing from Dockerfile.control-plane COPY lines. | tests/test-control-plane.sh (guard block 44-78) | RED: add self-test fixtures inside the suite (in a run-owned temp dir): a file with `await import("../../loki-ts/src/x")`, one with two imports on one line, and a chain a.ts -> b.ts (value import) where b is not copied. Each must make the guard report a missing COPY; today it passes. Run `bash tests/test-control-plane.sh` and show a fixture assertion failing before. GREEN: same passes on the real tree (type-only imports stay ignored, e.g. events.ts -> types.ts). Mutation: delete one real COPY line (Dockerfile.control-plane:16-17) in a scratch copy -> the guard goes red. No CHANGELOG. | LOW | merged@2026-10-03T10:50Z | e592482d4 on main (TL APPROVE) |
816
+ | SPEED-TIMER-UNREF | The group-output spinner interval no longer keeps the process alive when stop() is never called. | loki-ts/src/features/speed/group_output.ts, loki-ts/tests/features/speed/group_output.test.ts | RED: test spawns `bun -e` with isTTY forced true that calls start() and never stop(), with a 5 s timeout -> today it hangs (killed by the timeout, assert exit). `cd loki-ts && bun test tests/features/speed/group_output.test.ts` red before. GREEN: `.unref?.()` on the interval; the child exits within 2 s; existing tests stay green; `bun run build` plus the dist guard pass. Must not touch features/speed/unit_mode.ts (D61-11). CHANGELOG: "Grouped speed output no longer keeps the process alive after a command finishes." | LOW | merged@2026-10-03T10:50Z | 06ac495c0 on main (TL APPROVE), dist 63c6fd667 |
817
+ | SC-LOKI-RATCHET | Warning-level shellcheck coverage for autonomy/loki as a count ratchet (at most 89 today, may only shrink), without editing autonomy/loki. | tests/run-shellcheck.sh, tests/shellcheck-baselines.tsv (new data file, not a test script) | RED: add the ratchet, then in a scratch copy append a line producing SC2086 to autonomy/loki -> `bash tests/run-shellcheck.sh` fails "autonomy/loki warnings 90 > baseline 89". GREEN: on the real tree `bash tests/run-shellcheck.sh` passes and prints "autonomy/loki warnings 89 (baseline 89)". Lowering the file count below the baseline prints a hint to lower the baseline. Run it with `timeout -k 10 120` and record the wall time (today about 19 s for this file) in the PR, and schedule the large file first so total wall time does not grow. Not a new tests/*.sh, so no runner or shard row. No CHANGELOG. | LOW | merged@2026-10-03T10:50Z | 785423377 on main (TL APPROVE) |
818
+ | TRACKER-SITE-1 | Jira intake refuses when JIRA_BASE_URL and the browse URL's origin differ, instead of fetching the same key from the wrong site and building the wrong issue. It also refuses suffix, userinfo and port tricks. | loki-ts/src/features/tracker_intake.ts, loki-ts/tests/engine10/tracker_intake.test.ts, CHANGELOG.md | RED: new tests: (1) JIRA_BASE_URL=https://acme.atlassian.net plus URL https://other.atlassian.net/browse/X-1 -> expect an error naming both origins (today it resolves to acme); (2) `https://acme.atlassian.net.evil.com/browse/X-1`; (3) `https://user@acme.atlassian.net/browse/X-1`; (4) `https://acme.atlassian.net:8443/browse/X-1` -> each refused. `cd loki-ts && bun test tests/engine10/tracker_intake.test.ts` red before. GREEN: same command passes, plus `cd loki-ts && bun run build` and `bash tests/test-release-dist-guard.sh` (dist rebuilt in main checkout per memory). Matching origins still work. CHANGELOG: "Jira intake: a browse URL whose site differs from JIRA_BASE_URL is refused instead of silently fetched from the configured site." | MEDIUM | merged@2026-10-03T10:50Z | 5b595ba3b on main (MEDIUM TL APPROVE) |
@@ -566,3 +566,25 @@ The $20.00 default per-run cap stays. It is a hard stop on priced sessions only;
566
566
  - Conditions: secret-scan on main always runs full (no E-160 skip); required-ci reuses only main-branch or dispatch audit verdicts; the weekly cron becomes daily and a red daily scan halts releases.
567
567
  - No base-config fallback (r3 class). PR, slice-*, main, schedule and dispatch stay full. HIGH tier, unanimous opus review. Proposed by peer autonomi-dev-76; decided by the CTO advisor.
568
568
  - Saves about 15 min per promotion; release latency may still include the main full scan, accepted (moat over speed). Unmeasured hypothesis for a later CTO pass: --all on a fetch-depth 0 checkout also scans stale remote slice branches.
569
+
570
+ ## D76: legacy `loki verify` treats an unknown-kid attestation as not verified (CoS under D69, 08:32Z 2026-10-03)
571
+ - Decision: on legacy, a well-formed token whose kid matches no local key and no `--pubkey` exits rc 2 with `attestation: UNCHECKED` and a VERDICT that is not VERIFIED, matching engine10. This supersedes the D47 carve-out for legacy UNCHECKED.
572
+ - Why: anyone can mint a token with a foreign kid, so rc 0 is a downgrade forgery path. Moat order puts Seal accuracy above convenience, and D48 row 2 gives honest cross-machine verification an explicit path (`loki verify --pubkey`).
573
+ - Also in scope: a missing .loki/state/last-proof-id.txt must not skip the receipt check silently; it reports not verified (A-134 class).
574
+ - Users who relied on rc 0 for foreign tokens must pass `--pubkey`; the error message names that flag. CHANGELOG and docs say so. HIGH tier, unanimous opus review.
575
+
576
+ ## D77 (CTO, reversible; amends the D50-W1 ruling): the Wall gets a sealed base-tree manifest, never the repo; its cap scales with task size
577
+ 1. Rejected: read-only repo access for the Wall. A read-only mount still exposes function bodies to Read and Grep, and that cannot be blocked the same way across five provider CLIs, so "never bodies" would be unenforceable.
578
+ 2. Rejected on its own: a longer cap. The two 90s kills came from blind exploration; more time alone buys more blind tests.
579
+ 3. Adopted: core code builds wall_manifest.txt from the intake base tree before the Wall session starts and places it in the empty temp cwd next to task.md and repomap.txt. It holds only the detected runner and its config file, the test directory layout, at most 2 existing test files as style examples, and the public signatures and exports of the modules the task names. Capped at 400 lines; its sha256 is emitted on wall.sealed and listed in the receipt.
580
+ 4. The Wall never sees function or method bodies, the run diff or implement-worktree content, plan output, the implement transcript, git history, any .loki/ run directory, or prior Wall files. A style-example test must not import a module the task names (keeps D53-Q1 sound).
581
+ 5. Ordering is unchanged from D42(2): manifest from the base tree only, Wall sealed and red-on-base before implement runs.
582
+ 6. Cap: 90s small, 180s normal, LOKI_E10_WALL_LIMIT_S may override up to 300s, fixed before the session. A Wall timeout stays not_run, never red or already_satisfied, and Seal discloses it.
583
+ 7. Ships behind LOKI_E10_WALL_MANIFEST with a lift row (augmentiq#52 plus 2 brownfield tasks, manifest off versus on). Lower lift drops the change. Slices W1-S1..W1-S4 on BOARD; S1 to S3 touch the engine10 core and wait for core budget room.
584
+
585
+
586
+ ## D78
587
+ 2026-10-03T10:39Z, CoS (D69). GitHub push protection rejected train/94 because commit 04f62ff4e (SEC-SCAN-1) carried planted fake AWS key literals in tests/test-secret-scan.sh. Nothing in the range was on origin, so the 124 unpushed main commits were rewritten locally (filter-branch index-filter on that one file): each literal is split with an adjacent empty single-quoted string, so bash builds the same value and the scanner test still blocks it (6/0). The tree diff from the old head was that file only. This was not a force-push, and no protection bypass was requested. Commit SHAs cited on BOARD and PROGRESS for 10:25Z and earlier today, after a185ce16, are pre-rewrite and resolve only through the reflog. Rule: a test fixture never holds a scanner-matching secret literal, split it at write time.
588
+
589
+ ## D79
590
+ 2026-10-03T10:48Z, CoS (D69). S-218r round 5: the untracked-status snapshot needs git 2.44 or newer. On an older or unparseable version it refuses, returns 1 and prints a clear message; the callers already treat a failed snapshot as no snapshot. Why: on older git the repo's own config can fake the GIT_CONFIG_COUNT sentinel, and GIT_NO_LAZY_FETCH does not exist, so a hostile repo could run a filter driver or an ssh command (both reproduced by opus). Apple git on current macOS is 2.54; Ubuntu 22.04 (2.34) and Debian 12 (2.39) degrade to no untracked snapshot rather than an unprotected one.
package/docs/v10/GUIDE.md CHANGED
@@ -118,7 +118,7 @@ Time: 4m12s (intake 11s, plan 20s, implement 3m10s, verify 31s)
118
118
  `--no-pr` or never got that far. A draft PR adds the draft reason in
119
119
  parentheses.
120
120
 
121
- The PR body is reviewable in 60 seconds. It leads with what the issue asked,
121
+ The PR body is reviewable in 60 seconds (note: the INTEL-3 `renderPrBody` renderer, a 60-line reviewer-first layout, exists but is not yet wired into the live PR stage, which still uses `renderReviewerBody`). It leads with what the issue asked,
122
122
  then what changed and why, how it was tested, NOT PROVEN, and the receipt digest
123
123
  with the `loki verify` command. A field the run did not record reads "not
124
124
  recorded", never a number:
@@ -1988,3 +1988,57 @@ The swarm is stopped: .loki/V10-STOP exists, the loop has no wake-ups, and the c
1988
1988
  - D75-GITLEAKS-RANGE: opus r1 BLOCK B1 (a red daily scan did not halt releases). The r2 fix b11872776 adds a scheduled-run check in release.yml required-ci (47/0, W9 plus 2 mutations go red). The opus r2 re-review is running and also judges the fail-open path on an API error.
1989
1989
  - v10.6.10: the release workflow (a5a4f0c95) is still in_progress. npm shows latest=next=10.6.9. No push until it completes; the peer has not been told.
1990
1990
  - Drift audit (last 6h): 3 releases against the 18 that the 20 min cadence target implies (MISS; the main cause was Security Audit timeouts on trains 86-90, fixed by D74). 175 commits on local main. Ready rows: 25, of which 14 are dependency-blocked and most of the rest are eval, real-model or CTO-owned. Active builders: 3 (D65-SPEC-F2, D61-11 r3, and the D75 review), against a target of 6. Pulse budget projection: weekly 115.8%, max engineers 2. The D68 mandate floor (85% of live /usage) overrides this; live usage was 52% at 07:43 according to the peer, so it is within the floor.
1991
+
1992
+ ## 2026-10-03T08:31Z CoS
1993
+ - Train/93 (01b5753bb, target 10.6.11): Tier A, Bun Parity, First-run gate and Security Audit green; Tests and Coverage in progress (gh run list --branch train/93).
1994
+ - INTEL-3 r2 (d46385cf3) and A-103b (7b7931d7a) built; TL re-review and opus HIGH review dispatched. INTEL-1 opus review, A-04c r2, D61-11 r3 and P0-CORE-BUDGET TL r2 still running.
1995
+ - Pulse BUDGET_BURN (weekly 268.6% projected, max 0 engineers) stays overridden by the founder D68 mandate; the floor is 85% of the week on live /usage.
1996
+
1997
+ ## 2026-10-03T08:36Z CoS
1998
+ - INTEL-3 merged (0bab386c2, d4865ed9e; TL r2 APPROVE). INTEL-1 merged (c3031c9aa; opus APPROVE, 14 probes); dist rebuilt both times, guard 13/0. INTEL-1b opened for the 5 non-blocking findings (FAILED-run export, run_id binding, single read, all-unknown keyid, rotation keyid); builder dispatched.
1999
+ - D76 decided (A-121c): legacy unknown-kid verify exits rc 2; builder dispatched. EV-12D blocked: main has 0 large tasks (measure-size rc=0, validate rc=0).
2000
+ - Drift audit: 182 commits on main in 6h; 1 release in the last hour against the 20 min cadence target (MISS, train/93 Tests and Coverage still in progress). Seats: 6 agents active against the 8-16 target; 6 unblocked ready rows remain, most HIGH or CTO-owned (G-04, S41-06, S41-13, EV-9, D50-W1, E-160).
2001
+
2002
+ ## 2026-10-03T08:51Z CoS
2003
+ - v10.6.11 release run in progress on f9dbe5f4c (Tests green); npm dist-tags still 10.6.10, peer announcement waits for the registry.
2004
+ - INTEL-1b r1 HIGH BLOCK: export read hook reached verifyGroup, a genuine group receipt read TAMPERED (reproduced); r2 sent with group export test, stronger sign-bytes test, run_id-before-export and a zero core-line delta. A-121c HIGH review running.
2005
+ - D77 decided (CTO): Wall gets a sealed base-tree signatures manifest, never repo access; cap 90/180s, override max 300s; W1-S1..S4 on BOARD, core-budget gated.
2006
+ - PO batch: 7 LOW/MEDIUM slices carded with reproduced evidence; 6 builders dispatched (PO-HELP-1 waits for A-121c). PO-DOC-3 done (ac8ae0425).
2007
+ - Drift audit: 1 release in the last hour against the 20 min target (MISS: train/94 held on the engine10 core budget, 5007 of 5000, until P0-CORE-BUDGET merges). Seats: 12 agents active, inside 8-16. Ready queue still mostly HIGH or core-gated.
2008
+
2009
+ ## 2026-10-03T09:02Z CoS drift audit
2010
+ - Merged to main: INTEL-1b (d64de6b5b, 794566ce6, opus HIGH r2 APPROVE, 71/0, guard 13/0); PO-TEST-1..3 (41103e5c3, 8b3fa5af4, 75953c210; suites 15/0, 7/0, 39/0; shard/registration guards green).
2011
+ - A-121c opus HIGH BLOCK: standalone autonomy/verify.sh printed UNCHECKED then VERDICT: VERIFIED rc 0 on a forged or unsigned receipt (reproduced; loki verify correctly rc 2). r2 dispatched.
2012
+ - A-04c r3 opus BLOCK: four reproduced seal false greens (chat filter drops real promises, partial red counted covered, skipped test covers, block comment or docstring assert). r4 dispatched.
2013
+ - v10.6.11 Release run still in_progress at 08:56Z; npm latest 10.6.10. Train/94 held on P0-CORE-BUDGET.
2014
+ - Drift audit: 1 release last hour (MISS, same cause). Seats: 6 agents active, below 8; ready rows are core-budget gated or HIGH/CTO-owned, DOC-INTEL-1b added.
2015
+
2016
+ ## 2026-10-03T09:07Z CoS
2017
+ - v10.6.11 on npm next (npm view dist-tags 09:06Z: next 10.6.11, latest 10.6.10; Release run success); peer announced; latest waits for D49 auto-promote.
2018
+ - PO-TEST-3 late TL BLOCK (hardcoded /opt/homebrew and /usr/local bash paths) fixed forward on main a0bb364fc: structural-checks 11/0, no-hardcoded-paths 3/0, suite 39/0.
2019
+ - DOC-INTEL-1b merged 92c194e05 (TL APPROVE; exit-codes-documented 19/0, docs-cli-drift 0 failed).
2020
+ - A-121c r2 d0d2410d7 (standalone UNCHECKED returns 1; receipt-order 38/0, red 36/2 before) in opus HIGH re-review.
2021
+ - Drift audit: 0 releases to latest in the last hour (MISS; train/94 held on P0-CORE-BUDGET). Seats: 5 agents, below 8; no unblocked ready rows outside core-budget gating and parked real-model legs.
2022
+
2023
+ ## 2026-10-03T09:30Z CoS
2024
+ - Merged to main since 09:07Z: SEC-SCAN-1 04f62ff4e, PO-HELP-1 ef50958a5, PO-STANDALONE-COST-1 f99c8cc64, PO-AUDIT-CLI-1 db276a24e, PO-WEB-COST-1 4a429626b, PO-WEB-WORKSPACE-1 38ae6a29c, PO-WEB-DEPLOY-1 fd92d52f0, PO-DASH-HONEST-1 99674923f, PO-WS-METRICS-1 624b5d964. Each had a TL APPROVE (DEPLOY r2 closed its one finding) and its Wall tests pass on main.
2025
+ - Incident: scratchpad strip.py ignored its argument and rewrote CHANGELOG.md only, so shard-durations.tsv kept conflict markers (drift test 4/2). Fixed in 8106e6a72, script now takes argv; drift test now 6/0.
2026
+ - In review: A-04c r5 06638f484 (opus), PO-SESSION-COMMIT-1 187ed849e, P0-CORE-BUDGET r2, D62-VIS-F1 (opus). Rework: PO-COUNCIL-LABEL-TEST-1 (missing shard row). Building: D61-11 r3, PO-P7-SINKS-1, S-233, DEP-02.
2027
+ - Train/94 held on P0-CORE-BUDGET: engine10 budget.test.ts fails on main until it lands.
2028
+
2029
+ ## 2026-10-03T10:05Z CoS
2030
+ - Merged since 09:30Z: PO-COUNCIL-LABEL-TEST-1 c331cde1a, PO-SESSION-COMMIT-1 939e23126, A-04c (5 rounds, CHANGELOG deduped b3f162d61), S-233 1731c5e14, PO-P7-SINKS-1 b2b592b29, A-04d aa4770f57, seal fixture emoji escape a2ef80a49 (structural-checks green). E-160 found already shipped in v10.6.0.
2031
+ - Architect refill (1b9f50011): 11 slices built in workflow wf_8e664533-e5c, all red-then-green evidenced, now in D12 review (wtt8kgawz; opus on P2-FV-EXIT, S-215r, S-216r, S-218r).
2032
+ - Blocked and in rework: W1-S1 r1 (opus, 7 body-leak and hang blockers) r2 d88fe5281 in opus re-review; D62-VIS-F1 r2 (dev-server group not reaped on backstop, harness cost nulled) r3 building with supervisor.ts (net-zero core) and eval harness in scope.
2033
+ - Train/94 still held on P0-CORE-BUDGET TL r2. Next Architect refill (arch-refill-1010) in progress.
2034
+
2035
+ ## 2026-10-03T10:25Z CoS
2036
+ - Merged since 10:05Z: D62-VIS-F1 (r3, dist 0ab093f25), P2-FV-EXIT (r2), S-216r (r3, opus APPROVE; cwd-shadow 20/0, test-verify 25/0 on main; provider-file leg now measures only files created during the run, 6185c5249).
2037
+ - In rework: S-218r r3 e35f56e42 (GIT_CONFIG_COUNT overrides, GIT_NO_LAZY_FETCH) in opus re-review; W1-S1 r4 7ab0e37dd (ast-based python, fail-closed TS/JS) in opus re-review; D61-11 r3 building; 13 refill slices building in wf_9c739ca7-858.
2038
+ - Train/94 still held on the P0-CORE-BUDGET TL verdict (over budget, final demand sent 10:24Z); 115 commits unreleased since v10.6.11.
2039
+
2040
+ ## 2026-10-03T10:57Z CoS
2041
+ - Train/94 (4ad0d9426) Tests red in 3 suites, all real and fixed forward in 5ad559ad3: D78 fixture split tripped SC1078 (key now assembled from two vars), stale SEC-SCAN-1 .gitleaksignore entries pushed the baseline to 76 (removed, back to 74), PO-HELP-1 DSSE suffix vs the help-and-log-cap equality pin (prefix plus DSSE-only suffix). secret-scan 6/0, security-scan-coverage 31/0, help-and-log-cap 15/0.
2042
+ - Merged: S-218r r5 (opus APPROVE, 0b6604fd9). Train/95 pushed at 1ff144efb 10:56Z, superseding train/94.
2043
+ - Waste: re-dispatched PO-AUDIT-CLI-1 and PO-DASH-HONEST-1 from a stale scratch refill list; both were already merged (2a4c9ef0a, ece26c3f5). Duplicate picks reset locally before any push. Refill list retired; dispatch only from BOARD ready rows.
2044
+ - In review: SEAL-FORGED-LINES r2 58ee2065b (opus). Building: D61-11 r3. P0-CORE-BUDGET TL r2 still open.