From e0f4f05bafb5f293e55cc67bc88f0ca2ff221f09 Mon Sep 17 00:00:00 2001 From: Christopher Collins Date: Fri, 16 Oct 2026 20:04:07 -0500 Subject: [PATCH 1/5] fix: let the uploads off-by-default test pass on a deployment's own site.yml Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 9 +++++++++ test/scripts/submit_uploads.test.mjs | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71bf258..ca61264 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,15 @@ major version, and each entry says so when it happens. ## [Unreleased] +### Fixed + +- A test added in rc.11 failed inside a real deployment's PHCT update, which + runs the template's suite on the deployment's own files. + `submit_uploads.test.mjs` required `_data/site.yml` to carry a blank + `submit.uploads_url`, which a deployment's own `site.yml` need not have. The + check now applies to the template only (no `.phct-version.json`). The submit + page and the upload code were not at fault. + ## [1.11.0-rc.11] — 2026-10-16 Eleventh candidate. It adds optional file uploads on the submit page (off by diff --git a/test/scripts/submit_uploads.test.mjs b/test/scripts/submit_uploads.test.mjs index a84ab09..63b1a88 100644 --- a/test/scripts/submit_uploads.test.mjs +++ b/test/scripts/submit_uploads.test.mjs @@ -296,7 +296,12 @@ test('feature off: no pickers, no script, no data attribute — in the markup an !SCRIPTS.some((src) => /uploads/.test(src)), 'the uploads scripts must not be in the always-on list' ); - assert.match(read('_data/site.yml'), /^ {2}uploads_url: ""/m, 'uploads must be off by default'); + // Off by default is the template's own site.yml. A deployment's update runs + // this suite on its own site.yml (it carries .phct-version.json), which need + // not have the key at all, or may have turned uploads on. + if (!fs.existsSync(path.join(ROOT, '.phct-version.json'))) { + assert.match(read('_data/site.yml'), /^ {2}uploads_url: ""/m, 'uploads must be off by default'); + } assert.doesNotMatch(FIXTURE, /uploads/i, 'the off-by-default snapshot mentions uploads'); // At runtime: signed in, but no uploads script and no attribute. From 2ab56f48b20906a19397912bb702106508fbd0d7 Mon Sep 17 00:00:00 2001 From: Christopher Collins Date: Fri, 16 Oct 2026 20:05:16 -0500 Subject: [PATCH 2/5] chore: release record for v1.11.0-rc.12 Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 9 ++++++++- README.md | 2 +- docs/release-readiness-plan.md | 2 +- docs/release-readiness-status.md | 28 +++++++++++++++++++--------- package-lock.json | 4 ++-- package.json | 2 +- 6 files changed, 32 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca61264..ed4fb8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,12 @@ major version, and each entry says so when it happens. ## [Unreleased] +## [1.11.0-rc.12] — 2026-10-16 + +Twelfth candidate. rc.11 failed closed in a deployment's update (nothing was +published) on a test that read the deployment's own `site.yml`; rc.12 fixes that +test and otherwise carries rc.11 unchanged. + ### Fixed - A test added in rc.11 failed inside a real deployment's PHCT update, which @@ -1789,7 +1795,8 @@ fixed in this release, and the remaining P3s are listed in `docs/roadmap.md`. in-browser and CLI configurators, GitHub-issue submission flow, events / cohorts / resources modules, Lunr search, thumbnails workflow. -[Unreleased]: https://github.com/crypticpy/phct/compare/v1.11.0-rc.11...HEAD +[Unreleased]: https://github.com/crypticpy/phct/compare/v1.11.0-rc.12...HEAD +[1.11.0-rc.12]: https://github.com/crypticpy/phct/compare/v1.11.0-rc.11...v1.11.0-rc.12 [1.11.0-rc.11]: https://github.com/crypticpy/phct/compare/v1.11.0-rc.10...v1.11.0-rc.11 [1.11.0-rc.10]: https://github.com/crypticpy/phct/compare/v1.11.0-rc.9...v1.11.0-rc.10 [1.11.0-rc.9]: https://github.com/crypticpy/phct/compare/v1.11.0-rc.8...v1.11.0-rc.9 diff --git a/README.md b/README.md index ede0603..a41104f 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ A fork is a copy, not a subscription: template releases do not reach you on thei ```bash git remote add template https://github.com/crypticpy/phct.git git fetch template --tags -npm run upgrade:check -- --to v1.11.0-rc.11 # read-only: what this exact release changes, in two lists +npm run upgrade:check -- --to v1.11.0-rc.12 # read-only: what this exact release changes, in two lists ``` The whole protected-update and manual-recovery recipe: [`docs/upgrading.md`](docs/upgrading.md). diff --git a/docs/release-readiness-plan.md b/docs/release-readiness-plan.md index bbbc22d..d7f791f 100644 --- a/docs/release-readiness-plan.md +++ b/docs/release-readiness-plan.md @@ -3,7 +3,7 @@ - Status: in execution; automated baseline implemented 2026-08-22 - Created: 2026-08-21 - Target: a release candidate suitable for the wider BCHC demo audience next week -- Candidate: `v1.11.0-rc.11` (last stable release: `v1.10.0`) +- Candidate: `v1.11.0-rc.12` (last stable release: `v1.10.0`) - Parent repository: [`crypticpy/phct`](https://github.com/crypticpy/phct) - Downstream demo: [`Big-Cities-Health-Coalition/use-case-catalog`](https://github.com/Big-Cities-Health-Coalition/use-case-catalog) diff --git a/docs/release-readiness-status.md b/docs/release-readiness-status.md index 42585d6..a5465bb 100644 --- a/docs/release-readiness-status.md +++ b/docs/release-readiness-status.md @@ -2,13 +2,23 @@ - Evidence date: 2026-10-16 - PHCT starting baseline: `c9fcb223826f2fc8c945d894420c16a2b8ff5da0` -- PHCT candidate: `v1.11.0-rc.11`, cut from protected `main` at - `8a3df50d0557531a32ce9203bddf69d6640ba6f1` (the merge of - [PR #114](https://github.com/crypticpy/phct/pull/114)) and this release pull request. - It adds [PR #114](https://github.com/crypticpy/phct/pull/114): optional file uploads on the +- PHCT candidate: `v1.11.0-rc.12`, cut from protected `main` at the merge of + [this release pull request](https://github.com/crypticpy/phct/pulls?q=is%3Apr+%22release+v1.11.0-rc.12%22), + which carries the fix to one rc.11 test (`submit_uploads.test.mjs`, which read the deployment's own + `_data/site.yml` and expected a blank `submit.uploads_url`; it now applies to the template only) and otherwise + carries rc.11 unchanged. It changes `.github/workflows` relative to BCHC's lock (rc.10), so the downstream + `PHCT_UPDATE_TOKEN` check in release-procedure step 5 applies. BCHC's ownership contract is already + migrated ([BCHC PR #143](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/143), [BCHC PR #144](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/144)), so that gate should pass. + rc.11 (`01b1f0a7d89b53fed492c621a60a5a2dc42e37b9`, [PR #115](https://github.com/crypticpy/phct/pull/115)) + added [PR #114](https://github.com/crypticpy/phct/pull/114): optional file uploads on the submit page (off by default; they need `submit.signin_url` and a deployed uploads service) and a - "Using an AI agent?" path. It changes `.github/workflows` (`new-entry.yml`, new `uploads-cleanup.yml`), - so the downstream `PHCT_UPDATE_TOKEN` check in release-procedure step 5 applies. + "Using an AI agent?" path. It failed closed in BCHC (nothing was published) in three runs: + [run 38987627059](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38987627059) stopped on the ownership-contract gate, because rc.11 adds two generated files + ([BCHC PR #143](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/143) migrated `.gitattributes` and `.phct/ownership.yml`); [run 38988121431](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38988121431) stopped at the + pre-update `ownership:check`, because rc.10's `generated_paths.mjs` did not know the new files + ([BCHC PR #144](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/144) bridged it with rc.11's `generated_paths.mjs` and regenerated a stale `defaults.generated.js`); + and [run 38988710956](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38988710956) applied the update, but verification failed on one test, `submit_uploads.test.mjs`, + which read the deployment's `_data/site.yml` and expected `uploads_url: ""`. rc.10 (`f112d529dadd57fddda8243640c17aeefd42b541`, [PR #113](https://github.com/crypticpy/phct/pull/113)) went live in BCHC via [run 38438432055](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38438432055) → [BCHC PR #130](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/130) (`e2fa0f6`). rc.9 (`08077c58674b94c7b868d10f92d9eba4b94e11bb`, [PR #111](https://github.com/crypticpy/phct/pull/111)) @@ -142,7 +152,7 @@ that updater succeeds. | Live pull-request CI | Pass at reviewed heads | The rc.2 implementation retained the full Validate, coverage, preset matrix, scale/Chrome, supply-chain, CodeQL, workflow-lint, pa11y, assistive-flow, and desktop/mobile Lighthouse gates. PHCT PRs #17/#20 passed protected CI and review. The generated metrics head `9a486f6` then passed all seven ruleset-required contexts plus browser quality through trusted dispatches before PR #19 was intentionally closed unmerged. Every check on BCHC rc.2 update head `2017cda` is green. | | PHCT release verification | Pass | `npm run verify` completed under the exact-pinned toolchain (Node 22.22.2, npm 10.9.4, clean `npm ci`) at the `v1.11.0-rc.11` release-record commit `eb75c7763bc387226d792187526f384a83eb0a9e`: 1310 Node tests across 3 suites, 283 Ruby tests with 785 assertions, 155 build-matrix tests, plus lint, formatting, coverage, generated-file, data/front-matter, license, security-exception, SBOM, image-derivative, production CSS, Jekyll production build, and built-site link gates. The final release-record head differs from that commit only by this evidence sentence, and every protected CI context runs on the exact head in the release pull request. | | Code coverage | Pass locally and in exact-head CI | Pinned runtime coverage passed reviewed regression floors: complete loaded Node production code 84.81% lines / 75.94% branches / 80.07% functions; focused security parsers 90.54% / 80.55% / 93.59%; updater and release-lock logic 72.79% / 77.39% / 87.76%; loaded Ruby production code 93.29% lines / 85.13% branches / 77.69% methods. Six Ruby CLI sources exercised by subprocess or integration gates are explicitly inventoried, and any new unrepresented Ruby source fails the gate. Validate retains JSON and raw TAP artifacts even when a floor fails. | -| Exact BCHC update rehearsal | Pass for 1.10.0-rc.2 (and 1.9.0-rc.6, rc.7), 1.11.0-rc.2, 1.11.0-rc.4, 1.11.0-rc.5, 1.11.0-rc.7, 1.11.0-rc.8 and 1.11.0-rc.10 (rc.6 and rc.9 failed closed) | The live `v1.10.0-rc.2` update on 2026-09-28 ([run 36444662449](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/36444662449) → [BCHC PR #76](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/76), merged `ab4e71b`) kept all 181 protected files byte-identical. The real rc.4 updater run resolved `v1.9.0-rc.4` to full SHA `c41149eaacab353c82403477bf0c5b2f26a48650`, preserved the protected BCHC paths, regenerated BCHC-owned deployment output, and opened candidate [PR #7](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/7) at `c4ac0d5de1921f8047cabbe3264b6cda517c52b2`. The complete downstream required-check set was green, and the PR merged at `fd7206981c58107df626f50062f08ad6aee1a0e0`, locking the published BCHC demo to `v1.9.0-rc.4`. The rc.2 rehearsal ([PR #4](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/4) at `2017cda8b731ae52103c6b44232496d2c2fc8662`, 116 protected files byte-identical) remains the recorded checksum baseline. The rc.6 update repeated the rehearsal live on 2026-08-28: the updater first failed closed on the pending ownership-contract migration ([run 33134382533](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33134382533)), passed once [BCHC PR #29](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/29) merged, and opened the machine-verified [BCHC PR #30](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/30), which merged after human review at `c0826d9776747c2838daaba91991628e4301f7bf`, locking the published demo to `v1.9.0-rc.6`. The rc.7 update repeated the rehearsal live the same day: [run 33144777338](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33144777338) opened machine-verified [BCHC PR #34](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/34), which merged after human review at `929b007ce9cd75b14447b9e1a781d6a04b6dfb4`, locking the published demo to `v1.9.0-rc.7`; the live rollback drill then reverted and byte-identically re-applied that update ([BCHC PR #35](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/35) / [PR #36](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/36)). The `v1.11.0-rc.2` update ([BCHC PR #93](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/93), `82a8dab`), the `v1.11.0-rc.4` update ([BCHC PR #95](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/95), `3ded618`) and the `v1.11.0-rc.5` update ([run 37409189753](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37409189753) → [BCHC PR #111](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/111), `89e4aea`) passed it (rc.3 and rc.6 failed closed; rc.6 in [run 38314528445](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38314528445)). The `v1.11.0-rc.7` update ([run 38317220465](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38317220465) → [BCHC PR #124](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/124), `71b4a96`) passed it. The `v1.11.0-rc.8` update ([run 38320638476](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38320638476) → [BCHC PR #126](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/126), `8d9994b`) passed it. `v1.11.0-rc.9` failed closed ([run 38433343323](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38433343323); nothing published). The `v1.11.0-rc.10` update ([run 38438432055](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38438432055) → [BCHC PR #130](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/130), `e2fa0f6`) passed it. Repeat the same rehearsal and checksum gate for `v1.11.0-rc.11`. | +| Exact BCHC update rehearsal | Pass for 1.10.0-rc.2 (and 1.9.0-rc.6, rc.7), 1.11.0-rc.2, 1.11.0-rc.4, 1.11.0-rc.5, 1.11.0-rc.7, 1.11.0-rc.8 and 1.11.0-rc.10 (rc.6, rc.9 and rc.11 failed closed) | The live `v1.10.0-rc.2` update on 2026-09-28 ([run 36444662449](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/36444662449) → [BCHC PR #76](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/76), merged `ab4e71b`) kept all 181 protected files byte-identical. The real rc.4 updater run resolved `v1.9.0-rc.4` to full SHA `c41149eaacab353c82403477bf0c5b2f26a48650`, preserved the protected BCHC paths, regenerated BCHC-owned deployment output, and opened candidate [PR #7](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/7) at `c4ac0d5de1921f8047cabbe3264b6cda517c52b2`. The complete downstream required-check set was green, and the PR merged at `fd7206981c58107df626f50062f08ad6aee1a0e0`, locking the published BCHC demo to `v1.9.0-rc.4`. The rc.2 rehearsal ([PR #4](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/4) at `2017cda8b731ae52103c6b44232496d2c2fc8662`, 116 protected files byte-identical) remains the recorded checksum baseline. The rc.6 update repeated the rehearsal live on 2026-08-28: the updater first failed closed on the pending ownership-contract migration ([run 33134382533](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33134382533)), passed once [BCHC PR #29](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/29) merged, and opened the machine-verified [BCHC PR #30](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/30), which merged after human review at `c0826d9776747c2838daaba91991628e4301f7bf`, locking the published demo to `v1.9.0-rc.6`. The rc.7 update repeated the rehearsal live the same day: [run 33144777338](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33144777338) opened machine-verified [BCHC PR #34](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/34), which merged after human review at `929b007ce9cd75b14447b9e1a781d6a04b6dfb4`, locking the published demo to `v1.9.0-rc.7`; the live rollback drill then reverted and byte-identically re-applied that update ([BCHC PR #35](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/35) / [PR #36](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/36)). The `v1.11.0-rc.2` update ([BCHC PR #93](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/93), `82a8dab`), the `v1.11.0-rc.4` update ([BCHC PR #95](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/95), `3ded618`) and the `v1.11.0-rc.5` update ([run 37409189753](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37409189753) → [BCHC PR #111](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/111), `89e4aea`) passed it (rc.3 and rc.6 failed closed; rc.6 in [run 38314528445](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38314528445)). The `v1.11.0-rc.7` update ([run 38317220465](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38317220465) → [BCHC PR #124](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/124), `71b4a96`) passed it. The `v1.11.0-rc.8` update ([run 38320638476](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38320638476) → [BCHC PR #126](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/126), `8d9994b`) passed it. `v1.11.0-rc.9` failed closed ([run 38433343323](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38433343323); nothing published). The `v1.11.0-rc.10` update ([run 38438432055](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38438432055) → [BCHC PR #130](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/130), `e2fa0f6`) passed it. `v1.11.0-rc.11` failed closed in three runs ([run 38987627059](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38987627059), [run 38988121431](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38988121431), [run 38988710956](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38988710956); nothing published; [BCHC PR #143](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/143) and [BCHC PR #144](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/144) migrated and bridged BCHC's ownership contract). Repeat the same rehearsal and checksum gate for `v1.11.0-rc.12`. | | Dependency vulnerabilities | Pass | The exact-head Supply chain job passed parsed npm and Bundler audits with zero active exceptions; critical or unidentified findings cannot be waived, and stale/expired/unused exceptions fail closed. | | Software bill of materials | Pass | The current lockfiles produce 326 CycloneDX components and 327 globally unique references including the application. Repeated npm package/version rows retain every lock path, Ruby platforms have qualified PURLs, and duplicate references fail generation. | | Secret scanning | Pass | Gitleaks v8.30.1 found no leaks in either working tree or the complete history of either repository. | @@ -222,8 +232,8 @@ No automated P0 or P1 defect is known at this checkpoint. | ID | Required evidence | Owner | Status | |---|---|---|---| -| RR-H01 | Review these changes and obtain green required CI plus independent human approval in PHCT and BCHC. | PHCT maintainer | In progress — rc.6's machine-verified update ([BCHC PR #30](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/30)) and the feature adoption ([BCHC PR #31](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/31)) merged 2026-08-28 with green required checks after human review of #30. The [PHCT PR #49](https://github.com/crypticpy/phct/pull/49) merge reset the line; the rc.7 candidate ([PR #54](https://github.com/crypticpy/phct/pull/54), merged `b97432b`) and its human-reviewed BCHC update ([BCHC PR #34](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/34), merged `929b007`) closed it. The stable record then merged ([PR #56](https://github.com/crypticpy/phct/pull/56), `619f2db`) and BCHC consumed `v1.9.0` via [BCHC PR #38](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/38). The `v1.10.0-rc.2` update ([BCHC PR #76](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/76)) merged after review at `ab4e71b`. The stable record then merged ([PR #72](https://github.com/crypticpy/phct/pull/72), `a8962ac`) and BCHC consumed `v1.10.0` via [BCHC PR #77](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/77) (`2aab860`). The `v1.11.0-rc.2` update ([BCHC PR #93](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/93)) merged after review at `82a8dab`, and the `v1.11.0-rc.4` update ([BCHC PR #95](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/95)) at `3ded618`, and the `v1.11.0-rc.5` update ([BCHC PR #111](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/111)) at `89e4aea`. The `v1.11.0-rc.10` update ([BCHC PR #130](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/130)) merged at `e2fa0f6`. Remaining for `v1.11.0-rc.11`: human review and merge of this release record and of its BCHC update pull request. | -| RR-H02 | Tag an immutable PHCT release candidate, run the actual BCHC update workflow, review the checksum report and generated changes, then prove revert/rollback of the update pull request. | PHCT maintainer | Pending for `v1.11.0-rc.11` (rc.1, rc.3, rc.6 and rc.9 failed closed, nothing published; rc.2 complete via BCHC PR #93, rc.4 via BCHC PR #95, rc.5 via BCHC PR #111, rc.7 via BCHC PR #124, rc.8 via BCHC PR #126, rc.10 via BCHC PR #130) (complete for `v1.10.0-rc.2` and the 1.9.0 line) — immutable `v1.9.0-rc.6` consumed through the live updater with the fail-closed ownership-contract gate proven ([run 33134382533](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33134382533)) before [BCHC PR #30](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/30); immutable `v1.9.0-rc.7` consumed the same way ([run 33144777338](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33144777338) → [BCHC PR #34](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/34), maintainer-merged `929b007`); and the revert/rollback of an update pull request is now proven live under RR-H07 ([BCHC PR #35](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/35) rollback and [BCHC PR #36](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/36) byte-identical roll-forward, both through required checks, Pages redeploys and live verification on 2026-08-28). The stable `v1.9.0` update then ran through [BCHC PR #38](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/38). rc.1's live run ([36441447747](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/36441447747)) failed closed on a content-dependent build test before publishing anything. Immutable `v1.10.0-rc.2` then went through the live updater ([run 36444662449](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/36444662449) → [BCHC PR #76](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/76)): checksum report clean for all 181 protected files, generated changes reviewed against a downloaded preview, merged `ab4e71b`. The stable `v1.10.0` update then ran through [BCHC PR #77](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/77) (`2aab860`). Immutable `v1.11.0-rc.2` then went through the live updater into [BCHC PR #93](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/93), merged `82a8dab`. rc.3 failed closed. Immutable `v1.11.0-rc.4` then went through the live updater ([run 37359251437](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37359251437) → [BCHC PR #95](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/95)), merged `3ded618`; the `v1.11.0-rc.5` update ([run 37409189753](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37409189753) → [BCHC PR #111](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/111)), merged `89e4aea`. Remaining for `v1.11.0-rc.11`: confirm the downstream `PHCT_UPDATE_TOKEN` is present and unexpired (this release changes `.github/workflows`), tag it, run the live updater with that exact tag, and review its checksum report and generated changes before its BCHC update pull request merges. The 1.10.0 evidence does not satisfy this gate for the new candidate. | +| RR-H01 | Review these changes and obtain green required CI plus independent human approval in PHCT and BCHC. | PHCT maintainer | In progress — rc.6's machine-verified update ([BCHC PR #30](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/30)) and the feature adoption ([BCHC PR #31](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/31)) merged 2026-08-28 with green required checks after human review of #30. The [PHCT PR #49](https://github.com/crypticpy/phct/pull/49) merge reset the line; the rc.7 candidate ([PR #54](https://github.com/crypticpy/phct/pull/54), merged `b97432b`) and its human-reviewed BCHC update ([BCHC PR #34](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/34), merged `929b007`) closed it. The stable record then merged ([PR #56](https://github.com/crypticpy/phct/pull/56), `619f2db`) and BCHC consumed `v1.9.0` via [BCHC PR #38](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/38). The `v1.10.0-rc.2` update ([BCHC PR #76](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/76)) merged after review at `ab4e71b`. The stable record then merged ([PR #72](https://github.com/crypticpy/phct/pull/72), `a8962ac`) and BCHC consumed `v1.10.0` via [BCHC PR #77](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/77) (`2aab860`). The `v1.11.0-rc.2` update ([BCHC PR #93](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/93)) merged after review at `82a8dab`, and the `v1.11.0-rc.4` update ([BCHC PR #95](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/95)) at `3ded618`, and the `v1.11.0-rc.5` update ([BCHC PR #111](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/111)) at `89e4aea`. The `v1.11.0-rc.10` update ([BCHC PR #130](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/130)) merged at `e2fa0f6`. Remaining for `v1.11.0-rc.12`: human review and merge of this release record and of its BCHC update pull request. | +| RR-H02 | Tag an immutable PHCT release candidate, run the actual BCHC update workflow, review the checksum report and generated changes, then prove revert/rollback of the update pull request. | PHCT maintainer | Pending for `v1.11.0-rc.12` (rc.1, rc.3, rc.6, rc.9 and rc.11 failed closed, nothing published; rc.2 complete via BCHC PR #93, rc.4 via BCHC PR #95, rc.5 via BCHC PR #111, rc.7 via BCHC PR #124, rc.8 via BCHC PR #126, rc.10 via BCHC PR #130) (complete for `v1.10.0-rc.2` and the 1.9.0 line) — immutable `v1.9.0-rc.6` consumed through the live updater with the fail-closed ownership-contract gate proven ([run 33134382533](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33134382533)) before [BCHC PR #30](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/30); immutable `v1.9.0-rc.7` consumed the same way ([run 33144777338](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33144777338) → [BCHC PR #34](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/34), maintainer-merged `929b007`); and the revert/rollback of an update pull request is now proven live under RR-H07 ([BCHC PR #35](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/35) rollback and [BCHC PR #36](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/36) byte-identical roll-forward, both through required checks, Pages redeploys and live verification on 2026-08-28). The stable `v1.9.0` update then ran through [BCHC PR #38](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/38). rc.1's live run ([36441447747](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/36441447747)) failed closed on a content-dependent build test before publishing anything. Immutable `v1.10.0-rc.2` then went through the live updater ([run 36444662449](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/36444662449) → [BCHC PR #76](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/76)): checksum report clean for all 181 protected files, generated changes reviewed against a downloaded preview, merged `ab4e71b`. The stable `v1.10.0` update then ran through [BCHC PR #77](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/77) (`2aab860`). Immutable `v1.11.0-rc.2` then went through the live updater into [BCHC PR #93](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/93), merged `82a8dab`. rc.3 failed closed. Immutable `v1.11.0-rc.4` then went through the live updater ([run 37359251437](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37359251437) → [BCHC PR #95](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/95)), merged `3ded618`; the `v1.11.0-rc.5` update ([run 37409189753](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37409189753) → [BCHC PR #111](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/111)), merged `89e4aea`. Remaining for `v1.11.0-rc.12`: confirm the downstream `PHCT_UPDATE_TOKEN` is present and unexpired (this release changes `.github/workflows`), tag it, run the live updater with that exact tag, and review its checksum report and generated changes before its BCHC update pull request merges. The 1.10.0 evidence does not satisfy this gate for the new candidate. | | RR-H03 | Complete a real issue → pull request → media processing → review → merge → Pages deploy → notification rehearsal in both repositories. Use non-sensitive test content and remove it afterward. | Repository admins | In progress — the BCHC leg completed 2026-08-28: a real web-form submission became [BCHC PR #27](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/27) carrying real media (PDF deck plus generated AVIF/WebP derivatives), merged at `610c0fc`, deployed through Pages, and was verified live (entry page, media files, and `search.json`); the test entry was then removed end to end via [BCHC PR #32](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/32) and verified gone. The PHCT leg completed later the same day: form-contract issue [#51](https://github.com/crypticpy/phct/issues/51) was scaffolded into [PR #52](https://github.com/crypticpy/phct/pull/52), the content gates correctly rejected the link-less draft until the maintainer amendment `84dd8bf` (the exact remedies the admin guide prescribes), it merged at `3a3e717`, was verified live on the deployed showcase (entry page and search index), and was removed via [PR #53](https://github.com/crypticpy/phct/pull/53) with the removal verified live. Only the notification-delivery confirmation remains open. | | RR-H04 | Name a BCHC product owner and backup technical maintainer; grant least-privilege access; update `CODEOWNERS`, `MAINTAINERS.md`, and the private contact system. | BCHC sponsor | Deferred until organizational handoff; it is not a wider-demo prerequisite. | | RR-H05 | Correct and verify branch rules, required checks/approval, Pages environment protection, Actions permissions, secrets/variables, domain/DNS, security settings, labels, and notifications against `docs/bchc/operations-inventory.yml`. | Repository admins | In progress — a fresh read-only API audit on 2026-08-28 was synced into `docs/bchc/operations-inventory.yml` (BCHC PRs [#31](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/31) and [#33](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/33)); the intentionally-unset repository variables are documented as default-on. Four admin items remain manual: require a human approval, disable Actions PR approval, protect release tags, and confirm notification delivery. | diff --git a/package-lock.json b/package-lock.json index 5960f02..4fef2b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "phct", - "version": "1.11.0-rc.11", + "version": "1.11.0-rc.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "phct", - "version": "1.11.0-rc.11", + "version": "1.11.0-rc.12", "devDependencies": { "@eslint/js": "^10.0.1", "@tailwindcss/forms": "^0.5.10", diff --git a/package.json b/package.json index ad971d3..5bf882e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "phct", - "version": "1.11.0-rc.11", + "version": "1.11.0-rc.12", "private": true, "packageManager": "npm@10.9.4", "engines": { From 9af2f8a90e6d9b7bf24f70393c30f1b969629222 Mon Sep 17 00:00:00 2001 From: Christopher Collins Date: Fri, 16 Oct 2026 20:07:49 -0500 Subject: [PATCH 3/5] chore: record rc.12 verify evidence Co-Authored-By: Claude Opus 5.5 --- docs/release-readiness-status.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/release-readiness-status.md b/docs/release-readiness-status.md index a5465bb..d6d9b47 100644 --- a/docs/release-readiness-status.md +++ b/docs/release-readiness-status.md @@ -3,7 +3,7 @@ - Evidence date: 2026-10-16 - PHCT starting baseline: `c9fcb223826f2fc8c945d894420c16a2b8ff5da0` - PHCT candidate: `v1.11.0-rc.12`, cut from protected `main` at the merge of - [this release pull request](https://github.com/crypticpy/phct/pulls?q=is%3Apr+%22release+v1.11.0-rc.12%22), + [this release pull request](https://github.com/crypticpy/phct/pull/116), which carries the fix to one rc.11 test (`submit_uploads.test.mjs`, which read the deployment's own `_data/site.yml` and expected a blank `submit.uploads_url`; it now applies to the template only) and otherwise carries rc.11 unchanged. It changes `.github/workflows` relative to BCHC's lock (rc.10), so the downstream @@ -150,7 +150,7 @@ that updater succeeds. |---|---|---| | Reproducible toolchain | Pass | Node 22.22.2, npm 10.9.4, Ruby 3.3.11, and Bundler 4.0.11 are exact-pinned and checked by `npm run doctor`. | | Live pull-request CI | Pass at reviewed heads | The rc.2 implementation retained the full Validate, coverage, preset matrix, scale/Chrome, supply-chain, CodeQL, workflow-lint, pa11y, assistive-flow, and desktop/mobile Lighthouse gates. PHCT PRs #17/#20 passed protected CI and review. The generated metrics head `9a486f6` then passed all seven ruleset-required contexts plus browser quality through trusted dispatches before PR #19 was intentionally closed unmerged. Every check on BCHC rc.2 update head `2017cda` is green. | -| PHCT release verification | Pass | `npm run verify` completed under the exact-pinned toolchain (Node 22.22.2, npm 10.9.4, clean `npm ci`) at the `v1.11.0-rc.11` release-record commit `eb75c7763bc387226d792187526f384a83eb0a9e`: 1310 Node tests across 3 suites, 283 Ruby tests with 785 assertions, 155 build-matrix tests, plus lint, formatting, coverage, generated-file, data/front-matter, license, security-exception, SBOM, image-derivative, production CSS, Jekyll production build, and built-site link gates. The final release-record head differs from that commit only by this evidence sentence, and every protected CI context runs on the exact head in the release pull request. | +| PHCT release verification | Pass | `npm run verify` completed under the exact-pinned toolchain (Node 22.22.2, npm 10.9.4, clean `npm ci`) at the `v1.11.0-rc.12` release-record commit `2ab56f48b20906a19397912bb702106508fbd0d7`: 1310 Node tests across 3 suites, 283 Ruby tests with 785 assertions, 155 build-matrix tests, plus lint, formatting, coverage, generated-file, data/front-matter, license, security-exception, SBOM, image-derivative, production CSS, Jekyll production build, and built-site link gates. The final release-record head differs from that commit only by this evidence sentence, and every protected CI context runs on the exact head in the release pull request. | | Code coverage | Pass locally and in exact-head CI | Pinned runtime coverage passed reviewed regression floors: complete loaded Node production code 84.81% lines / 75.94% branches / 80.07% functions; focused security parsers 90.54% / 80.55% / 93.59%; updater and release-lock logic 72.79% / 77.39% / 87.76%; loaded Ruby production code 93.29% lines / 85.13% branches / 77.69% methods. Six Ruby CLI sources exercised by subprocess or integration gates are explicitly inventoried, and any new unrepresented Ruby source fails the gate. Validate retains JSON and raw TAP artifacts even when a floor fails. | | Exact BCHC update rehearsal | Pass for 1.10.0-rc.2 (and 1.9.0-rc.6, rc.7), 1.11.0-rc.2, 1.11.0-rc.4, 1.11.0-rc.5, 1.11.0-rc.7, 1.11.0-rc.8 and 1.11.0-rc.10 (rc.6, rc.9 and rc.11 failed closed) | The live `v1.10.0-rc.2` update on 2026-09-28 ([run 36444662449](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/36444662449) → [BCHC PR #76](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/76), merged `ab4e71b`) kept all 181 protected files byte-identical. The real rc.4 updater run resolved `v1.9.0-rc.4` to full SHA `c41149eaacab353c82403477bf0c5b2f26a48650`, preserved the protected BCHC paths, regenerated BCHC-owned deployment output, and opened candidate [PR #7](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/7) at `c4ac0d5de1921f8047cabbe3264b6cda517c52b2`. The complete downstream required-check set was green, and the PR merged at `fd7206981c58107df626f50062f08ad6aee1a0e0`, locking the published BCHC demo to `v1.9.0-rc.4`. The rc.2 rehearsal ([PR #4](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/4) at `2017cda8b731ae52103c6b44232496d2c2fc8662`, 116 protected files byte-identical) remains the recorded checksum baseline. The rc.6 update repeated the rehearsal live on 2026-08-28: the updater first failed closed on the pending ownership-contract migration ([run 33134382533](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33134382533)), passed once [BCHC PR #29](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/29) merged, and opened the machine-verified [BCHC PR #30](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/30), which merged after human review at `c0826d9776747c2838daaba91991628e4301f7bf`, locking the published demo to `v1.9.0-rc.6`. The rc.7 update repeated the rehearsal live the same day: [run 33144777338](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33144777338) opened machine-verified [BCHC PR #34](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/34), which merged after human review at `929b007ce9cd75b14447b9e1a781d6a04b6dfb4`, locking the published demo to `v1.9.0-rc.7`; the live rollback drill then reverted and byte-identically re-applied that update ([BCHC PR #35](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/35) / [PR #36](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/36)). The `v1.11.0-rc.2` update ([BCHC PR #93](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/93), `82a8dab`), the `v1.11.0-rc.4` update ([BCHC PR #95](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/95), `3ded618`) and the `v1.11.0-rc.5` update ([run 37409189753](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37409189753) → [BCHC PR #111](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/111), `89e4aea`) passed it (rc.3 and rc.6 failed closed; rc.6 in [run 38314528445](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38314528445)). The `v1.11.0-rc.7` update ([run 38317220465](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38317220465) → [BCHC PR #124](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/124), `71b4a96`) passed it. The `v1.11.0-rc.8` update ([run 38320638476](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38320638476) → [BCHC PR #126](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/126), `8d9994b`) passed it. `v1.11.0-rc.9` failed closed ([run 38433343323](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38433343323); nothing published). The `v1.11.0-rc.10` update ([run 38438432055](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38438432055) → [BCHC PR #130](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/130), `e2fa0f6`) passed it. `v1.11.0-rc.11` failed closed in three runs ([run 38987627059](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38987627059), [run 38988121431](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38988121431), [run 38988710956](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38988710956); nothing published; [BCHC PR #143](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/143) and [BCHC PR #144](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/144) migrated and bridged BCHC's ownership contract). Repeat the same rehearsal and checksum gate for `v1.11.0-rc.12`. | | Dependency vulnerabilities | Pass | The exact-head Supply chain job passed parsed npm and Bundler audits with zero active exceptions; critical or unidentified findings cannot be waived, and stale/expired/unused exceptions fail closed. | From 7029c6a76997da53eb95d6c3932bda7441435072 Mon Sep 17 00:00:00 2001 From: Christopher Collins Date: Sat, 17 Oct 2026 06:44:28 -0500 Subject: [PATCH 4/5] fix: drop the shipped site.yml uploads check, which a deployment owns A fresh copy has no .phct-version.json until its first update, so the lock file cannot tell the template from a deployment. Off-by-default is already covered by the submit snapshot and the runtime boot test. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 7 ++++--- docs/release-readiness-status.md | 4 ++-- test/scripts/submit_uploads.test.mjs | 8 ++------ 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed4fb8f..15a96fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,9 +19,10 @@ test and otherwise carries rc.11 unchanged. - A test added in rc.11 failed inside a real deployment's PHCT update, which runs the template's suite on the deployment's own files. `submit_uploads.test.mjs` required `_data/site.yml` to carry a blank - `submit.uploads_url`, which a deployment's own `site.yml` need not have. The - check now applies to the template only (no `.phct-version.json`). The submit - page and the upload code were not at fault. + `submit.uploads_url`, which a deployment's own `site.yml` need not have. That + file belongs to the deployment, so the check is gone; off-by-default is still + checked on the submit page's own snapshot and at runtime. The submit page and + the upload code were not at fault. ## [1.11.0-rc.11] — 2026-10-16 diff --git a/docs/release-readiness-status.md b/docs/release-readiness-status.md index d6d9b47..ddad0bb 100644 --- a/docs/release-readiness-status.md +++ b/docs/release-readiness-status.md @@ -5,7 +5,7 @@ - PHCT candidate: `v1.11.0-rc.12`, cut from protected `main` at the merge of [this release pull request](https://github.com/crypticpy/phct/pull/116), which carries the fix to one rc.11 test (`submit_uploads.test.mjs`, which read the deployment's own - `_data/site.yml` and expected a blank `submit.uploads_url`; it now applies to the template only) and otherwise + `_data/site.yml` and expected a blank `submit.uploads_url`; that check is removed, since the file belongs to the deployment) and otherwise carries rc.11 unchanged. It changes `.github/workflows` relative to BCHC's lock (rc.10), so the downstream `PHCT_UPDATE_TOKEN` check in release-procedure step 5 applies. BCHC's ownership contract is already migrated ([BCHC PR #143](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/143), [BCHC PR #144](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/144)), so that gate should pass. @@ -123,7 +123,7 @@ [rc.2 run](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/32599759546): immutable tag and full SHA resolved, protected paths preserved byte-for-byte, merged at `fd7206981c58107df626f50062f08ad6aee1a0e0`); the - published BCHC demo then consumed `v1.9.0-rc.5` via [PR #14](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/14) on 2026-08-26. On 2026-08-28 the ownership-contract migration merged ([BCHC PR #29](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/29)), the live updater consumed `v1.9.0-rc.6` with its fail-closed contract gate proven ([run 33134382533](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33134382533)) and the machine-verified update merged after human review ([BCHC PR #30](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/30), `c0826d9`), followed by the rc.6 feature adoption ([BCHC PR #31](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/31)). The post-rc.6 robustness fixes then merged to PHCT `main` ([PR #49](https://github.com/crypticpy/phct/pull/49), `af54f28`), the `v1.9.0-rc.7` candidate was cut ([PR #54](https://github.com/crypticpy/phct/pull/54), merged `b97432b`, immutable tag published) and the live updater consumed it the same day ([run 33144777338](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33144777338) → machine-verified [BCHC PR #34](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/34), merged after human review at `929b007`), after which the live rollback drill proved revert and byte-identical roll-forward of that update ([BCHC PR #35](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/35) / [PR #36](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/36)); the records-only stable promotion `v1.9.0` was then cut ([PR #56](https://github.com/crypticpy/phct/pull/56), merged `619f2db`) and BCHC consumed it via [BCHC PR #38](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/38) (`82163a8`). The downstream BCHC updater rehearsal for `v1.10.0-rc.1` failed closed on 2026-09-28 ([run 36441447747](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/36441447747)): a build test assumed a picture in the catalog's first row, and nothing was published. The `v1.10.0-rc.2` rehearsal passed: [run 36444662449](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/36444662449) opened [BCHC PR #76](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/76) with byte-identical checksum manifests for all 181 protected files and a passing `npm run verify`; it merged after review at `ab4e71b` and deployed live on 2026-09-28. The records-only stable promotion `v1.10.0` was then cut ([PR #72](https://github.com/crypticpy/phct/pull/72), merged `a8962ac`) and BCHC consumed it via [BCHC PR #77](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/77) (`2aab860`). The downstream BCHC updater rehearsal for `v1.11.0-rc.1` failed closed on 2026-10-05 ([run 37338110646](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37338110646)): the showcase landing linked to a status page it did not build, and nothing was published. The `v1.11.0-rc.2` rehearsal passed: the live updater opened [BCHC PR #93](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/93), which merged after review at `82a8dab` and deployed. The `v1.11.0-rc.3` rehearsal failed closed ([run 37354010453](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37354010453)) on a content-dependent test, and nothing was published. The `v1.11.0-rc.4` rehearsal passed: the live updater ([run 37359251437](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37359251437)) opened [BCHC PR #95](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/95), which merged after review at `3ded618` and deployed; the `v1.11.0-rc.5` update ([run 37409189753](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37409189753)) opened [BCHC PR #111](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/111), which merged after review at `89e4aea` and deployed. `v1.11.0-rc.6` failed closed ([run 38314528445](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38314528445); nothing published). The `v1.11.0-rc.7` update ([run 38317220465](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38317220465)) opened [BCHC PR #124](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/124), which merged at `71b4a96` and deployed. The `v1.11.0-rc.8` update ([run 38320638476](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38320638476)) opened [BCHC PR #126](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/126), which merged at `8d9994b` and deployed. `v1.11.0-rc.9` failed closed ([run 38433343323](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38433343323); nothing published). The `v1.11.0-rc.10` update ([run 38438432055](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38438432055)) opened [BCHC PR #130](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/130), which merged at `e2fa0f6` and deployed. The rehearsal for `v1.11.0-rc.11` is pending: it runs once this release pull request merges and the immutable tag is published. + published BCHC demo then consumed `v1.9.0-rc.5` via [PR #14](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/14) on 2026-08-26. On 2026-08-28 the ownership-contract migration merged ([BCHC PR #29](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/29)), the live updater consumed `v1.9.0-rc.6` with its fail-closed contract gate proven ([run 33134382533](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33134382533)) and the machine-verified update merged after human review ([BCHC PR #30](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/30), `c0826d9`), followed by the rc.6 feature adoption ([BCHC PR #31](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/31)). The post-rc.6 robustness fixes then merged to PHCT `main` ([PR #49](https://github.com/crypticpy/phct/pull/49), `af54f28`), the `v1.9.0-rc.7` candidate was cut ([PR #54](https://github.com/crypticpy/phct/pull/54), merged `b97432b`, immutable tag published) and the live updater consumed it the same day ([run 33144777338](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33144777338) → machine-verified [BCHC PR #34](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/34), merged after human review at `929b007`), after which the live rollback drill proved revert and byte-identical roll-forward of that update ([BCHC PR #35](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/35) / [PR #36](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/36)); the records-only stable promotion `v1.9.0` was then cut ([PR #56](https://github.com/crypticpy/phct/pull/56), merged `619f2db`) and BCHC consumed it via [BCHC PR #38](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/38) (`82163a8`). The downstream BCHC updater rehearsal for `v1.10.0-rc.1` failed closed on 2026-09-28 ([run 36441447747](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/36441447747)): a build test assumed a picture in the catalog's first row, and nothing was published. The `v1.10.0-rc.2` rehearsal passed: [run 36444662449](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/36444662449) opened [BCHC PR #76](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/76) with byte-identical checksum manifests for all 181 protected files and a passing `npm run verify`; it merged after review at `ab4e71b` and deployed live on 2026-09-28. The records-only stable promotion `v1.10.0` was then cut ([PR #72](https://github.com/crypticpy/phct/pull/72), merged `a8962ac`) and BCHC consumed it via [BCHC PR #77](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/77) (`2aab860`). The downstream BCHC updater rehearsal for `v1.11.0-rc.1` failed closed on 2026-10-05 ([run 37338110646](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37338110646)): the showcase landing linked to a status page it did not build, and nothing was published. The `v1.11.0-rc.2` rehearsal passed: the live updater opened [BCHC PR #93](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/93), which merged after review at `82a8dab` and deployed. The `v1.11.0-rc.3` rehearsal failed closed ([run 37354010453](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37354010453)) on a content-dependent test, and nothing was published. The `v1.11.0-rc.4` rehearsal passed: the live updater ([run 37359251437](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37359251437)) opened [BCHC PR #95](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/95), which merged after review at `3ded618` and deployed; the `v1.11.0-rc.5` update ([run 37409189753](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37409189753)) opened [BCHC PR #111](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/111), which merged after review at `89e4aea` and deployed. `v1.11.0-rc.6` failed closed ([run 38314528445](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38314528445); nothing published). The `v1.11.0-rc.7` update ([run 38317220465](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38317220465)) opened [BCHC PR #124](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/124), which merged at `71b4a96` and deployed. The `v1.11.0-rc.8` update ([run 38320638476](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38320638476)) opened [BCHC PR #126](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/126), which merged at `8d9994b` and deployed. `v1.11.0-rc.9` failed closed ([run 38433343323](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38433343323); nothing published). The `v1.11.0-rc.10` update ([run 38438432055](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38438432055)) opened [BCHC PR #130](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/130), which merged at `e2fa0f6` and deployed. `v1.11.0-rc.11` failed closed in three runs (nothing published). The rehearsal for `v1.11.0-rc.12` is pending: it runs once this release pull request merges and the immutable tag is published. - Automated code baseline: **green** - Wider-demo candidate: **no-go until parent interface polish and the remaining manual/live demo gates pass** - Stable release and BCHC handoff: **no-go until the human and live-repository gates below pass** diff --git a/test/scripts/submit_uploads.test.mjs b/test/scripts/submit_uploads.test.mjs index 63b1a88..ac474d5 100644 --- a/test/scripts/submit_uploads.test.mjs +++ b/test/scripts/submit_uploads.test.mjs @@ -296,12 +296,8 @@ test('feature off: no pickers, no script, no data attribute — in the markup an !SCRIPTS.some((src) => /uploads/.test(src)), 'the uploads scripts must not be in the always-on list' ); - // Off by default is the template's own site.yml. A deployment's update runs - // this suite on its own site.yml (it carries .phct-version.json), which need - // not have the key at all, or may have turned uploads on. - if (!fs.existsSync(path.join(ROOT, '.phct-version.json'))) { - assert.match(read('_data/site.yml'), /^ {2}uploads_url: ""/m, 'uploads must be off by default'); - } + // _data/site.yml belongs to the deployment (merge=ours), which may have + // turned uploads on, so off-by-default is checked on the snapshot below. assert.doesNotMatch(FIXTURE, /uploads/i, 'the off-by-default snapshot mentions uploads'); // At runtime: signed in, but no uploads script and no attribute. From e921bf14b191130234a0630d38480665a78b621e Mon Sep 17 00:00:00 2001 From: Christopher Collins Date: Sat, 17 Oct 2026 06:47:20 -0500 Subject: [PATCH 5/5] chore: record rc.12 verify evidence at 7029c6a Co-Authored-By: Claude Opus 5.5 --- docs/release-readiness-status.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/release-readiness-status.md b/docs/release-readiness-status.md index ddad0bb..2328970 100644 --- a/docs/release-readiness-status.md +++ b/docs/release-readiness-status.md @@ -150,7 +150,7 @@ that updater succeeds. |---|---|---| | Reproducible toolchain | Pass | Node 22.22.2, npm 10.9.4, Ruby 3.3.11, and Bundler 4.0.11 are exact-pinned and checked by `npm run doctor`. | | Live pull-request CI | Pass at reviewed heads | The rc.2 implementation retained the full Validate, coverage, preset matrix, scale/Chrome, supply-chain, CodeQL, workflow-lint, pa11y, assistive-flow, and desktop/mobile Lighthouse gates. PHCT PRs #17/#20 passed protected CI and review. The generated metrics head `9a486f6` then passed all seven ruleset-required contexts plus browser quality through trusted dispatches before PR #19 was intentionally closed unmerged. Every check on BCHC rc.2 update head `2017cda` is green. | -| PHCT release verification | Pass | `npm run verify` completed under the exact-pinned toolchain (Node 22.22.2, npm 10.9.4, clean `npm ci`) at the `v1.11.0-rc.12` release-record commit `2ab56f48b20906a19397912bb702106508fbd0d7`: 1310 Node tests across 3 suites, 283 Ruby tests with 785 assertions, 155 build-matrix tests, plus lint, formatting, coverage, generated-file, data/front-matter, license, security-exception, SBOM, image-derivative, production CSS, Jekyll production build, and built-site link gates. The final release-record head differs from that commit only by this evidence sentence, and every protected CI context runs on the exact head in the release pull request. | +| PHCT release verification | Pass | `npm run verify` completed under the exact-pinned toolchain (Node 22.22.2, npm 10.9.4, clean `npm ci`) at the `v1.11.0-rc.12` release-record commit `7029c6a76997da53eb95d6c3932bda7441435072`: 1310 Node tests across 3 suites, 283 Ruby tests with 785 assertions, 155 build-matrix tests, plus lint, formatting, coverage, generated-file, data/front-matter, license, security-exception, SBOM, image-derivative, production CSS, Jekyll production build, and built-site link gates. The final release-record head differs from that commit only by this evidence sentence, and every protected CI context runs on the exact head in the release pull request. | | Code coverage | Pass locally and in exact-head CI | Pinned runtime coverage passed reviewed regression floors: complete loaded Node production code 84.81% lines / 75.94% branches / 80.07% functions; focused security parsers 90.54% / 80.55% / 93.59%; updater and release-lock logic 72.79% / 77.39% / 87.76%; loaded Ruby production code 93.29% lines / 85.13% branches / 77.69% methods. Six Ruby CLI sources exercised by subprocess or integration gates are explicitly inventoried, and any new unrepresented Ruby source fails the gate. Validate retains JSON and raw TAP artifacts even when a floor fails. | | Exact BCHC update rehearsal | Pass for 1.10.0-rc.2 (and 1.9.0-rc.6, rc.7), 1.11.0-rc.2, 1.11.0-rc.4, 1.11.0-rc.5, 1.11.0-rc.7, 1.11.0-rc.8 and 1.11.0-rc.10 (rc.6, rc.9 and rc.11 failed closed) | The live `v1.10.0-rc.2` update on 2026-09-28 ([run 36444662449](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/36444662449) → [BCHC PR #76](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/76), merged `ab4e71b`) kept all 181 protected files byte-identical. The real rc.4 updater run resolved `v1.9.0-rc.4` to full SHA `c41149eaacab353c82403477bf0c5b2f26a48650`, preserved the protected BCHC paths, regenerated BCHC-owned deployment output, and opened candidate [PR #7](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/7) at `c4ac0d5de1921f8047cabbe3264b6cda517c52b2`. The complete downstream required-check set was green, and the PR merged at `fd7206981c58107df626f50062f08ad6aee1a0e0`, locking the published BCHC demo to `v1.9.0-rc.4`. The rc.2 rehearsal ([PR #4](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/4) at `2017cda8b731ae52103c6b44232496d2c2fc8662`, 116 protected files byte-identical) remains the recorded checksum baseline. The rc.6 update repeated the rehearsal live on 2026-08-28: the updater first failed closed on the pending ownership-contract migration ([run 33134382533](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33134382533)), passed once [BCHC PR #29](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/29) merged, and opened the machine-verified [BCHC PR #30](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/30), which merged after human review at `c0826d9776747c2838daaba91991628e4301f7bf`, locking the published demo to `v1.9.0-rc.6`. The rc.7 update repeated the rehearsal live the same day: [run 33144777338](https://github.com/crypticpy/bchc-ai-use-case-catalog/actions/runs/33144777338) opened machine-verified [BCHC PR #34](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/34), which merged after human review at `929b007ce9cd75b14447b9e1a781d6a04b6dfb4`, locking the published demo to `v1.9.0-rc.7`; the live rollback drill then reverted and byte-identically re-applied that update ([BCHC PR #35](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/35) / [PR #36](https://github.com/crypticpy/bchc-ai-use-case-catalog/pull/36)). The `v1.11.0-rc.2` update ([BCHC PR #93](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/93), `82a8dab`), the `v1.11.0-rc.4` update ([BCHC PR #95](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/95), `3ded618`) and the `v1.11.0-rc.5` update ([run 37409189753](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/37409189753) → [BCHC PR #111](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/111), `89e4aea`) passed it (rc.3 and rc.6 failed closed; rc.6 in [run 38314528445](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38314528445)). The `v1.11.0-rc.7` update ([run 38317220465](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38317220465) → [BCHC PR #124](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/124), `71b4a96`) passed it. The `v1.11.0-rc.8` update ([run 38320638476](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38320638476) → [BCHC PR #126](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/126), `8d9994b`) passed it. `v1.11.0-rc.9` failed closed ([run 38433343323](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38433343323); nothing published). The `v1.11.0-rc.10` update ([run 38438432055](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38438432055) → [BCHC PR #130](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/130), `e2fa0f6`) passed it. `v1.11.0-rc.11` failed closed in three runs ([run 38987627059](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38987627059), [run 38988121431](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38988121431), [run 38988710956](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/38988710956); nothing published; [BCHC PR #143](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/143) and [BCHC PR #144](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/144) migrated and bridged BCHC's ownership contract). Repeat the same rehearsal and checksum gate for `v1.11.0-rc.12`. | | Dependency vulnerabilities | Pass | The exact-head Supply chain job passed parsed npm and Bundler audits with zero active exceptions; critical or unidentified findings cannot be waived, and stale/expired/unused exceptions fail closed. |