loki-mode 10.4.1 → 10.5.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.
- package/SKILL.md +2 -2
- package/VERSION +1 -1
- package/dashboard/__init__.py +1 -1
- package/docs/INSTALLATION.md +1 -1
- package/docs/dev/release-checklist.md +24 -0
- package/docs/v10/BOARD.md +34 -21
- package/docs/v10/METRICS.md +10 -0
- package/docs/v10/PROGRESS.md +20 -0
- package/loki-ts/dist/loki.js +445 -445
- package/mcp/__init__.py +1 -1
- package/package.json +2 -2
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/web-app/dist/assets/{AdminPage-DXFriVML.js → AdminPage-DLg6_gDO.js} +1 -1
- package/web-app/dist/assets/{Avatar-p9ksx_eu.js → Avatar-s9yLNmGN.js} +1 -1
- package/web-app/dist/assets/{Badge-LNKA1VAh.js → Badge-B3YYyb1l.js} +1 -1
- package/web-app/dist/assets/{Button-BubeNlVF.js → Button-CyvFPweU.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-Vmnn1kk_.js → CockpitPage-D7Kg7d5Z.js} +1 -1
- package/web-app/dist/assets/{ComparePage-y4DEGPAX.js → ComparePage-gosW76SS.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-DiuMh-ej.js → ErrorBoundary-BafiRRiY.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-BTg9fL9S.js → EvidenceReceiptPanel-ms3KqwO7.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-C4fuMrPb.js → GitHubIssuesPanel-ayL5gA__.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-BdQsKH8b.js → GitHubPRsPanel-CET7yKAJ.js} +1 -1
- package/web-app/dist/assets/{HomePage-E0Dp3m6N.js → HomePage-CG3wj44-.js} +2 -2
- package/web-app/dist/assets/{LoginPage-BsbNsjYW.js → LoginPage-CkryHYSX.js} +1 -1
- package/web-app/dist/assets/{MagicPage-DGrIIo5Z.js → MagicPage-tRNArbp2.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-DLvKrowx.js → MetricsPage-DEno_r1_.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-B6jgGGXs.js → NotFoundPage-CRMnWAVu.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-iu7achd2.js → ProjectPage-BBwgtuYF.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-zWcn06b3.js → ProjectsPage--hVzEpt8.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-_HQ0UqwR.js → SettingsPage-Duy2o5cX.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-yAsWHQEg.js → ShowcasePage-CRba1Kjw.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-DtZVxTJ2.js → SystemSettingsPage--MjeVlfN.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-DDpGebPt.js → TeamsPage-D9oeMSaU.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-BlOcIhIE.js → TemplatesPage-BGLMM-F8.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-EiD6R33t.js → TerminalOutput-CoHizMdl.js} +1 -1
- package/web-app/dist/assets/{activity-DbmttG_6.js → activity-hhg-uilU.js} +1 -1
- package/web-app/dist/assets/{bell-BVZdHdS9.js → bell-BlrKJIZk.js} +1 -1
- package/web-app/dist/assets/{bot-CBpm5F9l.js → bot-VVnWO546.js} +1 -1
- package/web-app/dist/assets/{check-NZElkYN9.js → check-0i55NbmC.js} +1 -1
- package/web-app/dist/assets/{chevron-left-Bsj7g0Lx.js → chevron-left-DXvPxcjA.js} +1 -1
- package/web-app/dist/assets/{circle-alert--R-03UOi.js → circle-alert-CVMeO7H6.js} +1 -1
- package/web-app/dist/assets/{clock-DxURKFW-.js → clock-CpK6S1GA.js} +1 -1
- package/web-app/dist/assets/{cloud-CwgZnGFX.js → cloud-BmYq7VML.js} +1 -1
- package/web-app/dist/assets/{code-xml-DbI4aSEX.js → code-xml-BDWHoGnw.js} +1 -1
- package/web-app/dist/assets/{database-DyH1aJKS.js → database-Dmrj7PGO.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-DcirTDYQ.js → dollar-sign-DXucFgTN.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-D25VLaas.js → file-code-corner-CZbJMRKY.js} +1 -1
- package/web-app/dist/assets/{file-plus-CXZAUQHR.js → file-plus-BT_Yk733.js} +1 -1
- package/web-app/dist/assets/{globe-fb7DDJvp.js → globe-zglwxiFf.js} +1 -1
- package/web-app/dist/assets/{hammer-B0CgWTnB.js → hammer-S48qUq-S.js} +1 -1
- package/web-app/dist/assets/{index-h49hpHj_.js → index-gK3svzet.js} +2 -2
- package/web-app/dist/assets/{layers-D7e5s5oV.js → layers-JG0DCbxV.js} +1 -1
- package/web-app/dist/assets/{loader-circle-CuJseaIc.js → loader-circle-C94g0Ufo.js} +1 -1
- package/web-app/dist/assets/{lock-AWuJecY0.js → lock-qZQuLspz.js} +1 -1
- package/web-app/dist/assets/{package-FOl48t3g.js → package-UJx4FWTL.js} +1 -1
- package/web-app/dist/assets/{plus-B0rvkQ0K.js → plus-B9Runvu8.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-9k6QfjLX.js → refresh-cw-Bw15X6HU.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-BKfPqp6g.js → rotate-ccw-CTQHiWLi.js} +1 -1
- package/web-app/dist/assets/{scroll-text-VliGSgXD.js → scroll-text-CYxP1XmA.js} +1 -1
- package/web-app/dist/assets/{server-CDRRtXH3.js → server-CuzmeflE.js} +1 -1
- package/web-app/dist/assets/{shield-alert-BudxBT3Y.js → shield-alert-C_ahttH-.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-DG8YD2t0.js → thumbs-up-D-nBtZWz.js} +1 -1
- package/web-app/dist/assets/{trash-2-C3OCq0ib.js → trash-2-Cez4MfM-.js} +1 -1
- package/web-app/dist/assets/{trending-down-DdhqjRcI.js → trending-down-CkK1r5YZ.js} +1 -1
- package/web-app/dist/assets/{trending-up-DeiXF7_i.js → trending-up-DAnvatGe.js} +1 -1
- package/web-app/dist/assets/{upload-TsptvdQm.js → upload-BfIhnZzQ.js} +1 -1
- package/web-app/dist/assets/{usePolling-CtO3JeYc.js → usePolling--zRC6JF0.js} +1 -1
- package/web-app/dist/assets/{user-LzUg4eFF.js → user-BDs4mI4D.js} +1 -1
- package/web-app/dist/index.html +1 -1
package/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: loki-mode
|
|
|
3
3
|
description: Autonomous spec-driven build system with a built-in trust layer. It does not call work done until it is verified (RARV-C closure loop, 8 quality gates, completion council, verified-completion evidence gate). Triggers on "Loki Mode". Takes a spec (PRD, GitHub issue, OpenAPI doc, etc.) to deployed product with minimal human intervention. Provider-agnostic. Requires --dangerously-skip-permissions flag.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Loki Mode v10.
|
|
6
|
+
# Loki Mode v10.5.1
|
|
7
7
|
|
|
8
8
|
**You are an autonomous agent. You make decisions. You do not ask questions. You do not stop.**
|
|
9
9
|
|
|
@@ -470,4 +470,4 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
|
|
|
470
470
|
|
|
471
471
|
---
|
|
472
472
|
|
|
473
|
-
**v10.
|
|
473
|
+
**v10.5.1 | [Autonomi](https://www.autonomi.dev/) flagship product | ~410 lines core**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
10.
|
|
1
|
+
10.5.1
|
package/dashboard/__init__.py
CHANGED
package/docs/INSTALLATION.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
The flagship product of [Autonomi](https://www.autonomi.dev/). Loki Mode is a spec-driven autonomous builder with a built-in trust layer that takes any spec to a deployed product and verifies completion with evidence (quality gates plus a completion council), not just a "done" claim. Complete installation instructions for all platforms and use cases.
|
|
4
4
|
|
|
5
|
-
**Version:** v10.
|
|
5
|
+
**Version:** v10.5.1
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -58,6 +58,30 @@ wiki/Home.md, wiki/_Sidebar.md, wiki/API-Reference.md
|
|
|
58
58
|
README.md, docker-compose.yml # Docker image tags (MAJOR/MINOR bumps)
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
+
The CHANGELOG.md entry must be a full section, not a one-line placeholder
|
|
62
|
+
(E-88): a summary line, one or more `### ` subsections (Added, Fixed, etc.)
|
|
63
|
+
with a `- ` bullet for every user-visible change, and, if this version
|
|
64
|
+
republishes a version that never reached npm, that version's own section
|
|
65
|
+
carried forward too. `scripts/release-notes.sh <version>` extracts and
|
|
66
|
+
validates this section the same way release.yml does; `.githooks/pre-push`
|
|
67
|
+
runs it on any push whose remote ref is `refs/heads/main` and whose VERSION
|
|
68
|
+
actually changes there, and release.yml refuses to publish the release if
|
|
69
|
+
the section is missing, empty, or not fully written. release.yml runs this
|
|
70
|
+
extraction BEFORE tagging (D36), so a notes failure never burns a version
|
|
71
|
+
number.
|
|
72
|
+
|
|
73
|
+
Carrying another version's notes forward (E-88a) is explicit only:
|
|
74
|
+
`--include v1,v2,...` names the versions to append, each under its own
|
|
75
|
+
"## vX.Y.Z changes (first published in vNEW)" heading; release.yml itself
|
|
76
|
+
passes no `--include`, so a version that never reached npm gets its
|
|
77
|
+
section written directly into the new CHANGELOG entry by hand (as done for
|
|
78
|
+
10.0.1 and 10.2.1). An earlier revision auto-detected candidates from the
|
|
79
|
+
section's own prose and an npm-published check; two rounds of review found
|
|
80
|
+
it could still pull in a HIGHER, already-published version named only for
|
|
81
|
+
context (the v9.22.13 bug: its body says "v9.24.0 is the next version on
|
|
82
|
+
npm") or over-carry on a stale npm read, so auto-detect was removed
|
|
83
|
+
entirely rather than patched again.
|
|
84
|
+
|
|
61
85
|
### 2. Build Dashboard Frontend
|
|
62
86
|
|
|
63
87
|
```bash
|
package/docs/v10/BOARD.md
CHANGED
|
@@ -364,7 +364,7 @@ set is declared to avoid overlap with those and with each other.
|
|
|
364
364
|
| M-10 | Coverage-guided input search (read-only session, plateau stop) | loki-ts/src/engine10/modernize/oracle/search.ts, loki-ts/tests/engine10/modernize/search.test.ts | HIGH | cd loki-ts && bun test tests/engine10/modernize/search.test.ts | merged@2026-09-28T17:20Z | Source: MODERNIZE.md (D30). Depends on M-09. Opus REJECT (reproduced): a failed seed capture is reported as a plateau. Next: rework. r2 d7db4fb1 Opus APPROVE; merged dc827b80 (on top of v10.2.2): full `cd loki-ts && bun test` 2277 pass 0 fail, `bash tests/test-engine10-dist.sh` 18 passed, `bash tests/test-v10-pulse.sh` 117 passed. |
|
|
365
365
|
| M-11 | Java capture: JUnit under JDK 8 with JaCoCo plus Randoop | autonomy/lib/modernize/java_capture.sh, loki-ts/src/engine10/modernize/oracle/java.ts, loki-ts/tests/engine10/modernize/java_capture.test.ts | HIGH | cd loki-ts && bun test tests/engine10/modernize/java_capture.test.ts | merged@2026-09-28T18:25Z | Source: MODERNIZE.md (D30). Depends on M-04. Opus REJECT (reproduced): multi-line java -version breaks status.json (json_escape skips newlines). Next: rework. Wave E26 (wf_9ba5fcaf-75a). Round 3. r3 e476435b opus APPROVE (every C0 byte escaped as \u00XX; malformed status.json reported as its own reason); merged locally. |
|
|
366
366
|
| M-12 | Oracle seal, held-out split, 80% floor, up-front NOT PROVEN | loki-ts/src/engine10/modernize/oracle/seal.ts, loki-ts/tests/engine10/modernize/oracle_seal.test.ts | HIGH | cd loki-ts && bun test tests/engine10/modernize/oracle_seal.test.ts | merged@2026-09-28T17:20Z | Source: MODERNIZE.md (D30). Depends on M-09. Opus REJECT (reproduced): delete-and-reseal defeats tamper evidence (hashes stored beside the data). Next: rework. r2 d9026ec6 Opus APPROVE (reseal refused via the append-only log); merged dc827b80 (on top of v10.2.2): full `cd loki-ts && bun test` 2277 pass 0 fail, `bash tests/test-engine10-dist.sh` 18 passed, `bash tests/test-v10-pulse.sh` 117 passed. |
|
|
367
|
-
| M-13 | Equivalence checker with sealed normalizers and contract output | loki-ts/src/engine10/modernize/equiv.ts, loki-ts/tests/engine10/modernize/equiv.test.ts, loki-ts/tests/engine10/modernize/fixtures/equiv/ | HIGH | cd loki-ts && bun test tests/engine10/modernize/equiv.test.ts |
|
|
367
|
+
| M-13 | Equivalence checker with sealed normalizers and contract output | loki-ts/src/engine10/modernize/equiv.ts, loki-ts/tests/engine10/modernize/equiv.test.ts, loki-ts/tests/engine10/modernize/fixtures/equiv/ | HIGH | cd loki-ts && bun test tests/engine10/modernize/equiv.test.ts | building@2026-09-28T21:18Z | Source: MODERNIZE.md (D30). Depends on M-12. Wave E27 (wf_bcacb1d1-e76). Wave E27 stopped 18:37Z (founder: over budget, load 50). REJECT (reproduced): a unit whose oracle seal is NOT_PROVEN still gets a clean equivalence pass. Branch slice-M-13-equiv kept. Dispatched 21:18Z sonnet (founder 17:10 staffing directive). |
|
|
368
368
|
| M-14 | Wall pre-sealed mode: oracle plus conformance, green base is an error | loki-ts/src/engine10/stages/wall.ts (pre-sealed branch only), loki-ts/tests/engine10/modernize/wall_presealed.test.ts | HIGH | cd loki-ts && bun test tests/engine10/modernize/wall_presealed.test.ts | ready@2026-09-28T18:42Z | Source: MODERNIZE.md (D30). Depends on M-12, E-54. D33: states its net core line delta; core must stay under 5,000 (92 lines of headroom shared by E-67, E-66, E-61, M-14, merge order E-67, E-66, E-61); offset any excess by deleting dead core code. Wave E27 (wf_bcacb1d1-e76). Wave E27 stopped 18:37Z (founder: over budget, load 50). REJECT: branch empty (no commits). |
|
|
369
369
|
| M-15 | Unit runner: card to v10 run with oracle Wall and equiv check | loki-ts/src/engine10/modernize/unit.ts, loki-ts/tests/engine10/modernize/unit.test.ts | HIGH | cd loki-ts && bun test tests/engine10/modernize/unit.test.ts | ready@2026-09-28T02:45Z | Source: MODERNIZE.md (D30). Depends on M-13, M-14. |
|
|
370
370
|
| M-16 | Deterministic codemods first (futurize, OpenRewrite) or skipped | loki-ts/src/engine10/modernize/codemod.ts, loki-ts/tests/engine10/modernize/codemod.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/modernize/codemod.test.ts | released@2026-09-28T16:03Z | Source: MODERNIZE.md (D30). Depends on M-02. Built 0a8bbe6c (branch slice-M-16-codemods); TL review died on the 04:48Z access outage. Wave E21 (wf_39ab3f7d-8f3). TL review. TL APPROVE of 0a8bbe6c; merged into train E22 (9042e964): `bun test tests/engine10/` 547 pass 0 fail, tsc 0, `bash tests/test-v10-pulse.sh` 107 passed, `bash eval/loki10/test-harness.sh` 108 passed. Released in v10.2.1 (npm publish 2026-09-28T16:03Z; every cited commit is an ancestor of the v10.2.1 tag; `git merge-base --is-ancestor`). |
|
|
@@ -408,16 +408,16 @@ set is declared to avoid overlap with those and with each other.
|
|
|
408
408
|
| EV-12D | INDEX.md large rows and counts; synthetic lg-* noted rejected (D34), legacy moved to M-27 | eval/loki10/tasks/INDEX.md | LOW | measure-size rc=0 over all tiers; large count at least 5 on main; validate rc=0 | ready@2026-09-28T14:55Z | Source: D34. Depends on EV-12S, EV-12A, EV-12B, EV-12C. |
|
|
409
409
|
| E-83 | P0 fix-forward: main Tests red on 9d483688 (run 36438012977): modernize codemod spawn without env (spawn env guard) and the prStage bundle marker deleted by the E-66 line offset (dist test) | loki-ts/src/engine10/modernize/codemod.ts, loki-ts/src/engine10/stages/pr.ts | HIGH | `bun test tests/runner/spawn_env_guard.test.ts`; `bash tests/test-engine10-dist.sh` | released@2026-09-28T16:03Z | TL APPROVE (sonnet) on 10391f4a, both reverts reproduce red; merged c5ace6e1: full `cd loki-ts && bun test` 2239 pass 0 fail, dist test 18 passed 0 failed, core 4,999. Released in v10.2.1 (npm publish 2026-09-28T16:03Z; every cited commit is an ancestor of the v10.2.1 tag; `git merge-base --is-ancestor`). |
|
|
410
410
|
| E-84 | Pulse TRAIN_LATE reads the last train push from the reflog of refs/remotes/origin/main (moves on every push and on fetches of others' pushes), then push-*.log, then UNKNOWN | scripts/v10-pulse.sh (last_train_push_epoch only), tests/test-v10-pulse.sh | MEDIUM | bash tests/test-v10-pulse.sh; fixture: temp repo plus bare remote, a real `git push` makes the check read under 1 min with no push-*.log present; no reflog and no logs reads UNKNOWN | released@2026-09-28T16:03Z | Source: founder 15:09Z; TRAIN_LATE read 681.9 min while trains were pushed at 14:42Z and later, because plain `git push` writes no push-*.log. TL APPROVE (sonnet) on eeace3f6: `bash tests/test-v10-pulse.sh` 109 passed 0 failed; against the old pulse 106 passed 3 failed; live pulse after merge reads "Minutes since last train push: 12.1". Released in v10.2.1 (npm publish 2026-09-28T16:03Z; every cited commit is an ancestor of the v10.2.1 tag; `git merge-base --is-ancestor`). |
|
|
411
|
-
| E-85 | Security Audit: a narrowly scoped gitleaks allow rule for 40-hex commit pins in eval task.json (repo.ref, merge_sha) so pinned upstream SHAs stop tripping sourcegraph-access-token; CTO approval required (posture: no blanket suppressions) | .gitleaks.toml (or the workflow config), .github/workflows/security-audit.yml | HIGH | a fixture task.json with a 40-hex ref passes; the same string in any other file or key still fails |
|
|
411
|
+
| E-85 | Security Audit: a narrowly scoped gitleaks allow rule for 40-hex commit pins in eval task.json (repo.ref, merge_sha) so pinned upstream SHAs stop tripping sourcegraph-access-token; CTO approval required (posture: no blanket suppressions) | .gitleaks.toml (or the workflow config), .github/workflows/security-audit.yml | HIGH | a fixture task.json with a 40-hex ref passes; the same string in any other file or key still fails | parked@2026-09-28T21:14Z | Source: v10.2.0 Release 36440534050 blocked by a pinned werkzeug SHA; EV-11b and EV-12A/B/C add more pins. Wave E27 (wf_bcacb1d1-e76). CTO-level opus review. Wave E27 stopped 18:37Z (founder: over budget, load 50). Build 1 commit on slice-E-85-gitleaks-pins, never reviewed. Parked 21:14Z: a regex allow rule for commit-pin shapes conflicts with the exact-fingerprint-only allowlist policy (security rule: no path or rule suppression). Pins are allowlisted per fingerprint with a reason, as done for werkzeug (82e39c29) and E-101 (6358e0a6). |
|
|
412
412
|
| DEP-01 | Dependency inventory (D35): docs/v10/DEPS.md lists every manifest (all package.json incl. @anthropic-ai/sdk and claude-agent-sdk; every requirements*.txt and pyproject.toml; every uses: in .github/workflows and .github/actions; Node, Python, Bun matrices; Docker bases, Helm images, Terraform providers, Homebrew formula) with current and latest stable, patch/minor/MAJOR, and runtime EOL; no upgrades | docs/v10/DEPS.md, scripts/dep-inventory.py | LOW | python3 scripts/dep-inventory.py regenerates DEPS.md byte-identically on a second run (network results cached); every manifest found by `git ls-files` appears | released@2026-09-28T17:16Z | Source: founder directive 15:20Z (D35). DEP workstream: max 3 builders, never ahead of E/EV/M. Round 3 2794574b TL APPROVE (sonnet) after two REJECT rounds (bump column mismatch, Node 20 claim, 0.x class, Helm drift; then a missing helm/loki-mode chart and unverified floating tags); `bash tests/test-dep-inventory.sh` 5/5, `--self-test` 23/23. Released in v10.2.2 (npm gitHead 9a59750d). |
|
|
413
413
|
| E-87 | Release dispatch path: required-ci also accepts a completed workflow_dispatch Security Audit run at the exact SHA (Tests and Bun Parity stay push-only), so a tree whose VERSION is already bumped can publish after an audit fix | .github/workflows/release.yml (required-ci only), a test that runs the extracted step against a fixture run list | HIGH | fixture: dispatched audit success at the SHA counts; a dispatched audit at another SHA does not; Tests via dispatch still does not | ready@2026-09-28T18:42Z | Source: v10.2.0 Release 36443541666 waited on an audit it could never count. CTO approval required (release gate). Wave E27 (wf_bcacb1d1-e76). CTO-level opus review. Wave E27 stopped 18:37Z (founder: over budget, load 50). REJECT (reproduced): tests pass with the completed-and-success condition removed from the dispatched-audit check. Branch kept. |
|
|
414
|
-
| E-88 | Release notes fully written (D36): scripts/release-notes.sh extracts the CHANGELOG section literally (dated headings), fails on a missing, empty, heading-only or placeholder section; release.yml fails instead of falling back and checks the published body; pre-push refuses a VERSION bump without a full section | scripts/release-notes.sh, .github/workflows/release.yml (extract step), .githooks/pre-push, docs/dev/release-checklist.md, tests/test-release-notes.sh | HIGH | bash tests/test-release-notes.sh; failing first against the old awk pattern |
|
|
414
|
+
| E-88 | Release notes fully written (D36): scripts/release-notes.sh extracts the CHANGELOG section literally (dated headings), fails on a missing, empty, heading-only or placeholder section; release.yml fails instead of falling back and checks the published body; pre-push refuses a VERSION bump without a full section | scripts/release-notes.sh, .github/workflows/release.yml (extract step), .githooks/pre-push, docs/dev/release-checklist.md, tests/test-release-notes.sh | HIGH | bash tests/test-release-notes.sh; failing first against the old awk pattern | merged@2026-09-28T19:46Z | Source: founder directive 16:05Z; six releases published with "Release vX.Y.Z" bodies (backfilled). Founder 17:22Z: stopped at 70 min and re-sliced as E-88a (auto-carry removed, explicit --include only). Wave E27 (wf_bcacb1d1-e76). Wave E27 stopped 18:37Z (founder: over budget, load 50). E-88a opus APPROVE (branch slice-E-88a); merge conflicts with E-86 in .githooks/pre-push; rebase after E-99 lands (same file). E-88a rebased onto E-99 as slice-E-88a-r2 62774912; opus APPROVE (pre-push diff purely additive, E-99 gitleaks steps byte-identical, stdin read once, gate main-only and fail-closed, release.yml exits 1 instead of a placeholder); merged 60ce7620; release-notes 41/0, pre-push-hook 13/0, pre-push-gitleaks 43/0. Non-blocking: gate runs the working tree release-notes.sh; _cl_tmp not in the EXIT trap. |
|
|
415
415
|
| E-89 | Pulse RELEASE_CADENCE (D37): violation when more than 25 minutes pass with main green (Tests and Bun Parity success at HEAD) and at least one merged-unreleased slice commit (not an ancestor of the latest published tag, docs-only commits excluded) | scripts/v10-pulse.sh (one check), tests/test-v10-pulse.sh | MEDIUM | bash tests/test-v10-pulse.sh; fixtures: green plus unreleased slice commit 26 min old fires; red main does not; docs-only commits do not; 24 min does not | merged@2026-09-28T18:42Z | Source: founder directive 16:20Z. Founder 17:22Z: stopped at 58 min; salvaged commit cce8f48a re-sliced as its own slice plus UNDERSTAFFED. Wave E27 (wf_bcacb1d1-e76). Wave E27 stopped 18:37Z (founder: over budget, load 50). TL APPROVE (sonnet) on the salvaged cce8f48a plus UNDERSTAFFED; merged locally; `bash tests/test-v10-pulse.sh` 129 passed 0 failed. |
|
|
416
|
-
| E-90 | Release Manager marks BOARD rows released after publish: scripts/board-mark-released.sh <tag> flips every merged row whose merge commit is an ancestor of <tag> to released@ with the tag and the ancestry evidence; pulse MERGED_NOT_RELEASED_STALE when a merged row is already in a published tag | scripts/board-mark-released.sh, scripts/v10-pulse.sh (one check), tests/test-board-mark-released.sh | MEDIUM | bash tests/test-board-mark-released.sh; a merged row in the tag flips, one not in it stays; BOARD line count unchanged |
|
|
417
|
-
| DEP-02 | actions/checkout v4 (runs on deprecated node20) to latest major v7, SHA-pinned with a "# v7.x.y" comment in every workflow and composite action; read the v5, v6, v7 release notes and fix breaking changes (fetch-depth, persist-credentials defaults) | .github/workflows/*.yml, .github/actions/**/action.yml (uses: actions/checkout lines, plus any input the migration requires) | MEDIUM | `grep -rn "actions/checkout@" .github` shows only full-SHA pins with a v7 comment; actionlint clean; a PR run of Tests, Bun Parity and Security Audit on the slice concludes success (run id cited) |
|
|
418
|
-
| DEP-03 | actions/setup-node v4 (node20) to latest major v7, SHA-pinned with a version comment; read the v5..v7 release notes (cache and package-manager detection defaults) and fix breaking changes | .github/workflows/*.yml, .github/actions/**/action.yml (setup-node lines and required inputs) | MEDIUM | only SHA pins with a v7 comment; actionlint rc=0; PR run conclusion success (run id cited) |
|
|
419
|
-
| DEP-04 | Runtime matrix: drop Node 20 (EOL 2026-04-30) from every workflow matrix, keep 22 (previous supported, users still run it) and 24, add the current stable line if the inventory shows one newer and supported; update package.json engines and docs that name Node 20 | .github/workflows/*.yml (node-version values), package.json (engines only), docs naming the Node version | MEDIUM | no node 20 left in any matrix; engines matches; PR run conclusion success on every remaining version (run id cited) |
|
|
420
|
-
| E-91 | Pulse UNEVIDENCED_CLAIM and every row parser accept any slice id prefix ([A-Z]+-\d+, e.g. DEP-02, GF-1, PF-3), not a hardcoded S/E/EV/M list | scripts/v10-pulse.sh (row-id regexes only), tests/test-v10-pulse.sh | LOW | bash tests/test-v10-pulse.sh; a DEP row with "green" only in its Wall cell is not flagged, its notes cell still is |
|
|
416
|
+
| E-90 | Release Manager marks BOARD rows released after publish: scripts/board-mark-released.sh <tag> flips every merged row whose merge commit is an ancestor of <tag> to released@ with the tag and the ancestry evidence; pulse MERGED_NOT_RELEASED_STALE when a merged row is already in a published tag | scripts/board-mark-released.sh, scripts/v10-pulse.sh (one check), tests/test-board-mark-released.sh | MEDIUM | bash tests/test-board-mark-released.sh; a merged row in the tag flips, one not in it stays; BOARD line count unchanged | building@2026-09-28T21:14Z | Source: 16:20Z the BOARD showed 20 merged slices that had all shipped in v10.1.0 to v10.2.1, which read as a 20-slice release backlog. Founder 17:22Z: stopped; salvaged commit 1d9dfae7 re-sliced after E-89. Wave E27 (wf_bcacb1d1-e76). Wave E27 stopped 18:37Z (founder: over budget, load 50). Build on slice-E-90-r2 (5 commits) never reviewed; re-review as its own slice. Dispatched 21:14Z sonnet (fresh; the E27 branch was never reviewed). |
|
|
417
|
+
| DEP-02 | actions/checkout v4 (runs on deprecated node20) to latest major v7, SHA-pinned with a "# v7.x.y" comment in every workflow and composite action; read the v5, v6, v7 release notes and fix breaking changes (fetch-depth, persist-credentials defaults) | .github/workflows/*.yml, .github/actions/**/action.yml (uses: actions/checkout lines, plus any input the migration requires) | MEDIUM | `grep -rn "actions/checkout@" .github` shows only full-SHA pins with a v7 comment; actionlint clean; a PR run of Tests, Bun Parity and Security Audit on the slice concludes success (run id cited) | parked@2026-09-28T19:52Z | Source: DEP-01 inventory (D35). A release containing workflow changes needs the tag pushed by the Release Manager (GITHUB_TOKEN lacks the workflows permission; release.yml prints the workaround). Parked 19:52Z: no agent holds it; PR #218 open (gh pr view 218: OPEN, no checks reported). Merge after the E-98 fix train per D35/D40 (DEP never ahead of E/EV/M). |
|
|
418
|
+
| DEP-03 | actions/setup-node v4 (node20) to latest major v7, SHA-pinned with a version comment; read the v5..v7 release notes (cache and package-manager detection defaults) and fix breaking changes | .github/workflows/*.yml, .github/actions/**/action.yml (setup-node lines and required inputs) | MEDIUM | only SHA pins with a v7 comment; actionlint rc=0; PR run conclusion success (run id cited) | parked@2026-09-28T19:52Z | Source: DEP-01 inventory (D35). Parked 19:52Z: same as DEP-02 (PR #218). |
|
|
419
|
+
| DEP-04 | Runtime matrix: drop Node 20 (EOL 2026-04-30) from every workflow matrix, keep 22 (previous supported, users still run it) and 24, add the current stable line if the inventory shows one newer and supported; update package.json engines and docs that name Node 20 | .github/workflows/*.yml (node-version values), package.json (engines only), docs naming the Node version | MEDIUM | no node 20 left in any matrix; engines matches; PR run conclusion success on every remaining version (run id cited) | parked@2026-09-28T19:52Z | Source: DEP-01 inventory (D35). Parked 19:52Z: no agent holds the rework; resumes after the E-98 fix train per D40. |
|
|
420
|
+
| E-91 | Pulse UNEVIDENCED_CLAIM and every row parser accept any slice id prefix ([A-Z]+-\d+, e.g. DEP-02, GF-1, PF-3), not a hardcoded S/E/EV/M list | scripts/v10-pulse.sh (row-id regexes only), tests/test-v10-pulse.sh | LOW | bash tests/test-v10-pulse.sh; a DEP row with "green" only in its Wall cell is not flagged, its notes cell still is | merged@2026-09-28T19:53Z | Source: pulse flagged DEP-03/DEP-04 Wall cells (df7dc134), the E-71 bug class again. Serialize after E-89/E-90 and E-79..81 (same file). Wave E27 (wf_bcacb1d1-e76). After E-90 (same file). Wave E27 stopped 18:37Z (founder: over budget, load 50). Not started. Tech Lead APPROVE e311b47e; merged 039f8af2; test-v10-pulse.sh 131/0. Revealed DEP-02..04 stale building rows (parked). |
|
|
421
421
|
| E-92 | P0 fix-forward: dep-inventory --self-test reached the real gh floating-tag resolver (actions/setup-node@v4), so CI without gh auth read bump unknown (Tests red since df7dc134, run 36451439320) | scripts/dep-inventory.py (self-test fixture) | HIGH | `env -u GH_TOKEN -u GITHUB_TOKEN PATH=/usr/bin:/bin python3 scripts/dep-inventory.py --self-test` rc=0; rc=1 on the previous version | released@2026-09-28T17:16Z | TL APPROVE (sonnet) on 81cdba4d: stripped-env self-test 23/23 rc=0, origin/main rc=1, fixture mutation goes red, no second network path in self_test(); merged 4f7f1487. Guard: E-93. Released in v10.2.2 (npm gitHead 9a59750d, Release run 36455687013). |
|
|
422
422
|
| E-93 | Guard (D37 same-class-never-twice): tests/test-dep-inventory.sh runs --self-test under a stripped environment (no GH_TOKEN/GITHUB_TOKEN, PATH=/usr/bin:/bin, empty HOME) so a network-dependent self-test fails locally, not only in CI; GUARDS.md entry | tests/test-dep-inventory.sh, docs/v10/GUARDS.md | LOW | a self-test that calls an unstubbed fetcher fails the leg locally | merged@2026-09-28T18:00Z | Source: E-92 incident. Wave E25 (wf_46137a6b-367). TL APPROVE (sonnet); merged on main 18:00Z; `bash tests/test-dep-inventory.sh` 6 passed 0 failed. |
|
|
423
423
|
| EV-12E | Upstream-first hidden-test enforcement (D38 criteria 1, 3, 4, 7, 9): validate requires hidden.provenance, hidden.sha256 and requirements[] on lg-* tasks; measure-size excludes typing-examples/, examples/, docs/; a test-harness leg applies every tasks/lg-*/shortcuts/*.patch and asserts not completed, and RED at ref is not collection-only; run.sh rows gain hidden_subset | eval/loki10/harness.py (validate only), eval/loki10/measure-size.py, eval/loki10/test-harness.sh (new section) | HIGH | fixture with a wrong sha256 fails validate rc=1; a passing shortcut fixture fails the leg; an attrs-602-shaped fixture reads medium | ready@2026-09-28T18:42Z | Source: D38. Needs EV-12S merged first (measure-size). Wave E27 (wf_bcacb1d1-e76). Wave E27 stopped 18:37Z (founder: over budget, load 50). REJECT (reproduced): RED at ref must be by assertion (criterion 7) is untested. Branch slice-EV-12E kept (4 commits). |
|
|
@@ -427,30 +427,43 @@ set is declared to avoid overlap with those and with each other.
|
|
|
427
427
|
| E-95 | Guard for red main 8f2179cd (App Runner Watchdog Health fixture server never came up; rerun 36453069628 passed): free port by binding 0, readiness poll up to 10s with a clear message; 20/20 under parallel load | tests/test-app-runner-watchdog-health.sh, docs/v10/GUARDS.md | LOW | 20 consecutive passes while 4 parallel pulse suites run | merged@2026-09-28T18:42Z | Source: founder 17:22Z. Wave E27 (wf_bcacb1d1-e76). Wave E27 stopped 18:37Z (founder: over budget, load 50). TL APPROVE; merged locally; `bash tests/test-app-runner-watchdog-health.sh` 12 passed 0 failed. |
|
|
428
428
|
| E-86 | Pre-push gitleaks for eval task fixtures (founder 15:16Z): pinned v8.30.0 with hardcoded checksums, every pushed commit scanned in dir mode from the pushed commit (not the working tree), refusal names file, line and rule, never the secret | .githooks/pre-push, scripts/install-gitleaks.sh, tests/test-pre-push-gitleaks.sh, .gitleaksignore | HIGH | real-push fixtures: a sourcegraph URL plus 40-hex pin is refused; opus security review | merged@2026-09-28T18:05Z | Source: v10.2.0 blocked by gitleaks. Rounds 1-3 opus REJECT with reproduced fail-opens (non-ASCII dirs, unfetched force-push, working-tree scan, checksum bypass; intermediate commits; root commits, history leak, case collisions). Round 4 building as one squashed commit off main. Round 4 8f9baace opus APPROVE (every earlier reproduction refuses; fresh-clone Security Audit gitleaks rc=0 with the branch merged); merged on main; `bash tests/test-pre-push-gitleaks.sh` 40 passed 0 failed. Follow-ups in E-99. |
|
|
429
429
|
| E-96 | Safe worktree pruning: scripts/prune-worktrees.sh removes a .claude/worktrees entry only when it is not locked, has no process with a cwd inside it (lsof), and its branch has no commit or file change in the last 30 minutes measured with git and stat (never find -newermt), refusing when any check cannot run; the pulse WORKTREE_COUNT NEXT ACTION names the script | scripts/prune-worktrees.sh, tests/test-prune-worktrees.sh, scripts/v10-pulse.sh (NEXT ACTION text only) | MEDIUM | fixture: a worktree with a live process inside is kept; an idle one is removed; an unsupported check refuses | parked@2026-09-28T18:58Z | Source: 17:36Z incident: the Chief of Staff pruned by `find -newermt "-25 minutes"` (unsupported on BSD find, matched nothing) and force-removed 7 live builder worktrees (M-07 r4, M-11 r3, EV-14, EV-12F-a, EV-12G, E-95, E-87); every branch had its work committed, uncommitted edits since the last commit were lost. Superseded by E-101 (same prune-worktrees.sh scope). |
|
|
430
|
-
| DEP-05 | npm/bun patch and minor batch from docs/v10/DEPS.md (web-app, dashboard-ui, vscode-extension, root; lockfiles regenerated and committed; 0.x packages excluded) | the package.json and lockfiles DEPS.md names for patch/minor only | LOW | npm audit: no new high or critical; hallucinated-dependency guard rc=0; full Tier B plus the moat suite on a PR run |
|
|
431
|
-
| DEP-06 | Python patch and minor batch from docs/v10/DEPS.md (dashboard, mcp, web-app requirements, sdk/python pyproject; 0.x excluded) | those requirements*.txt and pyproject.toml | LOW | pip-audit: no new high or critical; guard rc=0; PR run of Tests conclusion success (run id cited) |
|
|
432
|
-
| DEP-07 | SHA-pin every remaining tag-pinned action already on its latest major (anchore/sbom-action, anthropics/claude-code-action, contributor-assistant/github-action, oven-sh/setup-bun) with a version comment | .github/workflows/*.yml (those uses: lines only) | LOW | every uses: is a full SHA with a vX comment; actionlint rc=0; PR run |
|
|
430
|
+
| DEP-05 | npm/bun patch and minor batch from docs/v10/DEPS.md (web-app, dashboard-ui, vscode-extension, root; lockfiles regenerated and committed; 0.x packages excluded) | the package.json and lockfiles DEPS.md names for patch/minor only | LOW | npm audit: no new high or critical; hallucinated-dependency guard rc=0; full Tier B plus the moat suite on a PR run | building@2026-09-28T21:18Z | Source: DEP-01 inventory (D35). Dispatched 21:18Z sonnet (founder 17:10 staffing directive). |
|
|
431
|
+
| DEP-06 | Python patch and minor batch from docs/v10/DEPS.md (dashboard, mcp, web-app requirements, sdk/python pyproject; 0.x excluded) | those requirements*.txt and pyproject.toml | LOW | pip-audit: no new high or critical; guard rc=0; PR run of Tests conclusion success (run id cited) | building@2026-09-28T21:18Z | Source: DEP-01 (D35). Dispatched 21:18Z sonnet (founder 17:10 staffing directive). |
|
|
432
|
+
| DEP-07 | SHA-pin every remaining tag-pinned action already on its latest major (anchore/sbom-action, anthropics/claude-code-action, contributor-assistant/github-action, oven-sh/setup-bun) with a version comment | .github/workflows/*.yml (those uses: lines only) | LOW | every uses: is a full SHA with a vX comment; actionlint rc=0; PR run | building@2026-09-28T21:18Z | Source: DEP-01 (D35). Serialize after DEP-02/DEP-03 merge (same files). Dispatched 21:18Z sonnet (founder 17:10 staffing directive). |
|
|
433
433
|
| G-01 | Usage governor (D39): scripts/usage-governor.py sums usage (output, input, cache read, cache write) from ~/.claude/projects/**/*.jsonl per model, role (from workflow labels and agent types where recorded) and hour; stores founder plan-percentage readings (docs/v10/usage-readings.tsv) and fits tokens-per-percent as a labelled estimate; projects 5-hour window and weekly usage; outputs max engineers for the next hour; checks and records whether Claude Code exposes plan usage directly (statusline input rate-limit fields, /usage) and uses it when it does | scripts/usage-governor.py, docs/v10/usage-readings.tsv, tests/test-usage-governor.sh | HIGH | fixture jsonl plus readings gives a stated projection and max-engineer number; missing readings reads "uncalibrated", never a number presented as fact | merged@2026-09-28T19:09Z | Source: founder 17:44Z. First in the queue; everything obeys it. r2 de8e1f76 opus REJECT: weekly reset 1h off across DST; fixes 2 and 4 unguarded. r3 dispatched 19:00Z. r3 fa279532 opus APPROVE (DST reset fixed; fixes 2 and 4 mutation-guarded by T14/T15); merged c2ae4347; governor 25/0, logger 16/0, run-shellcheck.sh passes, shard coverage 19/0, drift 6/0. Open non-blocking: weekly tokens counted from computed Wednesday not live resets_at-7d; no test for live-reset preference; "uncalibrated" label when idle. |
|
|
434
|
-
| G-02 | Pulse BUDGET_BURN and OPUS_SHARE violations plus an hourly METRICS.md usage section (tokens per role and model, cost per merged slice, window and weekly projections, max engineers, releases per hour, merged slices per hour and per million tokens), all from G-01 | scripts/v10-pulse.sh (two checks), tests/test-v10-pulse.sh, docs/v10/METRICS.md (section header only) | MEDIUM | fixtures: opus 31% fires OPUS_SHARE; a projection of 86% fires BUDGET_BURN; uncalibrated reads UNKNOWN |
|
|
434
|
+
| G-02 | Pulse BUDGET_BURN and OPUS_SHARE violations plus an hourly METRICS.md usage section (tokens per role and model, cost per merged slice, window and weekly projections, max engineers, releases per hour, merged slices per hour and per million tokens), all from G-01 | scripts/v10-pulse.sh (two checks), tests/test-v10-pulse.sh, docs/v10/METRICS.md (section header only) | MEDIUM | fixtures: opus 31% fires OPUS_SHARE; a projection of 86% fires BUDGET_BURN; uncalibrated reads UNKNOWN | merged@2026-09-28T19:59Z | Source: founder 17:44Z. Depends on G-01. Serialize after E-89..E-91 (same file). Dispatched 19:09Z, sonnet engineer (G-01 merged; goes before E-90/E-91, which rebase after). Built f172b9b6 (rebased onto E-91), test-v10-pulse.sh 138/0, 7 T48 subtests red on unmodified pulse first; 46 min vs 30 budget (large pulse file). Tech Lead review 19:55Z. Tech Lead APPROVE (pulse 0.61s wall, governor keys match usage-governor.py:562-591, null max is UNKNOWN); merged. |
|
|
435
435
|
| G-03 | docs/v10/SCALE.md: what the Max 20x plan sustains around the clock (from G-01 measurements and calibration), what 50 parallel engineers need (API pay-as-you-go with a rate-limit tier, or Team/Enterprise), cost per day estimates labelled as estimates, and the ramp gates (governor allows, merged slices per hour rising, merged work per token not falling) | docs/v10/SCALE.md | HIGH | every number cites a measurement or is labelled an estimate with its basis | merged@2026-09-28T19:09Z | Source: founder 17:44Z. CTO (opus) authors. Billing is the founder decision. Merged as 4708cee1 (row status was stale). |
|
|
436
436
|
| G-04 | Cloud fan-out (HIGH, CTO-owned): dispatch ready slices with no file overlap with in-flight work as Claude Code cloud sessions that open PRs from their own branches; the Release Manager merges PRs whose checks concluded success with gh pr merge; every dispatch recorded in BOARD.md with its cloud session id; ramp 25 to 50 only when the governor allows and merged slices per hour rose | scripts/cloud-dispatch.sh, docs/v10/SWARM.md (one section), tests/test-cloud-dispatch.sh | HIGH | dry-run dispatch prints the exact command and the BOARD row it would write; refuses when the governor max is reached or file sets overlap | ready@2026-09-28T17:50Z | Source: founder 17:44Z. Depends on G-01 (governor) and G-03 (plan ceiling). Verify the real cloud-session CLI syntax before building. |
|
|
437
437
|
| G-05 | The same fan-out as loki modernize remote-worker mode (POST /jobs kind unit, Helm worker.engine v10): align G-04 with M-23 | (design note in docs/v10/MODERNIZE.md, one section) | MEDIUM | the note maps G-04 dispatch fields to the M-23 job schema | ready@2026-09-28T17:50Z | Source: founder 17:44Z. Depends on G-04 and M-17. |
|
|
438
438
|
| EV-15 | Re-run the medium tier (7 tasks, raw and v10, 2 runs each, same model) with every result file written under ~/loki-ci-logs/eval/ev15-<arm>-r<n>/ (outside any worktree) and a per-task table of which runs failed and why (hidden-test failure, timeout, no PR, cost) | eval/loki10 results (outside the repo), docs/v10/METRICS.md (one section) | HIGH | 28 rows, 0 arm_unavailable; per-task failure reasons cited from the result files | merged@2026-09-28T19:40Z | Source: EV-14 evidence lost (17:36Z incident) and v10 lost on all three medium axes. Governor-gated (paid run). D40 priority 1: running (wf_4af22d00-9fb), results under ~/loki-ci-logs/eval. Done 19:19Z: raw 10/14 $0.5085 p50 56s; v10 9/14, cost at least $0.788 (E-98 correction) p50 128s. Files durable under ~/loki-ci-logs/eval/ev15-*. |
|
|
439
439
|
| E-98 | Diagnose why v10 loses to raw on medium (EV-15 per-task failures): for each task v10 failed and raw completed, read the v10 run log and name the stage and cause (plan, Wall, implement, verify, fix rounds, cap), then cut fix slices | docs/v10/ENGINE.md (findings section) | HIGH | each finding cites a result file path and a log line | merged@2026-09-28T19:40Z | Source: EV-14. Depends on EV-15. CTO (opus) analysis. D40 priority 1: CTO analysis runs after EV-15 in the same workflow. docs/v10/MEDIUM-ANALYSIS.md merged d496db89. Top cause: verify hard-codes python, so 27/27 pytest checks were not_run and no fix round ever fired. Cards E-98a..f below. |
|
|
440
|
-
| E-98a | verify uses the project interpreter (.venv, venv, $VIRTUAL_ENV, python3, python); a check on a system interpreter adds a not_proven line | loki-ts/src/engine10/stages/verify.ts, loki-ts/tests/engine10/verify*.test.ts | HIGH | fixture red then green (.venv shim, no python on PATH); core +12 max |
|
|
441
|
-
| E-
|
|
442
|
-
| E-
|
|
443
|
-
| E-
|
|
444
|
-
| E-
|
|
445
|
-
| E-
|
|
440
|
+
| E-98a | verify uses the project interpreter (.venv, venv, $VIRTUAL_ENV, python3, python); a check on a system interpreter adds a not_proven line | loki-ts/src/engine10/stages/verify.ts, loki-ts/tests/engine10/verify*.test.ts | HIGH | fixture red then green (.venv shim, no python on PATH); core +12 max | merged@2026-09-28T20:10Z | Source: MEDIUM-ANALYSIS.md. Dispatched 19:40Z sonnet; opus review. r1 31af475c opus REJECT: seal.ts never reads verify not_proven (git grep "verify?.not_proven" rc=1), so a system-interpreter pass still seals VERIFIED; $VIRTUAL_ENV trusted outside the repo. r2 dispatched 19:53Z with seal.ts added to the file set, plus ruff resolution and a behavioral red. r2 cabf16ef opus APPROVE (seal PARTIAL on verify not_proven, receipts byte-stable without the flag, realpath-scoped VIRTUAL_ENV); merged 5cdd611d; verify+seal 36/0. Combined with E-98b/c/d the core is 5003 (budget.test.ts FAIL, Received 5003): fix-forward E-111. |
|
|
441
|
+
| E-111 | P0 (local main red): engine10 core is 5003 lines after E-98a/b/c/d merged (budget.test.ts Received 5003, cap 5000). Cut at least 25 lines of dead or duplicated code from loki-ts/src/engine10 (outside modernize/) with no behavior change, leaving room for E-98e (+10) | loki-ts/src/engine10 (non-modernize), no test changes except budget | MEDIUM | budget.test.ts passes at 4978 or less; cd loki-ts && bun test tests/engine10 has no new failures vs main | merged@2026-09-28T20:38Z | Source: merge of E-98a at 20:10Z. Dispatched sonnet. opus REJECT r1 (deleted prStage/intakeStage, test-engine10-dist 16/2); APPROVE r2 f286f6ec; merged f059c87a, dist rebuilt e1363c67; core 4976, engine10 668/0, dist 18/0. |
|
|
442
|
+
| E-112 | v10-guard: refuse a path-wide `git checkout <ref> -- .` (or `git restore --source <ref> .`) when cwd is the main checkout, so a read-only reviewer cannot overwrite the shared tree; allowed inside .claude/worktrees/* | scripts/v10-guard.sh, tests/test-v10-guard.sh | LOW | fixture: the command in the main checkout is blocked, the same in a worktree is allowed, a single-file checkout is allowed (red first) | merged@2026-09-28T20:27Z | Source: E-98e Tech Lead review 20:19Z ran `git checkout slice-E-98e -- .` then `git checkout main -- .` in the main checkout (tree restored clean, but it could have clobbered concurrent merges). Built f4515ec9 (6 new block cases red on the old guard); Tech Lead APPROVE (7 allow probes incl. single-file checkout, branch switch, heredoc text all exit 0); merged; test-v10-guard.sh 170/0. |
|
|
443
|
+
| E-113 | P0 (main red at a4623675): tests/test-release-notes.sh T9l/T9n/--include fixtures build padding with yes piped to head under pipefail; on the Linux runner only the 34-byte header was written. Generate padding without a pipe | tests/test-release-notes.sh | LOW | passes locally and under the CI condition (SIGPIPE ignored); old version shown red there | merged@2026-09-28T20:42Z | Source: Tests run on a4623675 shard 4/8: "[FAIL] T9n fixture is not in the intended size band ... 34 bytes". Passes 41/0 on macOS. Dispatched 20:39Z. Built 74ffd928 (pipe-free printf loops; macOS could not reproduce the Linux drop even under trap PIPE, so CI is the proof). Tech Lead APPROVE (bytes identical: T9l 132034, T9n 98034, T9o 224089). Merged; 41/0 locally. |
|
|
444
|
+
| E-114 | CI Security Audit gitleaks must not trust a pushed .gitleaks.toml or new .gitleaksignore entries: scan with the default rules plus the config from the previous release tag (or refuse the job when the pushed range changes .gitleaks.toml), and report any .gitleaksignore line added in the range for review | .github/workflows/security-audit.yml, tests/test-security-audit-config.sh | HIGH | a workflow-level test (act or a script that runs the same step) shows a range that adds a zero-rule .gitleaks.toml plus a secret fails the job (red first) | building@2026-09-28T21:13Z | Source: E-110 opus review 21:09Z: the gitleaks step (security-audit.yml:276) loads the checkout own .gitleaks.toml, so the same zero-rule config trick that bypassed the pre-push scan works against CI (no --config at security-audit.yml:276). CTO-level change to a release gate. Dispatched 21:11Z sonnet; opus review before merge. |
|
|
445
|
+
| E-115 | Verify: a passing lint on a system ruff adds its own not_proven line ("lint ran on the system ruff") instead of reusing "tests ran on the system interpreter" | loki-ts/src/engine10/stages/verify.ts, loki-ts/tests/engine10/verify.test.ts | LOW | unit test: system ruff pass gives the lint line, not the tests line (red first); core stays under 5000 | ready@2026-09-28T21:19Z | Source: E-98a r2 opus review (advisory). |
|
|
446
|
+
| E-116 | seal.test.ts has no SPEC_CONFLICT case: add real-seal tests (not a copy of seal.ts:110) proving SPEC_CONFLICT survives verify pass, verify fail plus fix, and never upgrades to VERIFIED | loki-ts/tests/engine10/seal.test.ts | LOW | new cases red on a mutated seal.ts that drops the spec_conflict branch | ready@2026-09-28T21:19Z | Source: E-98b opus review note 4. |
|
|
447
|
+
| E-117 | Pulse DEPENDS_ON parsing: expand range shorthand ("Depends on E-98a..e", "M-20..M-23") into each id so a dependency on b..e is not silently dropped | scripts/v10-pulse.sh (dependency parse only), tests/test-v10-pulse.sh | LOW | fixture: "Depends on E-98a..c" with E-98b unmerged is blocked (red first) | ready@2026-09-28T21:19Z | Source: E-91 Tech Lead review. |
|
|
448
|
+
| E-118 | Usage governor leftovers from G-01 review: a non-numeric used_percentage or a non-dict rate_limits in a live reading must be ignored, not crash; the "uncalibrated" label must not show when calibration exists but no engineers were active | scripts/usage-governor.py, tests/test-usage-governor.sh | LOW | fixtures for each case (red first); 30/30 existing still pass | ready@2026-09-28T21:19Z | Source: G-01 r2/r3 opus review non-blocking notes. |
|
|
449
|
+
| E-119 | pre-push: the pushed-range .gitleaks.toml check (pre-push:319) swallows a git rev-list error with an or-true, which reads as "config unchanged" and restores the tip config; fail closed on a non-zero rc | .githooks/pre-push, tests/test-pre-push-gitleaks.sh | LOW | a stubbed git rev-list failure refuses the push (red first) | ready@2026-09-28T21:20Z | Source: E-110 r2 opus review nit 4. |
|
|
450
|
+
| E-98b | a spec_conflict implement exit still runs verify and fix; receipt keeps SPEC_CONFLICT | loki-ts/src/engine10/machine.ts, loki-ts/tests/engine10/machine*.test.ts | HIGH | fake-stage test red on main; core +3 max | merged@2026-09-28T19:53Z | Source: MEDIUM-ANALYSIS.md. Dispatched 19:40Z sonnet; opus review. opus APPROVE 214b8dd2 (seal stays SPEC_CONFLICT through verify and fix; empty diff fails verify, no false pass); merged 97b80ca4; machine+budget 26/0. |
|
|
451
|
+
| E-98c | existing test files append-only in the implement brief; impactedTests falls back to named files when relevant_files is empty | loki-ts/src/engine10/stages/implement.ts, its test | MEDIUM | unit test red then green; core +2 max | merged@2026-09-28T19:53Z | Source: MEDIUM-ANALYSIS.md. Dispatched 19:40Z sonnet. Tech Lead APPROVE b24f4da2; merged f4606246; implement+machine+budget 37/0. |
|
|
452
|
+
| E-98d | repo map extracts Python top-level def and class names | loki-ts/src/engine10/repomap.ts, loki-ts/tests/engine10/repomap*.test.ts | MEDIUM | unit test red then green; core +4 max | merged@2026-09-28T19:53Z | Source: MEDIUM-ANALYSIS.md. Dispatched 19:40Z sonnet. Offline 7-repo check runs after merge. Tech Lead APPROVE ba31cca4 plus async def fix a1e8dc4b; merged 15859bef; 41/0 across repomap, implement, machine, budget. Offline 4/7 repos rank the upstream file in the top 8 (was 0/7; card bar 5/7, keyword-tie ceiling). |
|
|
453
|
+
| E-98e | a session killed at its stage limit writes a partial-stream cost record, never cost_usd null | loki-ts/src/engine10/session.ts, loki-ts/src/engine10/cost.ts, a test | MEDIUM | fake killed stream test red then green; core +10 max | merged@2026-09-28T20:20Z | Source: MEDIUM-ANALYSIS.md. Dispatched 19:40Z sonnet. r1 blocked honestly (no per-message usage persisted before result; a fixture-only test would not be wired to a real killed session). Re-sized: sdk_stream_parser.ts running usage file plus session.ts pricing via calculateCostFromRecords; r2 dispatched 19:50Z. r2 86d7eea4: logic moved to runner/budget.ts, core -12; full bun test failure sets byte-identical to main (55 fail, 13 errors both, zero new). Tech Lead APPROVE (max-per-id dedupe test, result file wins, partial-usage- matches no result-cost- consumer, opus/sonnet priced by family). Merged 8b41ad40; 153/0 across cost, session, parser, budget, seal, verify; budget.test.ts passes again. Process note: the reviewer ran git checkout in the main checkout (read-only breach, tree restored clean). |
|
|
454
|
+
| E-98f | A/B eval of Wall and cascade on medium (default, WALL=0, CASCADE=0, n=3 each), then a sizing default only if a knob wins on completions without losing on cost | eval run; loki-ts/src/engine10/sizing.ts | HIGH | chosen default at or above raw 71.4% and below $0.5085 per completed; after table published in MEDIUM-ANALYSIS.md | building@2026-09-28T20:20Z | Source: MEDIUM-ANALYSIS.md. Depends on E-98a..e merged. One combined re-run replaces the per-card re-runs (D40 cost). Dispatched 20:20Z (sonnet eval runner): E-98a..e merged locally; default, WALL=0, CASCADE=0 arms at n=3 on the 7 medium tasks, raw baseline from EV-15. |
|
|
446
455
|
| E-99 | E-86 follow-ups (opus non-blocking): scan every pushed commit with the pushed tip's .gitleaksignore (what CI does) so a self-suppressing line added and removed in one push is refused; unset GITLEAKS_CONFIG and GITLEAKS_CONFIG_TOML in the hook; refuse a .gitleaks.toml change in any push (not only eval-touching ones) without LOKI_ALLOW_GITLEAKS_CONFIG_CHANGE=1; pin the installed binary sha256 in the hook | .githooks/pre-push, tests/test-pre-push-gitleaks.sh | MEDIUM | real-push fixtures for each case, failing first | merged@2026-09-28T18:58Z | Source: E-86 round-4 review C1-C3 and the forged-sidecar boundary. Opus APPROVE; merged 5ee5a630 (conflict with E-100 case 20 resolved: guard kept, E-99 message taken; gitleaks test 43/0 with binary, 19/0/24 skipped without; pre-push hook 13/0). |
|
|
447
456
|
| E-100 | P0: main Tests red on cc4992ed (run 36465466283): tests/test-pre-push-gitleaks.sh case 20 asserted a pass without the pinned gitleaks binary, which the CI runner does not have | tests/test-pre-push-gitleaks.sh | HIGH | `HOME=<empty> bash tests/test-pre-push-gitleaks.sh` 18 passed 0 failed 22 skipped; with the binary 40 passed | merged@2026-09-28T18:42Z | Built 91a47f52; the class is guarded by E-94 (changed tests re-run with an empty HOME). |
|
|
448
457
|
| E-101 | Eval results durable (D40 priority 4): run.sh and harness.py write results.jsonl to ~/loki-ci-logs/eval/<run> and a redacted copy to eval/loki10/archive/; scripts/prune-worktrees.sh never removes a worktree with a live process, a commit in the last 30 minutes, or un-archived eval results | eval/loki10/run.sh, eval/loki10/harness.py, scripts/prune-worktrees.sh, tests/test-eval-archive.sh, tests/test-prune-worktrees.sh | HIGH | fixtures: live-process and un-archived worktrees kept; a planted token never reaches the in-repo archive | merged@2026-09-28T19:40Z | Source: EV-14 results lost 17:36Z. Supersedes E-96. Reviewer APPROVE bbe83c7a (mutation-checked all 3 prune checks and redact_row); merged 21df7d4a; prune-worktrees 26/0, eval-archive 5/0. Used at 19:40Z to prune 6 finished worktrees. |
|
|
449
458
|
| E-102 | release.sh --bump-only must never leave a tree without its tracked dist: if the loki-ts build fails (for example no node_modules in a fresh worktree), exit non-zero and restore loki-ts/dist from HEAD; when the only source change is VERSION, patch the version literal in dist instead of rebuilding (no debugId or source-map path churn) | scripts/release.sh, tests/test-release-bump-dist.sh | MEDIUM | fixture: a worktree with no node_modules gives a non-zero exit with dist unchanged; a VERSION-only bump changes exactly the version literal in dist/loki.js | merged@2026-09-28T19:29Z | Source: 19:20 cut of v10.3.1: in a fresh worktree the build failed (@anthropic-ai/sdk unresolved) and deleted 4 tracked dist files; a node_modules symlink then rewrote source-map paths. Shipped by hand-patching the version literal (d811e5c3). Tech Lead APPROVE c83a07e2; merged c35d3fa7; bump-dist 7/0 (red first 3/4), bump-only 8/0, release-sh 29/0, shard coverage 19/0, drift 6/0. |
|
|
450
459
|
| E-103 | release.sh --bump-only: when the build exits 0 but dist/loki.js does not embed the new version (release.sh:475-479), restore loki-ts/dist from HEAD and exit non-zero, as the build-failure path already does | scripts/release.sh, tests/test-release-bump-dist.sh | LOW | fixture: a stub build that exits 0 without writing the version gives a non-zero exit with dist byte-identical to HEAD | merged@2026-09-28T19:31Z | Source: E-102 Tech Lead review (non-blocking note). Tech Lead APPROVE 1150af81 (shared release_bump_only_fail, no duplicated restore); bump-dist 10/0 (red 9/10 first), bump-only 8/0, release-sh 29/0. |
|
|
451
|
-
| E-104 | tests/test-verify.sh scenario 3 plants AKIAIOSFODNN7EXAMPLE, which gitleaks (8.30.1 on a dev Mac) allowlists as the AWS doc example, so the test goes VERIFIED/0 wherever gitleaks is installed and passes only where loki verify falls back to its regex scanner (CI). Plant a non-example secret shape and assert BLOCKED on both scanner paths | tests/test-verify.sh | LOW | run with gitleaks on PATH and with PATH stripped of it: BLOCKED/2 both ways |
|
|
452
|
-
| E-105 | tests/check-heredoc-dollar-digit.sh flags autonomy/run.sh:5548 (`local _var="$1" _had="$2" _val="$3"`), a function body, not a python3 -c body: false positive that keeps the fast tier red on main | tests/check-heredoc-dollar-digit.sh | LOW | the run.sh:5548 shape passes; a real $1 inside python3 -c "..." still fails (red first) |
|
|
453
|
-
| E-106 | P0: claude-agent-sdk version drift. loki-ts/package.json is 0.3.283 (9db2a4ed) but root package.json and package-lock.json pin 0.3.267 and Dockerfile:160 installs 0.3.208, so the published package resolves an SDK older than the one the engine was evaluated on. Align all pins; add tests/test-sdk-version-sync.sh so CI (not only local-ci.sh) catches drift | package.json, package-lock.json, Dockerfile, tests/test-sdk-version-sync.sh, tests/run-all-tests.sh, tests/shard-durations.tsv | MEDIUM | new test red on main (3 mismatches) then green; npm pack --dry-run succeeds |
|
|
460
|
+
| E-104 | tests/test-verify.sh scenario 3 plants AKIAIOSFODNN7EXAMPLE, which gitleaks (8.30.1 on a dev Mac) allowlists as the AWS doc example, so the test goes VERIFIED/0 wherever gitleaks is installed and passes only where loki verify falls back to its regex scanner (CI). Plant a non-example secret shape and assert BLOCKED on both scanner paths | tests/test-verify.sh | LOW | run with gitleaks on PATH and with PATH stripped of it: BLOCKED/2 both ways | merged@2026-09-28T20:07Z | Source: 19:40 train fast tier: FAIL planted secret -> expected BLOCKED/2, got VERIFIED/0, reproduced on origin/main (CI green there). Env-conditional assertion class. Dispatched 19:56Z sonnet. Tech Lead APPROVE 4df867d2 (runtime-built key, gitleaks dir clean); merged f6b4865e; test-verify.sh 25/0 with gitleaks on PATH (was 24/1). |
|
|
461
|
+
| E-105 | tests/check-heredoc-dollar-digit.sh flags autonomy/run.sh:5548 (`local _var="$1" _had="$2" _val="$3"`), a function body, not a python3 -c body: false positive that keeps the fast tier red on main | tests/check-heredoc-dollar-digit.sh | LOW | the run.sh:5548 shape passes; a real $1 inside python3 -c "..." still fails (red first) | merged@2026-09-28T20:07Z | Source: 19:40 train fast tier; line unchanged for 27h, identical on origin/main. Dispatched 19:56Z sonnet. Tech Lead APPROVE 685a9dd6 (closing quote may be mid-line; same 2 files scanned as main); merged 81c25e5d; checker OK on the real tree, new test PASS=2 FAIL=0. |
|
|
462
|
+
| E-106 | P0: claude-agent-sdk version drift. loki-ts/package.json is 0.3.283 (9db2a4ed) but root package.json and package-lock.json pin 0.3.267 and Dockerfile:160 installs 0.3.208, so the published package resolves an SDK older than the one the engine was evaluated on. Align all pins; add tests/test-sdk-version-sync.sh so CI (not only local-ci.sh) catches drift | package.json, package-lock.json, Dockerfile, tests/test-sdk-version-sync.sh, tests/run-all-tests.sh, tests/shard-durations.tsv | MEDIUM | new test red on main (3 mismatches) then green; npm pack --dry-run succeeds | merged@2026-09-28T19:53Z | Source: 19:40 train fast tier FAIL "Agent SDK is a resolvable root dependency"; reproduced on origin/main (root 0.3.267 vs loki-ts 0.3.283). Dispatched 19:45Z sonnet. Tech Lead APPROVE 58c8150c (lock touched only the SDK; integrity matches npm view); r2 1a795932 scans git ls-files only (untracked .claude/worktrees Dockerfiles gave 14 false mismatches). Merged a58c47b6; test-sdk-version-sync.sh PASS 4/4 at 0.3.283. |
|
|
463
|
+
| E-107 | Pulse SESSION_STALLED derives the Claude transcript directory from the shell cwd, so a session whose shell sits in a subdirectory (loki-ts/) reads a nonexistent project dir and reports a 108182-minute stall; resolve it from the repo root (git rev-parse --show-toplevel) | scripts/v10-pulse.sh (transcript-dir resolution only), tests/test-v10-pulse.sh | LOW | fixture: pulse run from a subdirectory reports the same minutes-since-last-turn as from the root | merged@2026-09-28T20:18Z | Source: 19:48Z pulse: SESSION_STALLED 108182.9 min right after a Bash step left cwd at loki-ts/. Serialize after E-91 and G-02 (same file). Tech Lead: logic APPROVE, REJECT for a T48 name collision with G-02; r2 823f91cb renamed to T49/T49a/T49b, merge-tree clean; merged; test-v10-pulse.sh 140/0. |
|
|
464
|
+
| E-108 | release.sh --bump-only: after a rebuild it restores loki.js.map (debugId-only churn, E-72) but leaves the new debugId trailer in dist/loki.js, so the shipped loki.js and loki.js.map disagree on debugId; keep the old trailer too, so a VERSION-only bump changes exactly the version literal | scripts/release.sh, tests/test-release-bump-dist.sh | LOW | fixture: after a VERSION-only bump, git diff of dist/loki.js is exactly the version literal and its debugId equals the map debugId (red first) | merged@2026-09-28T20:07Z | Source: v10.4.0 cut 19:50Z: loki.js debugId AE3EFDC8... vs map 93B13628...; fixed by hand in 7895a698. Dispatched 19:56Z sonnet. Tech Lead APPROVE 71f2f944 (restores only the debugId trailer, never the version literal); merged 6b65aaff; bump-dist 15/0, bump-only 8/0. |
|
|
465
|
+
| E-109 | usage-governor.py takes 115s (real 115.27s, full parse of every transcript) so the pulse background refresh times out and OPUS_SHARE/BUDGET_BURN read UNKNOWN every turn; scan only transcripts modified within the weekly window and cache parsed per-file results by (path, size, mtime) | scripts/usage-governor.py, tests/test-usage-governor.sh | MEDIUM | a second run over unchanged transcripts finishes in under 10s on this host; results identical to a full parse on a fixture | merged@2026-09-28T20:38Z | Source: 20:00Z pulse showed "usage governor check failed or timed out" after G-02 merged. Tech Lead REJECT r1 (warm 53s over the 10s Wall) and r2 (mtime cutoff dropped 5h-window rows after a weekly reset: 0 vs 500, reproduced); APPROVE r3 6333b8f9 (reviewer repro now 500; mkstemp cache writes). Merged; test-usage-governor 30/30; cold 12.9s, warm 4.86s (was 115s). |
|
|
466
|
+
| E-110 | P0 guard for the v10.4.0 block: (a) tests/test-eval-archive.sh builds its planted secrets at runtime so the file itself has no secret shape; (b) .githooks/pre-push runs the pinned gitleaks over every pushed commit and path (not only eval fixture changes), matching the CI Security Audit, with the tip .gitleaksignore | tests/test-eval-archive.sh, .githooks/pre-push, tests/test-pre-push-gitleaks.sh | HIGH | a push adding a test file with an AKIA-shaped literal is refused locally (red first); test-eval-archive.sh passes and gitleaks dir on it finds nothing | merged@2026-09-28T21:20Z | Source: v10.4.0 Release 36475005937 required-ci failed: Security Audit gitleaks "leaks found: 3", all in bbe83c7a:tests/test-eval-archive.sh (synthetic E-101 fixtures; allowlisted by exact fingerprint in 6358e0a6). The pre-push scan only ran for eval fixture changes. r1 ad35af15 opus REJECT: tip .gitleaks.toml disables the scan under PRE_PUSH_SKIP=1 (reviewer repro: zero-rule config plus AKIA secret landed as 743d143a on a scratch remote). r2 dispatched 21:10Z. r2 01d09027 opus APPROVE (reviewer attack refused with and without the config override; stub timeout exit 124 refuses); merged fd74149f; pre-push-gitleaks 53/0, pre-push-hook 13/0, release-notes 41/0, eval-archive 5/0. |
|
|
454
467
|
| E-58 | Issue-ref runs: supervisor creates runDir before the fetch child writes issue.json; makes E-47 green | loki-ts/src/engine10/supervisor.ts (one line before fetchIssueToFile), E-47 test files from 544348a7 | MEDIUM | cd loki-ts && bun test tests/engine10/issue_ref_e2e.test.ts (3 pass) | released@2026-09-28T02:38Z | Source: E-47 finding (TL reproduced). Merged 646a6cd7 (train E13): engine10 388 pass 0 fail, tsc exit 0, test-engine10-dist 18/0, test-engine10-docs 26 passed, test-harness 82/0. APPROVE (6384fff9); issue_ref_e2e 3 pass. Released v9.81.0 (npm view loki-mode time: 2026-09-28T02:38:54Z). |
|
|
455
468
|
| E-59 | Receipt model and summary tokens match the provider: cost.ts takes model from the result-cost file; events.ts fold sums cache read and creation tokens; makes E-50 green | loki-ts/src/engine10/cost.ts, loki-ts/src/engine10/events.ts, E-50 test files from 716618d4 | HIGH | cd loki-ts && bun test tests/engine10/model_report.test.ts tests/engine10/output.test.ts | released@2026-09-28T02:38Z | Source: E-50 finding. Reconcile with E-44 (output.ts already folds cache tokens at render). Opus reviewer (cost numbers feed the gate). Opus CONCERN: writeResultCost writes no model, so real records still use the caller model; summary tokens at supervisor.ts still exclude cache. Rework dispatched. Merged 3ab2a8fa (train E14, rebased on main): engine10 404 pass 0 fail (402 pass 0 fail with claude removed from PATH), tsc exit 0, test-harness 86/0, test-local-ci-gitleaks 6/0, test-engine10-dist 18/0. Released v9.81.0 (npm view loki-mode time: 2026-09-28T02:38:54Z). |
|
|
456
469
|
| EV-8 | v10 cost check on 5 tasks before the full arm (CEO 23:31Z): v10 arm, same model, after E-42 and E-45 merge | eval/loki10 results (gitignored) plus docs/v10/METRICS.md block | HIGH | eval/loki10/run.sh --arm v10 --tasks <5 ids> reports completed, time to PR and provider cost per task | released@2026-09-28T02:38Z | Target cost per completed task at or below $0.2363 (raw claude -p full arm). Depends on E-42, E-45, E-38 (--tasks). Incident 01:38Z: first run 0/5 on both variants measured the wrong code. The harness default arm binary is the global loki (loki --version: v9.78.0), and the main checkout node_modules still had agent SDK 0.3.267 (package.json pins 0.3.283), whose bundled Claude Code 2.1.267 rejects claude-opus-5-5, so every session exited "error" in about 1s with 0 tokens. Fixed in 7c3dea3d: bun install (node_modules 0.3.283), repro with the harness arm_env and arm_auth now completes on claude-opus-5-5 ($0.11, 13s); dist rebuilt. Rerun started with LOKI_EVAL_LOKI_BIN=<repo>/bin/loki. Guards E-61, E-62. Rerun measured (not a code slice): A 4/5 $0.5954, B 5/5 $0.3976, C (all sonnet, no plan, no Wall) 4/5 $0.294, raw 5/5 $0.2161 (~/loki-ci-logs/ev8r-{A,B,C}/results.jsonl). Gate not met on cost; D31 and E-64, E-65 follow. Released v9.81.0 (npm view loki-mode time: 2026-09-28T02:38:54Z). |
|
package/docs/v10/METRICS.md
CHANGED
|
@@ -124,6 +124,16 @@ out of pending.txt until S-19's stricter pass bar is also in the tree, or
|
|
|
124
124
|
the merge itself becomes a ratchet regression. S-19 promoted to the
|
|
125
125
|
critical path and reviewed immediately.
|
|
126
126
|
|
|
127
|
+
## Usage (hourly, from scripts/usage-governor.py)
|
|
128
|
+
|
|
129
|
+
### 2026-09-28T21:15Z
|
|
130
|
+
- 5h window: uncalibrated, 5,183,443 output tokens since 2026-09-28T16:15Z (uncalibrated)
|
|
131
|
+
- Weekly: uncalibrated, 47,364,676 output tokens, 43.7h to reset (uncalibrated)
|
|
132
|
+
- Last hour: 477,429 output tokens; 17 active engineers; 24,479 per engineer; Chief of Staff 61,285
|
|
133
|
+
- Max engineers next hour: uncalibrated (no plan reading on file)
|
|
134
|
+
- Output tokens by model (all scanned transcripts): claude-sonnet-5 30,642,455 (42.1%), claude-opus-5-5 16,713,247 (23.0%), claude-opus-4-8 14,720,953 (20.2%), claude-opus-4-7 4,678,300 (6.4%), claude-opus-5 4,489,139 (6.2%), claude-fable-5 1,254,167 (1.7%), claude-opus-4-6 203,492 (0.3%), claude-haiku-4-5-20251001 6,565 (0.0%)
|
|
135
|
+
- Output tokens by role (all scanned transcripts): workflow-agent 43,102,887, chief-of-staff 29,573,766, subagent 31,665
|
|
136
|
+
|
|
127
137
|
## CI: Tests workflow shell-tests sharding (S-81, supersedes S-70)
|
|
128
138
|
|
|
129
139
|
S-70 resharded shell-tests 4 -> 8 with a plain `idx % n` split and measured
|
package/docs/v10/PROGRESS.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# Progress
|
|
2
2
|
|
|
3
|
+
## 2026-09-28T21:18Z: founder 17:10 directives actioned
|
|
4
|
+
- Usage in METRICS.md: scripts/metrics-usage-append.py (343c087b) renders scripts/usage-governor.py --json (4.6s) under "## Usage (hourly ...)"; first snapshot 21:15Z (5h window 5,183,443 output tokens, weekly 47,364,676, last hour 477,429 across 17 active engineers, 24,479 per engineer, Chief of Staff 61,285). Session cron 494e26d8 appends hourly at :07.
|
|
5
|
+
- Staffing to 8: the governor cannot set a ceiling yet (max engineers "uncalibrated": no 5h or weekly plan reading on file), so the founder default of 8 applies. Building: E-98f, E-110 (r2 in opus re-review), E-114, E-90, plus DEP-05, DEP-06, DEP-07, M-13 r2 dispatched 21:18Z. Held with reasons: G-04 cloud fan-out (needs a calibrated governor), EV-9 (after E-98f), E-87 (release gate, rejected once), M-14+ (depend on M-13). E-85 parked (conflicts with fingerprint-only allowlisting).
|
|
6
|
+
- E-98f: running since 20:20Z, most arms at run 3 (result files under ~/loki-ci-logs/eval/e98f-*); flip bar set to raw's best 12/14 (85.7%) and at or below $0.5085 per completed; results go to METRICS.md and MEDIUM-ANALYSIS.md.
|
|
7
|
+
|
|
8
|
+
## 2026-09-28T21:01Z: v10.4.1 (30afbd07) and v10.5.0 (6498effe) published; red main a4623675 fixed forward by 024b947c in 11 min
|
|
9
|
+
- v10.4.1: cut 20:14:04Z (30afbd07), publish-npm 20:19:57Z, npm latest 10.4.1 gitHead 30afbd07; body was the placeholder (E-88 not yet on origin), backfilled from CHANGELOG (release-notes.sh rc=0, 10 lines).
|
|
10
|
+
- Red main: train a4623675 (pushed 20:30:47Z) failed Tests shard 4/8, tests/test-release-notes.sh T9l/T9n fixtures 34 bytes on Linux (yes piped to head under pipefail; passes 41/0 on macOS). P0 E-113 dispatched 20:39Z, Tech Lead APPROVE (fixture bytes identical: 132034/98034/224089), pushed 20:42:15Z as 024b947c; Tests and Bun Parity success 20:48:31Z.
|
|
11
|
+
- v10.5.0 (minor): cut 20:49:19Z (6498effe), Release 36481891650 success, publish-npm 20:55:23Z (cut to publish 6m04s). Contents: E-98a..e medium fixes (verify on the project interpreter, seal never VERIFIED on a system interpreter, spec_conflict verified, Python repo map, killed-session cost), E-106 SDK pin drift, E-88 release-notes gate, E-108 debugId, internal guards. First release with the release-notes gate on origin; body check pending in the watcher.
|
|
12
|
+
- Governor: E-109 merged (cold 12.9s, warm 4.9s from 115s); pulse now reads opus share 3.1% of output last hour. Budget burn stays UNKNOWN until a founder plan reading is recorded.
|
|
13
|
+
- Next: E-98f (A/B medium eval, n=3 x 3 arms) decides the v10 small+medium flip; E-110 (pre-push scans every path) building.
|
|
14
|
+
|
|
15
|
+
## 2026-09-28T20:17Z: v10.4.0 blocked by gitleaks, re-released as v10.4.1; E-98 fixes landing; drift audit (turn 576)
|
|
16
|
+
- 19:40 slot, late: v10.4.0 cut 19:50:24Z (7895a698: G-01, M-08, E-101, E-102, E-103). Release 36475005937 FAILED at required-ci: Security Audit gitleaks "leaks found: 3", all in bbe83c7a:tests/test-eval-archive.sh, synthetic E-101 redaction fixtures (AKIAABCD..., sk-ant-planted..., a token string). Not published; no tag.
|
|
17
|
+
- P0 response (20:02Z to 20:14Z): exact fingerprints allowlisted with a reason (6358e0a6, local gitleaks on d811e5c3..HEAD: no leaks found); Tests and Bun Parity green on it; v10.4.1 cut 20:14:04Z (30afbd07) carrying the 10.4.0 notes. Watcher on Release, npm and body. Guard E-110 (HIGH): pre-push scans every pushed commit and path, fixtures built at runtime. Root cause: pre-push ran gitleaks only for eval fixture pushes while CI scans everything.
|
|
18
|
+
- Release tooling found at the cuts: release.sh left a new debugId in dist/loki.js while restoring the map (fixed by hand twice; guard E-108 merged locally 6b65aaff, 15/0).
|
|
19
|
+
- E-98 medium fixes merged locally: E-98b (97b80ca4, spec_conflict verifies, opus APPROVE), E-98c (f4606246), E-98d (15859bef) (Python repo map incl. async def; offline 4/7 repos rank the upstream file top 8, was 0/7), E-98a (5cdd611d, verify interpreter plus seal: a system-interpreter pass can never seal VERIFIED; opus APPROVE r2; I re-ran the seal mutation: old seal.ts fails 2 of 14 seal tests). Combined core is 5003 lines (budget.test.ts FAIL): P0 E-111 trims it before any engine train ships. E-98e (killed-session cost) in rework: +42 core lines against +10, and 55 full-suite failures not yet baselined against main.
|
|
20
|
+
- Also merged locally: E-106 P0 (claude-agent-sdk pins aligned to 0.3.283; root had 0.3.267 and Dockerfile 0.3.208 for 20h), E-88a (release body gate, opus APPROVE), E-91 (pulse ids), G-02 (OPUS_SHARE, BUDGET_BURN), E-104, E-105.
|
|
21
|
+
- Drift audit: G-02 checks read UNKNOWN because the governor takes 115s (E-109 building). SESSION_STALLED misreads from a subdirectory or worktree (E-107, rework for a test-name collision). DEP-02..04 were stale "building" rows with no agent (parked). Load 2.7, 12 worktrees; headcount held per D40 while E-98f waits on E-111.
|
|
22
|
+
|
|
3
23
|
## 2026-09-28T19:42Z: 19:20 slot shipped (v10.3.1); medium failure explained; 7 builders on the fixes
|
|
4
24
|
- 19:20 slot: v10.3.1 cut 19:22:09Z (d811e5c3: E-99, M-30); Release 36471746478 success, publish-npm 19:30:56Z (cut to publish 8m47s), npm latest 10.3.1 gitHead d811e5c3. GitHub body came out as the placeholder "Release v10.3.1" (2 lines); backfilled from CHANGELOG (9 lines). E-88a (the enforcement) is being rebased onto E-99 now.
|
|
5
25
|
- Release blocker found at the cut: release.sh --bump-only in a fresh worktree deleted 4 tracked dist files when the build failed. Guard E-102 merged (c35d3fa7, test red 3/4 first, then 7/0) and E-103 for the build-ok-but-no-version branch (cd3d3d26, 10/0).
|