Files
pulse/docs/operations/root-pair-diagnostic.md
rcourtman 02e53bc777 build: move to Go 1.26.10 and Vite 6.4.5 for October advisories
Go 1.26.10 (20 October) distrusts the compromised eMudhra intermediate
CAs in crypto/x509 (CVE-2026-111943). Binaries built with 1.26.9 still
accept chains through them, so every verified outbound TLS connection
Pulse makes (licence, updates, webhooks, AI providers) stays open to
interception by a holder of those keys. govulncheck does not flag a
trust-store change as a called symbol, so the scheduled scan stayed
green while the gap existed.

Advance the governed toolchain floor and every pin together: go.mod,
the toolchain installer and release-script guards, the source-built
container stages (manifest-list digests for golang:1.26.10-alpine and
the Debian dev container image), the root-pair diagnostic, and their
tests.

Vite 6.4.3 bundles a launch-editor with three advisories
(GHSA-587h-7wmj-h5pm, GHSA-r825-w8mm-5pxw, GHSA-698v-4r3x-3vcv) that
failed the daily advisory watch. 6.4.4 bundles the fixed launch-editor
and 6.4.5 adds the dev-server server.fs query check. Both reach only
the local dev server, not the built product. The lockfile changes only
the vite entry, and dependencySecurity.test.ts now pins the floor.
2026-10-21 15:19:02 +01:00

2.3 KiB

Fixed root-route diagnostic

This manual, main-only workflow measures the unresolved hosted root-route comparison, not release readiness. It never runs package tests, other benchmarks, or layout interventions, and never changes a release threshold.

The source pair is fixed in scripts/diagnose-root-pair.py: baseline 9168d16a32e948665eba80e2899604933292cdc0 and durable main candidate dd388decf5896123b6587b1b16f9aee7c3a747f3. The candidate has the exact 1120cce4d631bca5525cafc5b5620251998773f7 tree measured from ephemeral source commit 4cdf250f474ad9cde6ffb121527f021b7387603f7; metadata retains that original evidence identity. Tree and HTTP source hashes must match. Both API test binaries use Go 1.26.10, readonly modules and identical CI embed text; compilation finishes before either warm-up. Four available CPUs are selected and inherited by children, GOMAXPROCS is four. After two 100ms warm-ups and ten seconds settling, ten rounds alternate AB/BA with one 1s root-only sample per binary per round. No selective retries are supported.

Artifacts retain source/tree, binary and embed hashes, build logs/toolchain, root/benchmark disassembly and symbols, sample order/start/end timestamps, affinity, CPU model, pressure and cgroup throttling observations. Unavailable telemetry is explicit, not zero. Executables are not published. Partial evidence survives failure; only complete collection sets complete=true. A crash stops collection and does not authorise crash investigation. The original adverse result remains evidence even if this comparison finds no gap.

Dispatch requires the exact reviewed current-main workflow SHA and attempt one; permissions are contents-read only, with no production credentials or writes. Independent review and protected landing precede any hosted collection. Inspect the retained attempt before another operation; a successful collection is not a qualification verdict. No beta.3 scope or installed acceptance changes here.

Focused contract proof (mocked commands, no benchmark): python3 -m unittest discover -s scripts/tests -p test_root_pair_diagnostic.py -v. It checks the fixed order and selection, build-before-sample sequencing, partial failure retention, source/toolchain refusal, receipt non-overwrite, workflow authority and complete artifact hashes.