loki-mode 9.77.0 → 9.80.1

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 (78) hide show
  1. package/SKILL.md +2 -2
  2. package/VERSION +1 -1
  3. package/autonomy/lib/engine10-legacy-notice.txt +3 -0
  4. package/autonomy/lib/engine10-push-gitlab.sh +96 -0
  5. package/autonomy/lib/engine10-push.sh +149 -0
  6. package/autonomy/run.sh +2 -2
  7. package/bin/loki +21 -0
  8. package/dashboard/__init__.py +1 -1
  9. package/docs/INSTALLATION.md +1 -1
  10. package/docs/dev/tmp-cleanup.md +3 -3
  11. package/docs/v10/BOARD.md +105 -35
  12. package/docs/v10/DECISIONS.md +10 -0
  13. package/docs/v10/ENGINE-MEASURE.md +69 -0
  14. package/docs/v10/ENGINE.md +272 -0
  15. package/docs/v10/METRICS.md +26 -0
  16. package/docs/v10/PROGRESS.md +45 -0
  17. package/loki-ts/dist/loki.js +562 -620
  18. package/loki-ts/package.json +1 -1
  19. package/mcp/__init__.py +1 -1
  20. package/package.json +1 -1
  21. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  22. package/web-app/dist/assets/{AdminPage-_YAgQxgp.js → AdminPage-Brg7_Lyr.js} +1 -1
  23. package/web-app/dist/assets/{Avatar-Bxbdwgz5.js → Avatar-7nY6uJxD.js} +1 -1
  24. package/web-app/dist/assets/{Badge-DFOiCwzh.js → Badge-Cbf2CTvW.js} +1 -1
  25. package/web-app/dist/assets/{Button-84KGqMJR.js → Button-CvKmf9hm.js} +1 -1
  26. package/web-app/dist/assets/{CockpitPage-Ck8i3mNd.js → CockpitPage-wLAuI5UQ.js} +1 -1
  27. package/web-app/dist/assets/{ComparePage-BpIdW5x8.js → ComparePage-CMdzzTeh.js} +1 -1
  28. package/web-app/dist/assets/{ErrorBoundary-Dcwg_4nU.js → ErrorBoundary-CAIYBXBt.js} +1 -1
  29. package/web-app/dist/assets/{EvidenceReceiptPanel-6II8hA4-.js → EvidenceReceiptPanel-BnrDrzRA.js} +1 -1
  30. package/web-app/dist/assets/{GitHubIssuesPanel-CCpJxUo5.js → GitHubIssuesPanel-CnWx9CiK.js} +1 -1
  31. package/web-app/dist/assets/{GitHubPRsPanel-BN7KtPRB.js → GitHubPRsPanel-y8gYUjnH.js} +1 -1
  32. package/web-app/dist/assets/{HomePage-Dmh8Ompu.js → HomePage-CqaADKqJ.js} +2 -2
  33. package/web-app/dist/assets/{LoginPage-e_wvWykS.js → LoginPage-C4-UpzUT.js} +1 -1
  34. package/web-app/dist/assets/{MagicPage-SkEbXneS.js → MagicPage-CQ7UMIwO.js} +1 -1
  35. package/web-app/dist/assets/{MetricsPage-Jr2E8O4h.js → MetricsPage-nGehSAp4.js} +1 -1
  36. package/web-app/dist/assets/{NotFoundPage-Bo-xIGHn.js → NotFoundPage-EkC6K3N-.js} +1 -1
  37. package/web-app/dist/assets/{ProjectPage--lRlzM8G.js → ProjectPage-Cdjs0beW.js} +3 -3
  38. package/web-app/dist/assets/{ProjectsPage-CG_L0UkM.js → ProjectsPage-CHcSeyxO.js} +1 -1
  39. package/web-app/dist/assets/{SettingsPage-DdZ4UAJM.js → SettingsPage-DDhw0s6W.js} +1 -1
  40. package/web-app/dist/assets/{ShowcasePage-CnV468WN.js → ShowcasePage-BBxQDg5j.js} +1 -1
  41. package/web-app/dist/assets/{SystemSettingsPage-CyvaTJ_t.js → SystemSettingsPage-Aj91V7Zy.js} +1 -1
  42. package/web-app/dist/assets/{TeamsPage-g5hHDx0X.js → TeamsPage-H10Qp1fu.js} +1 -1
  43. package/web-app/dist/assets/{TemplatesPage-CRcRm9ED.js → TemplatesPage-AcxgsKwZ.js} +1 -1
  44. package/web-app/dist/assets/{TerminalOutput-BDBfTY9s.js → TerminalOutput-O6dQA9Qa.js} +1 -1
  45. package/web-app/dist/assets/{activity-CpH9qoQP.js → activity-CMnBtTxM.js} +1 -1
  46. package/web-app/dist/assets/{bell-BtlnNdD8.js → bell-Dseaifqw.js} +1 -1
  47. package/web-app/dist/assets/{bot-BAH-qJ4B.js → bot-Bm_xcawB.js} +1 -1
  48. package/web-app/dist/assets/{check-D7ydqeHo.js → check-TXNSTOop.js} +1 -1
  49. package/web-app/dist/assets/{chevron-left-CJ48kXi_.js → chevron-left-D35Mb_-x.js} +1 -1
  50. package/web-app/dist/assets/{circle-alert-C3m8Jdum.js → circle-alert-Rt6AMJ2V.js} +1 -1
  51. package/web-app/dist/assets/{clock-CpVxJ_xL.js → clock-Dlc0SEVv.js} +1 -1
  52. package/web-app/dist/assets/{cloud-C5RpwJJ2.js → cloud-DPd4GLS2.js} +1 -1
  53. package/web-app/dist/assets/{code-xml-D8Ch_l6l.js → code-xml-B_scyMd5.js} +1 -1
  54. package/web-app/dist/assets/{database-Dc-r_JaX.js → database-DuPEBXUA.js} +1 -1
  55. package/web-app/dist/assets/{dollar-sign-CXOSNCEc.js → dollar-sign-C49nrBOI.js} +1 -1
  56. package/web-app/dist/assets/{file-code-corner-il9KkndN.js → file-code-corner-B3wt8I4V.js} +1 -1
  57. package/web-app/dist/assets/{file-plus-CduheFSQ.js → file-plus-CuHHSDVU.js} +1 -1
  58. package/web-app/dist/assets/{globe-C_H2CJ0N.js → globe-Kl77FTuJ.js} +1 -1
  59. package/web-app/dist/assets/{hammer-Dd0DZNve.js → hammer-D0LLVOf5.js} +1 -1
  60. package/web-app/dist/assets/{index-CnURGAFT.js → index-ufh2YvPO.js} +2 -2
  61. package/web-app/dist/assets/{layers-CofXpCI5.js → layers-C3vb5zor.js} +1 -1
  62. package/web-app/dist/assets/{loader-circle-Z2PHP1vi.js → loader-circle-BfFuGacT.js} +1 -1
  63. package/web-app/dist/assets/{lock-BKZcBfqE.js → lock-CicpAGtr.js} +1 -1
  64. package/web-app/dist/assets/{package-VeINyJLx.js → package-Bw8snKHr.js} +1 -1
  65. package/web-app/dist/assets/{plus-BdRdn_Ne.js → plus-KXZkO61K.js} +1 -1
  66. package/web-app/dist/assets/{refresh-cw-SQlfufGR.js → refresh-cw-CshUF54x.js} +1 -1
  67. package/web-app/dist/assets/{rotate-ccw-z7xY1hor.js → rotate-ccw-S9JJTBcV.js} +1 -1
  68. package/web-app/dist/assets/{scroll-text-D9DLjkO9.js → scroll-text-CLOq2Mvg.js} +1 -1
  69. package/web-app/dist/assets/{server-VlEVEIp_.js → server-ClM4a2Wx.js} +1 -1
  70. package/web-app/dist/assets/{shield-alert-D0ulDTaf.js → shield-alert-DXhyR0S_.js} +1 -1
  71. package/web-app/dist/assets/{thumbs-up-7_JKRnvS.js → thumbs-up-CYb6ycQ-.js} +1 -1
  72. package/web-app/dist/assets/{trash-2-DmRmNre3.js → trash-2-BcHIiT3v.js} +1 -1
  73. package/web-app/dist/assets/{trending-down-DZwkFd-S.js → trending-down-C5eAxnkt.js} +1 -1
  74. package/web-app/dist/assets/{trending-up-4ql9Pr4t.js → trending-up-m9XmNKav.js} +1 -1
  75. package/web-app/dist/assets/{upload-D2KPx9Uo.js → upload-ZYJCPyYM.js} +1 -1
  76. package/web-app/dist/assets/{usePolling-D6alWGU5.js → usePolling-uC-lirzx.js} +1 -1
  77. package/web-app/dist/assets/{user-Bo3EjryF.js → user-C1dyK-6p.js} +1 -1
  78. package/web-app/dist/index.html +1 -1
package/docs/v10/BOARD.md CHANGED
@@ -250,49 +250,119 @@ 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 | building@2026-09-27T20:36Z | Source: 19:57Z cut. Batch 8 (wf_ff8d537c-40e), build then review. |
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. |
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
- | 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 | merged@2026-09-27T21:26Z | 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). |
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). |
257
257
  | S-195 | BACKLOG 17: /api/focus POST fires with the dashboard disabled | autonomy/run.sh (dashboard focus notify block only; does not overlap S-175 or S-194), tests/test-focus-post-dashboard-off.sh (new) | MEDIUM | bash tests/test-focus-post-dashboard-off.sh exits 0: ENABLE_DASHBOARD=false leaves the curl shim log empty, true records one POST; removing the guard in a scratch copy fails the false leg | merged@2026-09-27T21:40Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Re-dispatched review APPROVE on 5c86639e (`bash tests/test-focus-post-dashboard-off.sh` 3/3, red 2/3 on parent); cherry-picked onto main 21:40Z. |
258
- | S-196 | council_managed_should_stop diffs Loki's install tree and runs -E readers | autonomy/completion-council.sh (council_managed_should_stop only), tests/moat/p2-honest-verdict.sh (case_council_readers_no_user_site_pth plus the ~858 comment), tests/test-council-managed-diff-target.sh (new) | HIGH | bash tests/moat/p2-honest-verdict.sh prints CASE P2.council-readers-no-user-site-pth PASS and CASE P2.council-readers-not-shadowed PASS; bash tests/test-council-managed-diff-target.sh exits 0 with the target-only file in _CC_DIFF; reverting the readers to -E makes the pth case FAIL; bash tests/moat/run.sh reports no rule failed | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. a7bc805a review CONCERN; rework in batch 9 (wf_4da25841-89e). Review APPROVE on 6cb0cfec (HIGH re-review APPROVE); in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
259
- | S-197 | BACKLOG 51: NOT CHECKED text should name PYTHONPATH and PYTHONUSERBASE | autonomy/loki (loki_remote_verify_receipt attestation NOT CHECKED branch and cmd_proof --jwks NOT CHECKED echo only; does not overlap S-179), tests/test-proof-verify-jwks.sh (case 4 only) | LOW | bash tests/test-proof-verify-jwks.sh exits 0 with case 4 asserting PYTHONUSERBASE in the NOT CHECKED output; grep -c PYTHONUSERBASE autonomy/loki prints 2 or more; bash tests/test-remote-attestation-verdict.sh exits 0 | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. 04310c0a review CONCERN; rework in batch 9 (wf_4da25841-89e). Review APPROVE on d5afb96b (re-review APPROVE); in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
260
- | S-198 | BACKLOG 145: P7 Array.from arm loses an outer generator's index when generators nest | tests/moat/p7-no-fabricated-data.sh (Array.from generator arm ~1934-1994 and one fixture beside the B-8 fixture ~3301 only; does not overlap S-180) | HIGH | bash tests/moat/p7-no-fabricated-data.sh prints PASS for every P7 case and flags the nested fixture; removing the outer substitution lets it through; tests/moat/cases.txt unchanged | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 78a35aa5; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
258
+ | S-196 | council_managed_should_stop diffs Loki's install tree and runs -E readers | autonomy/completion-council.sh (council_managed_should_stop only), tests/moat/p2-honest-verdict.sh (case_council_readers_no_user_site_pth plus the ~858 comment), tests/test-council-managed-diff-target.sh (new) | HIGH | bash tests/moat/p2-honest-verdict.sh prints CASE P2.council-readers-no-user-site-pth PASS and CASE P2.council-readers-not-shadowed PASS; bash tests/test-council-managed-diff-target.sh exits 0 with the target-only file in _CC_DIFF; reverting the readers to -E makes the pth case FAIL; bash tests/moat/run.sh reports no rule failed | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. a7bc805a review CONCERN; rework in batch 9 (wf_4da25841-89e). Review APPROVE on 6cb0cfec (HIGH re-review APPROVE); in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
259
+ | S-197 | BACKLOG 51: NOT CHECKED text should name PYTHONPATH and PYTHONUSERBASE | autonomy/loki (loki_remote_verify_receipt attestation NOT CHECKED branch and cmd_proof --jwks NOT CHECKED echo only; does not overlap S-179), tests/test-proof-verify-jwks.sh (case 4 only) | LOW | bash tests/test-proof-verify-jwks.sh exits 0 with case 4 asserting PYTHONUSERBASE in the NOT CHECKED output; grep -c PYTHONUSERBASE autonomy/loki prints 2 or more; bash tests/test-remote-attestation-verdict.sh exits 0 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. 04310c0a review CONCERN; rework in batch 9 (wf_4da25841-89e). Review APPROVE on d5afb96b (re-review APPROVE); in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
260
+ | S-198 | BACKLOG 145: P7 Array.from arm loses an outer generator's index when generators nest | tests/moat/p7-no-fabricated-data.sh (Array.from generator arm ~1934-1994 and one fixture beside the B-8 fixture ~3301 only; does not overlap S-180) | HIGH | bash tests/moat/p7-no-fabricated-data.sh prints PASS for every P7 case and flags the nested fixture; removing the outer substitution lets it through; tests/moat/cases.txt unchanged | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 78a35aa5; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
261
261
  | S-199 | py-tool identity test covers every guarded _loki_snapshot_py_tool copy under autonomy/ | tests/test-council-py-tool-identity.sh | LOW | bash tests/test-council-py-tool-identity.sh exits 0 and prints the number of copies compared (at least 1 besides run.sh); a one-byte change to completion-council.sh's copy in a scratch tree exits 1 | released@2026-09-27T21:15Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Review APPROVE on 41c07bd1; 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). |
262
262
  | S-200 | BACKLOG 54: done-recognition readers load user-site .pth (-E only) | autonomy/lib/done-recognition.sh (python3 sites plus guarded helper copy), tests/test-done-recognition-no-user-site-pth.sh (new) | HIGH | bash tests/test-done-recognition-no-user-site-pth.sh exits 0 and reverting one site to -E in a scratch copy fails it; bash tests/test-done-recognition-tests-axis.sh and bash tests/test-reuse-done-recognition.sh exit 0 | released@2026-09-27T21:15Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Review APPROVE on 6a55b22f; 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). |
263
263
  | S-201 | BACKLOG 54: council-v2 readers load .pth; a crashed sycophancy check skips the devil's advocate | autonomy/council-v2.sh (python3 sites, Step 4 and 5 fallbacks, guarded helper copy), tests/test-council-v2-no-user-site-pth.sh (new) | MEDIUM | bash tests/test-council-v2-no-user-site-pth.sh exits 0 (pth leg and detector-failure leg run the devil's advocate on a unanimous approve); reverting either change fails its leg; bash tests/test-council-v2-quorum.sh exits 0 | released@2026-09-27T21:15Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Review APPROVE on 72851565; 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). |
264
- | S-202 | BACKLOG 54: voter-agents readers load user-site .pth (-E only) | autonomy/lib/voter-agents.sh (3 python3 sites plus guarded helper copy), tests/test-voter-agents-no-user-site-pth.sh (new) | HIGH | bash tests/test-voter-agents-no-user-site-pth.sh exits 0 and reverting fails it; bash tests/test-voter-agents-json.sh and bash tests/test-sdk-voter-agents.sh exit 0 | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on ccb1f0fa; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
265
- | S-203 | BACKLOG 54: proof-check readers load user-site .pth (-E only) | autonomy/lib/proof-check.sh (3 heredoc readers plus guarded helper copy), tests/test-proof-check-no-user-site-pth.sh (new) | MEDIUM | bash tests/test-proof-check-no-user-site-pth.sh exits 0 and reverting fails it; bash tests/test-proven-pr-check.sh exits 0 | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on b4bfe05d; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
266
- | S-204 | BACKLOG 53: checklist verification loads user-site .pth (-E only) | autonomy/prd-checklist.sh (python3 sites incl. checklist-verify.py call and oracle heredoc, plus guarded helper copy), tests/test-prd-checklist-no-user-site-pth.sh (new) | HIGH | bash tests/test-prd-checklist-no-user-site-pth.sh exits 0 and reverting fails it; bash tests/moat/p2-honest-verdict.sh prints CASE P2.checklist-verify-not-shadowed PASS; bash tests/test-prd-checklist-interval-w4.sh exits 0 | merged@2026-09-27T21:26Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 80c0a3f7; in train 16, main 800ac46e pushed 21:25:40 (`git ls-remote origin refs/heads/main` = 800ac46e). |
267
- | S-205 | Bun loki proof verify runs a PATH python3 -E (user-site .pth reaches the verdict) | loki-ts/src/commands/proof.ts (verifier spawn only), loki-ts/src/util/python.ts (extend existing helper only if used), loki-ts/tests/commands/proof_verify_interpreter.test.ts (new) | HIGH | cd loki-ts && bun test tests/commands/proof_verify_interpreter.test.ts tests/commands/proof_verify_parity.test.ts exits 0; reverting to python3 -E fails the new test; no resolvable interpreter exits 2 | merged@2026-09-27T21:26Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 75c6b9e9; in train 16, main 800ac46e pushed 21:25:40 (`git ls-remote origin refs/heads/main` = 800ac46e). |
264
+ | S-202 | BACKLOG 54: voter-agents readers load user-site .pth (-E only) | autonomy/lib/voter-agents.sh (3 python3 sites plus guarded helper copy), tests/test-voter-agents-no-user-site-pth.sh (new) | HIGH | bash tests/test-voter-agents-no-user-site-pth.sh exits 0 and reverting fails it; bash tests/test-voter-agents-json.sh and bash tests/test-sdk-voter-agents.sh exit 0 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on ccb1f0fa; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
265
+ | S-203 | BACKLOG 54: proof-check readers load user-site .pth (-E only) | autonomy/lib/proof-check.sh (3 heredoc readers plus guarded helper copy), tests/test-proof-check-no-user-site-pth.sh (new) | MEDIUM | bash tests/test-proof-check-no-user-site-pth.sh exits 0 and reverting fails it; bash tests/test-proven-pr-check.sh exits 0 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on b4bfe05d; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
266
+ | S-204 | BACKLOG 53: checklist verification loads user-site .pth (-E only) | autonomy/prd-checklist.sh (python3 sites incl. checklist-verify.py call and oracle heredoc, plus guarded helper copy), tests/test-prd-checklist-no-user-site-pth.sh (new) | HIGH | bash tests/test-prd-checklist-no-user-site-pth.sh exits 0 and reverting fails it; bash tests/moat/p2-honest-verdict.sh prints CASE P2.checklist-verify-not-shadowed PASS; bash tests/test-prd-checklist-interval-w4.sh exits 0 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 80c0a3f7; 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). |
267
+ | S-205 | Bun loki proof verify runs a PATH python3 -E (user-site .pth reaches the verdict) | loki-ts/src/commands/proof.ts (verifier spawn only), loki-ts/src/util/python.ts (extend existing helper only if used), loki-ts/tests/commands/proof_verify_interpreter.test.ts (new) | HIGH | cd loki-ts && bun test tests/commands/proof_verify_interpreter.test.ts tests/commands/proof_verify_parity.test.ts exits 0; reverting to python3 -E fails the new test; no resolvable interpreter exits 2 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 75c6b9e9; 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). |
268
268
  | S-206 | BACKLOG 114: cockpit actions say working tree is clean and no run in progress after a failed fetch | web-app/src/cockpit/FinalActions.tsx (disabled reasons only), web-app/src/cockpit/FinalActions.reasons.test.mjs (new) | LOW | node --test web-app/src/cockpit/FinalActions.reasons.test.mjs passes: git null lacks The working tree is clean and Nothing to push, status null lacks No run in progress, real data keeps both; cd web-app && npx tsc -b exits 0 | released@2026-09-27T21:15Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Review APPROVE on ff852f0c; 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). |
269
- | S-207 | BACKLOG 114: cockpit evidence says No gate results recorded when the checklist request failed | web-app/src/cockpit/useCockpitState.ts (getChecklist via settle only), web-app/src/cockpit/EvidencePanel.tsx (empty branch only), web-app/src/cockpit/ExecutionCockpit.tsx (EvidencePanel props only), web-app/src/cockpit/EvidencePanel.state.test.mjs (new) | LOW | node --test web-app/src/cockpit/EvidencePanel.state.test.mjs passes: an error renders Could not load gate results, items [] keeps No gate results recorded; node web-app/src/cockpit/run-derive-view-test.mjs exits 0; cd web-app && npx tsc -b exits 0 | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on b969a3cb; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
269
+ | S-207 | BACKLOG 114: cockpit evidence says No gate results recorded when the checklist request failed | web-app/src/cockpit/useCockpitState.ts (getChecklist via settle only), web-app/src/cockpit/EvidencePanel.tsx (empty branch only), web-app/src/cockpit/ExecutionCockpit.tsx (EvidencePanel props only), web-app/src/cockpit/EvidencePanel.state.test.mjs (new) | LOW | node --test web-app/src/cockpit/EvidencePanel.state.test.mjs passes: an error renders Could not load gate results, items [] keeps No gate results recorded; node web-app/src/cockpit/run-derive-view-test.mjs exits 0; cd web-app && npx tsc -b exits 0 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on b969a3cb; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
270
270
  | S-208 | BACKLOG 118: trust trajectory reads any non-pass council verdict as a failure | autonomy/lib/trust_trajectory.py (_verdict_is_pass only), tests/test_trust_trajectory_unknown_verdict.py (new) | MEDIUM | python3 -m pytest -q tests/test_trust_trajectory_unknown_verdict.py tests/test_trust_trajectory.py tests/dashboard/test_trust_trajectory_endpoint.py passes: an unknown verdict adds no data point, REJECTED stays 0.0; reverting fails case 1 | rejected@2026-09-27T20:58Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Closed without code: the gate did not reproduce (no writer emits a verdict that is neither pass nor fail; reviewer APPROVE of the close, proof-generator.py:104-148 is the only final_verdict writer). |
271
- | S-209 | BACKLOG 99 (Bun): codex, cline and aider get the prompt without the commit-hygiene line | loki-ts/src/runner/providers.ts (codex, cline, aider invokers only), loki-ts/tests/runner/provider_commit_hygiene.test.ts (new), loki-ts/tests/runner/providers.test.ts (argv asserts only if moved) | MEDIUM | cd loki-ts && bun test tests/runner/provider_commit_hygiene.test.ts tests/runner/providers.test.ts exits 0: all three argvs carry the providers/codex.sh literal, claude not double-prefixed; removing the prefix fails the three legs | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 78f2f65d; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
272
- | S-210 | Velocity: help-discoverability (29s) and completion-coverage (30s) probe loops under 10s each | tests/test-help-discoverability.sh, tests/test-completion-coverage.sh (probe loops only) | LOW | time bash tests/test-help-discoverability.sh and time bash tests/test-completion-coverage.sh each exit 0 with real under 10s; real_count and pass counts match the pre-change capture; both timings reported | merged@2026-09-27T21:26Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on d4fb8ad2; in train 16, main 800ac46e pushed 21:25:40 (`git ls-remote origin refs/heads/main` = 800ac46e). |
273
- | S-211 | BACKLOG 75: register the four suites no runner executes (Captain, after S-174 merges) | tests/run-all-tests.sh (four run_test lines only, after S-174 merges), tests/shard-durations.tsv (four lines) | LOW | grep -c -e test_managed_completion_flag -e test_managed_review_flag -e test-evidence-gate-no-tests -e test-voter-agents-json tests/run-all-tests.sh prints 8; bash tests/test-shard-coverage.sh exits 0; each suite ran 3 of 3 from a scratch cwd with no .loki/state/provider left | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on a04bbb7a; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
274
- | S-212 | GUARDS 5, 12 and 13 still read PENDING after S-138, S-139 and S-154 landed (after S-181 merges) | docs/v10/GUARDS.md (sections 5, 12, 13 only; does not overlap S-181 section 11) | LOW | awk '/^## 12\./,0' docs/v10/GUARDS.md piped to grep -c 'PENDING, no slice cut' prints 0; bash tests/test-no-ambient-gitconfig-writes.sh and bash tests/test-v10-pulse.sh exit 0 | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on bd135cb8; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
275
- | S-213 | BACKLOG 123: cost.html and proofs.html council-vote labels have no test of their own | dashboard-ui/tests/static-council-vote-label.node.test.mjs (new) | LOW | node --test dashboard-ui/tests/static-council-vote-label.node.test.mjs passes (proofs.html council prefix and title, cost.html Council vote header); renaming the header or dropping the title in a scratch copy fails it | building@2026-09-27T21:26Z | Source: 20:12Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
276
- | S-214 | BACKLOG 147: P7 useMemo arm misses a factory that calls a registered fabricator | tests/moat/p7-no-fabricated-data.sh (HELPER_LOCAL_DECL_TMPL ~1182 and its use ~2186, ceiling comment ~978-986, one fixture beside the DECL_USEMEMO fixture ~3138-3160 only; does not overlap S-198) | HIGH | bash tests/moat/p7-no-fabricated-data.sh prints PASS for every P7 case and flags the composed useMemo fixture; removing the useMemo prefix in a scratch copy lets it through; git diff --stat tests/moat/cases.txt is empty | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
277
- | S-215 | PR receipt renderer in proof-pr.sh imports json from the target repo (cwd shadow) | autonomy/lib/proof-pr.sh (render_evidence_receipt_md heredoc reader plus guarded _loki_snapshot_py_tool copy), tests/test-proof-pr-no-cwd-shadow.sh (new) | HIGH | bash tests/test-proof-pr-no-cwd-shadow.sh exits 0 (a planted json.py cannot forge the headline) and reverting to bare python3 - in a scratch copy fails it; bash tests/test-proven-pr-receipt.sh exits 0; bash tests/test-council-py-tool-identity.sh exits 0 and counts one more copy | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
278
- | S-216 | loki verify inline readers import from the tree under review (cwd shadow) | autonomy/verify.sh (reader sites ~190, 591, 1269, 1271, 1295, 1337, 1339, 1441 plus guarded helper copy; not the unittest or py_compile runs), tests/test-verify-no-cwd-shadow.sh (new) | HIGH | bash tests/test-verify-no-cwd-shadow.sh exits 0 and reverting one site in a scratch copy fails it; bash tests/test-verify.sh exits 0; bash tests/moat/run.sh reports no rule failed; bash tests/test-council-py-tool-identity.sh exits 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
279
- | S-217 | BACKLOG 81: enforce_test_coverage package.json readers load user-site .pth | autonomy/run.sh (enforce_test_coverage _declared_test_script and _ws_script readers only; anchor on names), tests/test-enforce-test-coverage-pkg-readers-pth.sh (new) | HIGH | bash tests/test-enforce-test-coverage-pkg-readers-pth.sh exits 0 (a .pth no longer changes the recorded test gate outcome) and reverting one reader to -E in a scratch copy fails it; no .loki/state/provider left in the repo; bash tests/test-honest-gate-status.sh exits 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
280
- | S-218 | BACKLOG 131c: snapshot git status runs an agent-chosen core.fsmonitor command | autonomy/run.sh (_loki_untracked_status only), tests/test-untracked-status-fsmonitor.sh (new) | HIGH | bash tests/test-untracked-status-fsmonitor.sh exits 0 (no fsmonitor marker, real untracked file still listed) and removing the two -c flags in a scratch copy fails it; bash tests/test-no-ambient-gitconfig-writes.sh and bash tests/test-branch-lifecycle.sh exit 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
281
- | S-219 | BACKLOG 83: a failed git add -A makes the session commit silently commit nothing | autonomy/run.sh (commit_session_changes git add -A block only), tests/test-session-commit-add-failure.sh (new) | MEDIUM | bash tests/test-session-commit-add-failure.sh exits 0: an empty embedded repo prints Left uncommitted naming the add failure, a normal repo still commits; removing the rc check in a scratch copy fails leg 1; bash tests/test-branch-lifecycle.sh exits 0 | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
282
- | S-220 | BACKLOG 109: untrack step's global reset drops force-staged agent files from the session commit | autonomy/run.sh (_loki_untrack_agent_committed_user_files only), tests/test-untrack-keeps-force-staged.sh (new) | MEDIUM | bash tests/test-untrack-keeps-force-staged.sh exits 0: git add -f dist/bundle.js lands in the session commit while the pre-existing user file stays untracked on disk; restoring git reset -q in a scratch copy fails it; bash tests/test-branch-lifecycle.sh exits 0 | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
283
- | S-221 | BACKLOG 123: audit.py verify exits 0 when it checked nothing | dashboard/audit.py (_unified_cli verify branch and docstring only; tip and prefix untouched), tests/dashboard/test_audit_verify_cli_nothing_checked.py (new) | MEDIUM | python3 -m pytest -q tests/dashboard/test_audit_verify_cli_nothing_checked.py: empty dir exits 2, valid chain 0, tampered 1, tip on an empty dir still 0; bash tests/test-audit-chain-honesty.sh and bash tests/test-audit-js-suites.sh exit 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
284
- | S-222 | BACKLOG 118: skill-session WebSocket status push hardcodes running_agents 0 | dashboard/server.py (skill-session broadcast payload ~1030-1047 only), tests/dashboard/test_skill_session_ws_running_agents.py (new) | LOW | python3 -m pytest -q tests/dashboard/test_skill_session_ws_running_agents.py shows running_agents None on the skill-session push; restoring 0 fails it | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
285
- | S-223 | BACKLOG 114/118: notification triggers read No triggers configured after a failed read | dashboard/server.py (get_notification_triggers only), dashboard-ui/components/loki-notification-center.js (_loadTriggers and triggers empty branch only), tests/dashboard/test_notification_triggers_unreadable.py (new), dashboard-ui/tests/loki-notification-triggers-error.node.test.mjs (new) | LOW | python3 -m pytest -q tests/dashboard/test_notification_triggers_unreadable.py shows triggers null with error on a corrupt file and [] on a missing one; node --test dashboard-ui/tests/loki-notification-triggers-error.node.test.mjs shows an error lacks No triggers configured and an empty list keeps it | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
286
- | S-224 | BACKLOG 118: web-app receipt and cost trend show a partly priced run 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) | MEDIUM | node --test web-app/src/components/EvidenceReceiptPanel.cost.test.mjs: cost_partial true renders at least $1.20, absent keeps $1.20, a partial run's trend label carries (partial); cd web-app && npx tsc -b exits 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
287
- | S-225 | BACKLOG 118: 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) | LOW | bash tests/test-receipts-panel.sh exits 0 with the new leg asserting at least $X.XX only when cost_partial is true; bash tests/test-budget-banner-dedup.sh exits 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
288
- | S-226 | BACKLOG 106 class: loki stats reads unmeasured cost as $0.00 on both routes | autonomy/loki (cmd_stats only), loki-ts/src/commands/stats.ts, loki-ts/tests/commands/stats_unmeasured.test.ts (new), tests/test-stats-unmeasured-cost.sh (new) | MEDIUM | bash tests/test-stats-unmeasured-cost.sh exits 0 (all-zero records give cost_usd null and not recorded, same on both routes); cd loki-ts && bun test tests/commands/stats.test.ts tests/commands/stats_unmeasured.test.ts exits 0; bash tests/test-bash-bun-parity.sh exits 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
289
- | S-227 | BACKLOG 106 class: loki status prints Budget $0 for a run it never measured, on both routes | autonomy/loki (cmd_status budget block only), loki-ts/src/commands/status.ts (readBudgetField and its budget caller only), loki-ts/tests/commands/status.test.ts (budget legs only), tests/test-status-budget-unmeasured.sh (new) | MEDIUM | bash tests/test-status-budget-unmeasured.sh exits 0 (budget_used 0, null or absent prints not recorded on both routes, a positive value prints as today); cd loki-ts && bun test tests/commands/status.test.ts exits 0; bash tests/test-status-cli-provider-parity.sh exits 0 | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
290
- | S-228 | BACKLOG 121: DeployConnections pushes default not-connected states upward after its own fetch failed | web-app/src/components/DeployConnections.tsx (connect and disconnect handlers only), web-app/src/components/DeployConnections.propagate.test.mjs (new) | LOW | node --test web-app/src/components/DeployConnections.propagate.test.mjs shows no synthesized statuses reach onStatusChange after a failed fetch; node --test web-app/src/components/DeployConnections.state.test.mjs and cd web-app && npx tsc -b exit 0 | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
291
- | S-229 | BACKLOG 114: preview header says Detecting project type forever after a failed preview-info fetch | web-app/src/components/ProjectWorkspace.tsx (getPreviewInfo call ~839 and Detecting project type branch ~1877 only), web-app/src/components/ProjectWorkspace.preview.test.mjs (new) | LOW | node --test web-app/src/components/ProjectWorkspace.preview.test.mjs shows a rejected fetch renders Could not detect project type and lacks Detecting project type; node --test web-app/src/components/ProjectWorkspace.panels.test.mjs and cd web-app && npx tsc -b exit 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
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 | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
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 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
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 | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
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 | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
271
+ | S-209 | BACKLOG 99 (Bun): codex, cline and aider get the prompt without the commit-hygiene line | loki-ts/src/runner/providers.ts (codex, cline, aider invokers only), loki-ts/tests/runner/provider_commit_hygiene.test.ts (new), loki-ts/tests/runner/providers.test.ts (argv asserts only if moved) | MEDIUM | cd loki-ts && bun test tests/runner/provider_commit_hygiene.test.ts tests/runner/providers.test.ts exits 0: all three argvs carry the providers/codex.sh literal, claude not double-prefixed; removing the prefix fails the three legs | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 78f2f65d; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
272
+ | S-210 | Velocity: help-discoverability (29s) and completion-coverage (30s) probe loops under 10s each | tests/test-help-discoverability.sh, tests/test-completion-coverage.sh (probe loops only) | LOW | time bash tests/test-help-discoverability.sh and time bash tests/test-completion-coverage.sh each exit 0 with real under 10s; real_count and pass counts match the pre-change capture; both timings reported | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on d4fb8ad2; 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). |
273
+ | S-211 | BACKLOG 75: register the four suites no runner executes (Captain, after S-174 merges) | tests/run-all-tests.sh (four run_test lines only, after S-174 merges), tests/shard-durations.tsv (four lines) | LOW | grep -c -e test_managed_completion_flag -e test_managed_review_flag -e test-evidence-gate-no-tests -e test-voter-agents-json tests/run-all-tests.sh prints 8; bash tests/test-shard-coverage.sh exits 0; each suite ran 3 of 3 from a scratch cwd with no .loki/state/provider left | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on a04bbb7a; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
274
+ | S-212 | GUARDS 5, 12 and 13 still read PENDING after S-138, S-139 and S-154 landed (after S-181 merges) | docs/v10/GUARDS.md (sections 5, 12, 13 only; does not overlap S-181 section 11) | LOW | awk '/^## 12\./,0' docs/v10/GUARDS.md piped to grep -c 'PENDING, no slice cut' prints 0; bash tests/test-no-ambient-gitconfig-writes.sh and bash tests/test-v10-pulse.sh exit 0 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on bd135cb8; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
275
+ | S-213 | BACKLOG 123: cost.html and proofs.html council-vote labels have no test of their own | dashboard-ui/tests/static-council-vote-label.node.test.mjs (new) | LOW | node --test dashboard-ui/tests/static-council-vote-label.node.test.mjs passes (proofs.html council prefix and title, cost.html Council vote header); renaming the header or dropping the title in a scratch copy fails it | parked@2026-09-27T21:43Z | Source: 20:12Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit ce106a03 kept on branch worktree-wf_6fed529f-a3d-1. |
276
+ | S-214 | BACKLOG 147: P7 useMemo arm misses a factory that calls a registered fabricator | tests/moat/p7-no-fabricated-data.sh (HELPER_LOCAL_DECL_TMPL ~1182 and its use ~2186, ceiling comment ~978-986, one fixture beside the DECL_USEMEMO fixture ~3138-3160 only; does not overlap S-198) | HIGH | bash tests/moat/p7-no-fabricated-data.sh prints PASS for every P7 case and flags the composed useMemo fixture; removing the useMemo prefix in a scratch copy lets it through; git diff --stat tests/moat/cases.txt is empty | 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 657597c1 kept on branch worktree-wf_6fed529f-a3d-2. |
277
+ | S-215 | PR receipt renderer in proof-pr.sh imports json from the target repo (cwd shadow) | autonomy/lib/proof-pr.sh (render_evidence_receipt_md heredoc reader plus guarded _loki_snapshot_py_tool copy), tests/test-proof-pr-no-cwd-shadow.sh (new) | HIGH | bash tests/test-proof-pr-no-cwd-shadow.sh exits 0 (a planted json.py cannot forge the headline) and reverting to bare python3 - in a scratch copy fails it; bash tests/test-proven-pr-receipt.sh exits 0; bash tests/test-council-py-tool-identity.sh exits 0 and counts one more copy | 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 56a41332 kept on branch worktree-wf_6fed529f-a3d-3. |
278
+ | S-216 | loki verify inline readers import from the tree under review (cwd shadow) | autonomy/verify.sh (reader sites ~190, 591, 1269, 1271, 1295, 1337, 1339, 1441 plus guarded helper copy; not the unittest or py_compile runs), tests/test-verify-no-cwd-shadow.sh (new) | HIGH | bash tests/test-verify-no-cwd-shadow.sh exits 0 and reverting one site in a scratch copy fails it; bash tests/test-verify.sh exits 0; bash tests/moat/run.sh reports no rule failed; bash tests/test-council-py-tool-identity.sh exits 0 | 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 29eb5d3b kept on branch worktree-wf_6fed529f-a3d-4. |
279
+ | S-217 | BACKLOG 81: enforce_test_coverage package.json readers load user-site .pth | autonomy/run.sh (enforce_test_coverage _declared_test_script and _ws_script readers only; anchor on names), tests/test-enforce-test-coverage-pkg-readers-pth.sh (new) | HIGH | bash tests/test-enforce-test-coverage-pkg-readers-pth.sh exits 0 (a .pth no longer changes the recorded test gate outcome) and reverting one reader to -E in a scratch copy fails it; no .loki/state/provider left in the repo; bash tests/test-honest-gate-status.sh exits 0 | 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 67589d2d kept on branch worktree-wf_6fed529f-a3d-5. |
280
+ | S-218 | BACKLOG 131c: snapshot git status runs an agent-chosen core.fsmonitor command | autonomy/run.sh (_loki_untracked_status only), tests/test-untracked-status-fsmonitor.sh (new) | HIGH | bash tests/test-untracked-status-fsmonitor.sh exits 0 (no fsmonitor marker, real untracked file still listed) and removing the two -c flags in a scratch copy fails it; bash tests/test-no-ambient-gitconfig-writes.sh and bash tests/test-branch-lifecycle.sh exit 0 | 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 8e9bb0ae kept on branch worktree-wf_6fed529f-a3d-6. |
281
+ | S-219 | BACKLOG 83: a failed git add -A makes the session commit silently commit nothing | autonomy/run.sh (commit_session_changes git add -A block only), tests/test-session-commit-add-failure.sh (new) | MEDIUM | bash tests/test-session-commit-add-failure.sh exits 0: an empty embedded repo prints Left uncommitted naming the add failure, a normal repo still commits; removing the rc check in a scratch copy fails leg 1; bash tests/test-branch-lifecycle.sh exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
282
+ | S-220 | BACKLOG 109: untrack step's global reset drops force-staged agent files from the session commit | autonomy/run.sh (_loki_untrack_agent_committed_user_files only), tests/test-untrack-keeps-force-staged.sh (new) | MEDIUM | bash tests/test-untrack-keeps-force-staged.sh exits 0: git add -f dist/bundle.js lands in the session commit while the pre-existing user file stays untracked on disk; restoring git reset -q in a scratch copy fails it; bash tests/test-branch-lifecycle.sh exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
283
+ | S-221 | BACKLOG 123: audit.py verify exits 0 when it checked nothing | dashboard/audit.py (_unified_cli verify branch and docstring only; tip and prefix untouched), tests/dashboard/test_audit_verify_cli_nothing_checked.py (new) | MEDIUM | python3 -m pytest -q tests/dashboard/test_audit_verify_cli_nothing_checked.py: empty dir exits 2, valid chain 0, tampered 1, tip on an empty dir still 0; bash tests/test-audit-chain-honesty.sh and bash tests/test-audit-js-suites.sh exit 0 | 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 725adbf1 kept on branch worktree-wf_6fed529f-a3d-7. |
284
+ | S-222 | BACKLOG 118: skill-session WebSocket status push hardcodes running_agents 0 | dashboard/server.py (skill-session broadcast payload ~1030-1047 only), tests/dashboard/test_skill_session_ws_running_agents.py (new) | LOW | python3 -m pytest -q tests/dashboard/test_skill_session_ws_running_agents.py shows running_agents None on the skill-session push; restoring 0 fails it | 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 e41553cd kept on branch worktree-wf_6fed529f-a3d-8. |
285
+ | S-223 | BACKLOG 114/118: notification triggers read No triggers configured after a failed read | dashboard/server.py (get_notification_triggers only), dashboard-ui/components/loki-notification-center.js (_loadTriggers and triggers empty branch only), tests/dashboard/test_notification_triggers_unreadable.py (new), dashboard-ui/tests/loki-notification-triggers-error.node.test.mjs (new) | LOW | python3 -m pytest -q tests/dashboard/test_notification_triggers_unreadable.py shows triggers null with error on a corrupt file and [] on a missing one; node --test dashboard-ui/tests/loki-notification-triggers-error.node.test.mjs shows an error lacks No triggers configured and an empty list keeps it | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
286
+ | S-224 | BACKLOG 118: web-app receipt and cost trend show a partly priced run 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) | MEDIUM | node --test web-app/src/components/EvidenceReceiptPanel.cost.test.mjs: cost_partial true renders at least $1.20, absent keeps $1.20, a partial run's trend label carries (partial); cd web-app && npx tsc -b exits 0 | 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 3d463e79 kept on branch worktree-wf_6fed529f-a3d-9. |
287
+ | S-225 | BACKLOG 118: 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) | LOW | bash tests/test-receipts-panel.sh exits 0 with the new leg asserting at least $X.XX only when cost_partial is true; bash tests/test-budget-banner-dedup.sh exits 0 | 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 c9cd69c4 kept on branch worktree-wf_6fed529f-a3d-10. |
288
+ | S-226 | BACKLOG 106 class: loki stats reads unmeasured cost as $0.00 on both routes | autonomy/loki (cmd_stats only), loki-ts/src/commands/stats.ts, loki-ts/tests/commands/stats_unmeasured.test.ts (new), tests/test-stats-unmeasured-cost.sh (new) | MEDIUM | bash tests/test-stats-unmeasured-cost.sh exits 0 (all-zero records give cost_usd null and not recorded, same on both routes); cd loki-ts && bun test tests/commands/stats.test.ts tests/commands/stats_unmeasured.test.ts exits 0; bash tests/test-bash-bun-parity.sh exits 0 | 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 ea739eed kept on branch s-226-stats-unmeasured-cost. |
289
+ | S-227 | BACKLOG 106 class: loki status prints Budget $0 for a run it never measured, on both routes | autonomy/loki (cmd_status budget block only), loki-ts/src/commands/status.ts (readBudgetField and its budget caller only), loki-ts/tests/commands/status.test.ts (budget legs only), tests/test-status-budget-unmeasured.sh (new) | MEDIUM | bash tests/test-status-budget-unmeasured.sh exits 0 (budget_used 0, null or absent prints not recorded on both routes, a positive value prints as today); cd loki-ts && bun test tests/commands/status.test.ts exits 0; bash tests/test-status-cli-provider-parity.sh exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
290
+ | S-228 | BACKLOG 121: DeployConnections pushes default not-connected states upward after its own fetch failed | web-app/src/components/DeployConnections.tsx (connect and disconnect handlers only), web-app/src/components/DeployConnections.propagate.test.mjs (new) | LOW | node --test web-app/src/components/DeployConnections.propagate.test.mjs shows no synthesized statuses reach onStatusChange after a failed fetch; node --test web-app/src/components/DeployConnections.state.test.mjs and cd web-app && npx tsc -b exit 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
291
+ | S-229 | BACKLOG 114: preview header says Detecting project type forever after a failed preview-info fetch | web-app/src/components/ProjectWorkspace.tsx (getPreviewInfo call ~839 and Detecting project type branch ~1877 only), web-app/src/components/ProjectWorkspace.preview.test.mjs (new) | LOW | node --test web-app/src/components/ProjectWorkspace.preview.test.mjs shows a rejected fetch renders Could not detect project type and lacks Detecting project type; node --test web-app/src/components/ProjectWorkspace.panels.test.mjs and cd web-app && npx tsc -b exit 0 | 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 af232770 kept on branch worktree-wf_6fed529f-a3d-12. |
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
+ | 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
+ | 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). |
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 | merged@2026-09-27T22:55Z | 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. |
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/*/ | merged@2026-09-27T22:34Z | 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. |
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 | merged@2026-09-27T22:55Z | 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. |
299
+ | EV-7 | Task nonce fix: aiq-52 and the 14 qs tasks print LOKI_EVAL_NONCE only after all assertions pass | eval/loki10/tasks/aiq-52-searchbar, eval/loki10/tasks/qs-* | MEDIUM | a no-op baseline over all 29 tasks grades every task not completed, none task_invalid | merged@2026-09-27T22:55Z | Found by the EV-1 audit: 15 tasks could never pass under nonce grading. Assigned to the EV-1 builder with the baseline run. 1a17ad92 (15 tasks print the nonce after assertions; aiq-52 genuine pass at b65b0752 "Tests 3 passed (3)"); main 694866fc. |
300
+ | EV-4 | Raw claude -p arm: real runs on the gate tasks at the gate model and budget | eval/loki10 results under eval/loki10/results/ (gitignored) plus a summary | HIGH | eval/loki10/run.sh --arm raw-claude --task <id> records completed, time_to_pr_s and provider cost | merged@2026-09-27T23:17Z | Smoke on 3 public tasks now, from a scratch clone of the EV-1 branch with EV-3 merged; the full arm runs when EV-1 lands. Smoke 23:02Z: 3/3 completed, p50 34s, p90 45s, $0.1944 per completed (`summarize --markdown`), 0 capped; full 29-task arm runs next. Full arm: 27/29, p50 39s, p90 68s, $0.2363 per completed (results in ~/loki-ci-logs/eval-raw-claude-20260927T231653Z). |
301
+ | EV-5 | Legacy arm: loki start at the same model and 15-minute cap | same as EV-4 | HIGH | eval/loki10/run.sh --arm legacy --task <id> records completed or capped | building@2026-09-27T22:44Z | Smoke on 1 public task now; capped runs score not completed. Smoke on pub-more-itertools-1192: hidden_pass true, pr_opened false, completed false (results row; arm_stdout.log: "committed as 4f3f20a ... but not pushed ... this session's rules say commits stay local only"); full 29-task arm started 23:27Z. Budget exception: a 29-task measurement at a 900s cap per task and --parallel 3 runs up to about 150 minutes by design (agent status 23:32Z); it is a measurement, not a build. |
302
+ | EV-6 | Gate report: results into docs/v10/METRICS.md and the CHANGELOG block (completion rate, p50/p90 time to PR, cost per completed task, misses) | eval/loki10/summarize, docs/v10/METRICS.md | MEDIUM | eval/loki10/summarize --markdown over the three arms renders every gate number, including misses | merged@2026-09-28T00:27Z | Runs after the first full arm pass; Chief of Staff publishes. Staffed in engine10-gate-push (wf_1d47133f-7c7). Review APPROVE (publish_gate.sh and test-publish-gate.sh); merges together with E-33 (its test is red without gate_report.py). Merged 23b20e6f (train E12): shard coverage 19/0, drift 6/0, engine10 349 pass 0 fail, tsc exit 0. test-publish-gate 11/0. |
303
+ | E-00 | ORPHAN guard: pulse flags long-running worktree run.sh and /tmp/loki-run-*.sh processes; timeout -k 10 on run.sh/loki launches | scripts/v10-pulse.sh, tests/test-v10-pulse.sh, tests/test-timeout-escalates.sh, about 50 test launch sites | MEDIUM | bash tests/test-v10-pulse.sh and bash tests/test-timeout-escalates.sh | merged@2026-09-27T22:24Z | D29 incident guard. Review CONCERN (guard matched only literal paths); rework b26c102a catches $LOKI and TBIN-style launches (reviewer mutation on test-why-honest-report.sh goes red: `bash tests/test-timeout-escalates.sh` 0 passed, 1 failed). Main a5f049d2 pushed 22:24:22 (`git ls-remote origin refs/heads/main` = a5f049d2); pulse 90 passed, 0 failed. |
304
+ | E-01 | Event log, schema and shared types | loki-ts/src/engine10/events.ts, loki-ts/src/engine10/types.ts, loki-ts/tests/engine10/events.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/events.test.ts | merged@2026-09-27T22:11Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on none Phase A (wf_f5dde039-0c5), build then review. Review CONCERN on e825568c (stale deep limits and push mode vs revised ENGINE.md), fixed in 4138471f; main 4138471f pushed 22:10:59 (`git ls-remote origin refs/heads/main` = 4138471f; tests/engine10 25 pass, 0 fail). |
305
+ | E-02 | State machine skeleton, resume, cap, optional loader | loki-ts/src/engine10/machine.ts, loki-ts/tests/engine10/machine.test.ts, loki-ts/tests/engine10/budget.test.ts | HIGH | cd loki-ts && bun test tests/engine10/machine.test.ts tests/engine10/budget.test.ts | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01 Phase B (engine10-phaseB), build then review. Review CONCERN; rework in engine10-phaseB-rework. 761fbad8 (HIGH re-review APPROVE); main 694866fc pushed 22:55:38 (`git ls-remote origin refs/heads/main` = 694866fc; tests/engine10 plus spawn guard 185 pass, 0 fail; tsc 0 errors). |
306
+ | E-03 | Supervisor/worker split, Rule of Two, engine.json marker | loki-ts/src/engine10/supervisor.ts, loki-ts/src/engine10/worker.ts, loki-ts/tests/engine10/rule_of_two.test.ts | HIGH | cd loki-ts && bun test tests/engine10/rule_of_two.test.ts | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01, E-02 Phase B (engine10-phaseB), build then review. Review CONCERN; rework in engine10-phaseB-rework. 1b08ea30 (HIGH re-review APPROVE); main 694866fc pushed 22:55:38 (`git ls-remote origin refs/heads/main` = 694866fc; tests/engine10 plus spawn guard 185 pass, 0 fail; tsc 0 errors). |
307
+ | E-04 | Intake (no PRD, already-done detection) | loki-ts/src/engine10/stages/intake.ts, loki-ts/src/engine10/fetch_issue.ts, loki-ts/src/engine10/repomap.ts, loki-ts/tests/engine10/intake.test.ts, loki-ts/tests/engine10/fixtures/intake/ | MEDIUM | cd loki-ts && bun test tests/engine10/intake.test.ts | merged@2026-09-27T22:36Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-02, E-03 Phase B (engine10-phaseB), build then review. 518f7e89 (review APPROVE); on main (`git ls-remote origin refs/heads/main` = 646701bc; tests/engine10 88 pass, 0 fail; tsc 0 errors). |
308
+ | E-05 | Test map and real runner detection | loki-ts/src/engine10/testmap.ts, loki-ts/tests/engine10/testmap.test.ts, loki-ts/tests/engine10/fixtures/testmap/ | MEDIUM | cd loki-ts && bun test tests/engine10/testmap.test.ts | merged@2026-09-27T22:36Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on none Phase A (wf_f5dde039-0c5), build then review. Review CONCERN (fixture path, evidence, commands, bunfig, reference grep); rework in phase B. a0cbc7b8 (rework review APPROVE); on main (`git ls-remote origin refs/heads/main` = 646701bc; tests/engine10 88 pass, 0 fail; tsc 0 errors). |
309
+ | E-06 | Cost capture into cost-summary.py records | loki-ts/src/engine10/cost.ts, loki-ts/tests/engine10/cost.test.ts, loki-ts/tests/engine10/fixtures/cost/ | MEDIUM | cd loki-ts && bun test tests/engine10/cost.test.ts | merged@2026-09-27T22:11Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on none Phase A (wf_f5dde039-0c5), build then review. Review APPROVE on c5a7d395 (cherry-picked 33327ca1); main 4138471f. Follow-up: write .loki/metrics/efficiency/iteration-N.json per ENGINE.md section 10. E-06b efficiency records (d65d90e2, review APPROVE) plus cost_source provider in 4cc3da48. |
310
+ | E-07 | Session wrapper (process group, heartbeat, model override) | loki-ts/src/engine10/session.ts, loki-ts/tests/engine10/session.test.ts, loki-ts/tests/engine10/fixtures/session/ | MEDIUM | cd loki-ts && bun test tests/engine10/session.test.ts | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01, E-06 Phase B (engine10-phaseB), build then review. Review CONCERN; rework in engine10-phaseB-rework. 6c2f9f07 (re-review CONCERN was a test gap only; follow-up E-TG); main 694866fc pushed 22:55:38 (`git ls-remote origin refs/heads/main` = 694866fc; tests/engine10 plus spawn guard 185 pass, 0 fail; tsc 0 errors). |
311
+ | E-08 | Implement stage and brief | loki-ts/src/engine10/stages/implement.ts, loki-ts/tests/engine10/implement.test.ts, loki-ts/tests/engine10/fixtures/implement/ | MEDIUM | cd loki-ts && bun test tests/engine10/implement.test.ts | merged@2026-09-27T22:36Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-05, E-07 Phase B (engine10-phaseB), build then review. 646701bc (review APPROVE); on main (`git ls-remote origin refs/heads/main` = 646701bc; tests/engine10 88 pass, 0 fail; tsc 0 errors). |
312
+ | E-09 | Fast verify | loki-ts/src/engine10/stages/verify.ts, loki-ts/tests/engine10/verify.test.ts, loki-ts/tests/engine10/fixtures/verify/ | MEDIUM | cd loki-ts && bun test tests/engine10/verify.test.ts | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-02, E-05 Phase B (engine10-phaseB), build then review. Review CONCERN; rework in engine10-phaseB-rework. 779983fa (re-review CONCERN was a test gap only; follow-up E-TG); main 694866fc pushed 22:55:38 (`git ls-remote origin refs/heads/main` = 694866fc; tests/engine10 plus spawn guard 185 pass, 0 fail; tsc 0 errors). |
313
+ | E-10 | Seal (signed receipt, NOT PROVEN) | loki-ts/src/engine10/stages/seal.ts, loki-ts/tests/engine10/seal.test.ts | HIGH | cd loki-ts && bun test tests/engine10/seal.test.ts | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01, E-09 Phase B (engine10-phaseB), build then review. Review CONCERN; rework in engine10-phaseB-rework. 5b53ccb0 (HIGH re-review APPROVE); main 694866fc pushed 22:55:38 (`git ls-remote origin refs/heads/main` = 694866fc; tests/engine10 plus spawn guard 185 pass, 0 fail; tsc 0 errors). |
314
+ | E-11 | Trusted push and PR | autonomy/lib/engine10-push.sh, loki-ts/src/engine10/stages/pr.ts, tests/test-engine10-push.sh, loki-ts/tests/engine10/pr.test.ts | HIGH | bash tests/test-engine10-push.sh | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-03, E-10 Shell half (engine10-push.sh) building early (wf_f70c455a-69e); stages/pr.ts after E-01. Shell half (engine10-push.sh) review APPROVE on 1a6bc2c4, merged in main 6f2dfd9c (`bash tests/test-engine10-push.sh` 15 passed, 0 failed); stages/pr.ts still to build. TS half (stages/pr.ts) building as E-11b in engine10-wave2. TS half 2a3e3264 review APPROVE; main 694866fc. |
315
+ | E-12 | CLI entry behind LOKI_ENGINE=v10 | loki-ts/src/engine10/cli.ts, loki-ts/src/cli.ts (case engine10 before default at line 303), bin/loki (block between lines 244 and 246), tests/test-engine10-dispatch.sh, loki-ts/tests/engine10/cli.test.ts | MEDIUM | bash tests/test-engine10-dispatch.sh | merged@2026-09-27T22:18Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-03 Building early (wf_f70c455a-69e), build then review. Review CONCERN (one-word v10 routing trusted the telemetry allowlist, missing estimate/intent/outcomes); fixed in 6f2dfd9c (one-word args stay legacy; `bash tests/test-engine10-dispatch.sh` 33 passed, 0 failed); main 6f2dfd9c pushed 22:17:49. |
316
+ | E-13 | Live output and 5-line summary | loki-ts/src/engine10/output.ts, loki-ts/tests/engine10/output.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/output.test.ts | merged@2026-09-27T22:36Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01 Wave 1b (wf_60ffc02a-bf8). b15b2112 (review CONCERN fixed in 4cc3da48: tokens-null wording, injected missing eta path, import errors rethrown); on main (`git ls-remote origin refs/heads/main` = 646701bc; tests/engine10 88 pass, 0 fail; tsc 0 errors). |
317
+ | E-14 | Thin-path end to end | loki-ts/tests/engine10/e2e.test.ts, loki-ts/tests/engine10/fixtures/e2e/ | MEDIUM | cd loki-ts && bun test tests/engine10/e2e.test.ts | parked@2026-09-27T23:36Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01 through E-13 engine10-integrate (wf_c7ce2eb5-e8f). Built 9d9ff7d2 (first real v10 run: 30s, hidden pass, $0.45); HIGH review CONCERN (green only via run.ts glue, over the 5,000-line budget with it); held, absorbed by E-42. Stopped and re-sliced (CEO 23:31Z): its work (9d9ff7d2) is absorbed by E-42, which deletes the run.ts glue. |
318
+ | E-15 | Wall author (blind, hashed) | loki-ts/src/engine10/stages/wall.ts, loki-ts/tests/engine10/wall.test.ts, loki-ts/tests/engine10/fixtures/wall/ | MEDIUM | cd loki-ts && bun test tests/engine10/wall.test.ts | merged@2026-09-27T23:26Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-02, E-04, E-07 Wave 2 (engine10-wave2). engine10-integrate (wf_c7ce2eb5-e8f). Review APPROVE (9a463171); main 44731e0f pushed 23:25:50 (tests/engine10 plus spawn guard 334 pass, 0 fail; engine10 4923 lines). |
319
+ | E-16 | Plan (10 lines or fewer) | loki-ts/src/engine10/stages/plan.ts, loki-ts/tests/engine10/plan.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/plan.test.ts | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-02, E-04, E-07 Wave 2 (engine10-wave2). 03ffe6b8 (review APPROVE); main 694866fc pushed 22:55:38 (`git ls-remote origin refs/heads/main` = 694866fc; tests/engine10 plus spawn guard 185 pass, 0 fail; tsc 0 errors). |
320
+ | E-17 | Fix rounds and failure grouping | loki-ts/src/engine10/stages/fix.ts, loki-ts/src/engine10/failures.ts, loki-ts/tests/engine10/fix.test.ts, loki-ts/tests/engine10/failures.test.ts, loki-ts/tests/engine10/fixtures/failures/ | MEDIUM | cd loki-ts && bun test tests/engine10/fix.test.ts tests/engine10/failures.test.ts | merged@2026-09-27T23:26Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-07, E-09 Wave 2 (engine10-wave2). engine10-integrate (wf_c7ce2eb5-e8f). Review APPROVE (d88a1078); main 44731e0f pushed 23:25:50 (tests/engine10 plus spawn guard 334 pass, 0 fail; engine10 4923 lines). |
321
+ | E-18 | Per-repo cache by tree hash | loki-ts/src/engine10/cache.ts, loki-ts/tests/engine10/cache.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/cache.test.ts | merged@2026-09-27T23:26Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-04, E-05 Wave 2 (engine10-wave2). engine10-integrate (wf_c7ce2eb5-e8f). Review APPROVE (9816234f); main 44731e0f pushed 23:25:50 (tests/engine10 plus spawn guard 334 pass, 0 fail; engine10 4923 lines). |
322
+ | E-19 | Hard cap and DRAFT PR body | loki-ts/src/engine10/pr_body.ts, loki-ts/tests/engine10/cap.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/cap.test.ts | merged@2026-09-27T23:26Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-02, E-07, E-11 engine10-integrate (wf_c7ce2eb5-e8f). Review APPROVE (028fcaf0); main 44731e0f pushed 23:25:50 (tests/engine10 plus spawn guard 334 pass, 0 fail; engine10 4923 lines). |
323
+ | E-20 | ETA | loki-ts/src/engine10/eta.ts, loki-ts/tests/engine10/eta.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/eta.test.ts | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-13, E-18 Wave 2 (engine10-wave2). e22aace4 (review APPROVE); main 694866fc pushed 22:55:38 (`git ls-remote origin refs/heads/main` = 694866fc; tests/engine10 plus spawn guard 185 pass, 0 fail; tsc 0 errors). |
324
+ | E-21 | loki status | loki-ts/src/engine10/status.ts, loki-ts/tests/engine10/status.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/status.test.ts | merged@2026-09-27T23:26Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-01, E-12 Wave 2 (engine10-wave2). engine10-integrate (wf_c7ce2eb5-e8f). Review APPROVE (a5cabf83); main 44731e0f pushed 23:25:50 (tests/engine10 plus spawn guard 334 pass, 0 fail; engine10 4923 lines). |
325
+ | E-22 | loki verify | loki-ts/src/engine10/verify_cmd.ts, loki-ts/tests/engine10/verify_cmd.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/verify_cmd.test.ts | merged@2026-09-27T23:26Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-10 Wave 2 (engine10-wave2). engine10-integrate (wf_c7ce2eb5-e8f). Review APPROVE (11ebbe89); main 44731e0f pushed 23:25:50 (tests/engine10 plus spawn guard 334 pass, 0 fail; engine10 4923 lines). |
326
+ | E-23 | Deep verify (async, token-less worker) | loki-ts/src/engine10/stages/deep.ts, loki-ts/tests/engine10/deep.test.ts, loki-ts/tests/engine10/fixtures/deep/ | MEDIUM | cd loki-ts && bun test tests/engine10/deep.test.ts | merged@2026-09-27T23:26Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-03, E-10, E-11 engine10-integrate (wf_c7ce2eb5-e8f). Review APPROVE (854c93f9); main 44731e0f pushed 23:25:50 (tests/engine10 plus spawn guard 334 pass, 0 fail; engine10 4923 lines). |
327
+ | E-24 | Dashboard over SSE | loki-ts/src/engine10/dashboard/server.ts, loki-ts/src/engine10/dashboard/page.ts, loki-ts/tests/engine10/dashboard.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/dashboard.test.ts | merged@2026-09-27T23:13Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-01, E-12 Wave 3 (engine10-wave3). Review APPROVE on 85d398e4; tests/engine10 plus spawn guard 231 pass, 0 fail; test-engine10-push-gitlab 20 passed. |
328
+ | E-25 | Adapter interface and GitHub adapter | loki-ts/src/engine10/adapters/types.ts, loki-ts/src/engine10/adapters/index.ts, loki-ts/src/engine10/adapters/github.ts, loki-ts/tests/engine10/adapters_github.test.ts, loki-ts/tests/engine10/fixtures/adapters-github/ | MEDIUM | cd loki-ts && bun test tests/engine10/adapters_github.test.ts | merged@2026-09-27T23:13Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-04, E-11 Wave 3 (engine10-wave3). Review APPROVE on cf1a390f; tests/engine10 plus spawn guard 231 pass, 0 fail; test-engine10-push-gitlab 20 passed. |
329
+ | E-26 | GitLab adapter (issue in, MR out) | loki-ts/src/engine10/adapters/gitlab.ts, autonomy/lib/engine10-push-gitlab.sh, loki-ts/tests/engine10/adapters_gitlab.test.ts, tests/test-engine10-push-gitlab.sh, loki-ts/tests/engine10/fixtures/adapters-gitlab/ | HIGH | bash tests/test-engine10-push-gitlab.sh | merged@2026-09-27T23:13Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-25 Wave 3 (engine10-wave3). Review APPROVE on e96cb3f4 (HIGH review APPROVE); tests/engine10 plus spawn guard 231 pass, 0 fail; test-engine10-push-gitlab 20 passed. |
330
+ | E-27 | Jira read adapter | loki-ts/src/engine10/adapters/jira.ts, loki-ts/tests/engine10/adapters_jira.test.ts, loki-ts/tests/engine10/fixtures/adapters-jira/ | MEDIUM | cd loki-ts && bun test tests/engine10/adapters_jira.test.ts | merged@2026-09-27T23:13Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-25 Wave 3 (engine10-wave3). Review APPROVE on 410fdc06; tests/engine10 plus spawn guard 231 pass, 0 fail; test-engine10-push-gitlab 20 passed. |
331
+ | E-28 | Slack notify adapter | loki-ts/src/engine10/adapters/slack.ts, loki-ts/tests/engine10/adapters_slack.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/adapters_slack.test.ts | merged@2026-09-27T23:13Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-13, E-25 Wave 3 (engine10-wave3). Review APPROVE on cda6ffdb; tests/engine10 plus spawn guard 231 pass, 0 fail; test-engine10-push-gitlab 20 passed. |
332
+ | E-29 | Escalation (--deep, logged auto) | loki-ts/src/engine10/escalate.ts, loki-ts/tests/engine10/escalate.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/escalate.test.ts | merged@2026-09-27T23:13Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-02, E-16 Wave 3 (engine10-wave3). Review APPROVE on dd453b7b; tests/engine10 plus spawn guard 231 pass, 0 fail; test-engine10-push-gitlab 20 passed. |
333
+ | E-30 | Legacy alias contract (golden routes) | tests/test-engine10-legacy-contract.sh, tests/fixtures/engine10-legacy-routes.txt | MEDIUM | bash tests/test-engine10-legacy-contract.sh | merged@2026-09-27T22:36Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-12 Building early (wf_f70c455a-69e), build then review. Review CONCERN (no Bun row with extra args); rework in wf_60ffc02a-bf8. 77927604 (review APPROVE); on main (`git ls-remote origin refs/heads/main` = 646701bc; tests/engine10 88 pass, 0 fail; tsc 0 errors). |
334
+ | E-41 | Local-origin push mode so a v10 run can open a "PR" in the eval (bare local origin only, no credentials, hooks env scrubbed) | autonomy/lib/engine10-push.sh, loki-ts/src/engine10/stages/pr.ts, tests/test-engine10-push.sh, loki-ts/tests/engine10/pr.test.ts | HIGH | bash tests/test-engine10-push.sh | merged@2026-09-27T23:26Z | dea31627 plus review fixes; HIGH review CONCERN non-blocking (no remote reached the local path, no token reached any hook); main 44731e0f; test-engine10-push 36 passed. |
335
+ | E-42 | Real entry runs end to end: supervisor and worker main, pr stage only in the supervisor with the pinned origin, stage exports, seal commit fix, CLI invoker markers, in-engine cost records, real model id; absorbs and deletes run.ts | loki-ts/src/engine10/{supervisor,worker,session,cost}.ts, stages/*, tests/engine10/e2e.test.ts | HIGH | LOKI_ENGINE=v10 LOKI_TS_ENTRY=<abs>/loki-ts/src/cli.ts bin/loki "<task>" --no-pr, then eval/loki10/run.sh --arm v10 --task pub-more-itertools-1192 | merged@2026-09-28T00:04Z | engine10-e42 (wf_2111e96d-f6e). Merged 9db2a4ed (train E10, cherry-picked 71a7ac36, 260b034d, 8a6f77dd); train head bun test tests/engine10/ 346 pass 0 fail, tsc exit 0. |
336
+ | E-43 | Stage cost knobs (plan and wall on/off and tier, fix rounds) so the eval measures the full design and cheaper variants | loki-ts/src/engine10/knobs.ts, loki-ts/tests/engine10/knobs.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/knobs.test.ts | parked@2026-09-28T00:04Z | engine10-e42. TL CONCERN (reproduced): defaults planning/development match neither live literal (plan fast, wall planning), a silent cost rise. Parked, superseded by E-45 (same plan/wall tier control, cost-directed); engine has about 12 lines of budget left. |
337
+ | E-44 | Output fixes: status column spacing; token count includes cache tokens | loki-ts/src/engine10/output.ts, loki-ts/tests/engine10/output.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/output.test.ts | merged@2026-09-28T00:04Z | engine10-e42. Merged 9db2a4ed (31ce71a0); TL APPROVE. |
338
+ | E-45 | Cost path for the gate: small tasks skip the separate plan call (implementer plans), Wall author pinned to sonnet with a short prompt and the cached repo map; variant recorded | loki-ts/src/engine10/sizing.ts, loki-ts/tests/engine10/sizing.test.ts, plan/wall wiring | HIGH | cd loki-ts && bun test tests/engine10/sizing.test.ts, then a 5-task v10 measurement before the full arm | building@2026-09-28T00:27Z | CEO directive 23:31Z: target cost per completed task at or below $0.2363 (raw claude -p baseline). engine10-gate-push. Opus CONCERN (reproduced): repomap caps at 2000 files so the over-3000 rule never fires; truncated map must size normal. Rework dispatched with a Wall tier assertion. |
339
+ | E-52 | Eval harness passes LOKI_TS_ENTRY and an allowlist of LOKI_E10_* knobs to the v10 arm (dropped today, so knobs never reach the run) | eval/loki10/harness.py (arm_env only), eval/loki10/test-harness.sh (one leg) | HIGH | bash eval/loki10/test-harness.sh; a leg asserts LOKI_E10_PLAN reaches the arm env and GH_TOKEN does not | ready@2026-09-28T00:06Z | Source: E-42 real run finding 1. |
340
+ | E-53 | Verify runs pytest with the repo's own interpreter (.venv/bin/python, venv/bin/python) when present, not bare python -m pytest (always PARTIAL on venv repos) | loki-ts/src/engine10/testmap.ts (pytest command only), loki-ts/tests/engine10/testmap.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/testmap.test.ts; fixture with .venv/bin/python selects it | ready@2026-09-28T00:06Z | Source: E-42 finding 2. Net line change must be 10 or fewer (budget). |
341
+ | E-54 | A killed or timed-out Wall author never copies its test file into the repo | loki-ts/src/engine10/stages/wall.ts (kill path only), loki-ts/tests/engine10/wall.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/wall.test.ts; aborted wall leaves git status clean | ready@2026-09-28T00:06Z | Source: E-42 finding 3. |
342
+ | E-55 | Seal marks NOT PROVEN when the diff edits or deletes a pre-existing test file (implement weakening tests) | loki-ts/src/engine10/stages/seal.ts (check only), loki-ts/tests/engine10/seal.test.ts | HIGH | cd loki-ts && bun test tests/engine10/seal.test.ts; fixture diff touching an existing test yields a NOT PROVEN entry naming the file | ready@2026-09-28T00:06Z | Source: E-42 finding 4. Opus reviewer (Seal). |
343
+ | E-56 | Verify matches Wall test paths repo-relative (absolute vs relative mismatch drops the Wall test from fast verify) | loki-ts/src/engine10/stages/verify.ts (path normalize only), loki-ts/tests/engine10/verify.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/verify.test.ts; absolute Wall path is selected | ready@2026-09-28T00:06Z | Source: E-42 finding 5. |
344
+ | E-57 | Line reclaim: engine10 back to 4,700 or fewer by deleting dead exports and duplicated helpers, no behavior change | loki-ts/src/engine10/ (deletions only, no new files) | LOW | cd loki-ts && bun test tests/engine10/ && bunx tsc --noEmit; budget.test count at or below 4700 | ready@2026-09-28T00:06Z | Source: train E10 hit 5,019 and needed a header trim; E-36, E-45 and E-52..E-56 need room. Merge after the gate-path slices to avoid conflicts. |
345
+ | EV-10 | Harness reaps arm descendants that escape the timeout process group: after the cap, KILL recorded PIDs under the run clone (.loki/**/*.pid) and processes whose cwd is inside that run-owned clone; guard in docs/v10/GUARDS.md | eval/loki10/harness.py (kill_orphans only), eval/loki10/test-harness.sh (one leg), docs/v10/GUARDS.md (one entry) | HIGH | bash eval/loki10/test-harness.sh; a fixture arm that setsid-spawns a sleeper leaves no live process after the cap | ready@2026-09-28T00:09Z | Source: incident 00:08Z, pulse ORPHAN_WORKTREE caught 4 legacy /tmp/loki-run-*.sh loops (ppid 1, 30 min, 15-min cap) plus 2 sleep 300 children from run dir loki-run.u6ikBxCT; stopped by PID (kill -TERM 58249 58251 58633 58634 57049 56916, ps -p afterwards empty). Never match by name. |
346
+ | E-58 | Issue-ref runs: supervisor creates runDir before the fetch child writes issue.json; makes E-47 green | loki-ts/src/engine10/supervisor.ts (one line before fetchIssueToFile), E-47 test files from 544348a7 | MEDIUM | cd loki-ts && bun test tests/engine10/issue_ref_e2e.test.ts (3 pass) | ready@2026-09-28T00:14Z | Source: E-47 finding (TL reproduced). |
347
+ | E-59 | Receipt model and summary tokens match the provider: cost.ts takes model from the result-cost file; events.ts fold sums cache read and creation tokens; makes E-50 green | loki-ts/src/engine10/cost.ts, loki-ts/src/engine10/events.ts, E-50 test files from 716618d4 | HIGH | cd loki-ts && bun test tests/engine10/model_report.test.ts tests/engine10/output.test.ts | ready@2026-09-28T00:14Z | Source: E-50 finding. Reconcile with E-44 (output.ts already folds cache tokens at render). Opus reviewer (cost numbers feed the gate). |
348
+ | EV-8 | v10 cost check on 5 tasks before the full arm (CEO 23:31Z): v10 arm, same model, after E-42 and E-45 merge | eval/loki10 results (gitignored) plus docs/v10/METRICS.md block | HIGH | eval/loki10/run.sh --arm v10 --tasks <5 ids> reports completed, time to PR and provider cost per task | ready@2026-09-27T23:48Z | Target cost per completed task at or below $0.2363 (raw claude -p full arm). Depends on E-42, E-45, E-38 (--tasks). |
349
+ | EV-9 | v10 full arm over the 29 tasks from the shipped entry, then EV-6 publishes the gate report | eval/loki10 results plus docs/v10/METRICS.md and the CHANGELOG block | HIGH | eval/loki10/run.sh --arm v10 --all yields 29 rows, none arm_unavailable; eval/loki10/publish_gate.sh writes the loki10-gate marker | ready@2026-09-27T23:48Z | Depends on EV-8 meeting cost, E-32, E-33, EV-6. |
350
+ | E-46 | Wire --resume end to end through the supervisor (refused today) | loki-ts/src/engine10/supervisor.ts (resume path only), loki-ts/tests/engine10/resume_cli.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/resume_cli.test.ts | ready@2026-09-27T23:48Z | Found by E-14 (resume refused). Depends on E-42. |
351
+ | E-47 | Issue-ref run end to end (owner/repo#N and URL) through the fetch child with a stub gh | loki-ts/tests/engine10/issue_ref_e2e.test.ts, loki-ts/tests/engine10/fixtures/issue-ref/ | MEDIUM | cd loki-ts && bun test tests/engine10/issue_ref_e2e.test.ts | approved@2026-09-28T00:14Z | Found by E-14 (issue refs wired but untested). Depends on E-42. Staffed in engine10-tests-e42, based on the E-42 branch. Built 544348a7, TL APPROVE: 3 tests red for one real bug (supervisor.ts fetchIssueToFile before runDir exists, ENOENT exit 2). Held; merges with E-58. |
352
+ | E-48 | Spawn deep verify detached from the supervisor after pr.opened, and wire adapters notify (Slack) after run.completed | loki-ts/src/engine10/supervisor.ts (post-PR hook only), loki-ts/tests/engine10/deep_wiring.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/deep_wiring.test.ts | ready@2026-09-27T23:48Z | E-23 and E-28 exist but nothing calls them. Depends on E-42. |
353
+ | E-49 | loki dashboard reachable through the real entry: serves a run folded from a fixture event log | loki-ts/tests/engine10/dashboard_entry.test.ts | LOW | cd loki-ts && bun test tests/engine10/dashboard_entry.test.ts | ready@2026-09-27T23:48Z | E-24 exists; this proves the cli route reaches it. Depends on E-42. |
354
+ | E-50 | Receipt model field and summary token count match the provider report on a real SDK session (fixture replay of a recorded result-cost file) | loki-ts/tests/engine10/model_report.test.ts, loki-ts/tests/engine10/fixtures/model-report/ | MEDIUM | cd loki-ts && bun test tests/engine10/model_report.test.ts | approved@2026-09-28T00:14Z | Found by E-14 (model "default", 1k tokens shown for 372k used). Depends on E-42, E-44. Staffed in engine10-tests-e42, based on the E-42 branch. Built 716618d4, TL APPROVE: 2 tests red for real bugs (cost.ts writes caller model not provider model; events.ts fold drops cache tokens, 1004 vs 373164). Held; merges with E-59. |
355
+ | E-51 | v10 run passes the pinned origin and the task through to a local-origin PR in the eval harness (regression test of the E-41 plus E-42 path) | loki-ts/tests/engine10/eval_pr_path.test.ts | HIGH | cd loki-ts && bun test tests/engine10/eval_pr_path.test.ts (bare local origin receives the branch; pr.opened url is local://) | merged@2026-09-28T00:14Z | Guards the path that lets v10 score in the gate. Depends on E-41, E-42. Staffed in engine10-tests-e42, based on the E-42 branch. Merged (cherry-pick of 018fbcd4 onto main): bun test tests/engine10/eval_pr_path.test.ts 1 pass 0 fail; TL APPROVE with mutation (env scrub removed -> canary leak caught). |
356
+ | E-31 | Default flip to v10 with LOKI_ENGINE=legacy override and the loki legacy alias (merge held until the gate marker reads met) | bin/loki, loki-ts/src/engine10/cli.ts (USAGE only), tests/test-engine10-default.sh, tests/test-engine10-dispatch.sh, tests/test-engine10-legacy-contract.sh, README.md and docs/v10/GUIDE.md (marked opt-in line only, after E-34) | HIGH | bash tests/test-engine10-default.sh && bash tests/test-engine10-legacy-contract.sh && bash tests/test-engine10-dispatch.sh (0 failed; legacy contract 0 skipped) | building@2026-09-27T23:36Z | Source: ENGINE.md 23:00Z cut. Held at approved until the METRICS.md loki10-gate marker reads met; parked if not met by 03:00Z. Depends on E-30, E-32, E-33, E-34, E-35, E-38, EV-6. Staffed in engine10-gate-push (wf_1d47133f-7c7). |
357
+ | E-32 | Packaging: engine runs from dist and the npm package (static registry, session child via cli route, REPO_ROOT paths) | loki-ts/src/engine10/registry.ts, loki-ts/src/cli.ts (engine10 arm only), loki-ts/src/engine10/machine.ts, loki-ts/src/engine10/session.ts, loki-ts/src/engine10/output.ts, loki-ts/src/engine10/fetch_issue.ts, loki-ts/src/engine10/stages/pr.ts, loki-ts/tests/engine10/registry.test.ts, tests/test-engine10-dist.sh | HIGH | bash tests/test-engine10-dist.sh && (cd loki-ts && bun test tests/engine10/registry.test.ts) | building@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. Later engine slices add one registry line at merge. Depends on E-14, E-TG. Staffed in engine10-gate-push (wf_1d47133f-7c7). Built f44797bf+0b859361, APPROVE; conflicts with E-42 in session.ts. Rebase dispatched. |
358
+ | E-33 | Gate report generator: METRICS.md and CHANGELOG blocks with every gate number, misses and the loki10-gate marker | eval/loki10/gate_report.py, eval/loki10/test-gate-report.sh, eval/loki10/fixtures/gate/ | HIGH | bash eval/loki10/test-gate-report.sh | merged@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. EV-6 runs it on real results and commits METRICS.md. Depends on EV-1. Building in a private clone (worktrees full). Built 06c457b8; review CONCERN (one-model check not covered by a test); fix in engine10-gate-push. Merged 23b20e6f (train E12): shard coverage 19/0, drift 6/0, engine10 349 pass 0 fail, tsc exit 0. Fix 4eb826b2 APPROVE; test-gate-report 34/0. |
359
+ | E-34 | v10 user docs: README quickstart and docs/v10/GUIDE.md (5-line summary, NOT PROVEN, receipts), opt-in until the flip | README.md, docs/v10/GUIDE.md, tests/test-engine10-docs.sh | LOW | bash tests/test-engine10-docs.sh | building@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. Depends on E-13, E-22. Building in a private clone (worktrees full). Stopped over budget (CEO 23:31Z); built 9716677f; re-sliced to a 15-minute review in engine10-gate-push. Re-review APPROVE, but README says the run does not execute a build yet, false since E-42 (9db2a4ed). Refresh dispatched. |
360
+ | E-35 | Legacy engine deprecation note for loki legacy help and CHANGELOG (no removal) | autonomy/lib/engine10-legacy-notice.txt, CHANGELOG.md, tests/test-engine10-legacy-notice.sh | LOW | bash tests/test-engine10-legacy-notice.sh | merged@2026-09-27T23:36Z | Source: ENGINE.md 23:00Z cut. Depends on none; lands before E-31. Building in a private clone (worktrees full). Review APPROVE (75e732c0); main 39ba4f67 (`bash tests/test-engine10-legacy-notice.sh` 8 passed, 1 skipped). |
361
+ | E-36 | First-run preflight: repo, git identity, provider CLI, opencode refusal, host guard, gh auth, UNSIGNED warning | loki-ts/src/engine10/preflight.ts, loki-ts/tests/engine10/preflight.test.ts, loki-ts/src/engine10/supervisor.ts (one call in main) | MEDIUM | cd loki-ts && bun test tests/engine10/preflight.test.ts | building@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. Depends on E-14. Staffed in engine10-gate-push (wf_1d47133f-7c7). Opus REJECT (reproduced): runSupervisor calls preflight without opts.env. Rework dispatched; merges with E-37. |
362
+ | E-37 | Non-claude provider paths (codex, cline, aider) through session.ts with cost not measured and NOT PROVEN entries | loki-ts/tests/engine10/providers.test.ts, loki-ts/tests/engine10/fixtures/providers/ | MEDIUM | cd loki-ts && bun test tests/engine10/providers.test.ts | approved@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. Test only; a red becomes its own slice. Depends on E-14, E-36. Staffed in engine10-gate-push (wf_1d47133f-7c7). Built 41995357, APPROVE; its opencode group un-skips now that E-42 exports main and fails without E-36. Held; merges with E-36. |
363
+ | E-38 | v10 arm gate run over the 29 tasks from dist; legacy arm pinned to LOKI_ENGINE=legacy | eval/loki10/harness.py (legacy arm env), eval/loki10/test-harness.sh (one leg) | HIGH | bash eval/loki10/test-harness.sh && eval/loki10/run.sh --arm v10 --all (29 rows, none arm_unavailable) | merged@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. The missing third arm for the gate. Depends on EV-1, E-32, E-36. Staffed in engine10-gate-push (wf_1d47133f-7c7). Merged 23b20e6f (train E12): shard coverage 19/0, drift 6/0, engine10 349 pass 0 fail, tsc exit 0. test-harness 79/0. |
364
+ | E-39 | Interrupt and resume end to end (SIGINT, no orphan, resume to seal on the same run) | loki-ts/tests/engine10/resume_e2e.test.ts, loki-ts/tests/engine10/fixtures/resume/ | MEDIUM | cd loki-ts && bun test tests/engine10/resume_e2e.test.ts | merged@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. Depends on E-14. Staffed in engine10-gate-push (wf_1d47133f-7c7). Merged 23b20e6f (train E12): shard coverage 19/0, drift 6/0, engine10 349 pass 0 fail, tsc exit 0. |
365
+ | E-40 | Live PR smoke on a sandbox GitHub repo from the dist layout | tests/test-engine10-live-pr.sh | HIGH | LOKI_E10_LIVE_REPO=<owner>/<sandbox> bash tests/test-engine10-live-pr.sh | merged@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. SKIP without the variable does not count as done. Depends on E-23, E-32, E-36. Staffed in engine10-gate-push (wf_1d47133f-7c7). Merged 23b20e6f (train E12): shard coverage 19/0, drift 6/0, engine10 349 pass 0 fail, tsc exit 0. Live leg SKIPs without LOKI_E10_LIVE_REPO. |
296
366
 
297
367
  Every slice above: implement with red-then-green tests, run diff-scoped tests
298
368
  plus `bash tests/moat/run.sh` in your own worktree, never touch `main`,
@@ -228,3 +228,13 @@ One entry per decision: context, choice, why, how to reverse. Newest last.
228
228
  4. Release the first green tree, then continue the 20-minute trains.
229
229
  - Found while acting: train 5 (S-18) introduced a P9 moat regression on Linux: the opt-out positive control, "the hosts.yml probe is blind under the opt-out" (moat job 108658485224). It fails closed (no leak) but blocks every tree from 1cde81a7 onward. P0 S-107 is fixing it forward in a capped Linux container.
230
230
  - Version accounting: tags v9.57.0 through v9.62.0 were pushed at 16:25Z and 16:29Z to work around the release job's tag-permission failure (S-105), before this rule. v9.60.0 is already tagged at 1cde81a7 (red: P9 and the Python race), so the "first green tree" cannot reuse 9.60.0 without moving a published tag. Train 4 (08d64f4e, v9.59.0) went green on Tests after reruns and contains no S-18, so its full Release rerun is the first verified-tree release. The next release after S-107 takes the next unused version.
231
+
232
+ ## D29. 2026-09-27: Loki P0 directive -- rebuild as the Loki 10 engine, task completion is the first release gate
233
+
234
+ - Problem as stated: users report Loki Mode does not complete tasks; augmentiq #52 ("add a search bar") ran 40+ minutes with 0 tasks done. Claude Code, Devin and Factory droids finish comparable issues in about 5 minutes.
235
+ - Mandate: a new TypeScript/Bun engine in loki-ts (under 5K lines, one state machine: Intake 15s, Plan + Wall 45s, Implement 3 min as ONE provider-CLI session, Fast verify 60s with at most 2 fix rounds, Seal + PR 15s, async Deep verify, hard cap 15 minutes then a DRAFT PR). One append-only JSONL event log per run. Per-repo cache keyed by tree hash. Rule of Two kept. New CLI and one-screen SSE dashboard. One integration adapter interface.
236
+ - Everything ships behind LOKI_ENGINE=v10 on the trains, additive only; the old engine stays reachable as legacy until the new one beats it on the eval.
237
+ - Release gate (published in full, misses included): on at least 25 tasks with hidden tests, v10 completion at or above raw `claude -p` at the same model and budget, p50 time to PR 5 minutes or less, p90 10 minutes or less, cost per completed task at or below raw Claude Code.
238
+ - Deadline: if the gate is not met by 23:00 ET (03:00 UTC), release v10.0.0 with the default still legacy, v10 opt-in, and the measured gap stated plainly.
239
+ - All non-P0 backlog paused at 21:43Z: batch 10 stopped with every builder's commit kept on its branch (list in ~/loki-ci-logs/paused-branches.txt and the BOARD rows); ready rows parked.
240
+ - Orphan: `timeout 240 bash .../worktrees/agent-afe77b46fbe4962fa/autonomy/run.sh` (PID 22960, child 22986, running 1 day 00:17) ignored SIGTERM and was stopped with SIGKILL by PID at 21:42Z (`ps -o pid= -p 22960` and `-p 22986` both empty afterwards). ORPHAN guard slice E-00 in flight.
@@ -0,0 +1,69 @@
1
+ # Loki 10 engine: measured stage times (2026-09-27)
2
+
3
+ Source: read-only measurement of four real runs from their own logs. Every
4
+ duration comes from a logged timestamp; rows marked (inferred) come from gaps
5
+ between logged events.
6
+
7
+ ## Runs
8
+
9
+ | Run | Log directory | Wall time | Tasks completed |
10
+ |---|---|---|---|
11
+ | R1 augmentiq #52 "add a search bar" | /Users/lokesh/git/augmentiq/.loki/ | 73.7+ min, still running at 21:46:12Z | 0 (`orchestrator.json` tasksCompleted 0) |
12
+ | R2 anonima | /Users/lokesh/git/anonima/.loki/ (2026-09-12 14:15Z) | 20.5 min | 1 (reached COMPLETED although code review returned fail) |
13
+ | R3 lokimode-anthropic, empty PRD | /Users/lokesh/git/lokimode-anthropic/.loki/ (2026-09-12 01:16Z) | 6.0+ min, log stops mid provider call | 0 |
14
+ | R4 fizzbuzz toy | /Users/lokesh/loki-council-1789161950/.loki/ (2026-09-11 21:25Z) | 3.8 min | 1 |
15
+
16
+ ## Where the minutes go (minutes, logged durations only)
17
+
18
+ | Stage | R1 augmentiq #52 | R2 anonima | R3 lokimode | R4 fizzbuzz |
19
+ |---|---|---|---|---|
20
+ | Boot, intake, spec interrogation, PRD parsing | 1.3 | 0.5 | 0.6 | 0.3 |
21
+ | Agent provider calls | 3.9 (iterations 1-2) + 57.7+ (iteration 3, still running) | 3.9 | 5.4+ (cut off) | 0.6 |
22
+ | Of which: agent running the full E2E suite inside iteration 3 | about 41 (17:05-17:46 EDT, inferred from log file times) | not measured | not measured | not measured |
23
+ | App runner / docker | 1.8 | 0 | 0 | 0 |
24
+ | Gates (static through LSP) plus unlabelled gaps | 2.7 | 0.1 | 0 | 0 |
25
+ | Code review | 0.6 | 4.4 | 0 | 0.8 |
26
+ | Doc generation | 5.0 (timed out at 300s) | 4.3 | 0 | 0 |
27
+ | Checklist, evidence gate, council | 0.6 (council never voted) | 7.2 | 0 | 1.8 |
28
+ | Total wall time | 73.7+ | 20.5 | 6.0+ | 3.8 |
29
+
30
+ Agent share of wall time where the run finished: R2 19% (234s of 1231s), R4
31
+ 15% (35s of 228s). The rest is harness stages around the agent.
32
+
33
+ ## R1 detail (augmentiq #52)
34
+
35
+ | Stage | Start (Z) | End (Z) | Duration | Evidence |
36
+ |---|---|---|---|---|
37
+ | Issue fetch + boot | 20:32:30 | 20:32:43 | 13s | issue-context.json captured_at 20:32:30 |
38
+ | Spec interrogation | 20:32:44 | 20:33:09 | 24s | 20 assumptions recorded |
39
+ | PRD to tasks, LLM enrichment, complexity | 20:33:09 | 20:33:48 | 39s (inferred) | "Enriched 3 PRD task(s) via LLM"; complexity "complex" (9584 files) |
40
+ | Iteration 1 provider call | 20:33:48 | 20:36:34 | 166s | agent found search already built; COMPLETION_REQUESTED |
41
+ | App runner + checkpoint | 20:36:34 | 20:37:48 | 74s | "docker: unknown command: docker compose" |
42
+ | Gates | 20:37:48 | 20:38:01 | 13s | test_suite not_run |
43
+ | LSP, semantic, invariant gates, review diff | 20:38:01 | 20:39:10 | 69s (inferred) | |
44
+ | Code review (6 reviewers) | 20:39:10 | 20:39:43 | 33s | 5 pass, 1 fail (non-blocking) |
45
+ | Auto-documentation | 20:39:43 | 20:44:43 | 300s | "Auto-documentation: timed out after 300s" |
46
+ | Wiki + evidence gate | 20:44:43 | 20:45:19 | 36s | evidence gate BLOCKED |
47
+ | Iteration 2 provider call | 20:45:22 | 20:46:31 | 69s | claimed done again |
48
+ | App runner restart | 20:46:31 | 20:47:07 | 36s | "crash limit reached (5)" |
49
+ | Gates + diff | 20:47:07 | 20:48:26 | 79s | |
50
+ | Code review | 20:48:26 | 20:48:26 | 0s | refused: context 431361 bytes over 400000 limit |
51
+ | Iteration 3 provider call | 20:48:29 | running at 21:46:12 | 57m43s+ | 340+ tool calls; full vitest, pytest (2847 passed), Playwright 639 tests (88 failures in unrelated specs) |
52
+
53
+ ## Five proven causes of non-completion (R1)
54
+
55
+ 1. The app runner's docker invocation fails ("docker: unknown command: docker compose", then "unknown shorthand flag: 'd' in -d") while the containers report healthy, so the evidence gate records app_boot_failed (metrics/trust-events.jsonl 20:45:21Z; app-runner/state.json crash_count 5).
56
+ 2. A secret-leak match in the changed file SETUP.md blocks completion ("Evidence gate BLOCKED: a secret/credential was detected in the changed files").
57
+ 3. The test gate finds no test runner ("no test runner detected, recording inconclusive"; tests_ok=inconclusive runner=none) while the agent's own runs show pytest 2847 passed and vitest 1552 passed.
58
+ 4. Code review refuses a 431361-byte context (committed USAGE.md, TESTING.md, SETUP.md), and completion is then rejected "because code review is BLOCKED (Critical/High findings)" although no review ran.
59
+ 5. Iteration 3 is one provider call with no time limit and no progress events: the last events.jsonl entry is 20:48:28Z iteration_start 3, and dashboard-state.json still shows iteration 0 and council total_votes 0 at 21:45:53Z. Inside it the agent drifted into the unrelated full E2E suite at 94-100% CPU and killed processes with pkill -f and kill -9.
60
+
61
+ Also: the feature already existed before the run (iteration 1: "The search feature already appears fully built across many prior commits"), and both iteration 1 and 2 completion claims were rejected by the gates.
62
+
63
+ ## Design consequences for ENGINE.md
64
+
65
+ - No PRD generation, spec interrogation, doc generation or council on the fast path (R1: 7+ min before and around the agent; R2: 16 of 20.5 min).
66
+ - The implement session needs a wall cap and progress events; the run state must come from one event log, never a separate dashboard-state file that goes stale.
67
+ - Verification runs impacted tests only on the fast path; full suites, app boot and council move to async deep verify after the PR.
68
+ - Test runner detection must read the repo's real runners (pytest, vitest, npm scripts), or the gate says inconclusive while the suites pass.
69
+ - Review context must exclude generated docs, and a refused review must never be reported as a blocking finding.