loki-mode 11.74.2 → 11.75.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 (166) hide show
  1. package/README.md +1 -1
  2. package/SKILL.md +2 -3
  3. package/VERSION +1 -1
  4. package/autonomy/completion-council.sh +10 -10
  5. package/autonomy/council-v2.sh +4 -4
  6. package/autonomy/grill.sh +1 -1
  7. package/autonomy/lib/browser-open.sh +1 -1
  8. package/autonomy/lib/chat.sh +1 -1
  9. package/autonomy/lib/cockpit-render.sh +1 -1
  10. package/autonomy/lib/done-recognition.sh +4 -4
  11. package/autonomy/lib/efficiency_cost.py +1 -1
  12. package/autonomy/lib/engine10-push.sh +2 -2
  13. package/autonomy/lib/prd-enrich.sh +1 -1
  14. package/autonomy/lib/proof-check.sh +1 -1
  15. package/autonomy/lib/proof-generator.py +3 -3
  16. package/autonomy/lib/proof-pr.sh +1 -1
  17. package/autonomy/lib/skill-link-heal.sh +1 -1
  18. package/autonomy/lib/voter-agents.sh +1 -1
  19. package/autonomy/loki +26 -37
  20. package/autonomy/prd-checklist.sh +1 -1
  21. package/autonomy/receipt_jwt.py +1 -1
  22. package/autonomy/run.sh +28 -28
  23. package/autonomy/trigger-schedule.py +6 -414
  24. package/autonomy/tui.sh +1 -1
  25. package/autonomy/verify.sh +4 -4
  26. package/completions/loki.bash +0 -5
  27. package/dashboard/__init__.py +1 -1
  28. package/docs/ARCHITECTURE.md +1 -2
  29. package/docs/CLI-REFERENCE.md +1 -1
  30. package/docs/COMPONENTS.md +1 -1
  31. package/docs/INSTALLATION.md +1 -1
  32. package/docs/ROUTING-EVIDENCE.md +1 -2
  33. package/docs/V10-RESEARCH.md +1 -1
  34. package/docs/dev/architecture-reference.md +3 -7
  35. package/docs/dev/project-structure.md +1 -4
  36. package/docs/dev/release-checklist.md +13 -31
  37. package/docs/research-2026-07/OBSERVABILITY-TOOL-SPEC.md +1 -1
  38. package/docs/v11/MARKET-SLICES.md +1 -1
  39. package/docs/v11/REGISTRIES.md +1 -1
  40. package/docs/v11/ROUTER-1.md +2 -2
  41. package/loki-ts/dist/loki.js +2 -2
  42. package/mcp/__init__.py +1 -1
  43. package/package.json +2 -2
  44. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  45. package/skills/extending.md +2 -3
  46. package/skills/factory-operations.md +11 -18
  47. package/skills/release-cadence.md +2 -2
  48. package/web-app/dist/assets/{AdminPage-jkjilfbl.js → AdminPage-xKgtIhk2.js} +1 -1
  49. package/web-app/dist/assets/{Avatar-bd5JWkSJ.js → Avatar-Q14AHox9.js} +1 -1
  50. package/web-app/dist/assets/{Badge-DVRit2Xw.js → Badge-yk5M-lip.js} +1 -1
  51. package/web-app/dist/assets/{Button-BNAB-pVZ.js → Button-ynznk0At.js} +1 -1
  52. package/web-app/dist/assets/{CockpitPage-DpG29h_w.js → CockpitPage-C8B765za.js} +1 -1
  53. package/web-app/dist/assets/{ComparePage-Dasg5V41.js → ComparePage-DqzmWKnf.js} +1 -1
  54. package/web-app/dist/assets/{ErrorBoundary-DJojse6b.js → ErrorBoundary-DdBPd_Lq.js} +1 -1
  55. package/web-app/dist/assets/{EvidenceReceiptPanel-Blxw7_u1.js → EvidenceReceiptPanel-jb4Tp38b.js} +1 -1
  56. package/web-app/dist/assets/{GitHubIssuesPanel-BBvSFj80.js → GitHubIssuesPanel-xJQiLcxs.js} +1 -1
  57. package/web-app/dist/assets/{GitHubPRsPanel-BCIKeSBg.js → GitHubPRsPanel-84W3Dhk_.js} +1 -1
  58. package/web-app/dist/assets/{HomePage-C7d__oNG.js → HomePage-St1Xl2tu.js} +2 -2
  59. package/web-app/dist/assets/{LoginPage-BXljL3yY.js → LoginPage-jRt0NUHb.js} +1 -1
  60. package/web-app/dist/assets/{MagicPage-Xjkts_yE.js → MagicPage-CQLFe7LR.js} +1 -1
  61. package/web-app/dist/assets/{MetricsPage-kQvVp-j2.js → MetricsPage-zzX9eTC5.js} +1 -1
  62. package/web-app/dist/assets/{NotFoundPage-D-4ZlEaO.js → NotFoundPage-DDu023SY.js} +1 -1
  63. package/web-app/dist/assets/{ProjectPage-DfzR5RXP.js → ProjectPage-D60UURaH.js} +3 -3
  64. package/web-app/dist/assets/{ProjectsPage-DFDsWzkV.js → ProjectsPage-DqVsKxlt.js} +1 -1
  65. package/web-app/dist/assets/{SettingsPage-CLPIoYT3.js → SettingsPage-G7pPKvo0.js} +1 -1
  66. package/web-app/dist/assets/{ShowcasePage-PZKkyGeY.js → ShowcasePage-CrU_aKgS.js} +1 -1
  67. package/web-app/dist/assets/{SystemSettingsPage-BsBlcnzo.js → SystemSettingsPage-ClKGQFsB.js} +1 -1
  68. package/web-app/dist/assets/{TeamsPage-BSjgNhoU.js → TeamsPage-B530vSNe.js} +1 -1
  69. package/web-app/dist/assets/{TemplatesPage-W2KeAzbg.js → TemplatesPage-COmv_Cqd.js} +1 -1
  70. package/web-app/dist/assets/{TerminalOutput-BjroTiCC.js → TerminalOutput-CufG9YzF.js} +1 -1
  71. package/web-app/dist/assets/{activity-BXZ5YYes.js → activity-Ct1Updr6.js} +1 -1
  72. package/web-app/dist/assets/{bell-D1urp5pa.js → bell-rcvhQuGr.js} +1 -1
  73. package/web-app/dist/assets/{bot-Chedf2bF.js → bot-DzeqEI-b.js} +1 -1
  74. package/web-app/dist/assets/{check-DhaCuOCV.js → check-zacnZHyC.js} +1 -1
  75. package/web-app/dist/assets/{chevron-left-D7BpQyA6.js → chevron-left-Lxnkl8Qg.js} +1 -1
  76. package/web-app/dist/assets/{circle-alert-DnGvQ_AQ.js → circle-alert-DoqSdQdB.js} +1 -1
  77. package/web-app/dist/assets/{clock-CqfxWhHM.js → clock-B7bJcVIC.js} +1 -1
  78. package/web-app/dist/assets/{cloud-BKxp5AWB.js → cloud-DdA9Bu6q.js} +1 -1
  79. package/web-app/dist/assets/{code-xml-BDQ6GBtt.js → code-xml-CAZEZ9T8.js} +1 -1
  80. package/web-app/dist/assets/{database-BmpEx1y_.js → database-Da2GkEIN.js} +1 -1
  81. package/web-app/dist/assets/{dollar-sign-DYNY9R_C.js → dollar-sign-DjDiG-37.js} +1 -1
  82. package/web-app/dist/assets/{file-code-corner-BJi0IBFd.js → file-code-corner-CSL-Jij-.js} +1 -1
  83. package/web-app/dist/assets/{file-plus-Dqyb2bcQ.js → file-plus-02DRA8pV.js} +1 -1
  84. package/web-app/dist/assets/{globe-DPh4RWfM.js → globe-CGyB90kK.js} +1 -1
  85. package/web-app/dist/assets/{hammer-B3xnuoA1.js → hammer-BaQB96TG.js} +1 -1
  86. package/web-app/dist/assets/{index-BpX8DcTr.js → index-lcoI1_Kk.js} +3 -3
  87. package/web-app/dist/assets/{layers-BRCmyCW8.js → layers-BWJBvoeg.js} +1 -1
  88. package/web-app/dist/assets/{loader-circle-n07Pky0M.js → loader-circle-CdcI0FeS.js} +1 -1
  89. package/web-app/dist/assets/{lock-BWqOuQmS.js → lock-BBkw5NJx.js} +1 -1
  90. package/web-app/dist/assets/{package-BJlB_Z-Z.js → package-BpPRO3LM.js} +1 -1
  91. package/web-app/dist/assets/{plus-oH17BZu2.js → plus-D7XbyK29.js} +1 -1
  92. package/web-app/dist/assets/{refresh-cw-CPQ476LL.js → refresh-cw-DLG3hyAi.js} +1 -1
  93. package/web-app/dist/assets/{rotate-ccw-7hLvOcnS.js → rotate-ccw-Bqau4R_S.js} +1 -1
  94. package/web-app/dist/assets/{scroll-text-BCmLauQn.js → scroll-text-BtIL3cNk.js} +1 -1
  95. package/web-app/dist/assets/{server-DfTfvW84.js → server-tZCmZ4yH.js} +1 -1
  96. package/web-app/dist/assets/{shield-alert-CaeGRq19.js → shield-alert-K5JXzFKg.js} +1 -1
  97. package/web-app/dist/assets/{thumbs-up-Dz-l2GPC.js → thumbs-up-CHCVyJdw.js} +1 -1
  98. package/web-app/dist/assets/{trash-2-B-OsDmSo.js → trash-2-DncNxVq0.js} +1 -1
  99. package/web-app/dist/assets/{trending-down-CXTFOxzq.js → trending-down-D8Bp0azX.js} +1 -1
  100. package/web-app/dist/assets/{trending-up-FQEdqr3v.js → trending-up-AixETdKR.js} +1 -1
  101. package/web-app/dist/assets/{upload-CacWSNTg.js → upload-VCbjFn2H.js} +1 -1
  102. package/web-app/dist/assets/{usePolling-cIjZ9qd2.js → usePolling-CQvKD2Jj.js} +1 -1
  103. package/web-app/dist/assets/{user-DAouWFHi.js → user-SK-YguQ6.js} +1 -1
  104. package/web-app/dist/index.html +1 -1
  105. package/autonomy/company-seats.json +0 -82
  106. package/docs/COMPETITIVE-INTEL-2026-09.md +0 -444
  107. package/docs/FOUNDER-DECISIONS-TRUST-SEMANTICS-2026-08-01.md +0 -145
  108. package/docs/FOUNDER-STATUS-AND-DECISIONS-2026-07-01.md +0 -132
  109. package/docs/LOKI-10-BUILD-PROMPT.md +0 -350
  110. package/docs/STRATEGY-2026-2028.md +0 -124
  111. package/docs/V10-VISION.md +0 -161
  112. package/docs/v10/ADOPTION-PLAN.md +0 -375
  113. package/docs/v10/ARCHITECT-CUTS.md +0 -744
  114. package/docs/v10/BACKLOG.md +0 -231
  115. package/docs/v10/BOARD.md +0 -1403
  116. package/docs/v10/CONTROL-PLANE.md +0 -120
  117. package/docs/v10/CONTROL.md +0 -36
  118. package/docs/v10/CP-ASK-PLAN.md +0 -85
  119. package/docs/v10/CP-ENTERPRISE-UI.md +0 -537
  120. package/docs/v10/D51-PHASE-B.md +0 -120
  121. package/docs/v10/D61-SPEED.md +0 -105
  122. package/docs/v10/D63-CARDS.md +0 -354
  123. package/docs/v10/DECISIONS.md +0 -915
  124. package/docs/v10/E2E-D65.md +0 -123
  125. package/docs/v10/ENGINE-LAWS.md +0 -163
  126. package/docs/v10/ENGINE-MEASURE.md +0 -69
  127. package/docs/v10/ENGINE.md +0 -743
  128. package/docs/v10/FAILURE-CLASSES.md +0 -2026
  129. package/docs/v10/FC21B-FC22-PLAN.md +0 -107
  130. package/docs/v10/FIRST-RUN-GATE.md +0 -39
  131. package/docs/v10/FOUNDER-QUEUE.md +0 -29
  132. package/docs/v10/GAP-RESEARCH-1003.md +0 -32
  133. package/docs/v10/GUARDS.md +0 -883
  134. package/docs/v10/L0-WAVE1.md +0 -81
  135. package/docs/v10/LEGACY-REMOVAL.md +0 -408
  136. package/docs/v10/MEDIUM-ANALYSIS.md +0 -346
  137. package/docs/v10/METRICS.md +0 -645
  138. package/docs/v10/MODERNIZE.md +0 -437
  139. package/docs/v10/OPENCODE-PARITY-PLAN.md +0 -84
  140. package/docs/v10/OPERATING-MODEL.md +0 -60
  141. package/docs/v10/PLAN-V12.md +0 -896
  142. package/docs/v10/PROGRESS.md +0 -2735
  143. package/docs/v10/RELEASE-11.md +0 -77
  144. package/docs/v10/RETRO-2026.md +0 -650
  145. package/docs/v10/ROADMAP-D63.md +0 -35
  146. package/docs/v10/SCALE.md +0 -140
  147. package/docs/v10/SCORECARD-PLAN.md +0 -250
  148. package/docs/v10/SWARM-PROMPT.md +0 -98
  149. package/docs/v10/SWARM.md +0 -293
  150. package/docs/v10/cp-redesign/PARITY.md +0 -188
  151. package/docs/v10/cp-redesign/legacy/INDEX.md +0 -1167
  152. package/docs/v10/roadmap-10/01-measurement.md +0 -113
  153. package/docs/v10/roadmap-10/02-cost.md +0 -75
  154. package/docs/v10/roadmap-10/03-speed.md +0 -65
  155. package/docs/v10/roadmap-10/04-first-run.md +0 -61
  156. package/docs/v10/roadmap-10/05-deploy.md +0 -61
  157. package/docs/v10/roadmap-10/06-stability.md +0 -64
  158. package/docs/v10/roadmap-10/07-quality.md +0 -57
  159. package/docs/v10/roadmap-10/08-proof.md +0 -48
  160. package/docs/v10/roadmap-10/09-safety.md +0 -74
  161. package/docs/v10/roadmap-10/README.md +0 -1464
  162. package/skills/sdlc-fleet.md +0 -170
  163. package/tools/cockpit/SPEC.md +0 -275
  164. package/tools/cockpit/index.html +0 -146
  165. package/tools/cockpit/roi-basis.json +0 -33
  166. package/tools/cockpit/server.py +0 -946
@@ -1,1464 +0,0 @@
1
- # Roadmap to 10/10 in every category
2
-
3
- Owner: Chief of Staff. Written 2026-10-17 at v11.17.56. No dates: every item ships as soon as it is green and reviewed (D96, D102).
4
-
5
- Why this folder exists: no existing doc owns the 10/10-versus-all-competitors program. PLAN-V12.md is the P12 plan, ROADMAP-D63.md covers the D63 pillars, SCORECARD-PLAN.md covers D41 measurement. This folder is the one index; slices still go to BOARD.md and bugs still need a FAILURE-CLASSES.md row first (D86).
6
-
7
- Trigger: when the founder says "work on roadmap", execute every unchecked item here autonomously with parallel agent teams, release each approved slice, and tick the box in the same release commit.
8
-
9
- ## Scoreboard
10
-
11
- | Category | Loki now | Best competitor today | Why we are not 10 | Bar to beat (10/10) | File |
12
- |---|---|---|---|---|---|
13
- | Measurement (enabler) | 3 | SWE-bench / Terminal-Bench publishers | No PROVEN cost run, no catch rate, no public benchmark since 2026-01 | Every other score below is backed by a dated, reproducible number | [01-measurement.md](01-measurement.md) |
14
- | Cost | 6 | Aider; Cursor Composer about $0.07/task | Run4: Loki 1.41x MORE than lean raw on 6 tasks; NOT PROVEN | PROVEN_AT(0.5) vs all 3 floors, n>=3, ledger-checked | [02-cost.md](02-cost.md) |
15
- | Speed | 7 | Cursor Composer Fast (6.7 min avg), Codex | Medium p50 2.5-4x raw; small 1.31x raw; Wall killed at 90s in half of runs | Small paired time ratio CI lower bound >= 1.0; medium p50 <= raw | [03-speed.md](03-speed.md) |
16
- | First run / adoption | 8 | Lovable (2-3 min, zero install), Cursor, Claude Code | Time to first sealed PR never measured; 5 host tools; MCP deeplink likely exits 2 | Clean machine to first sealed PR p50 <= 120s, measured nightly with a real provider | [04-first-run.md](04-first-run.md) |
17
- | Deploy | 7.5 | Replit (code + DB rollback), Vercel + Neon (DB branch per preview) | No DB setup, no per-PR preview URL, no auto rollback on Netlify/Cloudflare, bash only | Preview URL in every PR, auto rollback on all 4 providers, DB hook, Bun route | [05-deploy.md](05-deploy.md) |
18
- | Stability | 7.5 | No clear leader; bar is a public status page | Main Tests red about 10h; longest green streak 23; caps break after merge (FC-60) | 24h green streak, red-to-green under 1h, merged-train guards on every push | [06-stability.md](06-stability.md) |
19
- | Delivered quality / autonomy | 7.5 | Claude Code, Codex (Terminal-Bench 2.0 about 82%) | No arm beats raw on medium; D50 sonnet loss; moat P3/P4 pending, P9 regressed | Medium completion >= 85.7% at <= $0.5085; moat 9 of 9; public Terminal-Bench and SWE-bench Pro | [07-quality.md](07-quality.md) |
20
- | Proof / trust | 9 | Nobody signs spec + tests + result (Loki's opening) | Self-generated trust root, no transparency log, no published catch rate, closed verifier bundle | Third-party verifiable receipts (Rekor), published catch rate, independent audit | [08-proof.md](08-proof.md) |
21
- | Safety / security | 8.5 | Codex (offline agent phase, secret strip, domain allowlist), Claude Code (Seatbelt/bubblewrap), Copilot (default scans, branch limits) | Default bypassPermissions, no sandbox on engine10, PUBLIC gist share, redact TS/Python parity gaps, no npm provenance | Sandboxed by default, egress allowlist, redaction parity, npm provenance, SHA-pinned actions | [09-safety.md](09-safety.md) |
22
-
23
- Overall now: 7.5. Target: 10 in every row, each backed by a command plus its output.
24
-
25
- ## Execution order
26
-
27
- 1. Measurement first (01). Nothing in cost, speed or quality can be claimed without it. Run in parallel with step 2.
28
- 2. Stability P0s (06 epics STAB-1..STAB-3). Main must be green before the swarm scales up again; red main hides regressions.
29
- 3. Safety P0s (09 epics SAFE-1, SAFE-2): public gist default and redaction parity are live leak risks.
30
- 4. Cost and speed levers (02, 03), each gated by a measured arm from step 1.
31
- 5. First-run and deploy (04, 05) in parallel with step 4; different file sets.
32
- 6. Quality and moat (07), then proof trust root (08).
33
- 7. Re-score every row with evidence; publish the scoreboard.
34
-
35
- Parallelism: categories own non-overlapping file sets except `loki-ts/src/util/redact.ts` (09 only) and `loki-ts/src/engine10/stages/wall.ts` (03 owns; 02 and 07 consume). Architects split each epic into slices per PLAN-V12 ground rules: engine10 core cap 5000, e10ext 1500, features 3000, contrib 1200; new logic goes in util/ or runner/; hot files are edited by the Captain only.
36
-
37
- ## Master checklist
38
-
39
- Each line is an epic. Stories, acceptance criteria and todo boxes live in the category file.
40
-
41
- ### 01 Measurement
42
- - [ ] MEAS-1 Bench rows carry loki_version, cost_profile and one cost truth
43
- - [ ] MEAS-2 Bench Wall uses the task interpreter; Loki rows can reach VERIFIED
44
- - [ ] MEAS-3 C-F1 run5: 5 arms, 3 floors, n=3, 20 tasks
45
- - [ ] MEAS-4 Medium A/B on all 14 tasks, n=3, cost never null
46
- - [ ] MEAS-5 Seeded-defect catch rate on real runs (wrong-pass.json)
47
- - [ ] MEAS-6 Terminal-Bench 2.0 and SWE-bench Pro runs, side by side with raw
48
- - [ ] MEAS-7 Real-provider time-to-first-sealed-PR, nightly
49
- - [ ] MEAS-8 Public scoreboard page generated from result files
50
-
51
- ### 02 Cost
52
- - [ ] COST-A Small-task lean path actually triggers (sizing)
53
- - [ ] COST-B Focused implement brief (files + exact test command)
54
- - [ ] COST-C Flip measured-OFF knobs (cost lean profile, TRIM, judge batch)
55
- - [ ] COST-D Cost correctness followups (alias flags, run.sh .5 cap, negative price, TEN-COST-59 sibling)
56
- - [ ] COST-E Publish PROVEN_AT(0.5)
57
-
58
- ### 03 Speed
59
- - [ ] SPD-A Wall off the critical path (concurrent default, limit fix)
60
- - [ ] SPD-B Pre-model overhead measured and under 2s warm
61
- - [ ] SPD-C Parallel verify/base jobs default after A/B
62
- - [ ] SPD-D Speed tier tasks and LOKI_SPEED A/B
63
- - [ ] SPD-E Equal-parallelism scorecard rule
64
-
65
- ### 04 First run / adoption
66
- - [ ] FR-A One command from clean machine to first sealed PR
67
- - [ ] FR-B Fewer host requirements on the v10 path
68
- - [ ] FR-C Every preflight fatal is telemetered and has a named fix
69
- - [ ] FR-D IDE / MCP one-click actually works
70
- - [ ] FR-E Zero-install web entry (hosted try)
71
-
72
- ### 05 Deploy
73
- - [ ] DEP-A Per-PR preview URL with health in the PR body
74
- - [ ] DEP-B Auto rollback on all 4 providers
75
- - [ ] DEP-C Database provisioning hook
76
- - [ ] DEP-D Continuous health watch with rollback suggestion
77
- - [ ] DEP-E Deploy on the Bun route
78
- - [ ] DEP-F Secrets never on argv
79
-
80
- ### 06 Stability
81
- - [ ] STAB-1 Main green now and kept green (core budget, P9, FC-01, L2)
82
- - [ ] STAB-2 Merged-train guard job on every main push
83
- - [ ] STAB-3 Nightly cannot read green when it ran nothing
84
- - [ ] STAB-4 Green-streak and time-to-fix metrics in pulse
85
- - [ ] STAB-5 Public status page
86
- - [ ] STAB-6 Repo hygiene (295 unmerged branches, BOARD unparsed rows, stale metrics)
87
-
88
- ### 07 Delivered quality / autonomy
89
- - [ ] QUAL-A Beat raw on medium tier
90
- - [ ] QUAL-B Close the D50 sonnet loss
91
- - [ ] QUAL-C Moat 9 of 9 (P3 Wall, P4 model freedom, P9)
92
- - [ ] QUAL-D Close A-119b weakening holes
93
- - [ ] QUAL-E Public benchmark numbers
94
-
95
- ### 08 Proof / trust
96
- - [ ] PRF-A Third-party verifiable trust root (transparency log, key directory)
97
- - [ ] PRF-B Browser verifier and open verifier source
98
- - [ ] PRF-C Receipts record every proof opt-out
99
- - [ ] PRF-D Published catch rate and independent audit
100
-
101
- ### 09 Safety / security
102
- - [ ] SAFE-1 `loki share` private by default and redacted
103
- - [ ] SAFE-2 Redaction parity and ReDoS fix (SECURITY-26 rework, N2/N3/N4)
104
- - [ ] SAFE-3 Sandbox by default on engine10
105
- - [ ] SAFE-4 Network egress allowlist and offline agent phase
106
- - [ ] SAFE-5 Policy gate covers commit, push, deploy and network
107
- - [ ] SAFE-6 Supply chain: npm provenance, OIDC publish, SHA-pinned actions
108
- - [ ] SAFE-7 One shared secret pattern list; SARIF can gate
109
-
110
- ## Done definition for the program
111
-
112
- - Every row in the scoreboard reads 10 with a cited command, exit code and result file.
113
- - METRICS.md, the public scoreboard and this README agree.
114
- - No open P0 in FAILURE-CLASSES.md for any category.
115
-
116
- ## Feature 100
117
-
118
- The next 100 user-facing features, ranked by expected user impact. Items 1-20 are ship-first. Each row names the open issue that carries it; rows marked existing reuse an issue that was already filed. Every item was checked against the shipped command surface and the open issue list on 2026-10-23, so none repeats a shipped feature.
119
-
120
- Honest note on the goal. "10x better than Claude Code in every category, 100x better than Factory and Devin" is a TARGET, not a claim. Nothing in this section asserts that Loki is ahead today. Each item names the metric it moves and a target; the comparison is measured per item through the bench issues #348 (unbenchmarked wins), #355 (pre-registered discriminating tasks) and #350 (UX scorecard with measured baselines). A competitor baseline cites either a `--help` output run on this host on 2026-10-23 or a fetched documentation URL; where neither shows the capability the cell says UNKNOWN, which means not found, not absent.
121
-
122
- Sources: Claude Code 2.1.309 and droid 0.190.0 `--help` were run on 2026-10-23. codex is not installed on this host, so Codex cells cite https://learn.chatgpt.com/docs/codex/cli or the rows measured on codex-cli 0.146.0 in docs/COMPETITIVE-SCORECARD.md. Devin cells cite https://docs.devin.ai/ pages listed in https://docs.devin.ai/llms.txt. Factory cells cite https://docs.factory.com/cli/getting-started/overview.
123
-
124
- Tier follows docs/v10/OPERATING-MODEL.md: HIGH touches the moat, verifier, Seal, auth or security.
125
-
126
- ### Ranked list
127
-
128
- | Rank | Id | Area | Feature | Size | Tier | Issue |
129
- |---|---|---|---|---|---|---|
130
- | 1 | ship-first R100-001 | onboarding | Zero-question first run with an already logged-in provider | M | MEDIUM | #357 |
131
- | 2 | ship-first R100-002 | trust | Seal any agent's diff: signed receipt for changes Claude Code, Codex or a human already made | M | HIGH | #345 (existing) |
132
- | 3 | ship-first R100-003 | autonomy | In-place resume after a human answers a blocked question | L | MEDIUM | #358 |
133
- | 4 | ship-first R100-004 | deploy | Per-PR preview URL with its health result in the PR body | M | MEDIUM | #359 |
134
- | 5 | ship-first R100-005 | team | PR and issue comment commands: /loki fix, /loki explain, /loki reseal | M | HIGH | #360 |
135
- | 6 | ship-first R100-006 | trust | Spec clause matrix in the PR body and receipt comment | M | HIGH | #342 (existing) |
136
- | 7 | ship-first R100-007 | speed | Live run view: `loki status --follow` streams stages, edits, tests and cost | S | LOW | #361 |
137
- | 8 | ship-first R100-008 | autonomy | Background runs and one run list across repos | M | MEDIUM | #362 |
138
- | 9 | ship-first R100-009 | autonomy | Run large multi-part tasks as decomposed, separately verified units | L | MEDIUM | #235 (existing) |
139
- | 10 | ship-first R100-010 | team | Approval inbox: everything waiting on a human, across repos | M | MEDIUM | #363 |
140
- | 11 | ship-first R100-011 | memory | Learn from what users edit: amended or rejected Loki PRs become lessons | M | MEDIUM | #364 |
141
- | 12 | ship-first R100-012 | trust | Seal as a required merge check: `loki github protect` | S | HIGH | #365 |
142
- | 13 | ship-first R100-013 | trust | Seal web apps by driving the spec's user flows in a real browser | L | HIGH | #249 (existing) |
143
- | 14 | ship-first R100-014 | ecosystem | Read every agent's rules: CLAUDE.md, AGENTS.md, Cursor, Copilot and Windsurf rule files | S | LOW | #366 |
144
- | 15 | ship-first R100-015 | providers | Model shootout on your own task: `loki compare` | M | MEDIUM | #367 |
145
- | 16 | ship-first R100-016 | trust | Verify a receipt in the browser, offline, with no install | M | HIGH | #368 |
146
- | 17 | ship-first R100-017 | onboarding | Single-binary install with no node or python3 required | M | MEDIUM | #369 |
147
- | 18 | ship-first R100-018 | deploy | Automatic rollback on all four deploy providers | M | MEDIUM | #370 |
148
- | 19 | ship-first R100-019 | dashboard | Leader screen: work in, sealed shipped, cost per sealed change, waiting on a human | M | MEDIUM | #371 |
149
- | 20 | ship-first R100-020 | onboarding | Native Windows support | L | MEDIUM | #372 |
150
- | 21 | R100-021 | onboarding | Name the provider failure cause and its fix on the Reason line | S | LOW | #351 (existing) |
151
- | 22 | R100-022 | onboarding | Check publish capability at intake, before any work | S | MEDIUM | #231 (existing) |
152
- | 23 | R100-023 | onboarding | Zero-install try in a dev container or Codespace | S | LOW | #373 |
153
- | 24 | R100-024 | onboarding | Starter task suggestions from issues, TODOs and failing tests | S | LOW | #374 |
154
- | 25 | R100-025 | onboarding | `loki try <repo-url>`: one command to a sealed sample change on any public repo | S | LOW | #375 |
155
- | 26 | R100-026 | speed | Readable plan with cost in under 10 seconds | S | LOW | #376 |
156
- | 27 | R100-027 | speed | Desktop and phone push notifications when a run needs you or finishes | S | LOW | #377 |
157
- | 28 | R100-028 | speed | Best-of-N implement for small tasks | M | MEDIUM | #378 |
158
- | 29 | R100-029 | speed | Warm engine daemon for sub-second start | M | MEDIUM | #379 |
159
- | 30 | R100-030 | speed | Re-seal in under a minute after a human edits a Loki PR | M | HIGH | #380 |
160
- | 31 | R100-031 | speed | Opt-in fast mode with ledger premium and fallback | M | MEDIUM | #279 (existing) |
161
- | 32 | R100-032 | speed | Progress mirrored to the Slack thread and a live PR checklist | S | LOW | #381 |
162
- | 33 | R100-033 | deploy | Database provisioning per preview | L | MEDIUM | #382 |
163
- | 34 | R100-034 | deploy | Run the spec's user flows against the live deploy URL | M | HIGH | #383 |
164
- | 35 | R100-035 | deploy | Container image build and push with SBOM bound to the receipt | M | MEDIUM | #384 |
165
- | 36 | R100-036 | deploy | Kubernetes deploy with canary through the user's own kube context | L | HIGH | #385 |
166
- | 37 | R100-037 | deploy | `loki deploy init`: detect a logged-in deploy CLI and write config with no questions | S | LOW | #386 |
167
- | 38 | R100-038 | team | CODEOWNERS-aware reviewers on every Loki PR | S | LOW | #387 |
168
- | 39 | R100-039 | team | Fill the repo's pull request template | S | LOW | #388 |
169
- | 40 | R100-040 | team | Team memory shared through git | M | MEDIUM | #389 |
170
- | 41 | R100-041 | team | Team login for the shared Control Plane | L | HIGH | #188 (existing) |
171
- | 42 | R100-042 | team | Bitbucket and Azure DevOps pull requests | M | MEDIUM | #390 |
172
- | 43 | R100-043 | team | Release notes written from sealed receipts | S | LOW | #391 |
173
- | 44 | R100-044 | ide | VS Code access through the shipped MCP server: config doc and tool-list smoke test | S | LOW | #392 |
174
- | 45 | R100-045 | ide | Ready-made ACP configs for Zed and JetBrains | S | LOW | #393 |
175
- | 46 | R100-046 | ide | Start, status and seal commands in the Claude Code plugin | S | LOW | #394 |
176
- | 47 | R100-047 | ide | Full-screen terminal UI with approve, steer and pause keys | M | LOW | #395 |
177
- | 48 | R100-048 | ide | Images and mockups as task input | M | MEDIUM | #396 |
178
- | 49 | R100-049 | ide | MCP one-click install works on a clean machine | S | LOW | #397 |
179
- | 50 | R100-050 | ide | Start, steer and answer runs from the Control Plane in the browser | M | MEDIUM | #398 |
180
- | 51 | R100-051 | ide | Answer blocked questions from the phone with a push reply action | S | MEDIUM | #399 |
181
- | 52 | R100-052 | memory | Code embedding provider for memory retrieval | M | MEDIUM | #248 (existing) |
182
- | 53 | R100-053 | memory | Search every past run: `loki history search` | S | LOW | #400 |
183
- | 54 | R100-054 | memory | `loki blame <file>:<line>`: which run, clause and decision produced this line | S | LOW | #401 |
184
- | 55 | R100-055 | memory | Personal profile applied across repos | M | MEDIUM | #402 |
185
- | 56 | R100-056 | memory | Memory page in the Control Plane: view, pin, edit and forget lessons | S | LOW | #403 |
186
- | 57 | R100-057 | memory | Playbooks: save a sealed run as a reusable task recipe | M | LOW | #404 |
187
- | 58 | R100-058 | memory | Reverted changes become lessons and regression-test proposals | S | MEDIUM | #405 |
188
- | 59 | R100-059 | cost | Live cost meter with alerts at 50, 80 and 100 percent of budget | S | LOW | #406 |
189
- | 60 | R100-060 | cost | Estimate accuracy: show actual vs estimate and self-calibrate | S | LOW | #407 |
190
- | 61 | R100-061 | cost | Monthly budgets per repo and per user | M | MEDIUM | #408 |
191
- | 62 | R100-062 | cost | Cost breakdown by stage and route with savings against an all-top-model baseline | S | LOW | #409 |
192
- | 63 | R100-063 | cost | Finance export: monthly CSV of spend by repo, user and sealed change | S | LOW | #410 |
193
- | 64 | R100-064 | cost | Warn when attached MCP tool definitions cost too many tokens | S | LOW | #290 (existing) |
194
- | 65 | R100-065 | cost | Show prompt-cache savings per run | S | LOW | #411 |
195
- | 66 | R100-066 | cost | Quote approval for expensive runs | S | MEDIUM | #412 |
196
- | 67 | R100-067 | providers | Provider adapters for GitHub Copilot CLI, cursor-agent and Factory droid | M | MEDIUM | #413 |
197
- | 68 | R100-068 | providers | Any OpenAI-compatible endpoint on every route | M | MEDIUM | #414 |
198
- | 69 | R100-069 | providers | Judge client from the provider the user configured | M | HIGH | #267 (existing) |
199
- | 70 | R100-070 | providers | One effort and thinking knob across all five providers | M | MEDIUM | #346 (existing) |
200
- | 71 | R100-071 | providers | Doctor auth rows and a zero-token probe for every provider | S | MEDIUM | #347 (existing) |
201
- | 72 | R100-072 | providers | Hybrid local and cloud: offload cheap stages to a local model when present | M | MEDIUM | #415 |
202
- | 73 | R100-073 | providers | New-model check: `loki models --new` compares a new model on your recent tasks | S | LOW | #416 |
203
- | 74 | R100-074 | providers | Model route settings in the Control Plane with live prices | S | LOW | #417 |
204
- | 75 | R100-075 | autonomy | Maintenance autopilot: dependency upgrades, lint debt and flaky tests as sealed PRs | M | MEDIUM | #418 |
205
- | 76 | R100-076 | autonomy | Preserve working state across compaction | M | MEDIUM | #277 (existing) |
206
- | 77 | R100-077 | autonomy | Relay operator input to a running worker | M | MEDIUM | #278 (existing) |
207
- | 78 | R100-078 | autonomy | Every run in its own worktree by default | M | HIGH | #232 (existing) |
208
- | 79 | R100-079 | autonomy | Multi-day missions with milestone receipts | L | MEDIUM | #419 |
209
- | 80 | R100-080 | autonomy | Overnight backlog window with a morning report | S | LOW | #420 |
210
- | 81 | R100-081 | autonomy | Move a run to another machine: export and import run state | M | MEDIUM | #421 |
211
- | 82 | R100-082 | dashboard | Run replay: step through stages with the diff and test output at each step | M | LOW | #422 |
212
- | 83 | R100-083 | dashboard | Compare two runs side by side | S | LOW | #423 |
213
- | 84 | R100-084 | dashboard | Weekly digest to Slack or email | S | LOW | #424 |
214
- | 85 | R100-085 | dashboard | Stage time and cost chart per run | S | LOW | #425 |
215
- | 86 | R100-086 | dashboard | Repo health page: seal rate, revert rate and change-failure rate trends | S | LOW | #426 |
216
- | 87 | R100-087 | dashboard | Stuck-run alert when no progress for N minutes | S | LOW | #427 |
217
- | 88 | R100-088 | ecosystem | Hosted template registry: search and publish | M | LOW | #428 |
218
- | 89 | R100-089 | ecosystem | Custom gates in loki.yaml that feed the Seal | M | HIGH | #429 |
219
- | 90 | R100-090 | ecosystem | `loki hooks install`: fast verify on pre-commit | S | LOW | #430 |
220
- | 91 | R100-091 | ecosystem | Signed outbound run webhooks with a typed event schema | S | MEDIUM | #431 |
221
- | 92 | R100-092 | ecosystem | One MCP config for every MCP-capable provider | M | MEDIUM | #343 (existing) |
222
- | 93 | R100-093 | ecosystem | Use existing Claude Code and droid skills in any provider's run | M | MEDIUM | #432 |
223
- | 94 | R100-094 | ecosystem | Embeddable TypeScript SDK: `runLoki({ spec })` | M | MEDIUM | #433 |
224
- | 95 | R100-095 | trust | Receipts in a public transparency log | M | HIGH | #434 |
225
- | 96 | R100-096 | trust | Clause-by-clause spec trace in the receipt | L | HIGH | #341 (existing) |
226
- | 97 | R100-097 | trust | Numbered, anchored acceptance clauses from any spec | M | HIGH | #340 (existing) |
227
- | 98 | R100-098 | trust | Vision pass over captured screenshots in the Seal | M | HIGH | #263 (existing) |
228
- | 99 | R100-099 | trust | Audit evidence pack from receipts | S | HIGH | #435 |
229
- | 100 | R100-100 | trust | Page and line anchors for PDF and DOCX specs | M | MEDIUM | #339 (existing) |
230
-
231
- ### Item detail
232
-
233
- Items that reuse an existing issue carry their acceptance criteria in that issue.
234
-
235
- #### R100-001 Zero-question first run with an already logged-in provider
236
-
237
- - Issue: #357. Area: onboarding. Size: M. Tier: MEDIUM. Deps: FR-A, #347.
238
- - Problem: A new user who already has claude, codex, opencode, cline or aider logged in still meets `loki setup` before the first build; every extra step loses users before their first VERIFIED build.
239
- - Feature: `loki start "<task>"` in a fresh HOME detects a logged-in provider CLI, picks the default route, and runs with no prompt. `loki setup` becomes optional (extends FR-A in 04-first-run.md, `start.ts`, `doctor_fix.ts`).
240
- - Acceptance:
241
- - In a clean HOME with only the claude CLI logged in, `loki start "add one line to README" </dev/null` emits its first stage event with 0 interactive prompts.
242
- - A fixture test stubs each of the 5 provider CLIs as logged in and `loki doctor --json` reports `provider_autodetected: true` for 5 of 5.
243
- - Gate `--entry start-empty` passes with 0 calls to `loki setup`.
244
- - Command start to first stage event p50 <= 15 s over 5 runs, logged by the MEAS-7 nightly.
245
- - Metric and target: Time to first VERIFIED build p50 <= 120 s (04-first-run bar); first-run abandonment measured by `first_run_blocked` telemetry, target <= 10%.
246
- - Competitor baseline: Claude Code: Interactive session is the default; login is `claude auth` (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: Install and sign-in are documented steps (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: Devin for Terminal installs via a curl script (https://docs.devin.ai/ (fetched 2026-10-23)). Factory droid: Interactive mode is the default (`droid` with no args) (`droid --help`, droid 0.190.0, run 2026-10-23).
247
-
248
- #### R100-002 Seal any agent's diff: signed receipt for changes Claude Code, Codex or a human already made
249
-
250
- - Issue: #345 (existing). Area: trust. Size: M. Tier: HIGH. Deps: #337.
251
- - Problem: Users who already code with another agent get no proof for that work, so Loki is only useful when Loki writes the code.
252
- - Metric and target: Runs per user per week: target >= 3 sealed external diffs per active user per week.
253
- - Competitor baseline: Claude Code: `ultrareview` prints findings, no signed receipt documented (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: Local review of uncommitted changes, a commit or a base branch (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: Devin Review page exists; no portable signed receipt found (https://docs.devin.ai/work-with-devin/devin-review.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
254
-
255
- #### R100-003 In-place resume after a human answers a blocked question
256
-
257
- - Issue: #358. Area: autonomy. Size: L. Tier: MEDIUM. Deps: #278, #353, journal (#283, closed).
258
- - Already exists (corrected 2026-10-23): `loki answer [<run-id>]` already ships in `loki-ts/src/features/blocked_answer.ts` (D63-C4), but the answer starts a new run. This item is the in-place resume under the same run id.
259
- - Problem: Today a BLOCKED engine10 run is terminal; a Slack reply starts a new follow-up run (`loki-ts/src/contrib/slack_inbound.ts` lines 2-4), so completed work is re-done and users abandon blocked runs.
260
- - Feature: A blocked run parks with its journal intact. `loki answer <run> "<text>"`, a Slack thread reply, or a PR comment resumes the same run id and skips completed slices.
261
- - Acceptance:
262
- - Fixture: a run blocks at plan; `loki answer <run> "use postgres"` continues under the same run id and the journal shows 0 re-executed completed slices.
263
- - A Slack thread reply on a blocked run resumes the same run id (event log shows 1 `run.resumed`, 0 `run.started`).
264
- - An unanswered block stops cleanly after `LOKI_BLOCK_WAIT_S` (default 86400) and sends exactly 1 notification.
265
- - `loki status --json` reports `state: blocked` with the question text within 2 s of the block.
266
- - Metric and target: Abandoned-run rate (BLOCKED never resumed) target <= 10%; human touches per shipped change target <= 1.
267
- - Competitor baseline: Claude Code: `--resume` and `--continue` resume a conversation (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: "Return to a saved chat" via resume (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: Slack thread sync lets messages go both ways in one session (https://docs.devin.ai/integrations/slack (fetched 2026-10-23)). Factory droid: `-r, --resume [sessionId]` and `--fork` (`droid --help`, droid 0.190.0, run 2026-10-23).
268
-
269
- #### R100-004 Per-PR preview URL with its health result in the PR body
270
-
271
- - Issue: #359. Area: deploy. Size: M. Tier: MEDIUM. Deps: DEP-A.
272
- - Problem: Reviewers cannot click a sealed change; they must pull and run it, which slows every review.
273
- - Feature: On a PR run with a configured provider (Netlify, Vercel, Cloudflare, Fly), deploy to a preview destination, probe health, write the URL and probe result into the PR body and the receipt, and prune old previews (DEP-A in 05-deploy.md).
274
- - Acceptance:
275
- - With each of 4 stubbed provider CLIs, `loki start --deploy --destination preview` writes a `preview_url` line into the PR body (4 of 4 fixtures).
276
- - `loki status --json` has a non-empty `deploy.preview_url` and an HTTP status of 200 from the probe on the success fixture.
277
- - The receipt records the preview URL and probe status; `loki verify` on that receipt exits 0.
278
- - `loki deploy prune --older-than 7d` removes previews older than 7 days and prints the count removed.
279
- - Metric and target: Median time from PR open to first human review action target -30% vs no-preview PRs; week-2 return rate.
280
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Deployment appears only as a verification example ("testing an automatic deployment") (https://docs.devin.ai/ (fetched 2026-10-23)). Factory droid: UNKNOWN.
281
-
282
- #### R100-005 PR and issue comment commands: /loki fix, /loki explain, /loki reseal
283
-
284
- - Issue: #360. Area: team. Size: M. Tier: HIGH. Deps: verify-pr respond, D60-4 Action.
285
- - Problem: Reviewers who want a change on a Loki PR must leave GitHub, open a terminal and run Loki themselves.
286
- - Feature: The existing issue-to-PR GitHub Action listens for `/loki fix <text>`, `/loki explain` and `/loki reseal` comments from users with write access and runs them on the PR branch; untrusted comment text never shares a step with secrets (moat 9).
287
- - Acceptance:
288
- - Workflow fixture: a collaborator comment `/loki fix rename foo to bar` produces 1 new commit on the PR branch and a fresh `loki/receipt` status.
289
- - The same comment from a non-collaborator starts 0 runs and posts 1 reply naming the missing permission.
290
- - `/loki explain` replies with the clause matrix in <= 60 lines.
291
- - A comment containing a prompt-injection fixture leaves secrets unread (the guard test asserts 0 secret env vars in the untrusted step).
292
- - Metric and target: Runs per user per week target +50% for repos with the Action installed; human touches per shipped change.
293
- - Competitor baseline: Claude Code: `--from-pr` resumes a session linked to a PR (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: GitHub Action page /codex/github-action listed (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: GitHub integration page (https://docs.devin.ai/integrations/gh.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
294
-
295
- #### R100-006 Spec clause matrix in the PR body and receipt comment
296
-
297
- - Issue: #342 (existing). Area: trust. Size: M. Tier: HIGH. Deps: #340, #341.
298
- - Problem: Reviewers cannot see which requirement each test proves.
299
- - Metric and target: Human review time per sealed PR target -30%.
300
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
301
-
302
- #### R100-007 Live run view: `loki status --follow` streams stages, edits, tests and cost
303
-
304
- - Issue: #361. Area: speed. Size: S. Tier: LOW. Deps: event log.
305
- - Already exists (corrected 2026-10-23): `loki cockpit --follow` already exists as an inline-image multi-repo view. This item is the text and JSONL stream for one run in `loki-ts/src/commands/status.ts`.
306
- - Problem: During a long run users see little; they cancel runs that were progressing.
307
- - Feature: `loki status --follow [--json]` prints one line per event (stage, file edited, test result, cost) and Ctrl-C detaches without stopping the run (extends `status.ts` and the event log).
308
- - Acceptance:
309
- - `loki status --follow --json` emits >= 1 JSONL event per stage transition; a fixture run asserts 7 stage events.
310
- - The first event prints within 2 s of `loki start`.
311
- - After Ctrl-C on the follower, `loki status --json` still reports `state: running`.
312
- - Each cost event carries `usd_so_far` and a test compares the last value to the ledger total within 1%.
313
- - Metric and target: Abandoned-run rate target -25%; time to first visible progress <= 5 s.
314
- - Competitor baseline: Claude Code: `--output-format stream-json` and `--include-partial-messages` (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: `codex exec --json` prints JSONL events (docs/COMPETITIVE-SCORECARD.md, measured on codex-cli 0.146.0 (codex is not installed on this host on 2026-10-23)). Devin: Users follow Devin's work in real time and open progress steps (https://docs.devin.ai/ (fetched 2026-10-23)). Factory droid: UNKNOWN.
315
-
316
- #### R100-008 Background runs and one run list across repos
317
-
318
- - Issue: #362. Area: autonomy. Size: M. Tier: MEDIUM. Deps: #232.
319
- - Already exists (corrected 2026-10-23): `loki start --bg` and `--detach` already exist in `autonomy/loki`, and `loki projects` lists registered repos. This item is `loki runs`, `loki attach` and `loki runs stop` only.
320
- - Problem: A run ties up the terminal; users with several repos cannot see every running build in one place.
321
- - Feature: `loki start --bg` returns a run id, `loki runs` lists every run across registered projects (`loki projects`) with state, cost and verdict, and `loki attach <id>` re-joins one.
322
- - Acceptance:
323
- - `loki start --bg "<task>"` returns a run id and exits 0 in <= 2 s.
324
- - With 3 registered fixture projects and 4 runs, `loki runs --json | jq length` prints 4.
325
- - `loki attach <id>` shows live events for that run; `loki runs stop <id>` moves it to `stopped` within 5 s.
326
- - `loki runs --json` rows carry 5 keys: id, repo, state, usd, verdict.
327
- - Metric and target: Runs per user per week target +40%; concurrent runs per active user.
328
- - Competitor baseline: Claude Code: `--bg`, `agents`, `attach`, `logs`, `stop` (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: "Move work to Codex cloud" (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: The Devin API is listed on the docs home (https://docs.devin.ai/ (fetched 2026-10-23)). Factory droid: `daemon` runs the Factory daemon server (`droid --help`, droid 0.190.0, run 2026-10-23).
329
-
330
- #### R100-009 Run large multi-part tasks as decomposed, separately verified units
331
-
332
- - Issue: #235 (existing). Area: autonomy. Size: L. Tier: MEDIUM. Deps: journal (#283, closed).
333
- - Problem: Big asks fail or stall as one unit.
334
- - Metric and target: Completion rate on multi-part tasks target >= 85%.
335
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: Missions: multi-agent work via `droid exec --mission` (https://docs.factory.com/cli/getting-started/overview (fetched 2026-10-23)).
336
-
337
- #### R100-010 Approval inbox: everything waiting on a human, across repos
338
-
339
- - Issue: #363. Area: team. Size: M. Tier: MEDIUM. Deps: R100-003.
340
- - Problem: Blocked questions, PRs awaiting approval and deploys awaiting promotion are spread across terminals, Slack and GitHub; work waits for hours.
341
- - Feature: `loki inbox` and a Control Plane page list each waiting item with one action (answer, approve, promote, dismiss).
342
- - Acceptance:
343
- - Fixture with 3 repos and 4 waiting items: `loki inbox --json | jq length` prints 4.
344
- - `loki inbox approve <id>` marks the item done and the next `loki inbox --json` prints 3.
345
- - The Control Plane inbox page renders 200 items in <= 1 s (Playwright timing fixture).
346
- - Each item shows its wait age; items older than 24 h are flagged.
347
- - Metric and target: Median wait for a human action target <= 30 min; human touches per shipped change.
348
- - Competitor baseline: Claude Code: `claude agents` lists background agents (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: Session Insights page (https://docs.devin.ai/product-guides/session-insights.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
349
-
350
- #### R100-011 Learn from what users edit: amended or rejected Loki PRs become lessons
351
-
352
- - Issue: #364. Area: memory. Size: M. Tier: MEDIUM. Deps: memory learn, outcomes.
353
- - Problem: Users fix the same Loki habits by hand on every PR; nothing learns from their code edits (`loki memory learn` reads review comments only).
354
- - Feature: When a Loki PR is merged after human commits, or closed unmerged, the human diff becomes a scoped, cited lesson injected into later runs in that repo.
355
- - Acceptance:
356
- - Fixture PR where a human renames 3 identifiers before merge: `loki memory lessons --json` gains 1 lesson citing the PR number and hunk.
357
- - `loki memory brief` for the next run in that repo contains the lesson text.
358
- - `loki memory forget <id>` removes it and the next brief no longer contains it.
359
- - Lessons from repo A appear in 0 briefs for repo B unless the lesson is promoted.
360
- - Metric and target: Human commits per Loki PR target -20% by a user's 4th week; week-2 return rate.
361
- - Competitor baseline: Claude Code: `--bare` help names auto-memory as a feature it skips (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: AGENTS.md instructions file (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: Devin Memory and Dreaming page (https://docs.devin.ai/product-guides/memory.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: Repository instructions via AGENTS.md (https://docs.factory.com/cli/getting-started/overview (fetched 2026-10-23)).
362
-
363
- #### R100-012 Seal as a required merge check: `loki github protect`
364
-
365
- - Issue: #365. Area: trust. Size: S. Tier: HIGH. Deps: TEN-DEPLOY-07 commit status.
366
- - Problem: The receipt status is advisory; teams cannot require it before merge without hand-editing branch protection.
367
- - Feature: `loki github protect [--dry-run]` makes `loki/receipt` a required status check on the default branch, and the Action re-verifies the receipt on every PR push.
368
- - Acceptance:
369
- - `loki github protect --dry-run` prints exactly 1 branch-protection API call and changes nothing.
370
- - Fixture repo: a PR with no receipt shows `loki/receipt` failure; a valid receipt shows success; a tampered receipt shows failure (3 of 3).
371
- - Removing protection with `loki github protect --off` restores the previous required checks list byte-identical.
372
- - Metric and target: Repos with the check required, target >= 30% of active repos; week-4 retention of those repos.
373
- - Competitor baseline: Claude Code: `ultrareview` prints findings; no merge-gate receipt in help (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: GitHub Action page listed (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: Devin Review page (https://docs.devin.ai/work-with-devin/devin-review.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
374
-
375
- #### R100-013 Seal web apps by driving the spec's user flows in a real browser
376
-
377
- - Issue: #249 (existing). Area: trust. Size: L. Tier: HIGH. Deps: #263.
378
- - Problem: Boot probes and screenshots do not prove a user flow works.
379
- - Metric and target: Post-merge change-failure rate for web apps target -30%.
380
- - Competitor baseline: Claude Code: `--chrome` Claude in Chrome integration (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: Environment setup page (https://docs.devin.ai/onboard-devin/environment.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
381
-
382
- #### R100-014 Read every agent's rules: CLAUDE.md, AGENTS.md, Cursor, Copilot and Windsurf rule files
383
-
384
- - Issue: #366. Area: ecosystem. Size: S. Tier: LOW. Deps: none.
385
- - Problem: Teams already wrote rules for other agents; Loki reads AGENTS.md (v7.21) but not `.cursorrules`, `.cursor/rules/`, `.github/copilot-instructions.md`, `.windsurfrules` or `GEMINI.md`.
386
- - Feature: One loader folds every known rule file into the run brief and `loki doctor` lists which were loaded and which conflict.
387
- - Acceptance:
388
- - Fixture with 6 rule files: `loki memory brief --json | jq '.sources | length'` prints 6.
389
- - Two contradictory rules produce 1 `conflict` row in `loki doctor --json`.
390
- - A repo with 0 rule files adds 0 bytes to the brief.
391
- - Metric and target: Week-2 return rate for repos with existing rule files; human commits per Loki PR target -10%.
392
- - Competitor baseline: Claude Code: `import` imports config from another AI coding agent (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: AGENTS.md support (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: UNKNOWN. Factory droid: AGENTS.md support (https://docs.factory.com/cli/getting-started/overview (fetched 2026-10-23)).
393
-
394
- #### R100-015 Model shootout on your own task: `loki compare`
395
-
396
- - Issue: #367. Area: providers. Size: M. Tier: MEDIUM. Deps: loki bench.
397
- - Problem: Users cannot tell which model or provider is best and cheapest for their repo; `loki bench vs` needs a task-spec file.
398
- - Feature: `loki compare "<task>" --routes a,b,c` runs the task on N routes in isolated worktrees, prints sealed, cost and time per route, and `--adopt <route>` saves the winner.
399
- - Acceptance:
400
- - `loki compare "x" --routes a,b,c --dry-run` prints 3 planned arms each with an estimated USD.
401
- - An executed stub fixture writes 3 rows each with verdict, usd and seconds.
402
- - `loki compare --adopt <route>` writes the route into loki.yaml and `loki models --json` shows it as default.
403
- - All arm worktrees are removed after the run (0 left in `git worktree list`).
404
- - Metric and target: Cost per sealed change target -30% for users who adopt a route.
405
- - Competitor baseline: Claude Code: `--model` and `--fallback-model` (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
406
-
407
- #### R100-016 Verify a receipt in the browser, offline, with no install
408
-
409
- - Issue: #368. Area: trust. Size: M. Tier: HIGH. Deps: PRF-B.
410
- - Problem: A reviewer outside engineering cannot check a receipt without installing Loki.
411
- - Feature: `loki proof export --html` writes one self-contained page that verifies a receipt with the public key, offline (PRF-B in 08-proof.md).
412
- - Acceptance:
413
- - The exported page is a single file under 1 MB.
414
- - A headless check shows PASS for the sample receipt and FAIL for a tampered copy (2 of 2).
415
- - The page makes 0 network requests (CSP `connect-src 'none'`, asserted in the headless check).
416
- - Metric and target: Receipts verified by a non-author, target >= 1 per sealed PR on team repos.
417
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
418
-
419
- #### R100-017 Single-binary install with no node or python3 required
420
-
421
- - Issue: #369. Area: onboarding. Size: M. Tier: MEDIUM. Deps: FR-B.
422
- - Already exists (corrected 2026-10-23): `build:binary` (`bun build --compile`) already exists in `loki-ts/package.json`. This item is building and attaching the 5 targets in `.github/workflows/release.yml`.
423
- - Problem: Install needs node, python3, jq, git and curl plus a provider; each missing tool is a dead end.
424
- - Feature: Release attaches compiled binaries (Bun compile) so the v10 path needs only git and a provider CLI (extends FR-B).
425
- - Acceptance:
426
- - The release attaches 5 binaries: darwin-arm64, darwin-x64, linux-x64, linux-arm64, windows-x64.
427
- - With node and python3 off PATH, `./loki version --json` exits 0 and `./loki start --dry-run "x"` exits 0.
428
- - Each binary is <= 120 MB.
429
- - Metric and target: Install-to-first-run success rate target >= 95%; time to first VERIFIED build.
430
- - Competitor baseline: Claude Code: `install` installs the Claude Code native build (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: Devin for Terminal installs via curl (https://docs.devin.ai/ (fetched 2026-10-23)). Factory droid: `update` installs droid updates (`droid --help`, droid 0.190.0, run 2026-10-23).
431
-
432
- #### R100-018 Automatic rollback on all four deploy providers
433
-
434
- - Issue: #370. Area: deploy. Size: M. Tier: MEDIUM. Deps: DEP-B, DEP-D.
435
- - Already exists (corrected 2026-10-23): `--auto-rollback` already exists on `loki start` and `loki deploy`, for Vercel and Fly only. This item adds Netlify, Cloudflare and a timed health watch.
436
- - Problem: `loki rollback deploy` prints the rollback command but never runs it; a bad deploy stays live until a human acts.
437
- - Feature: With `--auto-rollback`, a failed health watch after deploy runs the provider rollback, records it in the receipt, and notifies (DEP-B, DEP-D).
438
- - Acceptance:
439
- - With 4 stubbed provider CLIs and a health URL failing 3 probes, rollback runs once per provider (4 of 4).
440
- - `loki status --json` reports `deploy.state: rolled_back` and the receipt records the rollback.
441
- - With `--auto-rollback` off, 0 rollback commands run and 1 suggestion prints.
442
- - Metric and target: Mean time to recover from a bad deploy target <= 5 min.
443
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
444
-
445
- #### R100-019 Leader screen: work in, sealed shipped, cost per sealed change, waiting on a human
446
-
447
- - Issue: #371. Area: dashboard. Size: M. Tier: MEDIUM. Deps: kpis.
448
- - Problem: V10-VISION promises one screen for leaders; numbers exist across `loki report kpis`, outcomes and the ledger but not together.
449
- - Feature: `loki report kpis --leader` and a Control Plane page show the 4 numbers per week across registered repos.
450
- - Acceptance:
451
- - `loki report kpis --leader --since 7d --json` has 4 keys: work_in, shipped_sealed, usd_per_sealed, waiting_on_human.
452
- - The Control Plane leader page shows the same 4 values as the CLI on a fixture (4 of 4 equal).
453
- - A weekly digest posts the 4 numbers to the configured notify channel once per 7 days.
454
- - Metric and target: Weekly active leaders viewing the page; week-4 retention of team accounts.
455
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Personal Analytics and Session Insights pages (https://docs.devin.ai/enterprise/security-access/personal-analytics.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
456
-
457
- #### R100-020 Native Windows support
458
-
459
- - Issue: #372. Area: onboarding. Size: L. Tier: MEDIUM. Deps: R100-017.
460
- - Problem: Windows users without WSL cannot run Loki.
461
- - Feature: PowerShell install and a Windows-native Bun route for `loki start`, `loki verify` and `loki status`.
462
- - Acceptance:
463
- - On a windows-latest runner, `npm i -g loki-mode` then `loki version --json` exits 0.
464
- - `loki start --dry-run "x"` and `loki verify --json` exit with documented codes (0 or 2) on Windows.
465
- - INSTALLATION.md has a Windows section with 1 install command.
466
- - Metric and target: Installs from Windows hosts; time to first VERIFIED build on Windows p50 <= 180 s.
467
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: Windows install, Windows sandbox and WSL pages (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: Windows support page (https://docs.devin.ai/onboard-devin/environment/windows-support.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
468
-
469
- #### R100-021 Name the provider failure cause and its fix on the Reason line
470
-
471
- - Issue: #351 (existing). Area: onboarding. Size: S. Tier: LOW. Deps: none.
472
- - Problem: Auth, login and credit failures read as generic errors.
473
- - Metric and target: First-run abandonment target <= 10%.
474
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
475
-
476
- #### R100-022 Check publish capability at intake, before any work
477
-
478
- - Issue: #231 (existing). Area: onboarding. Size: S. Tier: MEDIUM. Deps: none.
479
- - Problem: A run builds for minutes, then cannot open a PR.
480
- - Metric and target: Runs lost to publish failure target 0 per 100.
481
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
482
-
483
- #### R100-023 Zero-install try in a dev container or Codespace
484
-
485
- - Issue: #373. Area: onboarding. Size: S. Tier: LOW. Deps: FR-E.
486
- - Problem: Prospects will not install a CLI to see a sealed run (FR-E).
487
- - Feature: A `.devcontainer/` config and README badge; the container boots and runs `loki tour`, then a live task when a key is present.
488
- - Acceptance:
489
- - `devcontainer up` on the repo finishes and `loki tour` exits 0 inside it.
490
- - Link to verified sample receipt in <= 180 s, timed in CI.
491
- - The container image needs 0 manual installs (asserted by a script with no network after boot).
492
- - Metric and target: Link-to-verified-receipt p50 <= 180 s; conversion from try to install.
493
- - Competitor baseline: Claude Code: `--cloud` creates a cloud session (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: Cloud environments page (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: Environment blueprints (https://docs.devin.ai/onboard-devin/environment/blueprints.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
494
-
495
- #### R100-024 Starter task suggestions from issues, TODOs and failing tests
496
-
497
- - Issue: #374. Area: onboarding. Size: S. Tier: LOW. Deps: loki next.
498
- - Problem: A new user in a repo does not know what small task to give first.
499
- - Feature: `loki next` with no active run proposes 3 small tasks from open issues, TODO/FIXME lines and failing tests, each with a cost estimate; picking a number starts it.
500
- - Acceptance:
501
- - Fixture with 2 issues and 5 TODOs: `loki next --suggest --json | jq length` prints 3.
502
- - Each suggestion carries `est_usd` and `source` (issue, todo or test).
503
- - `loki next --suggest --pick 1` starts a run within 2 s.
504
- - The command finishes in <= 10 s with no model call.
505
- - Metric and target: Time to first VERIFIED build; day-1 runs per new user target >= 2.
506
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
507
-
508
- #### R100-025 `loki try <repo-url>`: one command to a sealed sample change on any public repo
509
-
510
- - Issue: #375. Area: onboarding. Size: S. Tier: LOW. Deps: R100-024.
511
- - Problem: Evaluators want to see Loki on a real repo without touching their own checkout.
512
- - Feature: Clone a public repo into a run-owned temp worktree, pick a starter task, run it, show the receipt, then clean up.
513
- - Acceptance:
514
- - `loki try https://github.com/<fixture> --dry-run` prints the clone path, task and estimate.
515
- - After the run, `loki verify <receipt>` exits 0 and the temp dir is removed (0 leftover dirs).
516
- - The user's current checkout has 0 changed files.
517
- - Metric and target: Evaluator conversion to install; time to first VERIFIED build.
518
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Index a Repository page (https://docs.devin.ai/onboard-devin/index-repo.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
519
-
520
- #### R100-026 Readable plan with cost in under 10 seconds
521
-
522
- - Issue: #376. Area: speed. Size: S. Tier: LOW. Deps: loki plan.
523
- - Problem: Users wait before they see whether Loki understood the task.
524
- - Feature: `loki plan` streams a one-screen plan and cost estimate from the small tier first, then refines.
525
- - Acceptance:
526
- - First plan line prints in <= 3 s and the full plan in <= 10 s p50 over 5 fixture tasks with a real provider.
527
- - The plan is <= 40 lines and lists acceptance clauses.
528
- - The later refined plan differs from the first in a printed diff of <= 20 lines or prints `unchanged`.
529
- - Metric and target: Plan-to-start conversion target >= 70%.
530
- - Competitor baseline: Claude Code: `--permission-mode` includes a plan mode choice (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: `--use-spec` starts in spec mode (`droid --help`, droid 0.190.0, run 2026-10-23).
531
-
532
- #### R100-027 Desktop and phone push notifications when a run needs you or finishes
533
-
534
- - Issue: #377. Area: speed. Size: S. Tier: LOW. Deps: notify.
535
- - Already exists (corrected 2026-10-23): Desktop notifications already exist on the legacy route (`send_notification` in `autonomy/run.sh`), and `loki notify` sends to slack, discord and webhook. This item adds a desktop channel and ntfy to `loki notify` and engine10.
536
- - Problem: Users miss a blocked question for hours because notify only covers Slack, Discord and webhooks.
537
- - Feature: Add `desktop` (macOS and Linux) and `ntfy` channels to `loki notify`, fired on blocked, done and failed.
538
- - Acceptance:
539
- - `loki notify test --channel desktop` exits 0 on macOS and Linux runners.
540
- - A fixture run fires exactly 2 events (blocked, done) to a stub ntfy server.
541
- - `loki notify status` lists the 2 new channels.
542
- - Metric and target: Median time from block to answer target <= 15 min.
543
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Devin sends direct messages for alerts (https://docs.devin.ai/integrations/slack (fetched 2026-10-23)). Factory droid: UNKNOWN.
544
-
545
- #### R100-028 Best-of-N implement for small tasks
546
-
547
- - Issue: #378. Area: speed. Size: M. Tier: MEDIUM. Deps: M-17 scheduler.
548
- - Already exists (corrected 2026-10-23): Two parallel attempts already exist behind `LOKI_E10_ATTEMPTS=2` (default off) in `loki-ts/src/features/attempts.ts`. This item makes that the default for small tasks and records the arms in the receipt.
549
- - Problem: One unlucky attempt costs a whole retry round.
550
- - Feature: `LOKI_BEST_OF=2` runs 2 implementations in parallel worktrees on the cheap tier and keeps the first that seals (extends the modernize best-of-2 scheduler to start).
551
- - Acceptance:
552
- - Fixture: 2 worktrees created, 1 sealed result kept, the other deleted (0 left).
553
- - The receipt records `arms: 2` and the chosen arm.
554
- - Wall time with N=2 is <= 1.1x N=1 on the paired fixture set.
555
- - Metric and target: First-attempt seal rate target +15 points.
556
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
557
-
558
- #### R100-029 Warm engine daemon for sub-second start
559
-
560
- - Issue: #379. Area: speed. Size: M. Tier: MEDIUM. Deps: SPD-B.
561
- - Already exists (corrected 2026-10-23): The warm engine already ships (D61): `loki-ts/src/features/warm.ts` and `warm_client.ts`, on by default. This item is limited to measuring startup overhead and a read-only `loki daemon status`; if warm p50 is already at or under 1 s, #379 closes as a duplicate of D61.
562
- - Problem: Each `loki start` pays engine boot, repo map and test map cost.
563
- - Feature: `loki daemon` keeps the Bun engine, repo map and test map warm per repo; `loki start` attaches when it is running.
564
- - Acceptance:
565
- - With the daemon up, pre-model overhead is <= 1 s p50 over 10 starts (SPD-B probe).
566
- - `loki daemon status --json` lists warm repos.
567
- - Killing the daemon makes the next start fall back cold with 0 errors.
568
- - Metric and target: Time to first stage event; runs per user per week.
569
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: `daemon` runs the Factory daemon server (`droid --help`, droid 0.190.0, run 2026-10-23).
570
-
571
- #### R100-030 Re-seal in under a minute after a human edits a Loki PR
572
-
573
- - Issue: #380. Area: speed. Size: M. Tier: HIGH. Deps: fast_verify.
574
- - Problem: A one-line human tweak drops the receipt and a full re-verify is slow.
575
- - Feature: `loki verify --reseal` re-runs only the checks affected by the new commits and issues an updated receipt.
576
- - Acceptance:
577
- - Fixture 1-file edit: `loki verify --reseal` finishes in <= 60 s and exits 0.
578
- - The new receipt references the prior receipt id and the new head sha.
579
- - An edit that breaks a clause exits non-zero and names the clause.
580
- - Metric and target: Share of human-edited PRs that keep a valid receipt target >= 80%.
581
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: Local review of uncommitted changes or a commit (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: UNKNOWN. Factory droid: UNKNOWN.
582
-
583
- #### R100-031 Opt-in fast mode with ledger premium and fallback
584
-
585
- - Issue: #279 (existing). Area: speed. Size: M. Tier: MEDIUM. Deps: router.
586
- - Problem: Users who value time cannot trade money for speed.
587
- - Metric and target: Time to sealed PR target -30% when enabled.
588
- - Competitor baseline: Claude Code: Fast mode is documented for Claude Code (session guidance); `--effort` flag (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
589
-
590
- #### R100-032 Progress mirrored to the Slack thread and a live PR checklist
591
-
592
- - Issue: #381. Area: speed. Size: S. Tier: LOW. Deps: slack_inbound.
593
- - Problem: Teammates who started a run from Slack or an issue cannot see progress without a terminal.
594
- - Feature: Each stage transition edits one Slack thread message and a draft PR checklist in place.
595
- - Acceptance:
596
- - Fixture run: 1 Slack message edited >= 5 times, 0 new messages per stage.
597
- - The draft PR body checklist ticks 7 stage boxes by the end.
598
- - Edits are rate-limited to <= 1 per 5 s per thread.
599
- - Metric and target: Abandoned-run rate for Slack-started runs target -25%.
600
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Automations post run results to a channel (https://docs.devin.ai/integrations/slack (fetched 2026-10-23)). Factory droid: UNKNOWN.
601
-
602
- #### R100-033 Database provisioning per preview
603
-
604
- - Issue: #382. Area: deploy. Size: L. Tier: MEDIUM. Deps: R100-004.
605
- - Problem: Apps with a database cannot get a working preview.
606
- - Feature: A deploy hook creates a database (Postgres in Docker, or a branch on the user's provider), runs migrations and injects the URL (DEP-C).
607
- - Acceptance:
608
- - Fixture app with 2 migrations: the preview database reports 2 applied migrations.
609
- - The URL reaches the app as an env var and never appears on argv (ps fixture finds 0).
610
- - Pruning a preview drops its database (0 left).
611
- - Metric and target: Share of previews that pass health for apps with a DB target >= 90%.
612
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
613
-
614
- #### R100-034 Run the spec's user flows against the live deploy URL
615
-
616
- - Issue: #383. Area: deploy. Size: M. Tier: HIGH. Deps: #249, R100-004.
617
- - Problem: A deploy can pass a health probe while the main flow is broken.
618
- - Feature: After deploy, run the browser flow checks from #249 against the deployed URL and record them in the receipt.
619
- - Acceptance:
620
- - Fixture: a deployed app with a broken login flow reports 1 failing clause and exit code 2.
621
- - A healthy deploy records N of N flows passing in the receipt.
622
- - Flow checks finish in <= 120 s for 5 flows.
623
- - Metric and target: Post-deploy incident rate target -30%.
624
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
625
-
626
- #### R100-035 Container image build and push with SBOM bound to the receipt
627
-
628
- - Issue: #384. Area: deploy. Size: M. Tier: MEDIUM. Deps: DEP-F.
629
- - Problem: Teams that ship containers must build and push by hand after Loki finishes.
630
- - Feature: `loki deploy --target container --registry <url>` builds the image, pushes it, and binds the digest and an SBOM to the receipt.
631
- - Acceptance:
632
- - Fixture with a local registry: 1 image pushed and its digest equals the receipt's `image_digest`.
633
- - An SBOM file is attached and listed in the receipt (1 entry).
634
- - Registry credentials never appear in the receipt (redaction test finds 0).
635
- - Metric and target: Share of container repos that deploy through Loki.
636
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
637
-
638
- #### R100-036 Kubernetes deploy with canary through the user's own kube context
639
-
640
- - Issue: #385. Area: deploy. Size: L. Tier: HIGH. Deps: R100-018.
641
- - Problem: Teams on Kubernetes cannot use `loki deploy`.
642
- - Feature: Generate or reuse manifests, apply to the user's current context with a canary step, health-gate, and roll back on failure.
643
- - Acceptance:
644
- - `loki deploy --target k8s --dry-run` prints the manifests and 0 cluster writes.
645
- - On a kind cluster fixture, the canary takes 10% of replicas, then promotes after 3 passing probes.
646
- - A failing probe rolls back and the receipt records it.
647
- - Metric and target: Share of k8s repos that deploy through Loki.
648
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
649
-
650
- #### R100-037 `loki deploy init`: detect a logged-in deploy CLI and write config with no questions
651
-
652
- - Issue: #386. Area: deploy. Size: S. Tier: LOW. Deps: none.
653
- - Problem: First deploy needs provider flags and env files the user has to look up.
654
- - Feature: Detect logged-in netlify, vercel, wrangler or flyctl, pick the project, and write the deploy block to loki.yaml.
655
- - Acceptance:
656
- - Fixture with 1 stubbed logged-in CLI: `loki deploy init` writes loki.yaml with 0 prompts.
657
- - With 2 logged-in CLIs it asks exactly 1 question.
658
- - `loki deploy --dry-run` succeeds right after init.
659
- - Metric and target: Time from first VERIFIED build to first deploy p50 <= 5 min.
660
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
661
-
662
- #### R100-038 CODEOWNERS-aware reviewers on every Loki PR
663
-
664
- - Issue: #387. Area: team. Size: S. Tier: LOW. Deps: github publish.
665
- - Problem: Loki PRs land with no reviewer and wait.
666
- - Feature: Request reviewers from CODEOWNERS for touched paths and list owners per file in the PR body.
667
- - Acceptance:
668
- - Fixture with 3 owner rules: the PR requests exactly the 2 matching owners.
669
- - The PR body lists the owner for each of the changed files.
670
- - No CODEOWNERS file requests 0 reviewers and prints 1 hint.
671
- - Metric and target: Median time to first review target -30%.
672
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
673
-
674
- #### R100-039 Fill the repo's pull request template
675
-
676
- - Issue: #388. Area: team. Size: S. Tier: LOW. Deps: R100-006.
677
- - Problem: Loki PR bodies ignore the team's template, so reviewers reject them.
678
- - Feature: When `.github/pull_request_template.md` exists, Loki fills each section from the receipt and plan.
679
- - Acceptance:
680
- - Fixture template with 4 headings: the PR body contains the 4 headings, each non-empty.
681
- - Checkbox items proven by the receipt are ticked; unproven ones stay unticked.
682
- - Repos with no template keep today's body byte-identical.
683
- - Metric and target: Loki PRs merged without body edits target >= 90%.
684
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: GitHub Pull Request Templates page (https://docs.devin.ai/integrations/pr-templates.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
685
-
686
- #### R100-040 Team memory shared through git
687
-
688
- - Issue: #389. Area: team. Size: M. Tier: MEDIUM. Deps: R100-011.
689
- - Problem: Each teammate's Loki learns alone.
690
- - Feature: `loki memory push` and `pull` sync redacted, approved lessons through a committed `.loki/team-memory/` folder.
691
- - Acceptance:
692
- - Fixture with 2 clones: a lesson pushed in clone A appears in clone B's brief after pull.
693
- - A lesson containing a secret fixture is redacted (0 secret matches in the committed file).
694
- - Only lessons marked approved are pushed (fixture with 3 lessons, 1 approved, pushes 1).
695
- - Metric and target: Week-4 retention of team repos.
696
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: AGENTS.md checked into the repo (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: Knowledge Onboarding page (https://docs.devin.ai/onboard-devin/knowledge-onboarding.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
697
-
698
- #### R100-041 Team login for the shared Control Plane
699
-
700
- - Issue: #188 (existing). Area: team. Size: L. Tier: HIGH. Deps: none.
701
- - Problem: Teams cannot share one dashboard safely beyond localhost.
702
- - Metric and target: Weekly active viewers per team.
703
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
704
-
705
- #### R100-042 Bitbucket and Azure DevOps pull requests
706
-
707
- - Issue: #390. Area: team. Size: M. Tier: MEDIUM. Deps: push-mr.
708
- - Problem: V10-VISION promises neutrality across GitHub, GitLab and Bitbucket; only GitHub and GitLab publish today.
709
- - Feature: Publish branches and open PRs on Bitbucket Cloud and Azure DevOps with the receipt in the body.
710
- - Acceptance:
711
- - Fixture remotes for each host: 1 PR created per host via stubbed API (2 of 2).
712
- - The PR body carries the receipt id; tokens never appear on argv (0 matches).
713
- - `loki doctor --json` reports the host type for 4 hosts.
714
- - Metric and target: Share of non-GitHub repos among active repos.
715
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
716
-
717
- #### R100-043 Release notes written from sealed receipts
718
-
719
- - Issue: #391. Area: team. Size: S. Tier: LOW. Deps: receipts.
720
- - Problem: Teams write release notes by hand from PR titles.
721
- - Feature: `loki report release-notes <from>..<to>` groups sealed changes by clause and area, with receipt links and a list of unsealed commits.
722
- - Acceptance:
723
- - Fixture range with 5 sealed and 2 unsealed commits: output lists 5 under changes and 2 under not sealed.
724
- - Each entry links its receipt id.
725
- - `--format json` emits the same 7 rows.
726
- - Metric and target: Teams using it per release; week-4 retention.
727
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
728
-
729
- #### R100-044 VS Code access through the shipped MCP server: config doc and tool-list smoke test
730
-
731
- - Issue: #392. Area: ide. Size: S. Tier: LOW. Deps: none.
732
- - Problem: VS Code users must switch to a terminal to start, steer and read receipts.
733
- - Feature: Rescoped 2026-10-23 by team-lead ruling. The deprecated `vscode-extension/` is not revived. VS Code users reach Loki through the MCP server that already ships (`mcp/server.py`), registered by `loki mcp install --client vscode`. The work is a documented VS Code MCP config and one smoke test that lists the tools over that config.
734
- - Acceptance:
735
- - docs/INSTALLATION.md shows the `.vscode/mcp.json` that `loki mcp install --client vscode --project` writes, and names `loki_v10_run`, `loki_v10_status` and `loki_v10_verify`.
736
- - A smoke test launches the server from the written config and finds those 3 tools by name in `tools/list`.
737
- - No file under `vscode-extension/` or `scripts/release.sh` changes.
738
- - Metric and target: Runs per user per week for VS Code users; week-2 return rate.
739
- - Competitor baseline: Claude Code: `--ide` connects to an IDE on startup (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: Codex IDE extension (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: Embedded editor in Devin Session Tools; no VS Code page in the index (https://docs.devin.ai/work-with-devin/devin-session-tools.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: IDE integrations page (https://docs.factory.com/cli/getting-started/overview (fetched 2026-10-23)).
740
-
741
- #### R100-045 Ready-made ACP configs for Zed and JetBrains
742
-
743
- - Issue: #393. Area: ide. Size: S. Tier: LOW. Deps: loki acp.
744
- - Problem: `loki acp` exists but users must hand-write editor config.
745
- - Feature: `loki acp --print-config zed|jetbrains` prints a working snippet and `loki acp --check` runs the handshake.
746
- - Acceptance:
747
- - `loki acp --print-config zed` prints valid JSON that parses with 1 agent entry.
748
- - `loki acp --check` completes an initialize round-trip in <= 3 s.
749
- - Both editors' docs pages link the snippet.
750
- - Metric and target: Runs started from editors per week.
751
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: ACP pages for JetBrains, Zed and Xcode (https://docs.devin.ai/cli/acp/zed.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
752
-
753
- #### R100-046 Start, status and seal commands in the Claude Code plugin
754
-
755
- - Issue: #394. Area: ide. Size: S. Tier: LOW. Deps: R100-002.
756
- - Problem: The plugin ships grill, spec-status and handoff commands, but not start, status or seal.
757
- - Feature: Add `/loki-start`, `/loki-status` and `/loki-seal` commands to `plugins/loki-mode/commands/`.
758
- - Acceptance:
759
- - Plugin manifest lists 3 new commands and plugin lint passes.
760
- - Each command calls the CLI with fixed argv (a test asserts 3 argv shapes).
761
- - `/loki-seal` on a fixture diff prints a receipt id.
762
- - Metric and target: Runs started from inside Claude Code per week.
763
- - Competitor baseline: Claude Code: `plugin` manages plugins (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: `plugin` manages plugins (`droid --help`, droid 0.190.0, run 2026-10-23).
764
-
765
- #### R100-047 Full-screen terminal UI with approve, steer and pause keys
766
-
767
- - Issue: #395. Area: ide. Size: M. Tier: LOW. Deps: R100-007.
768
- - Problem: Watching a run means juggling `status`, `logs` and `diff`.
769
- - Feature: `loki tui` shows stages, diff, tests and cost in panes; keys a, s and p approve, steer and pause.
770
- - Acceptance:
771
- - `loki tui --once` renders 4 panes to a fixed-size pty snapshot.
772
- - Pressing p in a fixture writes 1 PAUSE signal.
773
- - The UI redraws in <= 100 ms per event on the fixture stream.
774
- - Metric and target: Session length and runs per user per week.
775
- - Competitor baseline: Claude Code: Interactive terminal session is the default (`claude` with no subcommand). Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: Interactive mode is the default (`droid --help`, droid 0.190.0, run 2026-10-23).
776
-
777
- #### R100-048 Images and mockups as task input
778
-
779
- - Issue: #396. Area: ide. Size: M. Tier: MEDIUM. Deps: #263.
780
- - Problem: Users cannot give a screenshot or mockup as part of the spec.
781
- - Feature: `loki start --image mock.png` attaches images to the plan and Wall stages; the Wall may write visual acceptance clauses.
782
- - Acceptance:
783
- - `loki start --image a.png --dry-run` lists 1 image in the brief.
784
- - Images over 10 MB are refused with 1 named error.
785
- - The receipt hashes each input image (1 hash per image).
786
- - Metric and target: Share of UI tasks sealed on first attempt.
787
- - Competitor baseline: Claude Code: `--file` downloads file resources at startup (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: Image inputs page (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: Files can be attached to a Slack mention (https://docs.devin.ai/integrations/slack (fetched 2026-10-23)). Factory droid: UNKNOWN.
788
-
789
- #### R100-049 MCP one-click install works on a clean machine
790
-
791
- - Issue: #397. Area: ide. Size: S. Tier: LOW. Deps: FR-D.
792
- - Problem: A README deeplink with no env can exit 2 on a non-TTY launch (FR-D).
793
- - Feature: Deeplinks and `loki mcp install` carry the auto-bootstrap env.
794
- - Acceptance:
795
- - Clean-HOME non-TTY launch answers `tools/list` with exit 0.
796
- - `loki mcp install` output for 4 clients carries `LOKI_MCP_AUTO_BOOTSTRAP=1` (4 of 4).
797
- - README deeplinks decode to configs with the env set (count equals deeplink count).
798
- - Metric and target: MCP installs that reach a first tool call target >= 90%.
799
- - Competitor baseline: Claude Code: `mcp` configures MCP servers (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: MCP page (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: MCP marketplace page (https://docs.devin.ai/work-with-devin/mcp.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: `mcp` manages MCP servers (`droid --help`, droid 0.190.0, run 2026-10-23).
800
-
801
- #### R100-050 Start, steer and answer runs from the Control Plane in the browser
802
-
803
- - Issue: #398. Area: ide. Size: M. Tier: MEDIUM. Deps: #188.
804
- - Problem: Users away from the terminal cannot act on a run from the dashboard.
805
- - Feature: Control Plane run page gets start, steer and answer actions over the existing API.
806
- - Acceptance:
807
- - A Playwright fixture starts a run from the page and `loki status --json` shows it running within 3 s.
808
- - Steer and answer actions write 1 inbox entry each.
809
- - Actions need the dashboard token; an unauthenticated POST gets 401.
810
- - Metric and target: Runs started outside the terminal per week.
811
- - Competitor baseline: Claude Code: `--remote-control` session from browser or phone (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: Codex cloud (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: Follow and take over work in the web app (https://docs.devin.ai/ (fetched 2026-10-23)). Factory droid: UNKNOWN.
812
-
813
- #### R100-051 Answer blocked questions from the phone with a push reply action
814
-
815
- - Issue: #399. Area: ide. Size: S. Tier: MEDIUM. Deps: R100-003, R100-027.
816
- - Problem: A blocked question on a commute waits until the user is back at a desk.
817
- - Feature: The ntfy channel from R100-027 carries reply actions that call the inbox API.
818
- - Acceptance:
819
- - A stub ntfy reply resumes the blocked fixture run (1 `run.resumed`).
820
- - Replies are signed; an unsigned reply is rejected (1 refusal).
821
- - End-to-end reply to resume <= 5 s on the fixture.
822
- - Metric and target: Median time from block to answer target <= 15 min.
823
- - Competitor baseline: Claude Code: `--remote-control` (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: Reply in the Slack thread (https://docs.devin.ai/integrations/slack (fetched 2026-10-23)). Factory droid: UNKNOWN.
824
-
825
- #### R100-052 Code embedding provider for memory retrieval
826
-
827
- - Issue: #248 (existing). Area: memory. Size: M. Tier: MEDIUM. Deps: none.
828
- - Problem: Retrieval falls back to grep without a local model.
829
- - Metric and target: Lesson hit rate per run.
830
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
831
-
832
- #### R100-053 Search every past run: `loki history search`
833
-
834
- - Issue: #400. Area: memory. Size: S. Tier: LOW. Deps: none.
835
- - Problem: Users cannot find the run where a decision or fix was made.
836
- - Feature: Full-text search across runs, receipts, decisions and lessons with run id and date.
837
- - Acceptance:
838
- - Fixture with 20 runs: `loki history search auth --json` returns the 3 matching runs.
839
- - Each hit carries run id, date, file and line.
840
- - Search over 1000 runs finishes in <= 1 s.
841
- - Metric and target: Week-2 return rate.
842
- - Competitor baseline: Claude Code: `-r, --resume [value]` resumes by session id or search (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: Resume a saved chat (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: UNKNOWN. Factory droid: `search|find` searches across local sessions (`droid --help`, droid 0.190.0, run 2026-10-23).
843
-
844
- #### R100-054 `loki blame <file>:<line>`: which run, clause and decision produced this line
845
-
846
- - Issue: #401. Area: memory. Size: S. Tier: LOW. Deps: P12-37 decisions.
847
- - Problem: Months later nobody knows why Loki wrote a line.
848
- - Feature: Map a line to its commit, receipt, clause and decision record.
849
- - Acceptance:
850
- - Fixture: `loki blame src/a.ts:10 --json` returns run id, receipt id and clause id.
851
- - A line not written by Loki returns `not_loki` with exit 0.
852
- - Output in <= 1 s on a 1000-commit fixture.
853
- - Metric and target: Repeat users of trust features per week.
854
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
855
-
856
- #### R100-055 Personal profile applied across repos
857
-
858
- - Issue: #402. Area: memory. Size: M. Tier: MEDIUM. Deps: R100-011.
859
- - Problem: A user repeats the same preferences in every repo.
860
- - Feature: `~/.loki/profile.yaml` holds editable preferences (test style, commit style, language), learned from lessons the user promotes, applied to every repo below repo rules.
861
- - Acceptance:
862
- - `loki memory profile --json` lists entries with source lesson ids.
863
- - Repo rules override profile entries (a fixture conflict resolves to the repo rule).
864
- - `loki memory profile forget <key>` removes it from the next brief.
865
- - Metric and target: Week-4 retention.
866
- - Competitor baseline: Claude Code: Auto-memory named in `--bare` help (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: Devin Memory page (https://docs.devin.ai/product-guides/memory.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
867
-
868
- #### R100-056 Memory page in the Control Plane: view, pin, edit and forget lessons
869
-
870
- - Issue: #403. Area: memory. Size: S. Tier: LOW. Deps: R100-011.
871
- - Problem: Lessons are only manageable from the CLI.
872
- - Feature: A Control Plane page over `loki memory lessons` with use counts and outcomes.
873
- - Acceptance:
874
- - The page lists the same N lessons as `loki memory lessons --json` (N equal).
875
- - Forget in the UI removes the lesson from the next brief.
876
- - Pinned lessons appear first in the brief (order test).
877
- - Metric and target: Lessons edited per active user per month.
878
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Devin Memory page (https://docs.devin.ai/product-guides/memory.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
879
-
880
- #### R100-057 Playbooks: save a sealed run as a reusable task recipe
881
-
882
- - Issue: #404. Area: memory. Size: M. Tier: LOW. Deps: templates.
883
- - Problem: Repeated chores (upgrade a dependency, add an endpoint) are re-described every time.
884
- - Feature: `loki playbook save <run> <name>` stores the spec, parameters and checks; `loki playbook run <name> key=value` reuses it.
885
- - Acceptance:
886
- - `loki playbook save` writes 1 recipe file with named parameters.
887
- - `loki playbook run upgrade dep=react` fills the parameter into the spec (fixture diff).
888
- - `loki playbook list --json` lists recipes with last verdict.
889
- - Metric and target: Runs per user per week from playbooks.
890
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Creating Playbooks and Using Playbooks pages (https://docs.devin.ai/product-guides/creating-playbooks.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: Skills: reusable procedures via `/skills` (https://docs.factory.com/cli/getting-started/overview (fetched 2026-10-23)).
891
-
892
- #### R100-058 Reverted changes become lessons and regression-test proposals
893
-
894
- - Issue: #405. Area: memory. Size: S. Tier: MEDIUM. Deps: outcomes.
895
- - Problem: `loki outcomes` sees a revert but nothing learns from it.
896
- - Feature: On a detected revert of a sealed change, record a lesson and propose a regression test for the next run in that area.
897
- - Acceptance:
898
- - Fixture with 1 reverted sealed commit: `loki memory lessons --json` gains 1 lesson citing the revert sha.
899
- - The next run touching the same file gets the proposed test in its brief.
900
- - A revert of an unsealed commit adds 0 lessons.
901
- - Metric and target: Post-merge change-failure rate target -20%.
902
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
903
-
904
- #### R100-059 Live cost meter with alerts at 50, 80 and 100 percent of budget
905
-
906
- - Issue: #406. Area: cost. Size: S. Tier: LOW. Deps: R100-007.
907
- - Problem: Users learn the cost after the run.
908
- - Feature: Status, follow view and notify show spend so far and projected final cost; alerts fire at 50, 80 and 100 percent of `--budget`.
909
- - Acceptance:
910
- - Fixture run with budget 1.00: notify receives exactly 3 alerts at 0.50, 0.80 and 1.00.
911
- - `loki status --json` has `usd_so_far` and `usd_projected`.
912
- - Projected cost at the halfway stage is within 30% of final on the fixture set.
913
- - Metric and target: Runs stopped by surprise cost target 0 per 100.
914
- - Competitor baseline: Claude Code: `--max-budget-usd` with `--print` (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: Per-user ACU limits (https://docs.devin.ai/enterprise/features/usage-policies.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
915
-
916
- #### R100-060 Estimate accuracy: show actual vs estimate and self-calibrate
917
-
918
- - Issue: #407. Area: cost. Size: S. Tier: LOW. Deps: estimate.
919
- - Problem: Users stop trusting estimates that are never checked.
920
- - Feature: After each run print estimate vs actual; `loki cost --history` shows the error per size class and the estimator uses it.
921
- - Acceptance:
922
- - `loki cost --history --json` lists rows with `est_usd`, `actual_usd`, `error_pct`.
923
- - After 10 fixture runs the median absolute error is reported per size class (3 classes).
924
- - Estimates after calibration move toward actuals on the fixture (error drops).
925
- - Metric and target: Median estimate error target <= 25%.
926
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
927
-
928
- #### R100-061 Monthly budgets per repo and per user
929
-
930
- - Issue: #408. Area: cost. Size: M. Tier: MEDIUM. Deps: ledger.
931
- - Problem: Teams cannot cap spend across runs.
932
- - Feature: `budgets:` in loki.yaml sets monthly caps per repo and per user; runs that would exceed pause with a named reason.
933
- - Acceptance:
934
- - Fixture: monthly cap 10 with 9.50 spent: a run estimated at 1.00 pauses before any model call.
935
- - `loki report cost --month --json` shows spent and remaining per repo.
936
- - Caps apply across runs started by CLI, Slack and Action (3 entry fixtures).
937
- - Metric and target: Teams with caps set; overspend incidents target 0.
938
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Per-user ACU limits (Usage Policies page) (https://docs.devin.ai/enterprise/features/usage-policies.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
939
-
940
- #### R100-062 Cost breakdown by stage and route with savings against an all-top-model baseline
941
-
942
- - Issue: #409. Area: cost. Size: S. Tier: LOW. Deps: ledger.
943
- - Problem: Users cannot see where money goes or what routing saved.
944
- - Feature: `loki report cost --breakdown` lists cost per stage and model and the counterfactual cost at the top model.
945
- - Acceptance:
946
- - Fixture ledger with 4 stages: output has 4 rows summing to the run total within 0.01 USD.
947
- - A `savings_usd` field equals counterfactual minus actual.
948
- - `--json` and text agree on all totals.
949
- - Metric and target: Cost per sealed change visible to users; retention of cost-sensitive users.
950
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Usage page (https://docs.devin.ai/admin/billing/usage.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
951
-
952
- #### R100-063 Finance export: monthly CSV of spend by repo, user and sealed change
953
-
954
- - Issue: #410. Area: cost. Size: S. Tier: LOW. Deps: ledger.
955
- - Problem: Finance needs spend tied to delivered work.
956
- - Feature: `loki report cost --month 2026-10 --csv` exports rows per run with repo, user, usd and verdict.
957
- - Acceptance:
958
- - Fixture month with 12 runs: CSV has 12 rows plus a header with 6 columns.
959
- - Sum of the usd column equals the ledger total within 0.01.
960
- - No secrets or prompts appear in the CSV (redaction test, 0 matches).
961
- - Metric and target: Team accounts retained past month 2.
962
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Usage page (https://docs.devin.ai/admin/billing/usage.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
963
-
964
- #### R100-064 Warn when attached MCP tool definitions cost too many tokens
965
-
966
- - Issue: #290 (existing). Area: cost. Size: S. Tier: LOW. Deps: none.
967
- - Problem: Hidden tool definitions inflate every call.
968
- - Metric and target: Prompt tokens per run target -10% for warned users.
969
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
970
-
971
- #### R100-065 Show prompt-cache savings per run
972
-
973
- - Issue: #411. Area: cost. Size: S. Tier: LOW. Deps: ledger.
974
- - Problem: Users do not see that cache reuse saved money.
975
- - Feature: Run summary and kpis show cache read tokens and the dollar saving.
976
- - Acceptance:
977
- - Fixture ledger with cache reads: summary prints `cache_saved_usd` > 0.
978
- - A run with 0 cache reads prints 0.00.
979
- - The value equals tokens times the price delta from model-pricing.json (unit test).
980
- - Metric and target: Perceived value; week-2 return rate.
981
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
982
-
983
- #### R100-066 Quote approval for expensive runs
984
-
985
- - Issue: #412. Area: cost. Size: S. Tier: MEDIUM. Deps: R100-010.
986
- - Problem: A large backlog run can spend more than a user expects.
987
- - Feature: Runs whose estimate exceeds `quote_over_usd` wait for approval in the inbox, Slack or terminal before any model call.
988
- - Acceptance:
989
- - Fixture with quote_over_usd 5 and estimate 8: 0 model calls before approval.
990
- - Approval through `loki inbox approve` starts the run within 2 s.
991
- - Runs under the threshold start with 0 prompts.
992
- - Metric and target: Overspend incidents target 0.
993
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
994
-
995
- #### R100-067 Provider adapters for GitHub Copilot CLI, cursor-agent and Factory droid
996
-
997
- - Issue: #413. Area: providers. Size: M. Tier: MEDIUM. Deps: #347.
998
- - Problem: Users of those agents cannot run Loki on their existing subscription.
999
- - Feature: Three new provider configs in `providers/` with the same contract and doctor rows.
1000
- - Acceptance:
1001
- - `loki provider list` shows 3 new providers.
1002
- - Each passes the provider contract test with a stub CLI (3 of 3).
1003
- - `loki doctor --json` has an auth row for each (3 rows).
1004
- - Metric and target: Active users on non-Claude providers.
1005
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: `exec` runs non-interactively for scripts (`droid --help`, droid 0.190.0, run 2026-10-23).
1006
-
1007
- #### R100-068 Any OpenAI-compatible endpoint on every route
1008
-
1009
- - Issue: #414. Area: providers. Size: M. Tier: MEDIUM. Deps: #267.
1010
- - Problem: OpenAI-shaped gateways work only through the aider and cline routes.
1011
- - Feature: `loki provider add openai-compatible --base-url <url> --model <id>` works for implement and judge stages.
1012
- - Acceptance:
1013
- - Fixture stub endpoint receives implement and judge calls (2 call types).
1014
- - `loki doctor --json` probes the endpoint with 0 tokens spent.
1015
- - The API key never appears on argv (ps fixture, 0 matches).
1016
- - Metric and target: Share of runs on self-hosted gateways.
1017
- - Competitor baseline: Claude Code: `gateway` runs the enterprise auth gateway (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1018
-
1019
- #### R100-069 Judge client from the provider the user configured
1020
-
1021
- - Issue: #267 (existing). Area: providers. Size: M. Tier: HIGH. Deps: none.
1022
- - Problem: Bedrock, Vertex and Foundry users need a second key for judges.
1023
- - Metric and target: Runs blocked by missing judge auth target 0.
1024
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1025
-
1026
- #### R100-070 One effort and thinking knob across all five providers
1027
-
1028
- - Issue: #346 (existing). Area: providers. Size: M. Tier: MEDIUM. Deps: none.
1029
- - Problem: Effort settings differ per provider.
1030
- - Metric and target: Cost per sealed change.
1031
- - Competitor baseline: Claude Code: `--effort` (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1032
-
1033
- #### R100-071 Doctor auth rows and a zero-token probe for every provider
1034
-
1035
- - Issue: #347 (existing). Area: providers. Size: S. Tier: MEDIUM. Deps: none.
1036
- - Problem: Auth failures appear mid-run.
1037
- - Metric and target: First-run abandonment.
1038
- - Competitor baseline: Claude Code: `doctor` (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: `codex doctor` (docs/COMPETITIVE-SCORECARD.md, measured on codex-cli 0.146.0 (codex is not installed on this host on 2026-10-23)). Devin: UNKNOWN. Factory droid: UNKNOWN.
1039
-
1040
- #### R100-072 Hybrid local and cloud: offload cheap stages to a local model when present
1041
-
1042
- - Issue: #415. Area: providers. Size: M. Tier: MEDIUM. Deps: models --local.
1043
- - Problem: Users with Ollama pay cloud prices for lint fixes and unit tests.
1044
- - Feature: When `loki models --local` finds a capable model, route the cheapest stages to it by default and record it in the receipt.
1045
- - Acceptance:
1046
- - Fixture with a stub local endpoint: 2 named cheap stages route locally.
1047
- - The receipt lists the local model for those stages.
1048
- - If the local endpoint is down, the stage falls back to cloud with 1 warning.
1049
- - Metric and target: Cost per sealed change target -20% for local-capable users.
1050
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1051
-
1052
- #### R100-073 New-model check: `loki models --new` compares a new model on your recent tasks
1053
-
1054
- - Issue: #416. Area: providers. Size: S. Tier: LOW. Deps: R100-015, #268.
1055
- - Problem: Users learn of a better model late.
1056
- - Feature: When the Models API lists a new model, offer a `loki compare` run on the last 3 sealed tasks and recommend.
1057
- - Acceptance:
1058
- - Fixture catalog delta of 1 model: `loki models --new --json` lists 1 entry.
1059
- - `--compare` plans 3 tasks times 2 routes (6 arms) in dry-run.
1060
- - No spend happens without the explicit `--execute` flag (0 model calls in dry-run).
1061
- - Metric and target: Cost per sealed change trend over model releases.
1062
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1063
-
1064
- #### R100-074 Model route settings in the Control Plane with live prices
1065
-
1066
- - Issue: #417. Area: providers. Size: S. Tier: LOW. Deps: #188.
1067
- - Problem: Changing per-stage models needs env vars.
1068
- - Feature: A settings page that reads and writes the route in loki.yaml with prices from model-pricing.json.
1069
- - Acceptance:
1070
- - Saving a route on the page changes `loki models --json` output (1 field).
1071
- - Prices shown equal model-pricing.json for every listed model.
1072
- - Invalid routes are refused with a named error.
1073
- - Metric and target: Users who change routes; cost per sealed change.
1074
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1075
-
1076
- #### R100-075 Maintenance autopilot: dependency upgrades, lint debt and flaky tests as sealed PRs
1077
-
1078
- - Issue: #418. Area: autonomy. Size: M. Tier: MEDIUM. Deps: loki trigger.
1079
- - Problem: Chores never get scheduled.
1080
- - Feature: `loki maintain deps|lint|flaky` runs on a `loki trigger` schedule and keeps at most N open PRs.
1081
- - Acceptance:
1082
- - `loki maintain deps --dry-run` lists outdated packages with a planned PR count.
1083
- - With max_open 2 and 5 candidates, 2 PRs open and 3 wait.
1084
- - Each PR carries a receipt; a failed upgrade opens 0 PRs and 1 inbox item.
1085
- - Metric and target: Sealed PRs per repo per week; week-8 retention.
1086
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Scheduled Sessions page (https://docs.devin.ai/product-guides/scheduled-sessions.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
1087
-
1088
- #### R100-076 Preserve working state across compaction
1089
-
1090
- - Issue: #277 (existing). Area: autonomy. Size: M. Tier: MEDIUM. Deps: none.
1091
- - Problem: Long runs lose state on compaction.
1092
- - Metric and target: Long-run completion rate.
1093
- - Competitor baseline: Claude Code: `--autocompact` window (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1094
-
1095
- #### R100-077 Relay operator input to a running worker
1096
-
1097
- - Issue: #278 (existing). Area: autonomy. Size: M. Tier: MEDIUM. Deps: none.
1098
- - Problem: Steering waits for a stage boundary.
1099
- - Metric and target: Human touches per shipped change.
1100
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1101
-
1102
- #### R100-078 Every run in its own worktree by default
1103
-
1104
- - Issue: #232 (existing). Area: autonomy. Size: M. Tier: HIGH. Deps: none.
1105
- - Problem: A second run in one checkout collides with the first.
1106
- - Metric and target: Concurrent runs per user.
1107
- - Competitor baseline: Claude Code: `--worktree` and `--tmux` (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: `-w, --worktree` (`droid --help`, droid 0.190.0, run 2026-10-23).
1108
-
1109
- #### R100-079 Multi-day missions with milestone receipts
1110
-
1111
- - Issue: #419. Area: autonomy. Size: L. Tier: MEDIUM. Deps: R100-009.
1112
- - Problem: Work bigger than one run has no shape across days.
1113
- - Feature: `loki mission start <spec>` splits into milestones, each sealed with its own receipt, resumable across days; `loki mission status` shows progress.
1114
- - Acceptance:
1115
- - Fixture spec with 3 milestones: 3 receipts, each referencing the mission id.
1116
- - Stopping after milestone 1 and running `loki mission resume` starts milestone 2 (0 re-runs of 1).
1117
- - `loki mission status --json` reports 3 milestones with states.
1118
- - Metric and target: Completion rate of multi-week work; week-4 retention.
1119
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: Missions via `/missions` or `droid exec --mission` (https://docs.factory.com/cli/getting-started/overview (fetched 2026-10-23)).
1120
-
1121
- #### R100-080 Overnight backlog window with a morning report
1122
-
1123
- - Issue: #420. Area: autonomy. Size: S. Tier: LOW. Deps: loki backlog.
1124
- - Problem: Backlog runs during work hours compete with the user's own quota.
1125
- - Feature: `loki backlog <repo> --until 07:00` runs until the time window ends and posts one morning digest.
1126
- - Acceptance:
1127
- - Fixture with a 2-minute window: 0 units start after the window ends.
1128
- - Exactly 1 digest is sent with sealed, failed and waiting counts.
1129
- - Unfinished units are left resumable (journal shows them pending).
1130
- - Metric and target: Sealed PRs per user per week target +50%.
1131
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Scheduled Sessions (https://docs.devin.ai/product-guides/scheduled-sessions.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
1132
-
1133
- #### R100-081 Move a run to another machine: export and import run state
1134
-
1135
- - Issue: #421. Area: autonomy. Size: M. Tier: MEDIUM. Deps: R100-003.
1136
- - Problem: A run started on a laptop cannot continue on a server.
1137
- - Feature: `loki run export <id>` writes a redacted bundle; `loki run import` resumes it elsewhere at the same stage.
1138
- - Acceptance:
1139
- - Export then import on a second fixture checkout resumes at the same stage id.
1140
- - The bundle contains 0 secret fixture matches.
1141
- - A bundle for a different repo head is refused with 1 named error.
1142
- - Metric and target: Abandoned-run rate.
1143
- - Competitor baseline: Claude Code: `--teleport` resumes a teleport session (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: Move work to Codex cloud (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: `/handoff` from terminal to cloud Devin (https://docs.devin.ai/ (fetched 2026-10-23)). Factory droid: `computer` manages relay computer registrations (`droid --help`, droid 0.190.0, run 2026-10-23).
1144
-
1145
- #### R100-082 Run replay: step through stages with the diff and test output at each step
1146
-
1147
- - Issue: #422. Area: dashboard. Size: M. Tier: LOW. Deps: timeline.
1148
- - Problem: The human timeline shows phases, not what changed at each step.
1149
- - Feature: Extend the Control Plane timeline with a scrubber that shows diff, tests and cost at each stage.
1150
- - Acceptance:
1151
- - Fixture run with 7 stages: the scrubber has 7 positions.
1152
- - Each position shows the diff stat equal to the journal for that stage.
1153
- - Loading a 500-event run takes <= 1 s.
1154
- - Metric and target: Time to understand a failed run; repeat dashboard visits.
1155
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Session Insights page (https://docs.devin.ai/product-guides/session-insights.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
1156
-
1157
- #### R100-083 Compare two runs side by side
1158
-
1159
- - Issue: #423. Area: dashboard. Size: S. Tier: LOW. Deps: cp_runs_compare.
1160
- - Problem: Users cannot see why one attempt sealed and another did not.
1161
- - Feature: A Control Plane page over the existing runs-compare data: verdict, cost, time, clauses and diff.
1162
- - Acceptance:
1163
- - Selecting 2 fixture runs shows 5 compared fields.
1164
- - Clause differences are highlighted (fixture with 1 differing clause shows 1).
1165
- - The page values equal `cp_runs_compare` output.
1166
- - Metric and target: Repeat dashboard visits.
1167
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1168
-
1169
- #### R100-084 Weekly digest to Slack or email
1170
-
1171
- - Issue: #424. Area: dashboard. Size: S. Tier: LOW. Deps: R100-019.
1172
- - Problem: Users forget Loki between sessions.
1173
- - Feature: Once a week, post sealed changes, cost, waiting items and top lesson to the notify channel.
1174
- - Acceptance:
1175
- - Fixture week: 1 digest with 4 sections.
1176
- - Opt-out with `LOKI_DIGEST=0` sends 0.
1177
- - Numbers equal `loki report kpis --since 7d`.
1178
- - Metric and target: Week-2 and week-4 return rate.
1179
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Automations post run results to a channel (https://docs.devin.ai/integrations/slack (fetched 2026-10-23)). Factory droid: UNKNOWN.
1180
-
1181
- #### R100-085 Stage time and cost chart per run
1182
-
1183
- - Issue: #425. Area: dashboard. Size: S. Tier: LOW. Deps: events.
1184
- - Problem: Users cannot see which stage is slow or expensive.
1185
- - Feature: A per-run chart of stage durations and costs from the ledger and events.
1186
- - Acceptance:
1187
- - Fixture run with 7 stages renders 7 bars.
1188
- - Bar totals equal the run's wall time and cost within 1%.
1189
- - The chart renders in light and dark themes (2 snapshots).
1190
- - Metric and target: Users who change settings after viewing.
1191
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1192
-
1193
- #### R100-086 Repo health page: seal rate, revert rate and change-failure rate trends
1194
-
1195
- - Issue: #426. Area: dashboard. Size: S. Tier: LOW. Deps: outcomes.
1196
- - Problem: `loki outcomes` numbers are CLI only.
1197
- - Feature: A Control Plane page with weekly trends from `loki outcomes` and receipts.
1198
- - Acceptance:
1199
- - Fixture with 4 weeks of receipts shows 4 points per series (3 series).
1200
- - Values equal `loki outcomes --json` for each week.
1201
- - UNKNOWN weeks render as gaps, never as 0.
1202
- - Metric and target: Team account retention.
1203
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Session Insights (https://docs.devin.ai/product-guides/session-insights.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
1204
-
1205
- #### R100-087 Stuck-run alert when no progress for N minutes
1206
-
1207
- - Issue: #427. Area: dashboard. Size: S. Tier: LOW. Deps: notify.
1208
- - Problem: A wedged run burns time unnoticed.
1209
- - Feature: If no event arrives for `LOKI_STUCK_MIN` (default 15) minutes, notify once with the last stage and a suggested action.
1210
- - Acceptance:
1211
- - Fixture with a silent run: 1 alert after the threshold, 0 before.
1212
- - The alert names the last stage and event time.
1213
- - A run that resumes events clears the alert state.
1214
- - Metric and target: Abandoned-run rate.
1215
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1216
-
1217
- #### R100-088 Hosted template registry: search and publish
1218
-
1219
- - Issue: #428. Area: ecosystem. Size: M. Tier: LOW. Deps: loki template.
1220
- - Problem: `loki template` installs from source only; a central hub is listed as future work in its help.
1221
- - Feature: `loki template search <q>` and `loki template publish` against a static registry index in a public repo.
1222
- - Acceptance:
1223
- - `loki template search api --json` returns entries from a fixture index.
1224
- - `loki template publish` validates the manifest as data and opens 1 PR to the index repo (dry-run).
1225
- - Installed templates keep the existing no-code-execution rule (0 executed files).
1226
- - Metric and target: Templates installed per week.
1227
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: Use case gallery (https://docs.devin.ai/use-cases/gallery/index.md, listed in https://docs.devin.ai/llms.txt, fetched 2026-10-23). Factory droid: UNKNOWN.
1228
-
1229
- #### R100-089 Custom gates in loki.yaml that feed the Seal
1230
-
1231
- - Issue: #429. Area: ecosystem. Size: M. Tier: HIGH. Deps: gates.
1232
- - Problem: Teams cannot add their own checks (Lighthouse, k6, license scan) to the Seal.
1233
- - Feature: `gates:` entries with a command, pass condition and timeout run with the other gates and are recorded as exogenous evidence.
1234
- - Acceptance:
1235
- - Fixture with 2 custom gates: the receipt lists 2 extra gate rows with exit codes.
1236
- - A failing custom gate blocks the Seal (exit 2).
1237
- - A gate exceeding its timeout is recorded as UNKNOWN, never pass.
1238
- - Metric and target: Teams with custom gates; week-8 retention.
1239
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: Hooks run shell commands around lifecycle events (https://docs.factory.com/cli/getting-started/overview (fetched 2026-10-23)).
1240
-
1241
- #### R100-090 `loki hooks install`: fast verify on pre-commit
1242
-
1243
- - Issue: #430. Area: ecosystem. Size: S. Tier: LOW. Deps: fast_verify.
1244
- - Problem: Developers find problems only in CI.
1245
- - Feature: Install a pre-commit hook that runs the fast verify on staged changes.
1246
- - Acceptance:
1247
- - `loki hooks install` writes 1 hook and `--uninstall` removes it.
1248
- - On a fixture commit the hook finishes in <= 1 s.
1249
- - An existing hook is chained, not overwritten (fixture keeps its output).
1250
- - Metric and target: Daily active developers per repo.
1251
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1252
-
1253
- #### R100-091 Signed outbound run webhooks with a typed event schema
1254
-
1255
- - Issue: #431. Area: ecosystem. Size: S. Tier: MEDIUM. Deps: notify.
1256
- - Problem: Integrators parse free-form notify messages.
1257
- - Feature: Run lifecycle events posted as JSON with a schema version and an HMAC signature header.
1258
- - Acceptance:
1259
- - Fixture run posts 4 lifecycle events to a stub receiver.
1260
- - Each event validates against the published schema (4 of 4).
1261
- - A receiver check with the wrong secret fails HMAC verification.
1262
- - Metric and target: Integrations built per month.
1263
- - Competitor baseline: Claude Code: `--include-hook-events` in stream-json (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: Hooks around lifecycle events (https://docs.factory.com/cli/getting-started/overview (fetched 2026-10-23)).
1264
-
1265
- #### R100-092 One MCP config for every MCP-capable provider
1266
-
1267
- - Issue: #343 (existing). Area: ecosystem. Size: M. Tier: MEDIUM. Deps: none.
1268
- - Problem: MCP servers must be configured per provider.
1269
- - Metric and target: MCP usage per run.
1270
- - Competitor baseline: Claude Code: `--mcp-config` (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: MCP page (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: UNKNOWN. Factory droid: `mcp` (`droid --help`, droid 0.190.0, run 2026-10-23).
1271
-
1272
- #### R100-093 Use existing Claude Code and droid skills in any provider's run
1273
-
1274
- - Issue: #432. Area: ecosystem. Size: M. Tier: MEDIUM. Deps: #259.
1275
- - Problem: Skills written for one agent are lost when switching providers.
1276
- - Feature: Load `SKILL.md` folders from known skill dirs into the brief for every provider, with a doctor row.
1277
- - Acceptance:
1278
- - Fixture with 2 skill folders: `loki memory brief --json` lists 2 skills.
1279
- - A skill with a risky pattern is refused by the skill lint (#259) with 1 named finding.
1280
- - `LOKI_SKILLS=0` loads 0.
1281
- - Metric and target: Users who switch providers and stay.
1282
- - Competitor baseline: Claude Code: `--disable-slash-commands` disables skills (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: Skills via `/skills` (https://docs.factory.com/cli/getting-started/overview (fetched 2026-10-23)).
1283
-
1284
- #### R100-094 Embeddable TypeScript SDK: `runLoki({ spec })`
1285
-
1286
- - Issue: #433. Area: ecosystem. Size: M. Tier: MEDIUM. Deps: R100-091.
1287
- - Problem: Platforms that want to embed Loki shell out and parse text.
1288
- - Feature: A typed SDK export that starts a run, streams events and returns the receipt.
1289
- - Acceptance:
1290
- - A fixture script imports the SDK, runs a stub task and receives a receipt object.
1291
- - Event stream yields >= 7 stage events typed by the schema.
1292
- - The SDK package has 0 runtime dependencies beyond the CLI's own.
1293
- - Metric and target: Embedded runs per week.
1294
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: The Devin API is listed on the docs home (https://docs.devin.ai/ (fetched 2026-10-23)). Factory droid: Exec mode for scripts and CI (https://docs.factory.com/cli/getting-started/overview (fetched 2026-10-23)).
1295
-
1296
- #### R100-095 Receipts in a public transparency log
1297
-
1298
- - Issue: #434. Area: trust. Size: M. Tier: HIGH. Deps: PRF-A.
1299
- - Problem: A self-generated trust root cannot be checked by a third party.
1300
- - Feature: Opt-in upload of receipt digests to Sigstore Rekor; `loki verify` checks inclusion (PRF-A).
1301
- - Acceptance:
1302
- - `loki proof publish --rekor --dry-run` prints 1 planned entry.
1303
- - On a staging log fixture, verify confirms inclusion (1 proof).
1304
- - With the flag off, 0 network calls happen (egress fixture).
1305
- - Metric and target: Receipts verified by third parties.
1306
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1307
-
1308
- #### R100-096 Clause-by-clause spec trace in the receipt
1309
-
1310
- - Issue: #341 (existing). Area: trust. Size: L. Tier: HIGH. Deps: #340.
1311
- - Problem: Users cannot see which clauses were proven, judged or unproven.
1312
- - Metric and target: Reviewer trust; human review time.
1313
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1314
-
1315
- #### R100-097 Numbered, anchored acceptance clauses from any spec
1316
-
1317
- - Issue: #340 (existing). Area: trust. Size: M. Tier: HIGH. Deps: #339.
1318
- - Problem: Specs have no stable clause ids.
1319
- - Metric and target: Clauses proven per run.
1320
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: `--use-spec` spec mode (`droid --help`, droid 0.190.0, run 2026-10-23).
1321
-
1322
- #### R100-098 Vision pass over captured screenshots in the Seal
1323
-
1324
- - Issue: #263 (existing). Area: trust. Size: M. Tier: HIGH. Deps: none.
1325
- - Problem: Visual regressions pass text checks.
1326
- - Metric and target: UI change-failure rate.
1327
- - Competitor baseline: Claude Code: `--chrome` (`claude --help`, Claude Code 2.1.309, run 2026-10-23). Codex CLI: Image inputs (https://learn.chatgpt.com/docs/codex/cli (fetched 2026-10-23)). Devin: UNKNOWN. Factory droid: UNKNOWN.
1328
-
1329
- #### R100-099 Audit evidence pack from receipts
1330
-
1331
- - Issue: #435. Area: trust. Size: S. Tier: HIGH. Deps: receipts.
1332
- - Problem: Auditors ask for change-management evidence that teams assemble by hand.
1333
- - Feature: `loki proof export --audit <from>..<to>` writes a zip of receipts, a CSV index and a verification script (evidence export only, no certification claim).
1334
- - Acceptance:
1335
- - Fixture range with 6 receipts: the zip contains 6 receipts and a 6-row CSV.
1336
- - The bundled verify script exits 0 offline on the pack.
1337
- - Tampering 1 receipt makes the script exit non-zero and name it.
1338
- - Metric and target: Enterprise accounts retained.
1339
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1340
-
1341
- #### R100-100 Page and line anchors for PDF and DOCX specs
1342
-
1343
- - Issue: #339 (existing). Area: trust. Size: M. Tier: MEDIUM. Deps: none.
1344
- - Problem: Clauses from documents cannot point back to their source.
1345
- - Metric and target: Clauses traced to source.
1346
- - Competitor baseline: Claude Code: UNKNOWN. Codex CLI: UNKNOWN. Devin: UNKNOWN. Factory droid: UNKNOWN.
1347
-
1348
- ## Lanes and waves
1349
-
1350
- This section is the dispatch source for Feature 100 (accepted by team-lead on 2026-10-23). It was built from the file set in every one of the 100 issue cards: the issue body for the 79 new issues, and the issue body plus comments for the 21 reused issues, all read on 2026-10-23. Test files are not counted as shared files.
1351
-
1352
- Where the "Parallel safety" line inside an issue card disagrees with this section, this section wins. Several of those lines were written before the file sets were narrowed. For example, #357, #339 and #396 name #359 and #362 as start.ts sharers, but neither #359 nor #362 edits start.ts.
1353
-
1354
- ### Hot-spot lanes
1355
-
1356
- Rule: each hot-spot file has exactly one live writer. The next issue in a lane starts only after the previous one has merged to main, and it rebases on main before it starts. An issue that sits in two lanes waits until both lanes reach it.
1357
-
1358
- - `loki-ts/src/commands/start.ts`: #357, then #339, then #396, then #372.
1359
- - `loki-ts/src/commands/status.ts`: #361, then #359, then #370, then #372, then #395, then #406.
1360
- - `loki-ts/src/engine10/machine.ts`: #345, then #358, then #235. #345 waits for live branches pd/cw12 and pd/cw12-r2, which edit `machine.ts`, `cli.ts` and `mcp/server.py`. #358 also waits for branch pd/cw04d, which edits `blocked_answer.ts`.
1361
- - `autonomy/loki` function `cmd_deploy`: #359, then #370, then #382, then #383, then #384, then #385, then #386.
1362
- - `.github/actions/issue-to-pr/action.yml`: #360, then #365.
1363
-
1364
- 19 issues edit at least one hot-spot file: #235, #339, #345, #357, #358, #359, #360, #361, #365, #370, #372, #382, #383, #384, #385, #386, #395, #396, #406.
1365
-
1366
- Three cards name a hot-spot file without editing it, so they are not in a lane. #351 says "do not touch machine.ts". #370 cites `start.ts` only as existing behavior; it is still in the status.ts and cmd_deploy lanes. #398 names `packages/control-plane/src/server/routes/start.ts`, which is a different file.
1367
-
1368
- ### Parallel-safe with respect to the hot-spot files
1369
-
1370
- These 81 issues edit none of the five hot-spot files, in rank order: #342, #362, #363, #364, #249, #366, #367, #368, #369, #371, #351, #231, #373, #374, #375, #376, #377, #378, #379, #380, #279, #381, #387, #388, #389, #188, #390, #391, #392, #393, #394, #397, #398, #399, #248, #400, #401, #402, #403, #404, #405, #407, #408, #409, #410, #290, #411, #412, #413, #414, #267, #346, #347, #415, #416, #417, #418, #277, #278, #232, #419, #420, #421, #422, #423, #424, #425, #426, #427, #428, #429, #430, #431, #343, #432, #433, #434, #341, #340, #263, #435.
1371
-
1372
- Parallel-safe here means safe against the hot-spot lanes only. Two of these issues can still share another file. Before two of them run at the same time, check the other shared-file lanes below.
1373
-
1374
- ### Other shared-file lanes
1375
-
1376
- One live writer per file, in the order given.
1377
-
1378
- - `loki-ts/src/commands/doctor.ts`: #357, #366, #290, #347, #390, #413, #414, #432.
1379
- - `loki-ts/src/cli/registry.ts`: #362, #375, #379, #395, #400, #401, #430.
1380
- - `loki-ts/src/engine10/events.ts`: #361, #358, #431.
1381
- - `loki-ts/src/engine10/session.ts`: #358, #351, #406, #415. If pd/cw04d holds #358 up, #351 goes first.
1382
- - `loki-ts/src/engine10/pr_body.ts`: #342, #359, #381, #387, #388.
1383
- - `loki-ts/src/engine10/stages/pr.ts`: #231, #387, #390.
1384
- - `loki-ts/src/engine10/verify_cmd.ts`: #380, #372, #434.
1385
- - `loki-ts/src/engine10/supervisor.ts` and `loki-ts/src/util/slack_events.ts`: #427, #411, #406.
1386
- - `loki-ts/src/runner/build_prompt.ts`: #366, #402, #432. New always-on text goes in the cache-stable prefix.
1387
- - `.github/workflows/release.yml`: #369, #372.
1388
- - `blocked_answer.ts`: branch pd/cw04d, #358, #363, #399, #412.
1389
- - `loki-ts/src/commands/memory.ts`: #364, #389, #400, #401, #402.
1390
- - `loki-ts/src/util/pr_lessons.ts`: #364, #389, #405.
1391
- - `loki-ts/src/runner/router/cost_preview.ts`: #367, #374, #407, #412.
1392
- - `loki-ts/src/commands/proof.ts`: #368, #434, #435.
1393
- - `loki-ts/src/commands/kpis.ts` and `metrics/kpis.ts`: #371, #411, #424.
1394
- - `loki-ts/src/features/visual_evidence.ts`: #249, #263, #383.
1395
- - `loki-ts/src/util/redact.ts`: #384, #389, #421.
1396
- - `loki-ts/src/runner/budget.ts`: #408, #411, #412.
1397
- - `loki-ts/src/runner/providers.ts`: #279, #346, #277, #278.
1398
- - `providers/model_routes.ts`: #267, #346, #414, #415.
1399
- - `providers/model_catalog.json`: #267, #346, #416.
1400
- - `providers/model_routes.sh`: #414, #415, #416.
1401
- - `providers/price_table.ts`: #279, #411, #417.
1402
- - `mcp/server.py`: #345, #290, #339.
1403
- - Control Plane `App.tsx`: #363, #403, #423.
1404
- - Control Plane `pages/run/index.tsx`: #422, #423, #425.
1405
- - `autonomy/loki` dispatch rows: #367, #232, #379, #418, #419.
1406
- - `autonomy/loki` `cmd_cost`: #407, #408, #409, #410.
1407
- - `autonomy/loki` `cmd_next`: #374, #375.
1408
- - `autonomy/loki` `cmd_template`: #404, #428.
1409
- - `autonomy/loki` `cmd_notify`: #377, #424.
1410
- - `autonomy/loki` `cmd_verify` and `fast_verify.py`: #380, #430.
1411
- - `autonomy/notify.sh`: #377, #427, #406, #399, #424, #431.
1412
- - Pairs, first one merges first: `decompose.ts` (#235, #419), `unit_mode.ts` (#235, #421), `slack_inbound.ts` (#358, #381), Control Plane `answer.ts` (#363, #399), `schemas/run-event.schema.json` (#431, #433).
1413
-
1414
- Different functions in `autonomy/loki` can be edited in parallel, because each lane above names its own function.
1415
-
1416
- ### Waves
1417
-
1418
- Wave 1 can start now. Each issue heads every lane it is in, and no two share a file. Each one was checked against every live branch (remote pd/* and local branches with a commit in the last 48 hours) with `git cherry origin/main <branch>` and `git log origin/main..<branch> --name-only`, on 2026-10-23. Dispatch in this order as seats free up:
1419
-
1420
- - #357: already dispatched (pd/r100-001). `doctor_fix.ts` is touched only by its own branch. `doctor.ts` is also touched by 14 live branches (pd/286, pd/315, pd/316, pd/316-rb, pd/329, pd/330, pd/bunentry, pd/bunentry-rb, pd/bunsib, pd/mcpchain, pd/mcpchain-r2, pd/mcpchain-r3, pd/rq04, pd/w2-33), so rebase before review.
1421
- - #342, #360, #364, #368, #231, #422: no live branch touches any of their files.
1422
- - #361: no file overlap. Its card names `autonomy/loki` only as existing behavior (`cmd_cockpit`); its edits are in `status.ts` and `events.ts`.
1423
- - #362: the only overlap is `autonomy/loki`. The live branches there edit `_loki_airgap_audit`, `cmd_bench` and `_loki_start_optval_consumes`. #362 adds dispatch rows and reads `cmd_projects`, so the hunks do not overlap.
1424
-
1425
- Wave 2. Each issue starts after the merges named:
1426
-
1427
- - #345: after pd/cw12 and pd/cw12-r2 (`machine.ts`, `cli.ts`, `mcp/server.py`), pd/328 (`cli.ts`), and pd/257p2, pd/257rb, pd/319e, pd/319fix (`mcp/server.py`).
1428
- - #249: after the live `stages/verify.ts` branches: pd/237r10, pd/237r9, pd/partial-harness, pd/wallfile, pd/wallfile-r2, pd/wallgo, pd/wallgo-r2, pd/wallnorunner, pd/wallrust, pd/wallrust-r2, pd/weaktest.
1429
- - #367: after the live `benchmarks/bench/run.sh` and `runner.py` branches: pd/246fix2, pd/claim, pd/claim-100x, pd/cw15, pd/fd1b, pd/resumecost, pd/resumecost2, pd/resumecost3, pd/traptasks2, pd/trusttime, pd/trusttime-r2, pd/verifyh2h.
1430
- - #369: after pd/cw01b and pd/cw01c (`release.yml`).
1431
- - #371: after pd/252b and pd/252b-r (`metrics/kpis.ts`).
1432
- - #358: after #345, #361 and branch pd/cw04d.
1433
- - #359: after #361 and #342.
1434
- - #365: after #360.
1435
- - #366: after #357.
1436
- - #370: after #359.
1437
- - #235: after #358.
1438
- - #363: after #358.
1439
- - #372: after #369, #357 and #370.
1440
-
1441
- Held: #398 depends on open issue #188 (dashboard authn/authz), so it is not a wave-1 head.
1442
-
1443
- Before dispatching any wave-2 issue, re-run the live-branch check for its files; branches named above may have merged or new ones may have started.
1444
-
1445
- After wave 2, pull any issue whose lanes are free, following the lane orders above.
1446
-
1447
- ### Wave-1 assignments
1448
-
1449
- Checked on 2026-10-23 at 06:50Z against `gh issue view` comments and origin branches. None of these issues has a GitHub assignee, so claims come from issue comments or team-lead dispatch. "Behind" counts commits on origin/main that the branch lacks.
1450
-
1451
- | Issue | Item | Engineer | Branch | Reviewer | Tier | State |
1452
- |---|---|---|---|---|---|---|
1453
- | #357 | R100-001 | eng-mcpchain | pd/r100-001 9feace648 (1 ahead, 16 behind) | unset | MEDIUM | Needs rebase. Criterion 3 NOT MET on both the branch and its base 3f6e07547 (issue comment 06:39Z); the PARTIAL predates the change. |
1454
- | #342 | R100-006 | eng-r237 | none | unset | HIGH | Waiting on CW-04 (#337), which is OPEN with no commit on main. Ruling comment 06:39Z. |
1455
- | #360 | R100-005 | unowned | none | unset | HIGH | No claim comment, no branch. Free to assign. |
1456
- | #364 | R100-011 | eng-tmo | pd/364a fee344a42 (1 ahead, 8 behind); pd/364b 808c40cab stacked on (a) | tl-324 | MEDIUM | In review. Criteria tally comment 06:45Z; merge-tree rc=0 against origin/main 0a6ae7cb6. |
1457
- | #368 | R100-016 | eng-318r | none | rev-b | HIGH | Dispatched by team-lead. No claim comment or branch yet. |
1458
- | #231 | R100-022 | eng-tmo | none | tl-324 | MEDIUM | Dispatched by team-lead. Only the slice card comment (06:14Z); no claim comment or branch yet. |
1459
- | #422 | R100-082 | eng-351 | none | unset | LOW | Starts after the loadaware fix. No claim comment or branch yet. |
1460
- | #361 | R100-007 | eng-cw01 | pd/361 ece154741 (1 ahead, 11 behind) | tl-324 | LOW | In review. No claim comment on the issue. |
1461
- | #362 | R100-008 slice (a) | eng-mcpchain | pd/r100-008a 861656d44 (1 ahead, 8 behind) | unset | MEDIUM | Claimed in comment 06:46Z after eng-r237 released it. Slice (b) unowned. |
1462
- | #249 | R100-013 slice (a) | eng-r237 | pd/249a 721db86f3 (1 ahead, 0 behind) | rev-c | HIGH | In review. Slice (a) edits only `visual_evidence.ts`, which team-lead cleared out of wave 2. Slice (b) stays in wave 2 behind the `stages/verify.ts` branches. |
1463
-
1464
- Unowned: #360, #362 slice (b) and #249 slice (b). No reviewer yet: #357, #342, #360, #362 and #422.