Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/decisions/2026-09-30-omniroute-rebuild.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,12 @@ Every claim carries the evidence class used in the receipt (`receipt.json`, `evi
with `[defer]`), so the carry stays; `release/v3.8.52` (`a1a2dce1a`) exists and `main` was two commits past the tag
(`fc5e2bccd`, Electron release fixes). The repo's component pin (`manifests/stack.json`, npm 3.8.50) is unchanged by this record: it
is a shared hot file, and moving it needs its own qualification and change.
**Qualification of the published package (2026-09-30, after the rebuild).** The npm package itself was installed with the recipe's commands (version changed to 3.8.51) into a
fresh prefix and booted twice in a network-less namespace with the real `lsof` and no shim (health 200 after 3 s and 4 s, the store identical across the
restart, SIGTERM exit 143, no orphan); the registry's SLSA provenance names upstream's `v3.8.51` tag commit `c1e30b767` and the tarball's sha512, and
`npm audit signatures` verified 1156 of 1156 registry signatures and 233 attestations. The package has neither carry (0 alpha/search route
files, 0 affinity-function occurrences), so it does not replace either gateway. The pin stays 3.8.50 here; the
receipt [`omniroute-3851-npm-qualification-20260930`](../../evidence/receipts/omniroute-3851-npm-qualification-20260930.json) has the limitations, including the 7-day cooldown question for the pin move.

### How each setting relates to upstream's shipped defaults

Expand Down
2 changes: 1 addition & 1 deletion docs/foundation-stack.md
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ Upstream's merged [#14886](https://github.com/diegosouzapw/OmniRoute/pull/14886)

The non-upstream deltas are #13788 (both gateways) and the affinity patch (20128 only); the `lsof` shim is still on both units' `PATH` but redundant, because upstream #14812 is in the base. The [decision's deltas table](decisions/2026-09-30-omniroute-rebuild.md#non-upstream-deltas) gives each one's purpose, evidence and the upstream change that retires it. While the affinity patch runs, create no OAuth (Codex) routing combo on 20128 (its standing constraint F1; the [decision record](decisions/2026-09-30-omniroute-rebuild.md#non-upstream-deltas) gives its basis and limits).

npm published 3.8.51 on 2026-09-30 (the tag's tree equals `2f42a9ac1`'s), so the pin's own condition is met; the component pin in `manifests/stack.json` is still 3.8.50, and moving it is a separate qualified change to that shared file. Upstream already carries the fix, #14886.
npm published 3.8.51 on 2026-09-30 (the tag's tree equals `2f42a9ac1`'s), so the pin's own condition is met, and the published package passed its own install, boot smoke and provenance check (`evidence/receipts/omniroute-3851-npm-qualification-20260930.json`); the component pin in `manifests/stack.json` is still 3.8.50, and moving it is a separate change to that shared file. Upstream already carries the fix, #14886.

- **Build.** Use upstream's own scripts in a clean clone at the cherry-picked head:
1. `npm ci`;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# omniroute@3.8.51 from npm: install, boot smoke and provenance, 2026-09-30

Qualification of the published npm package (not of the running gateways) as a candidate for the `omniroute` pin of `manifests/stack.json`. Claim, limitations and
values: [`evidence/receipts/omniroute-3851-npm-qualification-20260930.json`](../../../evidence/receipts/omniroute-3851-npm-qualification-20260930.json). The pin is not moved here. Every file under `checks/` is an output as returned, except for the edits listed below;
`scripts/*.txt` are the scripts as they ran, with host paths replaced by named placeholders.

| File | What it is | Class |
| --- | --- | --- |
| `checks/npm-view-20260930.json` | `npm view` of the version: integrity, shasum, tarball URL, engines (no `gitHead` was returned) | registry read |
| `checks/npm-pack-summary-20260930.json` | the JSON `npm pack --json` returned, without its 26,761-entry file list | registry read |
| `checks/tarball-digests-20260930.txt` | sha1, sha256 and sha512 of the file `npm pack` wrote, recomputed at the printed time, and the comparison with the registry's values | our check |
| `checks/install-steps-20260930.txt` | the install script's stamped lines and its directory listings as printed (the two JSON bodies are replaced by a line naming where they are published) | our check |
| `checks/npm-install.log.txt`, `checks/npm-rebuild.log.txt` | the outputs of `npm install` (ERESOLVE peer-dependency warnings, one deprecation notice for `prebuild-install@7.1.3`, a notice that seven packages' install scripts were not run because `allow-scripts` did not cover them, and `added 1153 packages in 2m`) and of the recipe's `npm rebuild` with its allowlist, which ran them (`rebuilt dependencies successfully`) | our check |
| `checks/smoke-summary-20260930.txt`, `checks/smoke-serve-1-excerpt-20260930.txt` | the boot, restart and stop smoke's summary and the first start's matching log lines (long tokens masked by the script); the second start's excerpt was empty and is not published | our check |
| `checks/npm-attestation-20260930.json` | the two attestation statements the registry serves for the version, decoded (no signature or certificate), with the subject digest compared to the tarball's (the probe's argument is the sha512 of `checks/tarball-digests-20260930.txt` in hex) | our check (a read, not a verification) |
| `checks/audit-signatures-20260930.txt` | the output of the audit script: `npm audit signatures` (text) on a throwaway project that installed the package as a dependency | npm's own verification |
| `checks/audit-signatures-summary-20260930.json` | the counts and omniroute's own entry from `npm audit signatures --json --include-attestations` (certificates and log data left out), run once more in the same project | npm's own verification, summarized by our script |
| `checks/audit-signatures-global-refused-20260930.txt` | `npm audit signatures --global` on the smoke-tested prefix: refused (`EAUDITGLOBAL`, exit 1), which is why the audit ran in a throwaway project | npm's own behavior |
| `checks/carry-presence-20260930.json` | counts of the alpha/search route files and of the affinity function in the installed package | our check |
| `scripts/` | `install_npm.sh.txt`, `smoke_npm.sh.txt`, `smoke_inner.sh.txt`, `npm_attestation_probe.py.txt`, `carry_presence_check.py.txt`, `audit_signatures.sh.txt`, `audit_json_summary.py.txt`, `audit_global_refused.sh.txt` | our tools, not upstream |

**Edits to returned outputs** (nothing else differs): the user and group name in directory listings is `<user> <group>`; the smoke's `cwd=` path is `<throwaway directory>/cwd`;
the two JSON bodies inside the install steps are omitted with their line ranges stated; the npm pack JSON lost its file list (its `entryCount` stays). The long-token masking in the
serve excerpt was done by the smoke script itself.

**First smoke run.** A first run of `scripts/smoke_npm.sh.txt` with a wrong prefix argument failed (serve exit 127, an sqlite open error) and its throwaway directory and logs were
deleted, so nothing of it is published; the receipt says so.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[2026-09-30T05:03:51Z] node v24.21.0 npm 11.19.0
[2026-09-30T05:03:51Z] npm init -y
[2026-09-30T05:03:52Z] npm init rc=0
[2026-09-30T05:03:52Z] npm install omniroute@3.8.51 --ignore-scripts --no-audit --no-fund
[2026-09-30T05:05:19Z] npm install rc=0
[2026-09-30T05:05:19Z] installed omniroute version: 3.8.51
[2026-09-30T05:05:19Z] npm audit signatures
[2026-09-30T05:05:32Z] npm audit signatures rc=0
--- audit output (first 40 lines)
audited 1156 packages in 11s

1156 packages have verified registry signatures

233 packages have verified attestations
(use --json --include-attestations to view attestation details)

exit 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
observed_utc=2026-09-30T05:15:02Z
command: npm audit signatures --global --prefix <prefix of the smoke-tested install>
npm error code EAUDITGLOBAL
npm error `npm audit signatures` does not support global packages
npm error A complete log of this run can be found in: <npm cache>/_logs/<timestamp>-debug-0.log
exit 1
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"command": "npm audit signatures --json --include-attestations (npm 11.19.0, throwaway project, host network)",
"command_window_utc": [
"2026-09-30T05:06:19Z",
"2026-09-30T05:06:30Z"
],
"top_level_keys": [
"invalid",
"missing",
"verified"
],
"counts": {
"invalid": 0,
"missing": 0,
"verified": 233
},
"omniroute_entries_in_verified": 1,
"omniroute": {
"name": "omniroute",
"version": "3.8.51",
"location": "node_modules/omniroute",
"registry": "https://registry.npmjs.org/",
"attestation_predicate_types": [
"https://github.com/npm/attestation/tree/main/specs/publish/v0.1",
"https://slsa.dev/provenance/v1"
],
"attestations_url": "https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.51"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"observed_utc": "2026-09-30T05:04:47Z",
"npm 3.8.51 package": {
"build_sha": "c1e30b7",
"alpha/search route files": 0,
"pickMoreAvailableOAuthPeer occurrences": 0,
"files_with_pickMoreAvailableOAuthPeer": 0
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
[2026-09-30T04:44:00Z] node v24.21.0 npm 11.19.0
[2026-09-30T04:44:00Z] npm view (registry facts)
(lines 3 to 11 of the returned output: the JSON that npm view printed, published in full as checks/npm-view-20260930.json)
[2026-09-30T04:44:01Z] npm pack (download the published tarball)
(lines 13 to 133833 of the returned output: the JSON that npm pack --json printed, with its 26761-entry file list, published without that list as checks/npm-pack-summary-20260930.json)
total 134684
drwxr-xr-x 2 <user> <group> 4096 Sep 30 00:44 .
drwxr-xr-x 5 <user> <group> 4096 Sep 30 00:44 ..
-rw-r--r-- 1 <user> <group> 137907369 Sep 30 00:44 omniroute-3.8.51.tgz
[2026-09-30T04:44:05Z] npm install
[2026-09-30T04:45:40Z] npm install rc=0
[2026-09-30T04:45:40Z] npm rebuild (allowlisted scripts)
[2026-09-30T04:45:45Z] npm rebuild rc=0
[2026-09-30T04:45:45Z] omniroute --version: 3.8.51
[2026-09-30T04:45:45Z] BUILD_SHA: c1e30b7
[2026-09-30T04:45:45Z] package.json version: 3.8.51
drwxr-xr-x 2 <user> <group> 4096 Sep 30 00:45 .
drwxr-xr-x 4 <user> <group> 4096 Sep 30 00:45 ..
lrwxrwxrwx 1 <user> <group> 47 Sep 30 00:45 omniroute -> ../lib/node_modules/omniroute/bin/omniroute.mjs
lrwxrwxrwx 1 <user> <group> 52 Sep 30 00:45 omniroute-reset-password -> ../lib/node_modules/omniroute/bin/reset-password.mjs
exit 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{
"observed_utc": "2026-09-30T05:20:00Z",
"url": "https://registry.npmjs.org/-/npm/v1/attestations/omniroute@3.8.51",
"attestation_count": 2,
"statements": [
{
"predicateType": "https://github.com/npm/attestation/tree/main/specs/publish/v0.1",
"statement_type": "https://in-toto.io/Statement/v0.1",
"statement_predicateType": "https://github.com/npm/attestation/tree/main/specs/publish/v0.1",
"envelope_payloadType": "application/vnd.in-toto+json",
"signature_count_in_envelope": 1,
"subject": [
{
"name": "pkg:npm/omniroute@3.8.51",
"digest": {
"sha512": "570c12b7e6cff652623c95c524ccf49cd186ba87b03d95379c57b548bb8ed7500381d4b04de8060b1860f0ebfbe7edf59bf72870fc4788eeb7cf2827d5743431"
}
}
],
"predicate_keys": [
"name",
"registry",
"version"
],
"predicate": {
"name": "omniroute",
"version": "3.8.51",
"registry": "https://registry.npmjs.org"
}
},
{
"predicateType": "https://slsa.dev/provenance/v1",
"statement_type": "https://in-toto.io/Statement/v1",
"statement_predicateType": "https://slsa.dev/provenance/v1",
"envelope_payloadType": "application/vnd.in-toto+json",
"signature_count_in_envelope": 1,
"subject": [
{
"name": "pkg:npm/omniroute@3.8.51",
"digest": {
"sha512": "570c12b7e6cff652623c95c524ccf49cd186ba87b03d95379c57b548bb8ed7500381d4b04de8060b1860f0ebfbe7edf59bf72870fc4788eeb7cf2827d5743431"
}
}
],
"buildType": "https://slsa-framework.github.io/github-actions-buildtypes/workflow/v1",
"workflow": {
"ref": "refs/tags/v3.8.51",
"repository": "https://github.com/diegosouzapw/OmniRoute",
"path": ".github/workflows/npm-publish.yml"
},
"resolvedDependencies": [
{
"uri": "git+https://github.com/diegosouzapw/OmniRoute@refs/tags/v3.8.51",
"digest": {
"gitCommit": "c1e30b7676975feb298b49eff6ff58923c04b89e"
}
}
],
"builder_id": "https://github.com/actions/runner/github-hosted",
"invocationId": "https://github.com/diegosouzapw/OmniRoute/actions/runs/36656344524/attempts/1"
}
],
"subject_sha512_equals_expected_tarball_sha512": true,
"subject_names": [
"pkg:npm/omniroute@3.8.51"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: marked-terminal@7.3.0
npm warn Found: marked@18.0.14
npm warn node_modules/omniroute/node_modules/marked
npm warn marked@"^18.0.11" from omniroute@3.8.51
npm warn node_modules/omniroute
npm warn omniroute@"3.8.51" from the root project
npm warn 2 more (@lobehub/ui, @lobehub/streamdown)
npm warn
npm warn Could not resolve dependency:
npm warn peer marked@">=1 <16" from marked-terminal@7.3.0
npm warn node_modules/omniroute/node_modules/marked-terminal
npm warn marked-terminal@"^7.3.0" from omniroute@3.8.51
npm warn node_modules/omniroute
npm warn
npm warn Conflicting peer dependency: marked@15.0.12
npm warn node_modules/marked
npm warn peer marked@">=1 <16" from marked-terminal@7.3.0
npm warn node_modules/omniroute/node_modules/marked-terminal
npm warn marked-terminal@"^7.3.0" from omniroute@3.8.51
npm warn node_modules/omniroute
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: @emoji-mart/react@1.1.1
npm warn Found: react@19.2.8
npm warn node_modules/omniroute/node_modules/react
npm warn react@"19.2.8" from omniroute@3.8.51
npm warn node_modules/omniroute
npm warn omniroute@"3.8.51" from the root project
npm warn 165 more (@dnd-kit/core, react-dom, @dnd-kit/sortable, ...)
npm warn
npm warn Could not resolve dependency:
npm warn peer react@"^16.8 || ^17 || ^18" from @emoji-mart/react@1.1.1
npm warn node_modules/omniroute/node_modules/@lobehub/ui/node_modules/@emoji-mart/react
npm warn @emoji-mart/react@"^1.1.1" from @lobehub/ui@5.51.2
npm warn node_modules/omniroute/node_modules/@lobehub/ui
npm warn
npm warn Conflicting peer dependency: react@18.3.1
npm warn node_modules/react
npm warn peer react@"^16.8 || ^17 || ^18" from @emoji-mart/react@1.1.1
npm warn node_modules/omniroute/node_modules/@lobehub/ui/node_modules/@emoji-mart/react
npm warn @emoji-mart/react@"^1.1.1" from @lobehub/ui@5.51.2
npm warn node_modules/omniroute/node_modules/@lobehub/ui
npm warn deprecated prebuild-install@7.1.3: No longer maintained. Please contact the author of the relevant native addon; alternatives are available.

added 1153 packages in 2m
npm warn install-scripts 7 packages have install scripts not yet covered by allowScripts:
npm warn install-scripts omniroute@3.8.51 (postinstall: node scripts/build/postinstall.mjs)
npm warn install-scripts keytar@7.9.0 (install: prebuild-install || npm run build)
npm warn install-scripts onnxruntime-node@1.30.0 (postinstall: node ./script/install)
npm warn install-scripts @parcel/watcher@2.6.0 (install: node scripts/build-from-source.js)
npm warn install-scripts @swc/core@1.16.12 (postinstall: node postinstall.js)
npm warn install-scripts protobufjs@7.6.6 (postinstall: node scripts/postinstall)
npm warn install-scripts esbuild@0.28.2 (postinstall: node install.js)
npm warn install-scripts
npm warn install-scripts Run `npm install -g --allow-scripts=omniroute,keytar,onnxruntime-node,@parcel/watcher,@swc/core,protobufjs,esbuild` to allow these scripts once, or `npm config set allow-scripts=omniroute,keytar,onnxruntime-node,@parcel/watcher,@swc/core,protobufjs,esbuild --location=user` to allow them for all global installs.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[
{
"id": "omniroute@3.8.51",
"name": "omniroute",
"version": "3.8.51",
"size": 137907369,
"unpackedSize": 546111751,
"shasum": "12e56f049e617edca50cc17835ea807dbf8c2042",
"integrity": "sha512-VwwSt+bP9lJiPJXFJMz0nNGGuoewPZU3nFe1SLuO11ADgdSwTegGCxhg8Ov75+31m/cocPxHiO63zygn1XQ0MQ==",
"filename": "omniroute-3.8.51.tgz",
"entryCount": 26761,
"bundled": [],
"files": "<26761 entries omitted here; entryCount above is their number>"
}
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@

> @parcel/watcher@2.6.0 install
> node scripts/build-from-source.js


> keytar@7.9.0 install
> prebuild-install || npm run build

(node:373764) [DEP0176] DeprecationWarning: fs.R_OK is deprecated, use fs.constants.R_OK instead
(Use `node --trace-deprecation ...` to show where the warning was created)

> omniroute@3.8.51 postinstall
> node scripts/build/postinstall.mjs

✅ sql.js copied to standalone dist/node_modules.
✅ node-machine-id copied to standalone dist/node_modules.
[sync-env] ✅ .env is up to date (0 keys added)

> @swc/core@1.16.12 postinstall
> node postinstall.js


> esbuild@0.28.2 postinstall
> node install.js


> onnxruntime-node@1.30.0 postinstall
> node ./script/install


> protobufjs@7.6.6 postinstall
> node scripts/postinstall

rebuilt dependencies successfully
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"version": "3.8.51",
"dist.integrity": "sha512-VwwSt+bP9lJiPJXFJMz0nNGGuoewPZU3nFe1SLuO11ADgdSwTegGCxhg8Ov75+31m/cocPxHiO63zygn1XQ0MQ==",
"dist.shasum": "12e56f049e617edca50cc17835ea807dbf8c2042",
"dist.tarball": "https://registry.npmjs.org/omniroute/-/omniroute-3.8.51.tgz",
"engines": {
"node": ">=22.22.2 <23 || >=24.0.0 <27"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
1: 📋 Loaded env from <masked>.env
2: ⚠ PORT in <masked>.env is ignored, the environment set it first
3: ⚠ REQUIRE_API_KEY in <masked>.env is ignored, the environment set it first
5: ✨ Generated STORAGE_ENCRYPTION_KEY in <masked>.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
start=2026-09-30T04:46:36Z cwd=<throwaway directory>/cwd
=== phase 1 start=2026-09-30T04:46:36Z uid=1000
lsof on PATH: /usr/bin/lsof | listeners before: 0
health=200 after 3s
last health code=200 | health body (first 300 bytes): {"status":"ok","timestamp":"2026-09-30T04:46:39.800Z"}
listeners while running: 127.0.0.1:20197 127.0.0.1:20198 127.0.0.1:20199
store (rows, integrity, tables) while running: 193 ok 138
SIGTERM: serve exit code=143 after 0s
listeners after exit: 0
tree/listener pids still alive after exit: none
store after stop (rows, integrity, tables): 193 ok 138
=== phase 2 start=2026-09-30T04:46:46Z uid=1000
lsof on PATH: /usr/bin/lsof | listeners before: 0
health=200 after 4s
last health code=200 | health body (first 300 bytes): {"status":"ok","timestamp":"2026-09-30T04:46:50.802Z"}
listeners while running: 127.0.0.1:20197 127.0.0.1:20198 127.0.0.1:20199
store (rows, integrity, tables) while running: 193 ok 138
SIGTERM: serve exit code=143 after 0s
listeners after exit: 0
tree/listener pids still alive after exit: none
store after stop (rows, integrity, tables): 193 ok 138
data dir entries (names and modes only):
total 5732
drwxr-x--- .
drwxr-xr-x ..
-rw------- .env
drwxr-xr-x logs
drwxr-xr-x server
-rw-r--r-- storage.sqlite
-rw-r--r-- storage.sqlite-shm
-rw-r--r-- storage.sqlite-wal
drwxr-xr-x supervisor
data dir mode 750
end=2026-09-30T04:46:57Z
serve-1.log lines: 28; serve-2.log lines: 29
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
observed_utc=2026-09-30T05:20:00Z
file=omniroute-3.8.51.tgz bytes=137907369
sha1=12e56f049e617edca50cc17835ea807dbf8c2042
sha256=421699fdda34bd85bcf035257e88e359edc033c01b85d54b6a4921c1cda4d2ef
sha512(base64)=sha512-VwwSt+bP9lJiPJXFJMz0nNGGuoewPZU3nFe1SLuO11ADgdSwTegGCxhg8Ov75+31m/cocPxHiO63zygn1XQ0MQ==
registry dist.shasum=12e56f049e617edca50cc17835ea807dbf8c2042
registry dist.integrity=sha512-VwwSt+bP9lJiPJXFJMz0nNGGuoewPZU3nFe1SLuO11ADgdSwTegGCxhg8Ov75+31m/cocPxHiO63zygn1XQ0MQ==
sha1 equals registry dist.shasum: True
sha512 equals registry dist.integrity: True
npm pack size equals bytes: True
Loading
Loading