loki-mode 11.10.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 (99) hide show
  1. package/README.md +2 -2
  2. package/SKILL.md +3 -3
  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 +263 -58
  11. package/autonomy/quickstart.sh +40 -0
  12. package/autonomy/run.sh +39 -15
  13. package/autonomy/trigger-server.py +452 -29
  14. package/bin/loki +4 -1
  15. package/completions/_loki +1 -1
  16. package/completions/loki.bash +16 -1
  17. package/dashboard/__init__.py +1 -1
  18. package/docs/CLI-REFERENCE.md +7 -4
  19. package/docs/DEPLOYMENT.md +12 -5
  20. package/docs/EVALUATING.md +13 -0
  21. package/docs/INSTALLATION.md +2 -2
  22. package/docs/SIGNED-RECEIPTS.md +7 -0
  23. package/docs/WORKSPACES.md +2 -2
  24. package/docs/cost-controls.md +26 -0
  25. package/docs/merge-queue.md +19 -0
  26. package/docs/sentry-intake.md +4 -0
  27. package/docs/slack.md +2 -1
  28. package/docs/trackers.md +12 -1
  29. package/docs/v10/BOARD.md +140 -85
  30. package/docs/v10/CLI-MODERN.md +5 -4
  31. package/docs/v10/DECISIONS.md +1 -0
  32. package/docs/v10/ENGINE.md +2 -0
  33. package/docs/v10/FAILURE-CLASSES.md +3 -3
  34. package/docs/v10/MODERNIZE.md +34 -2
  35. package/docs/v10/PROGRESS.md +15 -0
  36. package/loki-ts/dist/loki.js +1225 -1139
  37. package/mcp/__init__.py +1 -1
  38. package/package.json +2 -2
  39. package/packages/control-plane/dist/server.js +1889 -1577
  40. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  41. package/schemas/loki-yaml.schema.json +5 -0
  42. package/web-app/dist/assets/{AdminPage-D3PgG7SH.js → AdminPage-bZlvH4TL.js} +1 -1
  43. package/web-app/dist/assets/{Avatar-Ct77hvlG.js → Avatar-BZrBstQe.js} +1 -1
  44. package/web-app/dist/assets/{Badge-Cg_gZaJF.js → Badge-Q8l8r4Vq.js} +1 -1
  45. package/web-app/dist/assets/{Button-i9r2G84n.js → Button-B8Bt0A3S.js} +1 -1
  46. package/web-app/dist/assets/{CockpitPage-C3UyLXyp.js → CockpitPage-CIYExrXa.js} +1 -1
  47. package/web-app/dist/assets/{ComparePage-B1dXHga_.js → ComparePage-CBOmHdam.js} +1 -1
  48. package/web-app/dist/assets/{ErrorBoundary-CQ_xREw0.js → ErrorBoundary-BKwDPSnK.js} +1 -1
  49. package/web-app/dist/assets/{EvidenceReceiptPanel-DwUxd_Xi.js → EvidenceReceiptPanel-KqzjphWl.js} +1 -1
  50. package/web-app/dist/assets/{GitHubIssuesPanel-C0jAnuAd.js → GitHubIssuesPanel-lF3GkHRv.js} +1 -1
  51. package/web-app/dist/assets/{GitHubPRsPanel-B4pNXJMz.js → GitHubPRsPanel-BCzipPWD.js} +1 -1
  52. package/web-app/dist/assets/{HomePage-BC9UTS1l.js → HomePage-CIdnkzaN.js} +2 -2
  53. package/web-app/dist/assets/{LoginPage-CnpdwK8F.js → LoginPage-D-178nTT.js} +1 -1
  54. package/web-app/dist/assets/{MagicPage-Bj0lZuNp.js → MagicPage-BmHuzMT8.js} +1 -1
  55. package/web-app/dist/assets/{MetricsPage-yyw3VnfX.js → MetricsPage-CPCiyDFn.js} +1 -1
  56. package/web-app/dist/assets/{NotFoundPage-LMxkJP15.js → NotFoundPage-B2T6n1gx.js} +1 -1
  57. package/web-app/dist/assets/{ProjectPage-2x0MRkNu.js → ProjectPage-DQmpFhb0.js} +3 -3
  58. package/web-app/dist/assets/{ProjectsPage-A8J8o1gj.js → ProjectsPage-BmugzFEd.js} +1 -1
  59. package/web-app/dist/assets/{SettingsPage-fwvOVcRb.js → SettingsPage-ZB-RrmgM.js} +1 -1
  60. package/web-app/dist/assets/{ShowcasePage-DqI4sUwk.js → ShowcasePage-BAhwHt4_.js} +1 -1
  61. package/web-app/dist/assets/{SystemSettingsPage-CyytfNo_.js → SystemSettingsPage-Bt7sf2Vu.js} +1 -1
  62. package/web-app/dist/assets/{TeamsPage-BTTe76W1.js → TeamsPage-B-v5j_8q.js} +1 -1
  63. package/web-app/dist/assets/{TemplatesPage-CIp3OTlL.js → TemplatesPage-bdqUL-LG.js} +1 -1
  64. package/web-app/dist/assets/{TerminalOutput-dX5L4ky-.js → TerminalOutput-CRHEXBwS.js} +1 -1
  65. package/web-app/dist/assets/{activity-uHXr2AaF.js → activity-C-ROkmXt.js} +1 -1
  66. package/web-app/dist/assets/{bell-D6RbxRMo.js → bell-DbiCBxQA.js} +1 -1
  67. package/web-app/dist/assets/{bot-D31w2Mu6.js → bot-DsIgE_qr.js} +1 -1
  68. package/web-app/dist/assets/{check-CoKJksbr.js → check-CkAdmHWP.js} +1 -1
  69. package/web-app/dist/assets/{chevron-left-Bjx7oX7s.js → chevron-left-CYTLivAo.js} +1 -1
  70. package/web-app/dist/assets/{circle-alert-DOAh8Jmi.js → circle-alert-BVIcAsFJ.js} +1 -1
  71. package/web-app/dist/assets/{clock-DgEXPNWH.js → clock-Dg3Rq0go.js} +1 -1
  72. package/web-app/dist/assets/{cloud-0dXJFzBv.js → cloud-CenrqHFl.js} +1 -1
  73. package/web-app/dist/assets/{code-xml-DytQ_bq7.js → code-xml-C2mvfoug.js} +1 -1
  74. package/web-app/dist/assets/{database-Qyjryb72.js → database-BKa0_eCb.js} +1 -1
  75. package/web-app/dist/assets/{dollar-sign-BzhTVy1e.js → dollar-sign-DfelUK1S.js} +1 -1
  76. package/web-app/dist/assets/{file-code-corner-DTdSOALw.js → file-code-corner-CZKWoHVg.js} +1 -1
  77. package/web-app/dist/assets/{file-plus-VdjOG1RK.js → file-plus-CZ-m1zMX.js} +1 -1
  78. package/web-app/dist/assets/{globe-BhxNOfyM.js → globe-S0kv_GwC.js} +1 -1
  79. package/web-app/dist/assets/{hammer-MQzrw8ee.js → hammer-BW1MDdu1.js} +1 -1
  80. package/web-app/dist/assets/{index-DaxrMbHf.js → index-ACEYsTc2.js} +3 -3
  81. package/web-app/dist/assets/{layers-C7nusTP-.js → layers-BrXHYZ-L.js} +1 -1
  82. package/web-app/dist/assets/{loader-circle-B1qBkgOY.js → loader-circle-DOdhKFx0.js} +1 -1
  83. package/web-app/dist/assets/{lock-BdkOxK2O.js → lock-BcFTyg8J.js} +1 -1
  84. package/web-app/dist/assets/{package-RVyK96Zn.js → package-D34cMVQG.js} +1 -1
  85. package/web-app/dist/assets/{plus-ntmwFRrp.js → plus-CEaMeBxL.js} +1 -1
  86. package/web-app/dist/assets/{refresh-cw-BJ39b_PP.js → refresh-cw-D2Rzxr5U.js} +1 -1
  87. package/web-app/dist/assets/{rotate-ccw-uPx_-3vz.js → rotate-ccw-C_-EjRLh.js} +1 -1
  88. package/web-app/dist/assets/{scroll-text-D9qvXkj-.js → scroll-text-BSSCMI_c.js} +1 -1
  89. package/web-app/dist/assets/{server-gs4xmD8Y.js → server-BKvLonWt.js} +1 -1
  90. package/web-app/dist/assets/{shield-alert-O2_YffGI.js → shield-alert-DbbQbPdW.js} +1 -1
  91. package/web-app/dist/assets/{thumbs-up-B3RVBhQx.js → thumbs-up-NoBD1fUR.js} +1 -1
  92. package/web-app/dist/assets/{trash-2-DEUt7qhq.js → trash-2-BXz8rAyd.js} +1 -1
  93. package/web-app/dist/assets/{trending-down-oyTns4UZ.js → trending-down-D8u535Re.js} +1 -1
  94. package/web-app/dist/assets/{trending-up-CdpZK0Oc.js → trending-up-q8k3kgiy.js} +1 -1
  95. package/web-app/dist/assets/{upload-D9sbjjC8.js → upload-Cp7_zeBI.js} +1 -1
  96. package/web-app/dist/assets/{usePolling-6ognrnyV.js → usePolling-CTHVdcuX.js} +1 -1
  97. package/web-app/dist/assets/{user-CBKc8QoI.js → user-DF7bfSf_.js} +1 -1
  98. package/web-app/dist/index.html +1 -1
  99. package/autonomy/lib/doctor-fix.py +0 -279
@@ -6,12 +6,12 @@ Classes: KEEP-MODERN (v10-native or engine-neutral), UPDATE (live but needs mode
6
6
 
7
7
  ## Counts
8
8
 
9
- - KEEP-MODERN: 69
9
+ - KEEP-MODERN: 70
10
10
  - UPDATE: 22
11
11
  - DROP-LEGACY: 32
12
12
  - DELETE: 14
13
- - Total rows: 137
14
- - Registry paths (commands and nested subcommands): 191
13
+ - Total rows: 138
14
+ - Registry paths (commands and nested subcommands): 194
15
15
 
16
16
  ## Commands
17
17
 
@@ -28,6 +28,7 @@ Classes: KEEP-MODERN (v10-native or engine-neutral), UPDATE (live but needs mode
28
28
  | receipt | bun route, bash fallthrough | DELETE | Alias of proof; shown only under 'loki help aliases' |
29
29
  | wiki | bun route, bash fallthrough | KEEP-MODERN | Bun-native knowledge feature |
30
30
  | control | bun route, bash fallthrough | KEEP-MODERN | D56 control plane, on by default |
31
+ | intent | loki-ts/src/cli.ts | KEEP-MODERN | Read-only intent view |
31
32
  | kpis | loki-ts/src/cli.ts | KEEP-MODERN | Bun-native KPI report |
32
33
  | report | bun route, bash fallthrough | UPDATE | Mixed route; only kpis is Bun |
33
34
  | trust | bun route, bash fallthrough | KEEP-MODERN | Trust moat surface |
@@ -138,7 +139,7 @@ Classes: KEEP-MODERN (v10-native or engine-neutral), UPDATE (live but needs mode
138
139
  | trigger | autonomy/loki | DROP-LEGACY | Legacy engine |
139
140
  | failover | autonomy/loki | DROP-LEGACY | Legacy engine |
140
141
  | reset | autonomy/loki | DROP-LEGACY | Legacy engine |
141
- | merge | autonomy/loki | DROP-LEGACY | Legacy parallel mode |
142
+ | merge | autonomy/loki | DROP-LEGACY | Bash PR merge gate |
142
143
  | heal | autonomy/loki | DROP-LEGACY | Legacy engine |
143
144
  | migrate | autonomy/loki | DROP-LEGACY | Superseded by modernize |
144
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.
@@ -291,9 +291,9 @@ L0 review rule (ENGINE-LAWS.md L0): a fix that adds an `if` or a regex about the
291
291
  ## FC-24 Agent-written code in the runner's process can forge a pass (summary and exit code)
292
292
  - User saw: nothing yet (found in the FC-16b round 2 review, 2026-10-04). Reproduced at f28b15d78 with pytest on python 3.14.6: a conftest.py `pytest_sessionfinish` hook writes "===== 5 passed in 0.01s =====" and calls `os._exit(0)`; the only test is `assert False`; classifyCheck returns {"result":"pass","n":5}. The Go form (init or TestMain prints RUN and PASS for a failing test, then os.Exit(0)) defeated every name check in FC-16b.
293
293
  - Law: L2 (fail closed on trust), L3 (what ran is the evidence); Seal accuracy.
294
- - Siblings (code-path reasoning, only pytest and go reproduced): unittest (atexit or os._exit before the real trailer), jest and vitest (config, globalSetup, setupFiles patch stdout or call process.exit(0)), bun test (preload), node --test (--import or --require hooks), cargo (the test binary is the code), npm test (an arbitrary script). A harness-owned reporter or result file (pytest plugin, jest reporter, JUnit XML) is written inside the same process, so it is forgeable too.
295
- - Mechanism: none closes it per runner. The runner's summary and exit code come from a process that runs agent-written code. Decision: a test pass is recorded as runner-reported, not tamper-proof (a known L2 limit). Go exit 0 is never a pass (FC-16b, not_run, owner harness, honest L5 reason) because Go has no parseable summary that survives the forgery at lower cost. Candidate later mechanisms: harness re-runs each named Wall test in a fresh process with harness-controlled entry and flags (setup code still runs), and the receipt states the limit in its evidence text.
296
- - Fixture: the FC-16b forgery fixtures (go init/TestMain early exit asserts not_run); a pytest conftest forgery fixture that documents the limit is a follow-up slice, not a fix.
294
+ - Siblings (code-path reasoning, only pytest and go reproduced): unittest (atexit or os._exit before the real trailer), jest and vitest (config, globalSetup, setupFiles patch stdout or call process.exit(0)), bun test (preload), node --test (--import or --require hooks), cargo (the test binary is the code), npm test (an arbitrary script). A harness-owned reporter or result file (pytest plugin, jest reporter, JUnit XML) is written inside the same process, so it is forgeable too. Modernize unit runner (M-15, modernize/unit.ts): junit rewrite via the argv path plus atexit, and TestReport.from_item_and_call wrap, both reproduced PROVEN at c85b1a443 in all 4 configs. Modernize equivalence case runner and stub ablation (runNew/runStub) run unit code in the case process with cases.jsonl readable (code-path reasoning, not reproduced).
295
+ - Mechanism: none closes it per runner. The runner's summary and exit code come from a process that runs agent-written code. Decision: a test pass is recorded as runner-reported, not tamper-proof (a known L2 limit). Go exit 0 is never a pass (FC-16b, not_run, owner harness, honest L5 reason) because Go has no parseable summary that survives the forgery at lower cost. Candidate later mechanisms: harness re-runs each named Wall test in a fresh process with harness-controlled entry and flags (setup code still runs), and the receipt states the limit in its evidence text. M-15 records conformance as trust "runner_reported" / limit "FC-24" in UnitRunResult.conformance and in the unit.conformance_passed event.
296
+ - Fixture: the FC-16b forgery fixtures (go init/TestMain early exit asserts not_run); the unit.test.ts describe "FC-24 known limit: in-process forgery is runner_reported, not detected (documenting, not a fix)" (B1 and B2, 4 cases, plus controls).
297
297
 
298
298
  ## FC-25 A git call from the token-holding supervisor runs a plant in the agent's repo config (moat P9 red since v10.10.4)
299
299
  - User saw: nothing visible; the moat job of Tests has failed on main since 4fa4e8015 (runs 37160286598 through 37165257952, all "REGRESSION P9.injection-cannot-reach-token": "a plant in the agent's repo config ran holding the real GitHub token: fsmonitor"). 65ce2060b was the last green. The range touched no bash, only loki-ts.
@@ -259,7 +259,7 @@ The report never states more than the equivalence data proves. It is sealed and
259
259
  | Input | The unit id, the sealed `cases.jsonl` (sha-verified before use), the new tree, and the target runner. |
260
260
  | Normalizers | Declared per unit in the card and sealed with the oracle: float tolerance, set ordering, and named nondeterministic fields. Nothing is implicit. |
261
261
  | Output | `{unit, cases, pass, fail, held_out_pass, held_out_fail, rate, branch_pct, failures:[{case, field, old, new}] (max 20), not_proven:[...]}` |
262
- | Proven equivalent | rate = 100%, held-out rate = 100%, branch_pct of 80% or higher, the no-op ablation goes red, and conformance passes. |
262
+ | Proven equivalent | rate = 100%, held-out rate = 100%, branch_pct of 80% or higher, the no-op ablation goes red, and conformance passes (runner_reported, FC-24: not proof against unit code that subverts the test runner in-process). |
263
263
  | Otherwise | PARTIAL with the numbers, or FAILED when rate < 100% after re-slice. |
264
264
 
265
265
  **Target conformance**
@@ -268,6 +268,7 @@ The report never states more than the equivalence data proves. It is sealed and
268
268
  - java21: it compiles with `--release 21` and `jdeprscan --for-removal --release 21` is clean.
269
269
  - The Wall runs under the target runtime. A Wall that is green before any change is a design error reported as `oracle.flagged`. It is never ALREADY_SATISFIED.
270
270
  - `stages/wall.ts` gains a pre-sealed mode (M-14) that takes these files instead of running the author session.
271
+ - Conformance is runner_reported (FC-24): UnitRunResult.conformance and the unit.conformance_passed event carry trust "runner_reported", limit "FC-24". It stops accidental and low-effort false passes, not unit code that subverts pytest inside its own process.
271
272
 
272
273
  ## 8. Strangler adapters and routing flags per target
273
274
 
@@ -380,7 +381,7 @@ The report never states more than the equivalence data proves. It is sealed and
380
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 |
381
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 |
382
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 |
383
- | 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 |
384
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 |
385
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 |
386
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 |
@@ -397,3 +398,34 @@ The report never states more than the equivalence data proves. It is sealed and
397
398
  - Red: the test file is missing or asserts the absent behavior.
398
399
  - Green: every assertion named in the goal holds.
399
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.
@@ -2371,3 +2371,18 @@ The swarm is stopped: .loki/V10-STOP exists, the loop has no wake-ups, and the c
2371
2371
  - v11.10.0 (58344ed27): Tests run 38816323342 and Release failed: bun route_matrix_mutation B3 and B6 (anchor "let session = await ctx.sessions.run(first);" no longer exists after S41-13, so the mutations were not applied). Not published; npm next stays 11.9.1.
2372
2372
  - Fix: anchor updated to the S41-13 line in loki-ts/tests/engine10/route_matrix_mutation.test.ts (33 pass 0 fail); bun test tests/engine10 2037 pass 0 fail 1 skip.
2373
2373
  - M-15 round 4 (1c9a5e56a) Opus BLOCK: case-insensitive Conftest.py and symlinks under SKIP_DIRS; round 5 (class fixes) in flight.
2374
+
2375
+ ## 2026-10-15 23:35Z v11.10.1 green, v11.11.0 train
2376
+ - v11.10.1 (9d952ff56): Release and Tests success; npm next=11.10.1, GitHub release body set.
2377
+ - M-15 round 5 (f6b9bdd7d) and round 6 (c85b1a443) Opus BLOCK. Round 6 reproduced B1 (atexit rewrites the junit via the --junitxml path in sys.argv) and B2 (wrapping TestReport.from_item_and_call), both FC-24. CTO call: option (a), accept FC-24, delete the false "not forgeable" and "unreachable" claims, mark PROVEN conformance runner_reported, keep B1/B2 as documenting fixtures; modernize budget only, core is 4998/5000. Round 7 in flight.
2378
+ - R15 refill: six rows cut from BACKLOG-D91; three cards repointed at owning modules (run_status.ts, pr_lessons.ts, reviewer_brief.ts) per extend-never-duplicate.
2379
+ - v11.11.0 train: R15-F1 8e7e3c381, R15-F2 8df4a556d, R15-E1 c649c2ac1, R15-E2 b816a26e3, each sonnet Tech Lead APPROVE; dist conflicts resolved by rebuild.
2380
+ - R15-B1 rejected: stale premise (setDefaultTimeout(130_000) already present). R15-B2 rejected: issue 213 failures under load are wall-clock bound assertions, not the pid-file spin; trial fix still 43/3.
2381
+ - 23:40Z M-15 round 7 (2f7d2a115) Opus HIGH APPROVE against the CTO threat model: conformance is runner_reported (FC-24), false claims deleted, B1/B2 kept as documenting fixtures, unit.test.ts 111/0. Merged as 20a9f2f32 for v11.12.0; M-17 and its chain are unblocked.
2382
+ - 2026-10-15T23:52Z v11.11.0 CI red on help/completion drift (never tagged or published); fix folded into v11.12.0 with M-15. M-17 r1 BLOCKED by Opus HIGH (raw execFileSync git in coordinator runs planted hooks, FC-25 sibling); r2 rework running (wf_329c9171-c19). Worktrees 33 -> 22 (11 merged removed).
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
+ - 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
+ - 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.