@ai-ecoverse/slicc-bios 1.16.3 → 1.16.5
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/README.md +2 -0
- package/package.json +3 -3
- package/src/packages/certs.json +4 -0
- package/src/packages/optional/catalog.json +1 -1
- package/src/packages/optional/package-lock.json +4 -4
- package/src/packages/optional/package.json +1 -1
- package/src/packages/package-lock.json +4 -4
- package/src/packages/package.json +1 -1
- package/src/packages/pnpm-lock.yaml +5 -5
package/README.md
CHANGED
|
@@ -487,6 +487,8 @@ Limits:
|
|
|
487
487
|
- **Triggers:** `workflow_dispatch` and `workflow_call` with `overrides`, a JSON list of `name@version` (`["@ai-ecoverse/slicc-kernel@1.81.0"]`), and optionally `runner`, `shards` (names from [`scripts/canary/shards.json`](scripts/canary/shards.json); `follow-chat`, `remote-pydata`, `users-agent-ui`, `packages-update-cdp`, `guard`, `guard-set-extension-prompt`, `guard-set-extension-lagging`, `guard-set-proxy-prompt`, `guard-set-proxy-lagging`, `k4-link`, `user-packages-keys-favicon` and `rest` by default; a shard's `env` in that file, such as `GUARD_VARIANTS`, is set for its tests, or `sweep` for just the base-set sweep and the certs check), `expect` and `bios-ref` (any branch or sha of slicc-bios: the shard jobs check it out and lay this ref's `scripts/canary`, and `sweep.test.mjs` if it has none, over it; a ref whose `pins.test.mjs` has no canary mode gets the candidates in its working copy of `certs.json` instead, and the report still lists them as candidates). A proof in `proofs.json` can name its own `ref` the same way. An hourly `schedule` checks npm's `latest` of every kernel, jsh, cdp, agent, `wasm-*`, `wasi-*`, `wasix-*` and `py-*` package that a `src/packages/**/package.json` pins, and runs once with every newer one as the overrides, only when that list differs from the last scheduled canary's (its inputs are kept in the Actions cache). A `pull_request` trigger, filtered to the canary's own files, runs the proof in [`scripts/canary/proofs.json`](scripts/canary/proofs.json) from one plan job, cancelling a superseded run: kernel 1.78.0 on the `sweep` shard must regress grep, sed, jq, xz, findutils, diffutils and patch with exit 70 (kernel #483). A second proof packs `@ai-ecoverse/slicc-cdp@1.26.2` with `npm pack`, uploads it from the plan job, and runs it as a candidate artifact on `packages-update-cdp` and `guard` with `repeat: 3`.
|
|
488
488
|
- **A candidate from another repo's run:** `candidate-package` (the package it replaces, `@ai-ecoverse/slicc-cdp`), `candidate-artifact` (an artifact holding one `npm pack` tarball of it), `candidate-run` (the run that uploaded it), `candidate-sha256` (the tarball's) and optionally `candidate-repo` (the caller's repository by default). Each shard job downloads the artifact with `github.token`, which under `workflow_call` is the caller's, so the caller's job needs `actions: read`. [`override-pins.mjs`](scripts/canary/override-pins.mjs) checks the tarball's sha256 before it reads anything and refuses a mismatch, then checks the tarball is that package with an exact version. It seeds the harness download cache with the bytes at the npm URL of that version, and rewrites the pins and locks through a local registry that serves npm's packuments with that version added, so an unpublished `x.y.z-pr.N.M` locks like a published one (npm's lock gets the registry URL back). Everything else stays a registry version. The report lists it as `candidate (artifact <run>/<name>, sha256 …)`.
|
|
489
489
|
- **Binding the candidate to its upload:** a call that names a candidate also passes `candidate-artifact-id` and `candidate-artifact-digest`, the `artifact-id` and `artifact-digest` outputs of the step that uploaded it (the digest is the zip's SHA-256, not the tarball's `candidate-sha256`; a `sha256:` prefix is allowed). `candidate-binding` is `strict` by default, and the plan refuses a candidate without both values. Only an explicit `candidate-binding: legacy` takes a candidate by name, as before; runs that name no candidate, such as the schedule and the PR proofs, don't set it. Before anything from the tested ref runs, [`scripts/canary/bind.mjs`](scripts/canary/bind.mjs) reads `GET /repos/{repo}/actions/artifacts/{id}` and `GET /repos/{repo}` and refuses the artifact unless its id, name, `workflow_run.id`, `workflow_run.repository_id` and digest are the bound ones and it hasn't expired. The shard then downloads it by `artifact-ids` with `digest-mismatch: error`, and the tarball's sha256 check stays. The PR proof's tarball is bound the same way, to the plan job's upload step.
|
|
490
|
+
- **The canary's own scripts:** every checkout of its tools (the plan and report jobs, and the `scripts/canary` laid over the tested ref) is `job.workflow_sha`, the commit of the `canary.yml` that defines the job. Under `workflow_call` that is the called workflow's commit, not the caller's (`github.workflow_sha`), so a caller pinned to `canary.yml@<sha>` runs that commit's scripts, whatever `main` holds. The plan job prints `canary tools: PASS|FAIL` and fails unless it checked out that commit. `bios-ref` only picks the tested tree, and an empty one is that same commit.
|
|
491
|
+
- **Callers pinned before the bindings (#523):** a `canary.yml` from before it checks out `main`'s scripts and passes no `CANDIDATE_BINDING`, `CANDIDATE_ARTIFACT_ID` or `CANDIDATE_ARTIFACT_DIGEST` at all, so main's plan takes its candidate by name, as `legacy`, and prints `canary plan: legacy binding, the calling canary.yml passes no candidate-binding`. Its report passes `--prefix <label>-` instead of `--bindings` and `--download`: the report then reads only the planned `<label>-canary-shard-<run>-<shard>` directories of that call's download, and refuses any other directory. The current `canary.yml` always passes `candidate-binding`, so a call through it without an id and a digest stays strict, even with an empty `candidate-binding`.
|
|
490
492
|
- **Digests:** every digest the canary emits is the uploader's `artifact-digest` output, 64 lowercase hex digits with no prefix. The REST API's `digest` field is `sha256:` followed by the same digits, so strip that prefix before comparing.
|
|
491
493
|
- **`artifact-id`, `artifact-digest` and `artifacts`** are `workflow_call` outputs. The first two are the `canary` report artifact's, from the report job's upload step. `artifacts` is a JSON list of `{ role, name, id, digest, attempt }` covering every artifact the call uploaded, in this order: `plan` (the plan job's `canary-inputs` on a schedule, or the PR proof's tarball), then for each planned shard, in plan order, `shard` (`<label>-canary-shard-<run>-<shard>`) and `files` (`<label>-canary-files-<run>-<shard>`, present only when the shard left files), then `report` (`<label>-canary`). Names follow from the trusted plan. Each id and digest is the output of the step that uploaded that artifact, never an API lookup, and a `shard` or `files` row appears only once the report has checked it against the API. `attempt` is the `github.run_attempt` of the job that uploaded it: a job carried over from an earlier attempt keeps its number, and ids come only from the job outputs of the current attempt.
|
|
492
494
|
- **The shards reach the report by their upload steps:** a matrix job's outputs collapse to the last job's, so each shard job writes its rows to its own output, `binding_<strategy.job-index>` (the shard job declares `binding_0` to `binding_15`, and the plan refuses more than 16 jobs). The report job reads them all with `toJSON(needs.shard.outputs)`, checks each planned shard's `shard` and `files` artifacts against the API the same way as the candidate (with this run and this repository), and downloads only the verified `shard` ids. The shard jobs ran the candidate, so this API check, not the shard job, is what ties each id to the one artifact of that name in this run. It refuses a binding for a shard the plan didn't make, a row whose name isn't the planned one (a forged extra suffix), a directory in the download that no verified binding names, a `shard.json` holding another shard, and any download that failed its digest check. Each refusal turns the canary red with `FAIL refused <name>`, and the bindings step prints its own `canary bindings: PASS|FAIL` verdict, which the report requires.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-ecoverse/slicc-bios",
|
|
3
|
-
"version": "1.16.
|
|
3
|
+
"version": "1.16.5",
|
|
4
4
|
"description": "Slim loader that boots SLICC into OPFS and serves the UI from there",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"format": "biome check --write ."
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@ai-ecoverse/slicc": "1.44.
|
|
46
|
-
"@ai-ecoverse/slicc-browsers": "1.8.
|
|
45
|
+
"@ai-ecoverse/slicc": "1.44.4",
|
|
46
|
+
"@ai-ecoverse/slicc-browsers": "1.8.4",
|
|
47
47
|
"@ai-ecoverse/slicc-node": "2.5.1",
|
|
48
48
|
"@ai-ecoverse/slicc-shared-web": "1.23.1",
|
|
49
49
|
"@ai-ecoverse/slicc-spectrum": "1.86.4",
|
package/src/packages/certs.json
CHANGED
|
@@ -288,6 +288,10 @@
|
|
|
288
288
|
"integrity": "sha512-fJhOwmqLaRUP2aojjM5kqYBHEZNtWLwRn0DCwDvWfhfY8qjWJQFKU5Frk6PkvYNXo/xZNdbjvmpCZ7QJvLyKqw==",
|
|
289
289
|
"sha256": "1c454b01709527166e7a2633c9f927b218da3ea992b1710feef82269e66e7c58"
|
|
290
290
|
},
|
|
291
|
+
"@ai-ecoverse/wasix-gnupg@2.4.9-11": {
|
|
292
|
+
"integrity": "sha512-urq5NdBeiHXZ22+cPjcwr49grwYxdW5dIx6BHvyWmkcDbUseCakG5b0tIw3gpb3hmGbf/Xb+IyqE7pZvyZsGzQ==",
|
|
293
|
+
"sha256": "d9268fde1b724a9f5d697055484c975cf43e50c00da384f6175537520dd2b1c9"
|
|
294
|
+
},
|
|
291
295
|
"@ai-ecoverse/wasix-openssh@10.6.0-5": {
|
|
292
296
|
"integrity": "sha512-reI3IU82MFVeAQWWcAlKYvo4W909UZZJt0SrgHkyr6EkbRgcbkKwZNWQH3vHG06t/GRCr+EneoNPS6Yu0sz1rg==",
|
|
293
297
|
"sha256": "e29ae47e9dc7742b0f7e58d4108d98d23f2d9d0b39e719ce8dab3725fd203f1d"
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"@ai-ecoverse/wasi-fnox": "1.39.0-2",
|
|
14
14
|
"@ai-ecoverse/wasi-gh": "2.102.0-1",
|
|
15
15
|
"@ai-ecoverse/wasi-slicc": "1.41.0",
|
|
16
|
-
"@ai-ecoverse/wasix-gnupg": "2.4.9-
|
|
16
|
+
"@ai-ecoverse/wasix-gnupg": "2.4.9-11",
|
|
17
17
|
"@ai-ecoverse/wasix-openssh": "10.6.0-6",
|
|
18
18
|
"@ai-ecoverse/wasix-perl": "5.42.0-11",
|
|
19
19
|
"@ai-ecoverse/wasix-python": "3.14.2-20",
|
|
@@ -105,9 +105,9 @@
|
|
|
105
105
|
}
|
|
106
106
|
},
|
|
107
107
|
"node_modules/@ai-ecoverse/wasix-gnupg": {
|
|
108
|
-
"version": "2.4.9-
|
|
109
|
-
"resolved": "https://registry.npmjs.org/@ai-ecoverse/wasix-gnupg/-/wasix-gnupg-2.4.9-
|
|
110
|
-
"integrity": "sha512-
|
|
108
|
+
"version": "2.4.9-11",
|
|
109
|
+
"resolved": "https://registry.npmjs.org/@ai-ecoverse/wasix-gnupg/-/wasix-gnupg-2.4.9-11.tgz",
|
|
110
|
+
"integrity": "sha512-urq5NdBeiHXZ22+cPjcwr49grwYxdW5dIx6BHvyWmkcDbUseCakG5b0tIw3gpb3hmGbf/Xb+IyqE7pZvyZsGzQ==",
|
|
111
111
|
"license": "GPL-3.0-or-later",
|
|
112
112
|
"engines": {
|
|
113
113
|
"slicc-kernel": ">=1.117.2"
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"@ai-ecoverse/wasi-fnox": "1.39.0-2",
|
|
11
11
|
"@ai-ecoverse/wasi-gh": "2.102.0-1",
|
|
12
12
|
"@ai-ecoverse/wasi-slicc": "1.41.0",
|
|
13
|
-
"@ai-ecoverse/wasix-gnupg": "2.4.9-
|
|
13
|
+
"@ai-ecoverse/wasix-gnupg": "2.4.9-11",
|
|
14
14
|
"@ai-ecoverse/wasix-openssh": "10.6.0-6",
|
|
15
15
|
"@ai-ecoverse/wasix-perl": "5.42.0-11",
|
|
16
16
|
"@ai-ecoverse/wasix-python": "3.14.2-20",
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"": {
|
|
7
7
|
"name": "slicc-bios-packages",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@ai-ecoverse/slicc-browsers": "1.8.
|
|
9
|
+
"@ai-ecoverse/slicc-browsers": "1.8.4",
|
|
10
10
|
"@ai-ecoverse/slicc-cdp": "1.26.2",
|
|
11
11
|
"@ai-ecoverse/slicc-clipboard": "1.0.2",
|
|
12
12
|
"@ai-ecoverse/slicc-kernel": "1.124.2",
|
|
@@ -37,9 +37,9 @@
|
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
"node_modules/@ai-ecoverse/slicc-browsers": {
|
|
40
|
-
"version": "1.8.
|
|
41
|
-
"resolved": "https://registry.npmjs.org/@ai-ecoverse/slicc-browsers/-/slicc-browsers-1.8.
|
|
42
|
-
"integrity": "sha512-
|
|
40
|
+
"version": "1.8.4",
|
|
41
|
+
"resolved": "https://registry.npmjs.org/@ai-ecoverse/slicc-browsers/-/slicc-browsers-1.8.4.tgz",
|
|
42
|
+
"integrity": "sha512-SQGv6pPAsMvnhNI2L7ShDukO2hD61ZZotsTq0PmBVyoglwThB3loSFdUtjUqGI3z6Ds83nZ6UBOSoJVPmqF4Uw==",
|
|
43
43
|
"license": "Apache-2.0",
|
|
44
44
|
"engines": {
|
|
45
45
|
"node": ">=24"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"private": true,
|
|
4
4
|
"description": "Packages the BIOS installs from npm into OPFS, pinned by package-lock.json and pnpm-lock.yaml",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@ai-ecoverse/slicc-browsers": "1.8.
|
|
6
|
+
"@ai-ecoverse/slicc-browsers": "1.8.4",
|
|
7
7
|
"@ai-ecoverse/slicc-cdp": "1.26.2",
|
|
8
8
|
"@ai-ecoverse/slicc-clipboard": "1.0.2",
|
|
9
9
|
"@ai-ecoverse/slicc-kernel": "1.124.2",
|
|
@@ -9,8 +9,8 @@ importers:
|
|
|
9
9
|
.:
|
|
10
10
|
dependencies:
|
|
11
11
|
'@ai-ecoverse/slicc-browsers':
|
|
12
|
-
specifier: 1.8.
|
|
13
|
-
version: 1.8.
|
|
12
|
+
specifier: 1.8.4
|
|
13
|
+
version: 1.8.4
|
|
14
14
|
'@ai-ecoverse/slicc-cdp':
|
|
15
15
|
specifier: 1.26.2
|
|
16
16
|
version: 1.26.2
|
|
@@ -95,8 +95,8 @@ importers:
|
|
|
95
95
|
|
|
96
96
|
packages:
|
|
97
97
|
|
|
98
|
-
'@ai-ecoverse/slicc-browsers@1.8.
|
|
99
|
-
resolution: {integrity: sha512-
|
|
98
|
+
'@ai-ecoverse/slicc-browsers@1.8.4':
|
|
99
|
+
resolution: {integrity: sha512-SQGv6pPAsMvnhNI2L7ShDukO2hD61ZZotsTq0PmBVyoglwThB3loSFdUtjUqGI3z6Ds83nZ6UBOSoJVPmqF4Uw==}
|
|
100
100
|
engines: {node: '>=24'}
|
|
101
101
|
|
|
102
102
|
'@ai-ecoverse/slicc-cdp@1.26.2':
|
|
@@ -200,7 +200,7 @@ packages:
|
|
|
200
200
|
|
|
201
201
|
snapshots:
|
|
202
202
|
|
|
203
|
-
'@ai-ecoverse/slicc-browsers@1.8.
|
|
203
|
+
'@ai-ecoverse/slicc-browsers@1.8.4': {}
|
|
204
204
|
|
|
205
205
|
'@ai-ecoverse/slicc-cdp@1.26.2': {}
|
|
206
206
|
|