Gate: PASS (exit 0)
0 new, 1 gone in the unclaimed set since the forecast of 2026-10-15T19:51:41.408Z (sha-c867ee8), beside the same baseline 17.0.0. By artefact: timing +0 −1. The previous forecast was judged by harness 1.37.4, this one by 1.39.0: a harness change can move differences too.
Gone since then: timing student-signs-in: journey student-signs-in slower on b: median 3435ms → 8479ms (+147%, p=0.012, n=5/5; smallest slowdown 5/5 runs could detect: about 70%).
RCS 80 Amber: ship only after the reviewer's glance is recorded verified
None: no unclaimed difference.
weighted mean 80.07 over 5 of 8 dimensions measured (weight 70 of 100, renormalised); the rest are not measured and not counted.
Change risk 27 (100 − 73), v17.0.0..c867ee87107a603c3d1ea34be9ff70beab119ee2: 7 of 9 PRs carry a finding.
Not measured: orphan entries (a changelog entry with no diff) (CHANGELOG.md at c867ee87107a603c3d1ea34be9ff70beab119ee2 has no "### vc867ee87107a603c3d1ea34be9ff70beab119ee2" entries under a product section).
Contributor lines are for trends and glances, never for reviewing people: a first contribution is a fact and costs nothing on its own. Every deduction is in changes.json.
release pass2026-10-15T21:21:41.791Z · clock 2026-09-16T09:05:00.000Z · 5 run(s) per side · harness 1.39.0
dom replay:talk-01: replay:talk-01: semantic DOM differs (+60 −0 lines at line 1)network GET /_app/immutable/chunks/{{hash}}.js: replay:talk-01: GET /_app/immutable/chunks/{{hash}}.js requested 35× on a, 36× on a2network GET {{course}}/tutors.json: replay:talk-01: new request on a2: GET {{course}}/tutors.jsonnetwork GET /_app/immutable/assets/1.{{hash}}.css: replay:talk-01: new request on a2: GET /_app/immutable/assets/1.{{hash}}.cssnetwork GET /_app/immutable/nodes/1.{{hash}}.js: replay:talk-01: new request on a2: GET /_app/immutable/nodes/1.{{hash}}.jsnetwork GET /talk/localhost:8080/unit-1/topic-01/talk-01/__data.json?x-sveltekit-invalidated=100: replay:talk-01: new request on a2: GET /talk/localhost:8080/unit-1/topic-01/talk-01/__data.json?x-sveltekit-invalidated=100| a | b | |
|---|---|---|
| reader | quay.io/tutors-sdk/tutors-reader:17.0.0 | quay.io/tutors-sdk/tutors-reader:sha-c867ee8 |
| catalogue | quay.io/tutors-sdk/tutors-catalogue:17.0.0 | quay.io/tutors-sdk/tutors-catalogue:sha-c867ee8 |
| live | quay.io/tutors-sdk/tutors-live:17.0.0 | quay.io/tutors-sdk/tutors-live:sha-c867ee8 |
| time | quay.io/tutors-sdk/tutors-time:17.0.0 | quay.io/tutors-sdk/tutors-time:sha-c867ee8 |
| provenance | a — pulled+verified | b — pulled+verified |
|---|---|---|
| reader | digest sha256:15e3aa22476d608db97e05917b1990ade0a7871e7ec6e113da5fec741b427233revision 432d46864626version 17.0.0-rc.1 | digest sha256:d72750b7cc2f11aa0cb60226f8fbcd434cbb07da9a867715a98c897426b757e0revision c867ee87107aversion sha-c867ee8 |
| catalogue | digest sha256:e9f2764654cb074d7dd4412ca163bf4c2666870444d5520361d5425bda4cec0brevision 432d46864626version 17.0.0-rc.1 | digest sha256:21ce90483d4de95247f85c1e2593ac7caedd87adb65215367805bc9e638eae3drevision c867ee87107aversion sha-c867ee8 |
| live | digest sha256:52740e55cfa7e7db3b2944137caada4e876990b937f1034c0c5e79796054f8a0revision 432d46864626version 17.0.0-rc.1 | digest sha256:5aee8b0d07dc699002d64e28f2cf42c28045c64d3d9e638ff32bc432021cc51arevision c867ee87107aversion sha-c867ee8 |
| time | digest sha256:d0a9f4a2f4624038ecea3629d1a536567756d458410bee43b45e060d738d195drevision 432d46864626version 17.0.0-rc.1 | digest sha256:13b46ba247e41534e91796cfde73f929d086e62f633501cc6b22c4475eb919f3revision c867ee87107aversion sha-c867ee8 |
Collected from the images, not the running apps. A cell that says NOT COLLECTED was not compared.
| app | artefact | a | b |
|---|---|---|---|
| reader | manifest | 10 layers, 309.2 MB, USER 1001, ports 3000/tcp (docker image inspect) | 10 layers, 308.9 MB, USER 1001, ports 3000/tcp (docker image inspect) |
| reader | sbom | 134 distinct package(s) (cosign attestation (signature verified)) | 134 distinct package(s) (cosign attestation (signature verified)) |
| reader | vulns | 94 advisories, db built 2026-10-15T06:30:36Z schema v6.1.10, OpenVEX openvex.json (0 statement(s)): none set aside (grype 0.119.0) | 94 advisories, db built 2026-10-15T06:30:36Z schema v6.1.10, OpenVEX openvex.json (0 statement(s)): none set aside (grype 0.119.0) |
| catalogue | manifest | 10 layers, 274.2 MB, USER 1001, ports 3000/tcp (docker image inspect) | 10 layers, 274.2 MB, USER 1001, ports 3000/tcp (docker image inspect) |
| catalogue | sbom | 134 distinct package(s) (cosign attestation (signature verified)) | 134 distinct package(s) (cosign attestation (signature verified)) |
| catalogue | vulns | 94 advisories, db built 2026-10-15T06:30:36Z schema v6.1.10, OpenVEX openvex.json (0 statement(s)): none set aside (grype 0.119.0) | 94 advisories, db built 2026-10-15T06:30:36Z schema v6.1.10, OpenVEX openvex.json (0 statement(s)): none set aside (grype 0.119.0) |
| live | manifest | 10 layers, 274.5 MB, USER 1001, ports 3000/tcp (docker image inspect) | 10 layers, 274.5 MB, USER 1001, ports 3000/tcp (docker image inspect) |
| live | sbom | 134 distinct package(s) (cosign attestation (signature verified)) | 134 distinct package(s) (cosign attestation (signature verified)) |
| live | vulns | 94 advisories, db built 2026-10-15T06:30:36Z schema v6.1.10, OpenVEX openvex.json (0 statement(s)): none set aside (grype 0.119.0) | 94 advisories, db built 2026-10-15T06:30:36Z schema v6.1.10, OpenVEX openvex.json (0 statement(s)): none set aside (grype 0.119.0) |
| time | manifest | 10 layers, 285.2 MB, USER 1001, ports 3000/tcp (docker image inspect) | 10 layers, 285.2 MB, USER 1001, ports 3000/tcp (docker image inspect) |
| time | sbom | 143 distinct package(s) (cosign attestation (signature verified)) | 143 distinct package(s) (cosign attestation (signature verified)) |
| time | vulns | 94 advisories, db built 2026-10-15T06:30:36Z schema v6.1.10, OpenVEX openvex.json (0 statement(s)): none set aside (grype 0.119.0) | 94 advisories, db built 2026-10-15T06:30:36Z schema v6.1.10, OpenVEX openvex.json (0 statement(s)): none set aside (grype 0.119.0) |
| side | requests | failed | 5xx | p50 | p95 |
|---|---|---|---|---|---|
| a | 601 | 0 | 0 | 1.42 ms | 2.83 ms |
| b | 601 | 0 | 0 | 1.42 ms | 2.46 ms |
| artefact | scope | what changed | claimed by |
|---|---|---|---|
network | POST /api/live/activity/course/localhost:8080 | reader-auth:course: new request on b: POST /api/live/activity | Rule 0330: When a student opens a learning object, the reader shall send the learning event to the reader's server without publishing it over Realtime from the browser. — Rule 0330: the reader sends each learning event to its own server (POST /api/live/activity) instead of broadcasting it from the browser (#481) |
network | POST /api/live/activity/topic/localhost:8080/unit-1/topic-01 | reader-auth:topic: new request on b: POST /api/live/activity | Rule 0330: When a student opens a learning object, the reader shall send the learning event to the reader's server without publishing it over Realtime from the browser. — Rule 0330: the reader sends each learning event to its own server (POST /api/live/activity) instead of broadcasting it from the browser (#481) |
network | GET /_app/immutable/chunks/{{hash}}.js/course/reference-course | reference:course: GET /_app/immutable/chunks/{{hash}}.js requested 43× on a, 44× on b | Rule 0330: When a student opens a learning object, the reader shall send the learning event to the reader's server without publishing it over Realtime from the browser. — Rule 0330: moving learning events from browser Realtime to the reader's server adds one immutable chunk on reference:course and reference:note (#478, #481) |
network | GET /_app/immutable/chunks/{{hash}}.js/note/reference-course/topic-07-reference/note-1 | reference:note: GET /_app/immutable/chunks/{{hash}}.js requested 39× on a, 40× on b | Rule 0330: When a student opens a learning object, the reader shall send the learning event to the reader's server without publishing it over Realtime from the browser. — Rule 0330: moving learning events from browser Realtime to the reader's server adds one immutable chunk on reference:course and reference:note (#478, #481) |
console | catalogue:home/ | catalogue:home: console message gone on bdetailerror: {"app":"tutors-catalogue","environment":"production","error":"Cannot read properties of undefined (reading 'from')","stack":"TypeError: Cannot read properties of undefined (reading 'from')\n at Object.getCatalogue ({{origin}}/_app/immutable/chunks/2lYorbfj.js:69:102918)\n at V ({{origin}}/_app/immutable/nodes/2.NAkx_ofm.js:1:484)\n at Wn ({{origin}}/_app/immutable/chunks/XgCIYxIE.js:2:24206)","timestamp":"2026-09-16T09:05:00.000Z","level":"error","message":"Error fetching courses:"} | informational |
console | catalogue:home/ | catalogue:home: console message gone on bdetailerror: {"app":"tutors-catalogue","environment":"production","error":"Cannot read properties of undefined (reading 'from')","stack":"TypeError: Cannot read properties of undefined (reading 'from')\n at Object.getStudentCount ({{origin}}/_app/immutable/chunks/2lYorbfj.js:69:103346)\n at {{origin}}/_app/immutable/nodes/2.NAkx_ofm.js:1:5193\n at Cr ({{origin}}/_app/immutable/chunks/Cv2zGAZD.js:1:23871)\n at {{origin}}/_app/immutable/chunks/Cv2zGAZD.js:2:2704\n at mr ({{origin}}/_app/immutable/chunks/Cv2zGAZD.js:1:21611)\n at vr ({{origin}}/_app/immutable/chunks/Cv2zGAZD.js:1:22749)\n at Xt ({{origin}}/_app/immutable/chunks/Cv2zGAZD.js:1:12091)\n at #_ ({{origin}}/_app/immutable/chunks/Cv2zGAZD.js:1:9277)\n at e.flush ({{origin}}/_app/immutable/chunks/Cv2zGAZD.js:1:10794)\n at Array.<anonymous> ({{origin}}/_app/immutable/chunks/Cv2zGAZD.js:1:11554)","timestamp":"2026-09-16T09:05:00.000Z","level":"error","message":"Error fetching course count:"} | informational |
persistence | student-signs-in/realtime_claim_live_publish | student-signs-in: RPC realtime_claim_live_publish — 0 row(s) on a, 2 on b | Rule 0331: When the reader's server receives a learning event, the reader shall publish it only to the activity feeds a live dashboard has watched in the last 90 seconds. — Rule 0331: the reader's server claims the topics to publish to, and charges the day's Live budget, through realtime_claim_live_publish (#481) |
realtime | reader-auth/messages | reader-auth: Realtime messages per reader page view fell: a 1.33 / b 0 per reader page (broadcasts a 4 / b 0, socket data frames a 0 / b 0, over 3 page view(s)) | informational |
runtime | runtime/summary | container posture collected for catalogue, live, reader, reader-auth, time on both sides (compose)detailcatalogue: a — uid 1001:0, caps none, root fs ro, /tmp rw, no-new-privileges, seccomp filter
b — uid 1001:0, caps none, root fs ro, /tmp rw, no-new-privileges, seccomp filter
live: a — uid 1001:0, caps none, root fs ro, /tmp rw, no-new-privileges, seccomp filter
b — uid 1001:0, caps none, root fs ro, /tmp rw, no-new-privileges, seccomp filter
reader: a — uid 1001:0, caps none, root fs ro, /tmp rw, no-new-privileges, seccomp filter
b — uid 1001:0, caps none, root fs ro, /tmp rw, no-new-privileges, seccomp filter
reader-auth: a — uid 1001:0, caps none, root fs ro, /tmp rw, no-new-privileges, seccomp filter
b — uid 1001:0, caps none, root fs ro, /tmp rw, no-new-privileges, seccomp filter
time: a — uid 1001:0, caps none, root fs ro, /tmp rw, no-new-privileges, seccomp filter
b — uid 1001:0, caps none, root fs ro, /tmp rw, no-new-privileges, seccomp filter | informational |
startup | startup/summary | startup time collected on both sides (compose, 5 restart(s) per app)detailcatalogue: first healthy / 488 → 482 ms, ready 2376 → 2370 ms (median, a → b, n=5/5) live: first healthy / 454 → 493 ms, ready 2311 → 2339 ms (median, a → b, n=5/5) reader: first healthy / 598 → 612 ms, ready 2362 → 2367 ms (median, a → b, n=5/5) time: first healthy / 471 → 453 ms, ready 2436 → 2326 ms (median, a → b, n=5/5) | informational |
image-hardening | reader/healthcheck | reader: declares no HEALTHCHECK (production too) | informing (reported, never gates) |
image-hardening | catalogue/healthcheck | catalogue: declares no HEALTHCHECK (production too) | informing (reported, never gates) |
image-hardening | live/healthcheck | live: declares no HEALTHCHECK (production too) | informing (reported, never gates) |
image-hardening | time/healthcheck | time: declares no HEALTHCHECK (production too) | informing (reported, never gates) |
build-provenance | reader/slsa | reader: carries no SLSA provenance verified under the publishing identity on d72750b7cc2f (production too) | informing (reported, never gates) |
build-provenance | catalogue/slsa | catalogue: carries no SLSA provenance verified under the publishing identity on 21ce90483d4d (production too) | informing (reported, never gates) |
build-provenance | live/slsa | live: carries no SLSA provenance verified under the publishing identity on 5aee8b0d07dc (production too) | informing (reported, never gates) |
build-provenance | time/slsa | time: carries no SLSA provenance verified under the publishing identity on 13b46ba247e4 (production too) | informing (reported, never gates) |
vuln-ceiling | reader/summary | reader: vuln-ceiling holds on b: 94 advisories scanned, 20 critical or high, none with a fix available | informational |
vuln-ceiling | catalogue/summary | catalogue: vuln-ceiling holds on b: 94 advisories scanned, 20 critical or high, none with a fix available | informational |
vuln-ceiling | live/summary | live: vuln-ceiling holds on b: 94 advisories scanned, 20 critical or high, none with a fix available | informational |
vuln-ceiling | time/summary | time: vuln-ceiling holds on b: 94 advisories scanned, 20 critical or high, none with a fix available | informational |
asset-graph | reader | reader: the asset graph changed: 173 → 173 immutable requests (JS 142 → 142, CSS 31 → 31), 1.6 MB → 1.6 MB; 0 network and 0 headers difference(s) are this churn | informing (reported, never gates) |
asset-graph | catalogue | catalogue: the asset graph changed: 19 → 19 immutable requests (JS 15 → 15, CSS 4 → 4), 529 KB → 530 KB; 0 network and 0 headers difference(s) are this churn | informing (reported, never gates) |
asset-graph | live | live: the asset graph changed: 24 → 24 immutable requests (JS 19 → 19, CSS 5 → 5), 540 KB → 542 KB; 0 network and 0 headers difference(s) are this churn | informing (reported, never gates) |
asset-graph | reader-auth | reader-auth: the asset graph changed: 96 → 96 immutable requests (JS 83 → 83, CSS 13 → 13), 1.0 MB → 1.0 MB; 0 network and 0 headers difference(s) are this churn | informing (reported, never gates) |
asset-graph | reference | reference: the asset graph changed: 121 → 123 immutable requests (JS 99 → 101, CSS 22 → 22), 1.2 MB → 1.2 MB; 2 network and 0 headers difference(s) are this churn | informing (reported, never gates) |
replay | replay:talk-01 GET /_app/immutable/chunks/{{hash}}.js/talk/localhost:8080/unit-1/topic-01/talk-01 | replay:talk-01: GET /_app/immutable/chunks/{{hash}}.js requested 35× on a, 39× on b | informing (reported, never gates) |
replay | replay:talk-01 GET {{course}}/tutors.json/talk/localhost:8080/unit-1/topic-01/talk-01 | replay:talk-01: new request on b: GET {{course}}/tutors.json | informing (reported, never gates) |
replay | replay:talk-01 GET /_app/immutable/assets/1.{{hash}}.css/talk/localhost:8080/unit-1/topic-01/talk-01 | replay:talk-01: new request on b: GET /_app/immutable/assets/1.{{hash}}.css | informing (reported, never gates) |
replay | replay:talk-01 GET /_app/immutable/nodes/1.{{hash}}.js/talk/localhost:8080/unit-1/topic-01/talk-01 | replay:talk-01: new request on b: GET /_app/immutable/nodes/1.{{hash}}.js | informing (reported, never gates) |
replay | replay:talk-01 GET /talk/localhost:8080/unit-1/topic-01/talk-01/__data.json?x-sveltekit-invalidated=100/talk/localhost:8080/unit-1/topic-01/talk-01 | replay:talk-01: new request on b: GET /talk/localhost:8080/unit-1/topic-01/talk-01/__data.json?x-sveltekit-invalidated=100 | informing (reported, never gates) |
replay | replay:note-01 GET {{course}}/tutors.json/note/localhost:8080/unit-1/topic-01/note-01 | replay:note-01: GET {{course}}/tutors.json requested 2× on a, 1× on b | informing (reported, never gates) |
replay | replay:note-01 GET /_app/immutable/assets/1.{{hash}}.css/note/localhost:8080/unit-1/topic-01/note-01 | replay:note-01: GET /_app/immutable/assets/1.{{hash}}.css requested 2× on a, 1× on b | informing (reported, never gates) |
replay | replay:note-01 GET /_app/immutable/chunks/{{hash}}.js/note/localhost:8080/unit-1/topic-01/note-01 | replay:note-01: GET /_app/immutable/chunks/{{hash}}.js requested 39× on a, 38× on b | informing (reported, never gates) |
replay | replay:note-01 GET /_app/immutable/nodes/1.{{hash}}.js/note/localhost:8080/unit-1/topic-01/note-01 | replay:note-01: GET /_app/immutable/nodes/1.{{hash}}.js requested 2× on a, 1× on b | informing (reported, never gates) |
replay | replay:note-01 GET /talk/localhost:8080/unit-1/topic-01/talk-01/__data.json?x-sveltekit-invalidated=100/note/localhost:8080/unit-1/topic-01/note-01 | replay:note-01: request no longer made on b: GET /talk/localhost:8080/unit-1/topic-01/talk-01/__data.json?x-sveltekit-invalidated=100 | informing (reported, never gates) |
replay | replay:note-02 GET {{course}}/tutors.json/note/localhost:8080/unit-1/topic-02/note-02 | replay:note-02: request no longer made on b: GET {{course}}/tutors.json | informing (reported, never gates) |
replay | replay:note-02 GET /_app/immutable/assets/1.{{hash}}.css/note/localhost:8080/unit-1/topic-02/note-02 | replay:note-02: request no longer made on b: GET /_app/immutable/assets/1.{{hash}}.css | informing (reported, never gates) |
replay | replay:note-02 GET /_app/immutable/chunks/{{hash}}.js/note/localhost:8080/unit-1/topic-02/note-02 | replay:note-02: GET /_app/immutable/chunks/{{hash}}.js requested 38× on a, 37× on b | informing (reported, never gates) |
replay | replay:note-02 GET /_app/immutable/nodes/1.{{hash}}.js/note/localhost:8080/unit-1/topic-02/note-02 | replay:note-02: request no longer made on b: GET /_app/immutable/nodes/1.{{hash}}.js | informing (reported, never gates) |
replay | replay:note-02 GET /note/localhost:8080/unit-1/topic-02/note-02/__data.json?x-sveltekit-invalidated=100/note/localhost:8080/unit-1/topic-02/note-02 | replay:note-02: request no longer made on b: GET /note/localhost:8080/unit-1/topic-02/note-02/__data.json?x-sveltekit-invalidated=100 | informing (reported, never gates) |
replay | replay:lab-02-step-03 GET /_app/immutable/assets/1.{{hash}}.css/lab/localhost:8080/unit-1/topic-02/book-lab-01/Step-03 | replay:lab-02-step-03: GET /_app/immutable/assets/1.{{hash}}.css requested 1× on a, 2× on b | informing (reported, never gates) |
replay | replay:lab-02-step-03 GET /_app/immutable/chunks/{{hash}}.js/lab/localhost:8080/unit-1/topic-02/book-lab-01/Step-03 | replay:lab-02-step-03: GET /_app/immutable/chunks/{{hash}}.js requested 38× on a, 39× on b | informing (reported, never gates) |
replay | replay:lab-02-step-03 GET /_app/immutable/nodes/1.{{hash}}.js/lab/localhost:8080/unit-1/topic-02/book-lab-01/Step-03 | replay:lab-02-step-03: GET /_app/immutable/nodes/1.{{hash}}.js requested 1× on a, 2× on b | informing (reported, never gates) |
replay | replay:lab-02-step-03 GET /note/localhost:8080/unit-1/topic-02/note-02/__data.json?x-sveltekit-invalidated=100/lab/localhost:8080/unit-1/topic-02/book-lab-01/Step-03 | replay:lab-02-step-03: new request on b: GET /note/localhost:8080/unit-1/topic-02/note-02/__data.json?x-sveltekit-invalidated=100 | informing (reported, never gates) |
slo | reader-availability | reader-availability: 100.0% of 62 reader requests not 5xx on b (its /metrics across the journeys), objective 99.90% (harness floor; monorepo 99.50%): holds | informational |
slo | reader-availability/load | reader-availability: 100.0% of 601 reader requests not 5xx on b (the k6 load leg), objective 99.90% (harness floor; monorepo 99.50%): holds | informational |
slo | reader-latency | reader-latency: 100.0% of 62 reader requests under 1s on b (its /metrics across the journeys), objective 99.0% (harness floor; monorepo 95.0%): holds | informational |
slo | reader-latency/load | reader-latency: 100.0% of 601 reader requests under 1s on b (the k6 load leg), objective 99.0% (harness floor; monorepo 95.0%): holds | informational |
slo | catalogue-availability/not-evaluated | catalogue-availability: not evaluated on b: 5 request(s) from its /metrics across the journeys, fewer than 20 | informational |
slo | catalogue-latency/not-evaluated | catalogue-latency: not evaluated on b: 5 request(s) from its /metrics across the journeys, fewer than 20 | informational |
slo | live-availability/not-evaluated | live-availability: not evaluated on b: 5 request(s) from its /metrics across the journeys, fewer than 20 | informational |
slo | live-latency/not-evaluated | live-latency: not evaluated on b: 5 request(s) from its /metrics across the journeys, fewer than 20 | informational |
slo | time-availability/not-evaluated | time-availability: not evaluated on b: its /metrics across the journeys carries no availability SLI for time | informational |
slo | time-latency/not-evaluated | time-latency: not evaluated on b: its /metrics across the journeys carries no latency SLI for time | informational |
slo | reader-latency-tail | reader-latency-tail: 100.0% of 62 reader requests under 2.5s on b (its /metrics across the journeys), objective 99.0%: holds | informational |
slo | reader-latency-tail/load | reader-latency-tail: 100.0% of 601 reader requests under 2.5s on b (the k6 load leg), objective 99.0%: holds | informational |
Checks on the candidate alone, whatever production is: image hardening (root user, no healthcheck, a secret in the environment or the layer history), build provenance (SLSA provenance from image-build.yml) and the vulnerability ceiling (a critical or high advisory with a fix available). Informing: reported, never gates; a claim can still cover a finding. Hover a cell for what was checked.
| app | image-hardening | build-provenance | vuln-ceiling |
|---|---|---|---|
reader | 1 finding (1 on production too) | 1 finding (1 on production too) | holds |
catalogue | 1 finding (1 on production too) | 1 finding (1 on production too) | holds |
live | 1 finding (1 on production too) | 1 finding (1 on production too) | holds |
time | 1 finding (1 on production too) | 1 finding (1 on production too) | holds |
18 of 27 engines are blocking; informing (reported, never gates): timing (no date set to block; load/errors still blocks), image-hardening (no date set to block), build-provenance (no date set to block), vuln-ceiling (no date set to block), timing-tolerance (no date set to block), asset-graph (no date set to block), replay (no date set to block), slo (no date set to block), realtime (no date set to block). An informing engine's findings are listed here and never change the verdict, the Gate or the exit code; a claim can still cover one.
| engine | scope | what it found | level | claimed by |
|---|---|---|---|---|
image-hardening | reader/healthcheck | reader: declares no HEALTHCHECK (production too) | no date set | unclaimed |
image-hardening | catalogue/healthcheck | catalogue: declares no HEALTHCHECK (production too) | no date set | unclaimed |
image-hardening | live/healthcheck | live: declares no HEALTHCHECK (production too) | no date set | unclaimed |
image-hardening | time/healthcheck | time: declares no HEALTHCHECK (production too) | no date set | unclaimed |
build-provenance | reader/slsa | reader: carries no SLSA provenance verified under the publishing identity on d72750b7cc2f (production too) | no date set | unclaimed |
build-provenance | catalogue/slsa | catalogue: carries no SLSA provenance verified under the publishing identity on 21ce90483d4d (production too) | no date set | unclaimed |
build-provenance | live/slsa | live: carries no SLSA provenance verified under the publishing identity on 5aee8b0d07dc (production too) | no date set | unclaimed |
build-provenance | time/slsa | time: carries no SLSA provenance verified under the publishing identity on 13b46ba247e4 (production too) | no date set | unclaimed |
asset-graph | reader | reader: the asset graph changed: 173 → 173 immutable requests (JS 142 → 142, CSS 31 → 31), 1.6 MB → 1.6 MB; 0 network and 0 headers difference(s) are this churn | no date set | unclaimed |
asset-graph | catalogue | catalogue: the asset graph changed: 19 → 19 immutable requests (JS 15 → 15, CSS 4 → 4), 529 KB → 530 KB; 0 network and 0 headers difference(s) are this churn | no date set | unclaimed |
asset-graph | live | live: the asset graph changed: 24 → 24 immutable requests (JS 19 → 19, CSS 5 → 5), 540 KB → 542 KB; 0 network and 0 headers difference(s) are this churn | no date set | unclaimed |
asset-graph | reader-auth | reader-auth: the asset graph changed: 96 → 96 immutable requests (JS 83 → 83, CSS 13 → 13), 1.0 MB → 1.0 MB; 0 network and 0 headers difference(s) are this churn | no date set | unclaimed |
asset-graph | reference | reference: the asset graph changed: 121 → 123 immutable requests (JS 99 → 101, CSS 22 → 22), 1.2 MB → 1.2 MB; 2 network and 0 headers difference(s) are this churn | no date set | unclaimed |
replay | replay:talk-01 GET /_app/immutable/chunks/{{hash}}.js | replay:talk-01: GET /_app/immutable/chunks/{{hash}}.js requested 35× on a, 39× on b | no date set | unclaimed |
replay | replay:talk-01 GET {{course}}/tutors.json | replay:talk-01: new request on b: GET {{course}}/tutors.json | no date set | unclaimed |
replay | replay:talk-01 GET /_app/immutable/assets/1.{{hash}}.css | replay:talk-01: new request on b: GET /_app/immutable/assets/1.{{hash}}.css | no date set | unclaimed |
replay | replay:talk-01 GET /_app/immutable/nodes/1.{{hash}}.js | replay:talk-01: new request on b: GET /_app/immutable/nodes/1.{{hash}}.js | no date set | unclaimed |
replay | replay:talk-01 GET /talk/localhost:8080/unit-1/topic-01/talk-01/__data.json?x-sveltekit-invalidated=100 | replay:talk-01: new request on b: GET /talk/localhost:8080/unit-1/topic-01/talk-01/__data.json?x-sveltekit-invalidated=100 | no date set | unclaimed |
replay | replay:note-01 GET {{course}}/tutors.json | replay:note-01: GET {{course}}/tutors.json requested 2× on a, 1× on b | no date set | unclaimed |
replay | replay:note-01 GET /_app/immutable/assets/1.{{hash}}.css | replay:note-01: GET /_app/immutable/assets/1.{{hash}}.css requested 2× on a, 1× on b | no date set | unclaimed |
replay | replay:note-01 GET /_app/immutable/chunks/{{hash}}.js | replay:note-01: GET /_app/immutable/chunks/{{hash}}.js requested 39× on a, 38× on b | no date set | unclaimed |
replay | replay:note-01 GET /_app/immutable/nodes/1.{{hash}}.js | replay:note-01: GET /_app/immutable/nodes/1.{{hash}}.js requested 2× on a, 1× on b | no date set | unclaimed |
replay | replay:note-01 GET /talk/localhost:8080/unit-1/topic-01/talk-01/__data.json?x-sveltekit-invalidated=100 | replay:note-01: request no longer made on b: GET /talk/localhost:8080/unit-1/topic-01/talk-01/__data.json?x-sveltekit-invalidated=100 | no date set | unclaimed |
replay | replay:note-02 GET {{course}}/tutors.json | replay:note-02: request no longer made on b: GET {{course}}/tutors.json | no date set | unclaimed |
replay | replay:note-02 GET /_app/immutable/assets/1.{{hash}}.css | replay:note-02: request no longer made on b: GET /_app/immutable/assets/1.{{hash}}.css | no date set | unclaimed |
replay | replay:note-02 GET /_app/immutable/chunks/{{hash}}.js | replay:note-02: GET /_app/immutable/chunks/{{hash}}.js requested 38× on a, 37× on b | no date set | unclaimed |
replay | replay:note-02 GET /_app/immutable/nodes/1.{{hash}}.js | replay:note-02: request no longer made on b: GET /_app/immutable/nodes/1.{{hash}}.js | no date set | unclaimed |
replay | replay:note-02 GET /note/localhost:8080/unit-1/topic-02/note-02/__data.json?x-sveltekit-invalidated=100 | replay:note-02: request no longer made on b: GET /note/localhost:8080/unit-1/topic-02/note-02/__data.json?x-sveltekit-invalidated=100 | no date set | unclaimed |
replay | replay:lab-02-step-03 GET /_app/immutable/assets/1.{{hash}}.css | replay:lab-02-step-03: GET /_app/immutable/assets/1.{{hash}}.css requested 1× on a, 2× on b | no date set | unclaimed |
replay | replay:lab-02-step-03 GET /_app/immutable/chunks/{{hash}}.js | replay:lab-02-step-03: GET /_app/immutable/chunks/{{hash}}.js requested 38× on a, 39× on b | no date set | unclaimed |
replay | replay:lab-02-step-03 GET /_app/immutable/nodes/1.{{hash}}.js | replay:lab-02-step-03: GET /_app/immutable/nodes/1.{{hash}}.js requested 1× on a, 2× on b | no date set | unclaimed |
replay | replay:lab-02-step-03 GET /note/localhost:8080/unit-1/topic-02/note-02/__data.json?x-sveltekit-invalidated=100 | replay:lab-02-step-03: new request on b: GET /note/localhost:8080/unit-1/topic-02/note-02/__data.json?x-sveltekit-invalidated=100 | no date set | unclaimed |
3 claim(s) cover 5 failing hunk(s): 1.67 per claim, at most 2 under one (flagged above 10).
Fired: response-date×92, request-id×92, etag×92, metrics-process×602, metrics-timing-histograms×12, third-party-requests×1518, persistence-stub-requests×140, oauth-callback-state×10, media-range-status×46, hashed-assets×5011, footer-tutors-version×340, transport-length×92, transport-connection×92, transport-keepalive×92.
Silent this run: realtime-rest-fallback-warning, chromium-compute-pressure-policy, transport-encoding, transport-transfer — a mask that never fires is a mask to delete.