loki-mode 11.17.73 → 11.17.75
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/CLI-REFERENCE.md +1 -1
- package/docs/INSTALLATION.md +1 -1
- package/docs/environment-variables.md +1 -1
- package/docs/v10/DECISIONS.md +1 -1
- package/docs/v10/FAILURE-CLASSES.md +12 -0
- package/docs/v10/PROGRESS.md +6 -0
- package/loki-ts/dist/loki.js +1212 -1212
- package/mcp/__init__.py +1 -1
- package/package.json +2 -2
- package/packages/control-plane/dist/server.js +445 -349
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/web-app/dist/assets/{AdminPage-CAw3IFCu.js → AdminPage-ckrZehcf.js} +1 -1
- package/web-app/dist/assets/{Avatar-D4-XntzA.js → Avatar-B0cf3aVA.js} +1 -1
- package/web-app/dist/assets/{Badge-C1fHRqJG.js → Badge-Ds_hvQoP.js} +1 -1
- package/web-app/dist/assets/{Button-CzD_JfV1.js → Button-DTUAVmt5.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-biH-pfqC.js → CockpitPage-DF7RtcXW.js} +1 -1
- package/web-app/dist/assets/{ComparePage-xMMPe6lI.js → ComparePage-BHAQBZK0.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-LISxmNUO.js → ErrorBoundary-Xg5ORKQJ.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-BJ70o_uy.js → EvidenceReceiptPanel-CdS9tMxc.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-D5ApCUhD.js → GitHubIssuesPanel-hvk0yVL-.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-BtTNo3-s.js → GitHubPRsPanel-CfIFqgI3.js} +1 -1
- package/web-app/dist/assets/{HomePage-C9NPfbCn.js → HomePage-CyijuFBr.js} +2 -2
- package/web-app/dist/assets/{LoginPage-Dfei1DgX.js → LoginPage-B5S7e7ee.js} +1 -1
- package/web-app/dist/assets/{MagicPage-KUCdTZ47.js → MagicPage-Bjc2F-ce.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-CMwW5kgY.js → MetricsPage-0jsT2phC.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-DyK_dXex.js → NotFoundPage-rQ2fotgB.js} +1 -1
- package/web-app/dist/assets/{ProjectPage--I3rB_p4.js → ProjectPage-BToxnl4V.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-CW57oFYD.js → ProjectsPage-CDZb1rLe.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-cW-BXZGS.js → SettingsPage-DZXRZ9gX.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-__24vOZq.js → ShowcasePage-Dx0RfAv3.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-CM-54CV0.js → SystemSettingsPage-Bjh8M7PU.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-NphA-ubY.js → TeamsPage-D8VRFBhr.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-9ERZiFUR.js → TemplatesPage-M2fz0DZW.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-BT2DzBO1.js → TerminalOutput-CFiTiJiH.js} +1 -1
- package/web-app/dist/assets/{activity-CQJpef5Z.js → activity-BpEti4MN.js} +1 -1
- package/web-app/dist/assets/{bell-Bxopl5iP.js → bell-DGSGGaVr.js} +1 -1
- package/web-app/dist/assets/{bot-BEjHVO92.js → bot-BhbuP5Jx.js} +1 -1
- package/web-app/dist/assets/{check-Do1juwL_.js → check-XA1EKiOV.js} +1 -1
- package/web-app/dist/assets/{chevron-left-Hn3UM-NM.js → chevron-left-BVn1BhDN.js} +1 -1
- package/web-app/dist/assets/{circle-alert-Btc-PWto.js → circle-alert-CuDH-xVA.js} +1 -1
- package/web-app/dist/assets/{clock-9J88OP3M.js → clock-DOexYJz7.js} +1 -1
- package/web-app/dist/assets/{cloud-JPIPzxJd.js → cloud-BzhyIUtk.js} +1 -1
- package/web-app/dist/assets/{code-xml-iv1keZ9N.js → code-xml-8JwaEdd2.js} +1 -1
- package/web-app/dist/assets/{database-DwFbyMQf.js → database-CHAlm7GD.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-Bt1rF0Up.js → dollar-sign-DMn1Z2mk.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-BvhHgreH.js → file-code-corner-DXUwz0qn.js} +1 -1
- package/web-app/dist/assets/{file-plus-CeOevK8W.js → file-plus-9Avu5l_j.js} +1 -1
- package/web-app/dist/assets/{globe-BIMbYVfR.js → globe-CaI5OyzR.js} +1 -1
- package/web-app/dist/assets/{hammer-CMG6alC6.js → hammer-39YmcOpO.js} +1 -1
- package/web-app/dist/assets/{index-D1-1DZ1A.js → index-Cud61p9W.js} +3 -3
- package/web-app/dist/assets/{layers-Dwoys6vF.js → layers-Cy4XzPLx.js} +1 -1
- package/web-app/dist/assets/{loader-circle-CelYAWD2.js → loader-circle-D-xd2rX_.js} +1 -1
- package/web-app/dist/assets/{lock-BgFsHF5L.js → lock-BjX622xw.js} +1 -1
- package/web-app/dist/assets/{package-5sdo-e9y.js → package-DJM9D0vQ.js} +1 -1
- package/web-app/dist/assets/{plus-CSzQUjW8.js → plus-NJgfTSYU.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-Bdo9tSnG.js → refresh-cw-bk2f-EWd.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-BaY8Qfhk.js → rotate-ccw-CAhHbrgP.js} +1 -1
- package/web-app/dist/assets/{scroll-text-BN8nd88z.js → scroll-text-Hw2Dmd7B.js} +1 -1
- package/web-app/dist/assets/{server-Bi6RuZbH.js → server-BQbvhpJk.js} +1 -1
- package/web-app/dist/assets/{shield-alert-aZX8uTyl.js → shield-alert-C2MGmd4Q.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-CJBtXUbH.js → thumbs-up-BAQFLfSO.js} +1 -1
- package/web-app/dist/assets/{trash-2-bgGf4gkl.js → trash-2-okuerJdv.js} +1 -1
- package/web-app/dist/assets/{trending-down-BJ0IybHJ.js → trending-down-dl0Y9tN6.js} +1 -1
- package/web-app/dist/assets/{trending-up-CGmXxQM4.js → trending-up-CzeGIsMl.js} +1 -1
- package/web-app/dist/assets/{upload-rDccLEQm.js → upload-tkq9_bgk.js} +1 -1
- package/web-app/dist/assets/{usePolling-BN36YyBK.js → usePolling-BQeWmnOa.js} +1 -1
- package/web-app/dist/assets/{user-DeS27GvT.js → user-DOXirXaZ.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: 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.
|
|
6
|
+
# Loki Mode v11.17.75
|
|
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.
|
|
486
|
+
**v11.17.75 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
11.17.
|
|
1
|
+
11.17.75
|
package/dashboard/__init__.py
CHANGED
package/docs/CLI-REFERENCE.md
CHANGED
|
@@ -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.
|
|
3
|
+
Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.17.75. 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 |
|
package/docs/INSTALLATION.md
CHANGED
|
@@ -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.
|
|
5
|
+
**Version:** v11.17.75
|
|
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,7 +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 --locked`, `poetry install` (already lock-honoring, kept as written), `pipenv install --deploy`, `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. The install command is rewritten only if it is simple enough to reason about without a shell parser; otherwise it is left as written and recorded `locked: false`: a `||` anywhere (lock_note "fallback masks install failure"); any character outside letters, digits, space, tab and `_./=:@+,%~-` besides the separators `&&`, `;` and newline, or anything before the first install other than `cd <path>`, `export VAR=value` or plain VAR=value assignments, or any PATH
|
|
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 --locked`, `poetry install` (already lock-honoring, kept as written), `pipenv install --deploy`, `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. The install command is rewritten only if it is simple enough to reason about without a shell parser; otherwise it is left as written and recorded `locked: false`: a `||` anywhere (lock_note "fallback masks install failure"); any character outside letters, digits, space, tab and `_./=:@+,%~-` besides the separators `&&`, `;` and newline, or anything before the first install other than `cd <path>`, `export VAR=value` or plain VAR=value assignments, or any assignment to PATH, NODE_OPTIONS, BASH_ENV or ENV (lock_note "unparsed shell construct"); and an install followed by a `;` or newline command, which would mask its failure (lock_note "later command masks install failure"), so after the install only `&&` is allowed. 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. |
|
|
54
54
|
| `LOKI_REPO_BASELINE` | unset | `0` skips the intake repo profile and baseline test run (see docs/HARNESS-INTELLIGENCE-PLAN.md). |
|
|
55
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. |
|
|
56
56
|
|
package/docs/v10/DECISIONS.md
CHANGED
|
@@ -870,7 +870,7 @@ FC-AGENT-PROOF: a run whose only executed passing check is a test file the same
|
|
|
870
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
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 --locked`; poetry.lock `poetry install` (already lock-honoring, kept as written); Pipfile.lock `pipenv install --deploy`; 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
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 command containing a `||` anywhere is left entirely as written (every install in it, `locked: false`, lock_note "fallback masks install failure"), because the shell reads `a && b || c` as `(a && b) || c` and the fallback masks a failure in any earlier segment; so is any command outside an allowlist (lock_note "unparsed shell construct"), since there is no shell parser: after trimming trailing whitespace and `;`/newline separators and joining `\<newline>` continuations, the command may contain only [A-Za-z0-9 _./=:@+,%~-], tabs and the separators `&&`, `;` and newline (so no quotes, backticks, parens, braces, `$`, redirects, `|` or lone `&`), every segment before the first install must be `cd <path>`, `export VAR=value` or pure VAR=value assignments (so set, pushd, trap, function, alias, shopt, eval, source, exec and the like are refused), and any assignment to PATH, bare, exported or as an install prefix, is refused. A command that passes is rewritten only where each install and every segment after it are joined by `&&`: runDetached runs `bash -c` without -e, so a later `;` or newline command (for example `npm install; echo done`) would mask a failed locked install, and the whole command is then left as written with `locked: false` and lock_note "later command masks install failure". Separators before the install (`cd x; npm install`) are fine. pnpm `--no-frozen-lockfile` is dropped when `--frozen-lockfile` is added.
|
|
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 command containing a `||` anywhere is left entirely as written (every install in it, `locked: false`, lock_note "fallback masks install failure"), because the shell reads `a && b || c` as `(a && b) || c` and the fallback masks a failure in any earlier segment; so is any command outside an allowlist (lock_note "unparsed shell construct"), since there is no shell parser: after trimming trailing whitespace and `;`/newline separators and joining `\<newline>` continuations, the command may contain only [A-Za-z0-9 _./=:@+,%~-], tabs and the separators `&&`, `;` and newline (so no quotes, backticks, parens, braces, `$`, redirects, `|` or lone `&`), every segment before the first install must be `cd <path>`, `export VAR=value` or pure VAR=value assignments (so set, pushd, trap, function, alias, shopt, eval, source, exec and the like are refused), and any assignment to PATH, NODE_OPTIONS, BASH_ENV or ENV, bare, exported or as an install prefix, is refused. A command that passes is rewritten only where each install and every segment after it are joined by `&&`: runDetached runs `bash -c` without -e, so a later `;` or newline command (for example `npm install; echo done`) would mask a failed locked install, and the whole command is then left as written with `locked: false` and lock_note "later command masks install failure". Separators before the install (`cd x; npm install`) are fine. pnpm `--no-frozen-lockfile` is dropped when `--frozen-lockfile` is added.
|
|
874
874
|
5. Visible: the install check and the deps.install event carry `cmd` (what ran), `locked`, `lock_note` and, when rewritten, `model_cmd`.
|
|
875
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
876
|
- Amendment (D99): uv uses `uv sync --locked` (fails on an out-of-sync uv.lock; `--frozen` is replaced) and pipenv uses `pipenv install --deploy` (fails on an out-of-date Pipfile.lock; `pipenv sync` is replaced); pnpm-workspace.yaml is read in inline-list, block and unindented-block forms with `!` exclusions.
|
|
@@ -1203,3 +1203,15 @@ L0 review rule (ENGINE-LAWS.md L0): a fix that adds an `if` or a regex about the
|
|
|
1203
1203
|
- 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.
|
|
1204
1204
|
- 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.
|
|
1205
1205
|
- 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)".
|
|
1206
|
+
|
|
1207
|
+
|
|
1208
|
+
## FC-ZERO-ON-BASE An impacted test that is a deliberate skip on base too was listed as NOT PROVEN for the change (ZERO-ON-BASE)
|
|
1209
|
+
- User-visible vs raw: user-visible. In FireLater#20 run e10-20261019T020704Z-103b verify selected `backend/tests/integration/request-approval-race.test.ts`, a deliberate `describe.skip` (needs a real DB), so it executed zero tests and the run carried "not run: vitest:backend/tests/integration/request-approval-race.test.ts" in NOT PROVEN although the change never touched it and the pristine base executes zero tests there too.
|
|
1210
|
+
- Law broken: a result the change did not cause is never charged to the change (the same base-comparison contract as A-112); zero-executed stays fail-closed whenever it could be about the change.
|
|
1211
|
+
- Siblings: any runner whose file-level skip, todo or empty file yields "no tests executed" (vitest, jest, pytest, node:test, go); Wall, task-named (relevant), holdout and edited test files, and a run that edited test configuration, are never exempt; the package and full-suite not_run lines (a suite is a command, not a file) keep their own handling.
|
|
1212
|
+
- Mechanism: verify.ts subtractBase (the A-112 pristine detached base worktree) reruns an untouched, non-Wall, non-relevant zero-executed check once and classifies it with the same classifyCheck; zero on base too puts the name in `skipped_on_base` (verify data, plus a `test.skipped_on_base` event "skipped on base: <check>"), and seal omits only those names from its "not run:" NOT PROVEN lines. Any other base outcome (tests ran, failed, missing, timed out) keeps NOT PROVEN. The rerun happens only in this case, and the check's installed node_modules or .venv are linked into the base worktree, never copied.
|
|
1213
|
+
- Fixture: loki-ts/tests/engine10/verify_prered.test.ts describe "FC-ZERO-ON-BASE" (untouched skip listed; edited file, Wall file and tests-ran-on-base all stay fail-closed) and loki-ts/tests/engine10/seal.test.ts "FC-ZERO-ON-BASE".
|
|
1214
|
+
- Hardening (HIGH review of 4e449d487): linking the head checkout's node_modules into the base worktree lets a workspace link (node_modules/shared -> ../shared, pnpm/npm/yarn workspaces) or an editable install (.venv with pip -e) resolve to HEAD sources, so the base rerun could execute the run's own edits and report a false zero-on-base. Choice: the excusal applies only when the run changed nothing but test files (`changed.every(isTestFile)`) and no test configuration, so no head source, manifest or lockfile exists for any link to expose; deps stay linked because base has none of its own. A run that edits any source keeps zero-executed as NOT PROVEN. Residual: edits made inside a gitignored node_modules or .venv are not in `changed`. Seal also writes one informational line "skipped on base (excused): <check>" next to the retained pre red lines (never downgrades). Regression fixture: verify_prered.test.ts "workspace link" (red before the rule).
|
|
1215
|
+
- Hardening 2 (HIGH re-review of 9a4267335, D99): a changed TEST file can also be reached through a workspace link (node_modules/shared/helper.test.js), so test-files-only is not enough. depsSeeHead (util/base_guard.ts) withholds the excusal whenever the dependency dirs the base rerun would link can see head sources: any top-level or @scope/* node_modules entry that is a symlink whose realpath is inside the repo, or a .venv holding a .pth, *.egg-link or direct_url.json that names the repo; an unreadable dependency dir counts as seeing head. This gate is in addition to the test-files-only gate. Fixture: verify_prered.test.ts "reviewer repro 2" (red before the guard).
|
|
1216
|
+
- Hardening 3 (round 3 HIGH review, D99): depsSeeHead now walks node_modules and .venv recursively without following symlinks (so node_modules/foo/node_modules/shared -> ../../../shared is seen), inspects every symlink target, and withholds when a target is inside the repo but outside the dependency dir it lives in (an npm .bin link or a pnpm store link stays self-contained). The repo is compared as given and as realpath (/var vs /private/var, a symlinked repo dir). Editable-install files (.pth, .egg-link, direct_url.json with its file:// URL decoded by fileURLToPath so %20 matches, and __editable___*_finder.py) are checked for the repo path, each named path also by realpath. The walk is bounded at 50000 entries; exceeding it or any read error other than a missing dir withholds. The helper logic lives in util/base_guard.ts (zeroOnBase, depsSeeHead), outside the engine core cap. A pnpm workspace package links to a path inside the repo but outside node_modules, so workspace pnpm repos are withheld; that is fail-safe, and the excusal is effectively inert wherever workspace links or editable installs exist.
|
|
1217
|
+
- Stated plainly: the motivating incident (FireLater#20, a run that edits source) stays NOT PROVEN by design. The excusal only fires for runs that changed test files alone with dependencies that cannot see head; Seal accuracy outranks delivered accuracy.
|
package/docs/v10/PROGRESS.md
CHANGED
|
@@ -2593,3 +2593,9 @@ v11.17.21 published (Release success on 462fbc40a; npm latest 11.17.21, next 11.
|
|
|
2593
2593
|
|
|
2594
2594
|
## 2026-10-19T03:12Z (CoS) v11.17.73
|
|
2595
2595
|
- 11.17.73: P0 fix-forward for D106 install masking (live in 71/72). af838b55 commits 2bb2f0194..279f1ac5d cherry-picked as 2599744de..20cf84915 plus D106 wording fix. HIGH a1168a6d: BLOCK x5 (||, quoted separators, later ; list, trap/function/alias, set -n), APPROVE round 6 at 279f1ac5d: fc22_install+intake+budget 145 pass 0 fail, real npm stale-lock probes all rc=1 on rewritten shapes.
|
|
2596
|
+
|
|
2597
|
+
## 2026-10-19T03:16Z (CoS) v11.17.74
|
|
2598
|
+
- 11.17.74: D106 follow-up, NODE_OPTIONS/BASH_ENV/ENV refused like PATH. af838b55 4284ae1fb cherry-picked. HIGH a1168a6d round 7 APPROVE: 4 files 5+/5-, probes 8 refused, no over-match, fc22_install+intake+budget 145 pass 0 fail; red 56/1 with source reverted.
|
|
2599
|
+
|
|
2600
|
+
## 2026-10-19T03:20Z (CoS) v11.17.75
|
|
2601
|
+
- 11.17.75: FC-ZERO-ON-BASE. a849c264 commits 9a4267335..58bb86a73 cherry-picked as 2a52da847..13b0b64c6 plus unused-import drop. HIGH a6dc6f16: BLOCK x4 (workspace link, nested links, venv spellings, spelled-target exemption), APPROVE round 5: attack set 11/0, verify_prered+seal+verify+budget 209/0. On main after cherry-pick: same 4 suites 209 pass 0 fail, tsc no engine10/base_guard errors.
|