loki-mode 11.17.69 → 11.17.71

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 (71) hide show
  1. package/SKILL.md +2 -2
  2. package/VERSION +1 -1
  3. package/dashboard/__init__.py +1 -1
  4. package/docs/CLI-REFERENCE.md +1 -1
  5. package/docs/INSTALLATION.md +1 -1
  6. package/docs/environment-variables.md +1 -0
  7. package/docs/v10/DECISIONS.md +9 -0
  8. package/docs/v10/FAILURE-CLASSES.md +1 -0
  9. package/docs/v10/FOUNDER-QUEUE.md +1 -1
  10. package/docs/v10/PROGRESS.md +6 -0
  11. package/loki-ts/dist/loki.js +1086 -1086
  12. package/mcp/__init__.py +1 -1
  13. package/package.json +2 -2
  14. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  15. package/web-app/dist/assets/{AdminPage-C_qR4zy7.js → AdminPage-D9E5rMDa.js} +1 -1
  16. package/web-app/dist/assets/{Avatar-DnvHXfPI.js → Avatar-2HIimGbJ.js} +1 -1
  17. package/web-app/dist/assets/{Badge-C4ZYHMuc.js → Badge-X1pm0Suj.js} +1 -1
  18. package/web-app/dist/assets/{Button-EMp1tPF9.js → Button-D3JPQKEY.js} +1 -1
  19. package/web-app/dist/assets/{CockpitPage-lml6VuTn.js → CockpitPage-yg3fHf13.js} +1 -1
  20. package/web-app/dist/assets/{ComparePage-Wjm2LdZC.js → ComparePage-CZcaSHhK.js} +1 -1
  21. package/web-app/dist/assets/{ErrorBoundary-BTm5xHyL.js → ErrorBoundary-AbJVpUqd.js} +1 -1
  22. package/web-app/dist/assets/{EvidenceReceiptPanel-id7I2aqm.js → EvidenceReceiptPanel-c1YRf1qj.js} +1 -1
  23. package/web-app/dist/assets/{GitHubIssuesPanel-CbCd9Otj.js → GitHubIssuesPanel-0wLSsoUy.js} +1 -1
  24. package/web-app/dist/assets/{GitHubPRsPanel-Bq8tMMu6.js → GitHubPRsPanel-BhY2M87Z.js} +1 -1
  25. package/web-app/dist/assets/{HomePage-BzUB8e--.js → HomePage-BGGhvITG.js} +2 -2
  26. package/web-app/dist/assets/{LoginPage-DUUI2zrl.js → LoginPage-SWb9qWEA.js} +1 -1
  27. package/web-app/dist/assets/{MagicPage-BEX4S1KC.js → MagicPage-M8MSb7l_.js} +1 -1
  28. package/web-app/dist/assets/{MetricsPage-DfBbEsEu.js → MetricsPage-D_hgyPT5.js} +1 -1
  29. package/web-app/dist/assets/{NotFoundPage-Bkv9ZZzQ.js → NotFoundPage-DACxcv9V.js} +1 -1
  30. package/web-app/dist/assets/{ProjectPage-DOgdtOXN.js → ProjectPage-Crhlw7MG.js} +3 -3
  31. package/web-app/dist/assets/{ProjectsPage-B-slNM2P.js → ProjectsPage-Da-dndE0.js} +1 -1
  32. package/web-app/dist/assets/{SettingsPage-CFGC7fFg.js → SettingsPage-DZVy9d-7.js} +1 -1
  33. package/web-app/dist/assets/{ShowcasePage-BbQ3ccy6.js → ShowcasePage-K549XnJu.js} +1 -1
  34. package/web-app/dist/assets/{SystemSettingsPage-DYodJebp.js → SystemSettingsPage-BzYX8exp.js} +1 -1
  35. package/web-app/dist/assets/{TeamsPage-BVIx-if5.js → TeamsPage-B-NFe-RU.js} +1 -1
  36. package/web-app/dist/assets/{TemplatesPage-Ct9-8u8u.js → TemplatesPage-B0rflxjJ.js} +1 -1
  37. package/web-app/dist/assets/{TerminalOutput-D-X-i_Uy.js → TerminalOutput-Cztmzbib.js} +1 -1
  38. package/web-app/dist/assets/{activity-XtVDm9YM.js → activity-D6OLvSTu.js} +1 -1
  39. package/web-app/dist/assets/{bell-DZ1AzOTU.js → bell-CEbcuu6k.js} +1 -1
  40. package/web-app/dist/assets/{bot-Dqrsif0B.js → bot-DvUoBtIi.js} +1 -1
  41. package/web-app/dist/assets/{check-DaBVVPd9.js → check-k1SeYCYx.js} +1 -1
  42. package/web-app/dist/assets/{chevron-left-BeoAdvKm.js → chevron-left-CeUTHzvt.js} +1 -1
  43. package/web-app/dist/assets/{circle-alert-BGOBsaeF.js → circle-alert-C7qJ5LE9.js} +1 -1
  44. package/web-app/dist/assets/{clock-BCFnT4yz.js → clock-2mey5blZ.js} +1 -1
  45. package/web-app/dist/assets/{cloud-BaGTh9cq.js → cloud-DYOkaKXJ.js} +1 -1
  46. package/web-app/dist/assets/{code-xml-BO-JH0jv.js → code-xml-BrfSPBeq.js} +1 -1
  47. package/web-app/dist/assets/{database-RaYcmIax.js → database-BT8Fq2mO.js} +1 -1
  48. package/web-app/dist/assets/{dollar-sign-CgdQQcxn.js → dollar-sign-DxwW6pq5.js} +1 -1
  49. package/web-app/dist/assets/{file-code-corner-Cbf_1Rlv.js → file-code-corner-BFcn4EtI.js} +1 -1
  50. package/web-app/dist/assets/{file-plus-CdXrKEem.js → file-plus-Nxp-eviU.js} +1 -1
  51. package/web-app/dist/assets/{globe-S0Hf2_GX.js → globe-lrcCFaSs.js} +1 -1
  52. package/web-app/dist/assets/{hammer-CH1L0xVv.js → hammer-6dyrHj_E.js} +1 -1
  53. package/web-app/dist/assets/{index-B7GtD7qX.js → index-CfG9cuZ-.js} +3 -3
  54. package/web-app/dist/assets/{layers-DBH-gqE9.js → layers-Beh61xd-.js} +1 -1
  55. package/web-app/dist/assets/{loader-circle-BfLPVZuJ.js → loader-circle-BkQN4_tt.js} +1 -1
  56. package/web-app/dist/assets/{lock-Pw97OPl8.js → lock-C614_wuJ.js} +1 -1
  57. package/web-app/dist/assets/{package-Dre4l_Xj.js → package-4CpdKErA.js} +1 -1
  58. package/web-app/dist/assets/{plus-B1HQ5-9a.js → plus-FozAX8-T.js} +1 -1
  59. package/web-app/dist/assets/{refresh-cw-Bza9QU8W.js → refresh-cw-DElhmy2T.js} +1 -1
  60. package/web-app/dist/assets/{rotate-ccw-DrXwMAXs.js → rotate-ccw-BiqvSaHk.js} +1 -1
  61. package/web-app/dist/assets/{scroll-text-VwVYqam1.js → scroll-text-BTOP8eTS.js} +1 -1
  62. package/web-app/dist/assets/{server-DSAmHFdH.js → server-D_hT6jF9.js} +1 -1
  63. package/web-app/dist/assets/{shield-alert-CcCMi6RY.js → shield-alert-UcwG-fFq.js} +1 -1
  64. package/web-app/dist/assets/{thumbs-up-Cc33ahlR.js → thumbs-up-CCBQEpsU.js} +1 -1
  65. package/web-app/dist/assets/{trash-2-DhR9mcV-.js → trash-2-CURJAi5R.js} +1 -1
  66. package/web-app/dist/assets/{trending-down-C3uQ1vsQ.js → trending-down-BoiOB4Qf.js} +1 -1
  67. package/web-app/dist/assets/{trending-up-rsrDQbJY.js → trending-up-BhFeoKLJ.js} +1 -1
  68. package/web-app/dist/assets/{upload-b_j9Aw4d.js → upload-Dm4LbLvG.js} +1 -1
  69. package/web-app/dist/assets/{usePolling-YKiwb1w5.js → usePolling-Dt1olG1R.js} +1 -1
  70. package/web-app/dist/assets/{user-DnHQrkf4.js → user-Dpu23ils.js} +1 -1
  71. package/web-app/dist/index.html +1 -1
package/SKILL.md CHANGED
@@ -3,7 +3,7 @@ name: loki-mode
3
3
  description: An autonomous software factory that knows what it is supposed to deliver, and proves it did. Use when the user says Loki Mode or asks to build, fix or verify software autonomously.
4
4
  ---
5
5
 
6
- # Loki Mode v11.17.69
6
+ # Loki Mode v11.17.71
7
7
 
8
8
  **Current entry points (Loki 10 engine):** `loki "<task>"`, `loki owner/repo#N` and `loki quick "<task>"` run the Loki 10 engine and end with a signed receipt (`loki verify`). `loki backlog owner/repo --all` runs many issues in parallel. Guide: `docs/v10/GUIDE.md`. The skill instructions below, and `loki start`, describe the previous bash loop. PRD-file starts (`loki start ./prd.md`) and the opencode provider still run on it until FC38-SWEEP ports them; the legacy-engine command and the LOKI_ENGINE switch remain removed. Prefer `loki owner/repo#N` for issues.
9
9
 
@@ -483,4 +483,4 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
483
483
 
484
484
  ---
485
485
 
486
- **v11.17.69 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
486
+ **v11.17.71 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 11.17.69
1
+ 11.17.71
@@ -7,6 +7,6 @@ Modules:
7
7
  control: Session control helpers (status, atomic writes, origin check)
8
8
  """
9
9
 
10
- __version__ = "11.17.69"
10
+ __version__ = "11.17.71"
11
11
 
12
12
  __all__ = ["__version__"]
@@ -1,6 +1,6 @@
1
1
  # CLI reference
2
2
 
3
- Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.17.69. Do not edit by hand.
3
+ Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.17.71. Do not edit by hand.
4
4
  Hidden and legacy-only commands are omitted; see `docs/v10/CLI-MODERN.md` for the full inventory.
5
5
 
6
6
  | Command | Description |
@@ -2,7 +2,7 @@
2
2
 
3
3
  Loki Mode, by [Autonomi](https://www.autonomi.dev/), turns a spec or an issue into a verified pull request with a receipt you can check. This page covers installing it, a first run, and the options around it.
4
4
 
5
- **Version:** v11.17.69
5
+ **Version:** v11.17.71
6
6
 
7
7
  **Engine note:** `loki start` is the primary command. `loki start`, `loki "<task>"`, `loki owner/repo#N` and `loki quick` all run the Loki 10 engine, whatever the flag order or input form (PRD file, issue ref, task or one-word brief). The previous loop runs only on `--engine legacy`, `LOKI_ENGINE=legacy`, or for one call when a flag Loki 10 cannot honor is present. See the [user guide](v10/GUIDE.md) and the [5-minute quickstart](QUICKSTART.md).
8
8
 
@@ -50,6 +50,7 @@ interact and why hitting one is a failure rather than a success.
50
50
  | `LOKI_SUMMARY_JSON` | unset | `1` prints the end-of-run summary as one JSON line on the previous loop. |
51
51
  | `LOKI_TIER` | `oss` | **Not a model setting.** The open-core licensing seam. Leave it unset. |
52
52
  | `LOKI_E10_STABLE_PREFIX` | on | Engine10 sessions send the `claude_code` preset with `excludeDynamicSections: true`, so the system prompt is byte-identical across stages and runs and hits the prompt cache. `0` restores the previous preset. `LOKI_E10_PREFIX=lean` still wins when set. |
53
+ | `LOKI_E10_INSTALL` | on | Up-front dependency install at intake. `0` disables it (same as `verify.install_deps: false` in loki.yaml); the run then reports the missing dependencies as NOT PROVEN. When on, each package whose dependencies are absent is installed once per run before the baseline, using the lockfile-frozen form when the package has a lockfile: `npm ci`, `pnpm install --frozen-lockfile`, `yarn install --immutable` (Yarn Berry) or `--frozen-lockfile`, `bun install --frozen-lockfile`, `uv sync --frozen`, `poetry install` (already lock-honoring, kept as written), `pipenv sync`, `cargo fetch --locked`, `BUNDLE_FROZEN=true bundle install`, `composer install`. These never rewrite the lockfile. A lockfile governs a package only when it sits in the package directory, or in an ancestor that declares a workspace containing it (package.json `workspaces`, pnpm-workspace.yaml, Cargo `[workspace]`, uv `tool.uv.workspace`); a standalone sub-project beside a root lockfile keeps its own install command. If the locked install fails (for example the lockfile is out of sync with the manifest), the run reports NOT PROVEN with the real error and does not retry with a mutating install. With no lockfile, or no matching rule, the project's own install command runs and the receipt records `locked: false`. The project's own install scripts (for example npm postinstall) run just as they do for a developer, so disable the install for a repo you do not trust. |
53
54
  | `LOKI_REPO_BASELINE` | unset | `0` skips the intake repo profile and baseline test run (see docs/HARNESS-INTELLIGENCE-PLAN.md). |
54
55
  | `LOKI_ALLOW_CLAUDE_SIDECALLS` | unset | `1` (exactly) lets PRD enrichment, done recognition, the council voters, the USAGE.md refresh and the quickstart intent check prompt the `claude` CLI under a non-claude provider; `loki doctor --airgap` then reports that as required egress to Anthropic. |
55
56
 
@@ -865,3 +865,12 @@ FC-AGENT-PROOF: a run whose only executed passing check is a test file the same
865
865
  4. Opt-out: `LOKI_PROOF_REQUIRE_EXOGENOUS=0` (exact string "0" after trimming; any other value keeps the requirement, fail-closed).
866
866
  5. Ordering: the primary `loki start` route already writes build-results.json (TEN-GATES-09) and an exogenous security_scan gate (TEN-GATES-08), so a run with a real build or scan keeps VERIFIED. Health and functional facts arrive with TEN-GATES-07 (not yet merged when this landed); until then a route run whose stack has no build step and no scan result reads amber, which is the honest reading.
867
867
  - Reverse: CTO call if field receipts show honest runs with real exogenous checks reading amber; the opt-out covers one-off needs.
868
+
869
+ ## D106 (2026-10-19, founder decision, FireLater#20 follow-up): the up-front dependency install is locked and fails closed
870
+ 1. The founder kept the intake dependency install shipped in 11.17.68 (intakeDeps installs each package whose dependencies are absent, before the baseline and the Wall base run) and asked that it meet industry-standard, enterprise practice. This supersedes the "only when a selected check fails" wording of FOUNDER-QUEUE row 19 part (b); the evidence-triggered path stays as well.
871
+ 2. Locked: install.ts `lockedInstall` maps (package root contents, model command) to the ecosystem's frozen form through one table. Lockfile to form: package-lock.json or npm-shrinkwrap.json `npm ci`; pnpm-lock.yaml `pnpm install --frozen-lockfile`; yarn.lock `yarn install --immutable` (Berry: .yarnrc.yml or packageManager yarn@>=2) else `--frozen-lockfile`; bun.lock or bun.lockb `bun install --frozen-lockfile`; uv.lock `uv sync --frozen`; poetry.lock `poetry install` (already lock-honoring, kept as written); Pipfile.lock `pipenv sync`; Cargo.lock `cargo fetch --locked`; Gemfile.lock `BUNDLE_FROZEN=true bundle install`; composer.lock `composer install`. A lockfile governs a package only if it is in the package directory or in an ancestor that declares a workspace containing the package (package.json workspaces for npm, yarn and bun; pnpm-workspace.yaml; Cargo [workspace] members; uv tool.uv.workspace members); otherwise the command is kept and recorded unlocked. A `cd X` segment moves the lookup to X. An already-locked model command is kept byte for byte; flags are kept; a command that names packages, a missing lockfile or no matching rule keeps the model command and the check records `locked: false` with `lock_note`.
872
+ 3. poetry: `poetry install` already honors poetry.lock and is kept unchanged. `--no-root` is deliberately not added (it skips installing the project itself and breaks src-layout imports) and neither is `--sync` (it removes environment packages the lock lacks).
873
+ 4. Fail closed: a locked install that fails (for example a lockfile out of sync with its manifest) is a harness-owned NOT PROVEN with the real output excerpt; the harness never falls back to a mutating install. A `||` fallback after an install is not rewritten and the check records `locked: false` with a note that it can mask failure. pnpm `--no-frozen-lockfile` is dropped when `--frozen-lockfile` is added.
874
+ 5. Visible: the install check and the deps.install event carry `cmd` (what ran), `locked`, `lock_note` and, when rewritten, `model_cmd`.
875
+ 6. The project's own install scripts (for example npm postinstall) run exactly as they do for a developer; opt-out is LOKI_E10_INSTALL=0 or loki.yaml `verify.install_deps: false`, documented in docs/environment-variables.md.
876
+ - Reverse: founder call; the opt-out covers one-off needs.
@@ -1194,3 +1194,4 @@ L0 review rule (ENGINE-LAWS.md L0): a fix that adds an `if` or a regex about the
1194
1194
  - Residual risk: source shipped inside an install-created directory (for example a new build/ or vendor/) is not committed, and a symlink to a directory is not recorded.
1195
1195
  - Fixture: loki-ts/tests/engine10/fc22_install.test.ts "absentDepRoots and intakeDeps (FC-DEPS-NOT-INSTALLED)"; loki-ts/tests/engine10/runner_errors.test.ts FC-DEPS-NOT-INSTALLED case.
1196
1196
  - Budget change: the intake stage limit is now STAGE_BUDGETS.intake.limitS + INSTALL_CAP_MS/1000 + SUITE_BASELINE_BUDGET_S (120s), so a repo that needs an install or a per-command baseline gets that extra time at intake; a repo with nothing absent and no suites spends none of it.
1197
+ - Hardening (D106, founder 2026-10-19): the intake install is the lockfile-frozen form when a lockfile exists (install.ts lockedInstall, one table for npm, pnpm, yarn, bun, uv, poetry, pipenv, cargo, bundler, composer), fails closed as harness-owned NOT PROVEN with no mutating fallback, and records `locked`, `lock_note` and `model_cmd` on the check. Fixture: fc22_install.test.ts "lockedInstall (locked, reproducible install)".
@@ -23,7 +23,7 @@ this file; each item says what the loop does meanwhile.
23
23
  | 16 | 2026-10-01 | A Slack incoming-webhook URL for testing D51 item 4 (notify.sh on the v10 path: PR opened, BLOCKED, backlog finished). Provide it as an env var (for example `LOKI_SLACK_WEBHOOK_URL`) in the Release Manager session, never in a file or chat. | Needs a credential only the founder holds. | Until then notify.sh is tested against a local mock webhook; the real end-to-end check runs once the env var is set. | open |
24
24
  | 17 | 2026-10-01 | Ship bun with the npm package so `npm install -g loki-mode` runs the Loki 10 default without a separate bun install (P0-nobun, architect option B): add `"bun": "1.4.2"` as an optionalDependency. Cost: each install grows from 26.6MB to about 90-110MB (platform binary 62MB darwin-arm64, 80MB linux-x64, 86MB win-x64); `--omit=optional` and unsupported platforms keep the legacy engine with a plain message. The alternative (rewrite engine10 to run under node) is about 14 files and 300-450 lines, breaks the engine10 line budget and needs a third Bun Parity runtime. | Install size and dependency policy. | Builds only the resolver and the plain cannot-run message (both useful either way); npm users without bun keep getting legacy, and promote stays paused until the two-leg gate (E-167) lands. DECIDED B 07:35Z by peer relay (autonomi-dev-dc, citing the founder's 03:30Z delegation): the Loki 10 default is the product; a bigger install costs less than an inert default for most npm users; same pattern as esbuild and biome. Conditions: per-platform optional packages only; measured delta reported and held if above about 60MB per platform (architect figures 62-86MB exceed it; 07:35Z follow-up relay: decided (i) accept about 62-86MB, or (iii) bun's baseline build if smaller and Bun Parity passes; not (ii), since a first-run consent step breaks the one-command bar; record measured deltas in the CHANGELOG; document --omit=optional as the slim legacy path); --version probe plus plain start line when bun cannot run; Docker and Homebrew use the same resolver; E-167 two-leg gate stays. Founder may reverse. |
25
25
  | 18 | 2026-10-03 | Screenshot veto for the 10.8.0 Control Plane rebuild (D83): the ground colour #F1F2F6 from the legacy dashboard, and keeping the legacy mascot in the sidebar brand. Also: light-theme status text uses AA-safe companion ink tokens (darker than the legacy hex) because the legacy success, warning, info and muted text fail WCAG AA on #F1F2F6. | Brand and visual design. | Builds with the legacy ground and mascot plus the AA ink tokens (D83 point 6); screenshots go in PROGRESS when CPE-02 lands. | open |
26
- | 19 | 2026-10-03 | FC-21b and FC-22 (docs/v10/FC21B-FC22-PLAN.md): (a) after an implement time limit, VERIFIED also requires a Wall or task-named test to pass with n>0; (b) dependency install runs by default, only when a selected check fails with a harness-owned load error, opt-out LOKI_E10_INSTALL=0 or loki.yaml verify.install_deps false; (c) exit code 3 (BUDGET_STOP) is dropped whenever a receipt is sealed, outcome and exit follow receipt.verdict. | Behavior and exit-code changes users see. | Decided by the CoS under the standing mandate: (a) yes, (b) yes as stated, (c) yes with a CHANGELOG Changed entry. Founder may reverse. | open |
26
+ | 19 | 2026-10-03 | FC-21b and FC-22 (docs/v10/FC21B-FC22-PLAN.md): (a) after an implement time limit, VERIFIED also requires a Wall or task-named test to pass with n>0; (b) dependencies are installed up front at intake (FireLater#20, 11.17.68), by default, for each package whose dependencies are absent (and again on a harness-owned load error); when the package has a lockfile the install is the ecosystem's frozen form and never rewrites the lockfile, a failed locked install fails closed (harness-owned NOT PROVEN, no mutating fallback), opt-out LOKI_E10_INSTALL=0 or loki.yaml verify.install_deps false (docs/environment-variables.md, D106); (c) exit code 3 (BUDGET_STOP) is dropped whenever a receipt is sealed, outcome and exit follow receipt.verdict. | Behavior and exit-code changes users see. | Decided by the CoS under the standing mandate: (a) yes, (b) yes as stated, (c) yes with a CHANGELOG Changed entry. Founder may reverse. Part (b) decided by the founder 2026-10-19: keep the up-front install, hardened to locked and fail-closed (D106). | open (a, c); (b) decided 2026-10-19 |
27
27
  | 20 | 2026-10-04 | CP-ASK (docs/v10/CP-ASK-PLAN.md): (a) with LOKI_CP_ASK on, the home box is Ask only, with a "Start a build" link to Compose; (b) defaults $1.00 per ask and 600s, configurable, Ask spend shown on the Cost page apart from run budgets; (c) CP-level runs, receipts and events across all repos always available, per-repo memory and code tools scoped to one repo chip per ask. | Product shape and spend defaults. | Decided by the CoS under the standing mandate as stated. Founder may reverse. | open |
28
28
  | 21 | 2026-10-07 | Enable GitHub private vulnerability reporting in the repo settings (Settings, Code security, Private vulnerability reporting). SECURITY.md already tells reporters to use Security tab, "Report a vulnerability". | Public repo settings; agents never change them. | SECURITY.md ships as written; until enabled the "Report a vulnerability" button is absent. | open |
29
29
  | 22 | 2026-10-16 | C-C1, C-C2, C-C3, C-C4, C-F1, C-F5, C-F6, C-F7, C-F8, M-27, M-27E D1-D3, P12-13b | Decided by the CoS under the founder grant of 2026-10-16 (D99). | Builds the unblocked slices. | decided (D99) |
@@ -2581,3 +2581,9 @@ v11.17.21 published (Release success on 462fbc40a; npm latest 11.17.21, next 11.
2581
2581
 
2582
2582
  ## 2026-10-19T02:38Z (CoS) v11.17.69
2583
2583
  - FC-23 Wall CJS brief (FireLater#20 rerun on 11.17.67: Wall failed lint:eslint:backend no-require-imports). Engineer 2cfe35140, TL APPROVE: fc23_wall_conventions 10/0, red with parent conventions.ts 9/1. Cherry-picked as edef17cd5.
2584
+
2585
+ ## 2026-10-19T02:44Z (CoS) v11.17.70
2586
+ - 11.17.70: CI fix 82c3edbc (intake.test.ts hermetic; slow-PATH red 32/22, green 54/0; CS reviewed test-only diff) + dup-note 7a04c3839 (TL APPROVE 55/0, red 54/1). Combined on main: intake+budget 88 pass 0 fail.
2587
+
2588
+ ## 2026-10-19T02:46Z (CoS) v11.17.71
2589
+ - 11.17.71: install hardening d4170dc68+1b52683ed (cherry-picked d42be9af1, f1fa80b95). HIGH BLOCK B1/B2 fixed; HIGH re-review APPROVE: fc22+budget+intake 142/0, real npm ci in workspace member rc=0. On main: fc22+intake+budget 143 pass 0 fail. Follow-ups: pnpm yaml inline/unindented lists, uv --locked/pipenv --deploy, D106 || wording.