loki-mode 11.12.1 → 11.15.0

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 (97) hide show
  1. package/README.md +2 -2
  2. package/SKILL.md +2 -2
  3. package/VERSION +1 -1
  4. package/autonomy/lib/backlog.py +18 -3
  5. package/autonomy/lib/chat.sh +6 -0
  6. package/autonomy/lib/engine10-push.sh +26 -2
  7. package/autonomy/lib/proof-generator.py +16 -0
  8. package/autonomy/lib/trust_trajectory.py +130 -0
  9. package/autonomy/lib/workspace.py +2 -3
  10. package/autonomy/loki +262 -58
  11. package/autonomy/run.sh +39 -15
  12. package/autonomy/trigger-server.py +452 -29
  13. package/bin/loki +4 -1
  14. package/completions/_loki +1 -1
  15. package/completions/loki.bash +8 -0
  16. package/dashboard/__init__.py +1 -1
  17. package/docs/CLI-REFERENCE.md +5 -4
  18. package/docs/DEPLOYMENT.md +12 -5
  19. package/docs/EVALUATING.md +13 -0
  20. package/docs/INSTALLATION.md +2 -2
  21. package/docs/SIGNED-RECEIPTS.md +7 -0
  22. package/docs/WORKSPACES.md +2 -2
  23. package/docs/cost-controls.md +26 -0
  24. package/docs/merge-queue.md +19 -0
  25. package/docs/sentry-intake.md +4 -0
  26. package/docs/slack.md +2 -1
  27. package/docs/trackers.md +12 -1
  28. package/docs/v10/BOARD.md +123 -123
  29. package/docs/v10/CLI-MODERN.md +2 -2
  30. package/docs/v10/DECISIONS.md +1 -0
  31. package/docs/v10/ENGINE.md +2 -0
  32. package/docs/v10/MODERNIZE.md +32 -1
  33. package/docs/v10/PROGRESS.md +3 -0
  34. package/loki-ts/dist/loki.js +1221 -1148
  35. package/mcp/__init__.py +1 -1
  36. package/package.json +2 -2
  37. package/packages/control-plane/dist/server.js +2486 -2190
  38. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  39. package/schemas/loki-yaml.schema.json +5 -0
  40. package/web-app/dist/assets/{AdminPage-DuT74pf5.js → AdminPage-bZlvH4TL.js} +1 -1
  41. package/web-app/dist/assets/{Avatar-BtgidR5a.js → Avatar-BZrBstQe.js} +1 -1
  42. package/web-app/dist/assets/{Badge-D2nt8G_I.js → Badge-Q8l8r4Vq.js} +1 -1
  43. package/web-app/dist/assets/{Button-BKl2jOyb.js → Button-B8Bt0A3S.js} +1 -1
  44. package/web-app/dist/assets/{CockpitPage-DaWr0EUX.js → CockpitPage-CIYExrXa.js} +1 -1
  45. package/web-app/dist/assets/{ComparePage-aIiNhxLr.js → ComparePage-CBOmHdam.js} +1 -1
  46. package/web-app/dist/assets/{ErrorBoundary-C1Q7rV23.js → ErrorBoundary-BKwDPSnK.js} +1 -1
  47. package/web-app/dist/assets/{EvidenceReceiptPanel-C-C0-tOx.js → EvidenceReceiptPanel-KqzjphWl.js} +1 -1
  48. package/web-app/dist/assets/{GitHubIssuesPanel-l3IaXDag.js → GitHubIssuesPanel-lF3GkHRv.js} +1 -1
  49. package/web-app/dist/assets/{GitHubPRsPanel-DweLBgr5.js → GitHubPRsPanel-BCzipPWD.js} +1 -1
  50. package/web-app/dist/assets/{HomePage-B_KK7AvY.js → HomePage-CIdnkzaN.js} +2 -2
  51. package/web-app/dist/assets/{LoginPage-CKS-KLdH.js → LoginPage-D-178nTT.js} +1 -1
  52. package/web-app/dist/assets/{MagicPage-Cl6CEp8J.js → MagicPage-BmHuzMT8.js} +1 -1
  53. package/web-app/dist/assets/{MetricsPage-n9CPUaX0.js → MetricsPage-CPCiyDFn.js} +1 -1
  54. package/web-app/dist/assets/{NotFoundPage-D85eWn70.js → NotFoundPage-B2T6n1gx.js} +1 -1
  55. package/web-app/dist/assets/{ProjectPage-CDN7LpSo.js → ProjectPage-DQmpFhb0.js} +3 -3
  56. package/web-app/dist/assets/{ProjectsPage-D4SDmU4-.js → ProjectsPage-BmugzFEd.js} +1 -1
  57. package/web-app/dist/assets/{SettingsPage-Dby6GnKm.js → SettingsPage-ZB-RrmgM.js} +1 -1
  58. package/web-app/dist/assets/{ShowcasePage-CgHxeqoU.js → ShowcasePage-BAhwHt4_.js} +1 -1
  59. package/web-app/dist/assets/{SystemSettingsPage-BaewGHlc.js → SystemSettingsPage-Bt7sf2Vu.js} +1 -1
  60. package/web-app/dist/assets/{TeamsPage-905MJyke.js → TeamsPage-B-v5j_8q.js} +1 -1
  61. package/web-app/dist/assets/{TemplatesPage-DMrUHcvF.js → TemplatesPage-bdqUL-LG.js} +1 -1
  62. package/web-app/dist/assets/{TerminalOutput-BsbEbBYX.js → TerminalOutput-CRHEXBwS.js} +1 -1
  63. package/web-app/dist/assets/{activity-BuaXhBsC.js → activity-C-ROkmXt.js} +1 -1
  64. package/web-app/dist/assets/{bell-BfEQ71OG.js → bell-DbiCBxQA.js} +1 -1
  65. package/web-app/dist/assets/{bot-DOGeYewg.js → bot-DsIgE_qr.js} +1 -1
  66. package/web-app/dist/assets/{check-zbjPpb3E.js → check-CkAdmHWP.js} +1 -1
  67. package/web-app/dist/assets/{chevron-left-DWTOgfFt.js → chevron-left-CYTLivAo.js} +1 -1
  68. package/web-app/dist/assets/{circle-alert-BEPKfRzR.js → circle-alert-BVIcAsFJ.js} +1 -1
  69. package/web-app/dist/assets/{clock-C_fX3OHo.js → clock-Dg3Rq0go.js} +1 -1
  70. package/web-app/dist/assets/{cloud-DUXHygXQ.js → cloud-CenrqHFl.js} +1 -1
  71. package/web-app/dist/assets/{code-xml-BEVl_9Hw.js → code-xml-C2mvfoug.js} +1 -1
  72. package/web-app/dist/assets/{database-_a22uh7l.js → database-BKa0_eCb.js} +1 -1
  73. package/web-app/dist/assets/{dollar-sign-l2en7xfg.js → dollar-sign-DfelUK1S.js} +1 -1
  74. package/web-app/dist/assets/{file-code-corner-DItKl6H4.js → file-code-corner-CZKWoHVg.js} +1 -1
  75. package/web-app/dist/assets/{file-plus-BSk7qFMA.js → file-plus-CZ-m1zMX.js} +1 -1
  76. package/web-app/dist/assets/{globe-2TveFE5l.js → globe-S0kv_GwC.js} +1 -1
  77. package/web-app/dist/assets/{hammer-BU6OJlQj.js → hammer-BW1MDdu1.js} +1 -1
  78. package/web-app/dist/assets/{index-DGnZXUYk.js → index-ACEYsTc2.js} +3 -3
  79. package/web-app/dist/assets/{layers-DKw7MNuq.js → layers-BrXHYZ-L.js} +1 -1
  80. package/web-app/dist/assets/{loader-circle-CoYfykzD.js → loader-circle-DOdhKFx0.js} +1 -1
  81. package/web-app/dist/assets/{lock-D9JzrXDL.js → lock-BcFTyg8J.js} +1 -1
  82. package/web-app/dist/assets/{package-BZtqTIqH.js → package-D34cMVQG.js} +1 -1
  83. package/web-app/dist/assets/{plus-BGJfo8bV.js → plus-CEaMeBxL.js} +1 -1
  84. package/web-app/dist/assets/{refresh-cw-F6lowBgR.js → refresh-cw-D2Rzxr5U.js} +1 -1
  85. package/web-app/dist/assets/{rotate-ccw-DHOK8dM4.js → rotate-ccw-C_-EjRLh.js} +1 -1
  86. package/web-app/dist/assets/{scroll-text-CKcROoMV.js → scroll-text-BSSCMI_c.js} +1 -1
  87. package/web-app/dist/assets/{server-DbG8MDv6.js → server-BKvLonWt.js} +1 -1
  88. package/web-app/dist/assets/{shield-alert-RNKNXdJT.js → shield-alert-DbbQbPdW.js} +1 -1
  89. package/web-app/dist/assets/{thumbs-up-Yxp-UBxS.js → thumbs-up-NoBD1fUR.js} +1 -1
  90. package/web-app/dist/assets/{trash-2-DY-eba1n.js → trash-2-BXz8rAyd.js} +1 -1
  91. package/web-app/dist/assets/{trending-down-CARiDB3t.js → trending-down-D8u535Re.js} +1 -1
  92. package/web-app/dist/assets/{trending-up-brQqWbA3.js → trending-up-q8k3kgiy.js} +1 -1
  93. package/web-app/dist/assets/{upload-D6wRjKhz.js → upload-Cp7_zeBI.js} +1 -1
  94. package/web-app/dist/assets/{usePolling-BMrqNbAI.js → usePolling-CTHVdcuX.js} +1 -1
  95. package/web-app/dist/assets/{user-CK5-EXIj.js → user-DF7bfSf_.js} +1 -1
  96. package/web-app/dist/index.html +1 -1
  97. package/autonomy/lib/doctor-fix.py +0 -279
@@ -11,7 +11,7 @@ Classes: KEEP-MODERN (v10-native or engine-neutral), UPDATE (live but needs mode
11
11
  - DROP-LEGACY: 32
12
12
  - DELETE: 14
13
13
  - Total rows: 138
14
- - Registry paths (commands and nested subcommands): 193
14
+ - Registry paths (commands and nested subcommands): 194
15
15
 
16
16
  ## Commands
17
17
 
@@ -139,7 +139,7 @@ Classes: KEEP-MODERN (v10-native or engine-neutral), UPDATE (live but needs mode
139
139
  | trigger | autonomy/loki | DROP-LEGACY | Legacy engine |
140
140
  | failover | autonomy/loki | DROP-LEGACY | Legacy engine |
141
141
  | reset | autonomy/loki | DROP-LEGACY | Legacy engine |
142
- | merge | autonomy/loki | DROP-LEGACY | Legacy parallel mode |
142
+ | merge | autonomy/loki | DROP-LEGACY | Bash PR merge gate |
143
143
  | heal | autonomy/loki | DROP-LEGACY | Legacy engine |
144
144
  | migrate | autonomy/loki | DROP-LEGACY | Superseded by modernize |
145
145
  | dogfood | autonomy/loki | DROP-LEGACY | Legacy engine |
@@ -265,6 +265,7 @@ One entry per decision: context, choice, why, how to reverse. Newest last.
265
265
  - modernize/ gets its own cap of 4,000 lines in the same test: 25 planned modules (MODERNIZE.md section 13) at about 150 lines each plus 15% slack. M-24's view moves to mod/dashboard.ts. M-14 stays under 20 lines in wall.ts and calls into mod/oracle/.
266
266
  - Core never imports modernize/ (the cli.ts TABLE string is exempt), so the split cannot hide core code.
267
267
  - Hitting either cap means re-slice or delete, never raise. Ruled by the CTO (opus) on the Chief of Staff's request; implemented by E-76.
268
+ - 2026-10-15 (M-22/M-23 integration): loki-ts/src/util/ may host engine10 entry points and modernize helpers that would push modernize/ past its cap (util/modernize_unit.ts for remote unit jobs, util/python.ts for pytest running and parsing); they import engine10, engine10 core never imports them.
268
269
 
269
270
  ## D34. 2026-09-28: large tier is real upstream PRs, one size gate, legacy moves to M-27
270
271
 
@@ -248,6 +248,8 @@ Required keys: `type`, `stage` (null for run-level events), `ts` (ISO UTC, ms),
248
248
 
249
249
  Unknown is never 0. A missing cost is `usd: null`, and every reader renders null as "not measured".
250
250
 
251
+ **Work-item state (one vocabulary).** `workItemState(events, nowMs?)` in `util/run_outputs.ts` (beside `phaseOf`) folds the log into one name per run, used by `loki status --json` (`state`), `phaseOf` (resume) and chat (which shells to status): `received` (run.started only), `prepared` (intake done), `planned` (plan done or wall seen), `executing` (implement running), `validating` (implement done, or verify/fix/commit/seal/pr/deep seen), `ready_to_ship` (receipt.sealed). Terminal states come only from run.completed: `completed`, `waiting_for_input` (verdict SPEC_CONFLICT), `budget_stopped` (cap.hit with verdict PARTIAL or FAILED), `failed`, `cancelled`. `stalled` needs the clock argument and 30 minutes without events on an unfinished run.
252
+
251
253
  ## 6. Process topology and Rule of Two
252
254
 
253
255
  The process that reads untrusted issue text into an LLM context never holds a push token. The PR step runs as a separate process.
@@ -381,7 +381,7 @@ The report never states more than the equivalence data proves. It is sealed and
381
381
  | M-20 | Wave verify: full build, integration and original suite | mod/wave.ts, T/wave.test.ts | MEDIUM | Wb T/wave.test.ts | M-17, M-19 |
382
382
  | M-21 | Wave ship: one PR per wave with unit receipts, draft unless all proven | mod/ship.ts, T/ship.test.ts | HIGH | Wb T/ship.test.ts | M-20 |
383
383
  | M-22 | Unit-level resume after coordinator crash | mod/resume.ts, T/resume.test.ts | MEDIUM | Wb T/resume.test.ts | M-17, E-39 |
384
- | M-23 | Remote units via POST /jobs kind unit, Helm worker.engine v10, local re-verify | autonomy/trigger-server.py (unit job kind only), deploy/helm/autonomi/templates/job-worker.yaml, deploy/helm/autonomi/values.yaml, mod/remote.ts, T/remote.test.ts, tests/test-trigger-server-unit-jobs.py | HIGH | python3 tests/test-trigger-server-unit-jobs.py && Wb T/remote.test.ts | M-17 |
384
+ | M-23 | Remote units via POST /jobs kind unit, Helm worker.engine v10, local re-verify | autonomy/trigger-server.py (unit job kind only), deploy/helm/autonomi/templates/job-worker.yaml, deploy/helm/autonomi/values.yaml, loki-ts/src/util/modernize_unit.ts, T/remote.test.ts, tests/test-trigger-server-unit-jobs.py | HIGH | python3 tests/test-trigger-server-unit-jobs.py && Wb T/remote.test.ts | M-17 |
385
385
  | M-24 | Dashboard /modernize view | loki-ts/src/engine10/dashboard/modernize.ts, loki-ts/src/engine10/dashboard/server.ts (one route), T/dashboard.test.ts | LOW | Wb T/dashboard.test.ts | M-01 |
386
386
  | M-25 | Final report and verdict (COMPLETE only if all proven), sealed | mod/report.ts, T/report.test.ts | HIGH | Wb T/report.test.ts | M-13, M-21 |
387
387
  | M-26 | End-to-end: py2 fixture repo modernized with stub provider | T/e2e.test.ts, T/fixtures/e2e_py2/ | MEDIUM | Wb T/e2e.test.ts | M-08, M-22, M-25 |
@@ -398,3 +398,34 @@ The report never states more than the equivalence data proves. It is sealed and
398
398
  - Red: the test file is missing or asserts the absent behavior.
399
399
  - Green: every assertion named in the goal holds.
400
400
  - Each HIGH slice needs a unanimous opus review (D12).
401
+
402
+ ## 14. Fan-out alignment: G-04 cloud dispatch and the M-23 unit job (G-05)
403
+
404
+ Both fan-outs hand one independent piece of work to a remote worker and accept the result only after the coordinator checks it. They share one shape so a single dispatcher can drive either.
405
+
406
+ **M-23 unit job schema** (POST /jobs, same bearer token as every job kind; the schema is closed and any other field is rejected with 400):
407
+
408
+ | Field | Bound | Required |
409
+ |---|---|---|
410
+ | `kind` | the literal `unit` | yes |
411
+ | `repo` | `owner/name`, at most 140 chars, no leading dash, no `.` or `..` segment | yes |
412
+ | `ref` | git ref, at most 200 chars, no `..`, no leading dash | yes |
413
+ | `unit` | unit id, `[A-Za-z0-9][A-Za-z0-9_.-]{0,127}`, never contains `~` | yes |
414
+ | `mid` | `mod-<utc>-<6 hex>` | no |
415
+ | `target` | `python3` or `java21` | no |
416
+
417
+ The worker runs `loki modernize unit --repo <repo> --ref <ref> --unit <unit>` (plus `--mid` and `--target` when given). It fetches repo@ref into a run-owned temp directory with the safe_git helpers, runs the unit there through the same unit runner as a local run, and removes the directory afterwards. A checkout failure, a runner failure or any verdict other than PROVEN exits nonzero with the reason on stderr; exit 2 means bad arguments or runners that are not wired yet.
418
+
419
+ **G-04 dispatch fields mapped onto it** (scripts/cloud-dispatch.sh, docs/v10/SWARM.md "Cloud dispatch"):
420
+
421
+ | G-04 field | M-23 field | Rule |
422
+ |---|---|---|
423
+ | slice id (`SLICE-ID`) | `unit` | Same unit-id charset; the id is the unit of fan-out and of overlap checks. |
424
+ | branch `cloud/<slice-id>` | `ref` | The worker works on this ref (G-04 also returns it); the coordinator never merges a ref it did not name. |
425
+ | repository of the checkout | `repo` | Always `owner/name`; no URL, no userinfo. |
426
+ | file set (overlap check) | the unit's own files | Resolved coordinator-side from plan.json before dispatch; never sent in the job. Overlap with in-flight work refuses the dispatch in both. |
427
+ | tier and governor max | scheduler `--workers` | Concurrency is the governor cap, not a job field. |
428
+ | cloud session id (BOARD note) | server job `id` | Recorded by the coordinator against the unit (events.jsonl for M-23, the BOARD row for G-04). |
429
+ | PR and check conclusion | local re-verify | The PR check result and the remote "passed" are claims. The coordinator re-verifies locally (equivalence check for a unit, required checks for a slice) and merges only if both agree. |
430
+
431
+ Shared rules: credentials are never in the payload (the token is an Authorization header for POST /jobs, and the cloud session uses its own login); an unobserved or unknown remote outcome is not a pass; a remote pass with a failing local re-verify never merges; dispatch refuses rather than guesses when the schema, the overlap check or the cap cannot be evaluated.
@@ -2383,3 +2383,6 @@ The swarm is stopped: .loki/V10-STOP exists, the loop has no wake-ups, and the c
2383
2383
  - 2026-10-15T23:56Z Dispatched 7 ready rows (FC-09r, CPE24-P2a, CPE24-P4a, CP-NITS1, FC-01b, FC-19b, CP-START); every one was already on main (fix commits are ancestors of HEAD, reviewers reran tests and mutations on main). BOARD rows were stale at ready; set to released. New FC-09s sibling row from the FC-09r review. M-17 r2 Opus HIGH APPROVED at d0437a578.
2384
2384
  - 2026-10-16T00:00Z Merged M-17 (4d2e9f5f1, Opus HIGH approved r2) and FC-09s (8bfddbe4d, Opus HIGH approved). Fixed the engine10 L7 guard hit (M-15 unit.ts comment said 'not recorded') and a scheduler test type error against the M-15 conformance type (tests field). Both fold into v11.12.0.
2385
2385
  - 2026-10-16T00:30Z v11.12.0 CI red on Linux (never published): full_env_spawn_guard, spawn_env_guard and model_output_regex_guard flagged the M-15/M-17 modernize unit.ts spawns, and the sitecustomize conformance test named a readdir-order-dependent file. Fixed with tokenFreeEnv on both spawns, sorted drift iteration, and a reasoned allowlist entry; shipping as v11.12.1. FC-09t r3 (064cb191b) held out of main on branch fc09t-wip after a second Opus BLOCK (# inside """ strings, \u escapes in quoted keys); r4 rework running. Factory-parity workflow wy3yizr98 building 40 FV slices plus COST-1/4/5 in 12 lanes; COST-2/3/6 parked (Engine Law L1, moat, paid eval).
2386
+ - 2026-10-16T01:20Z v11.13.0: fast-forwarded main to fv-train 79a127fa9 (12 factory-parity lanes, FC-09t r5, M-20 wave verify; Opus integration review APPROVED, engine10 2291/0, tsc 0). 43 BOARD rows released; FV-gh-steer-4 and FV-pr-loop-4 back to ready. M-22 approved, M-23 in Opus round 2; both merge next.
2387
+ - 2026-10-16T02:04Z v11.14.0: v11.13.0 never published (credentialed_push_guard red: verify-pr respond pushed with its own token). Fixed by routing respond through engine10-push.sh push-pr with origin read once before the fixer runs (Opus HIGH approved r3 after two BLOCKs). Merged M-21 wave ship, M-22 unit resume, M-23 remote units and G-05, FV-pr-loop-4 and FV-gh-steer-4, fv-train follow-ups; engine10 core trimmed to 4946 lines. Guards 158/0, engine10+util 2523 pass (31 route-matrix fails are local TMPDIR-only, green in CI).
2388
+ - 2026-10-16T02:40Z v11.15.0: v11.14.0 never published (CI red: route matrix packages link, merge-queue gh PATH and stat order, FC-89 marker); all four fixed. Shipped M-25 sealed final report (row 379 released), resume adopts only landed merges (mutation-checked 18/1 red, 19/0 green), modernize coordinator wiring (Opus round 2 approve; real runs still exit 2 naming four missing pieces), modernize trim 4107 to 3792. Gates: shell 14/14 rc 0, bun guard set 640/1 then L0 allowlist entry dropped (3/0), tsc 0.