From f3ad568192ce7277150aa2ee4469ede54e1959cd Mon Sep 17 00:00:00 2001 From: Christopher Collins Date: Sat, 17 Oct 2026 12:01:46 -0500 Subject: [PATCH 1/2] chore: release record for v1.11.0-rc.13 Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 9 ++++++++- README.md | 2 +- docs/release-readiness-plan.md | 2 +- docs/release-readiness-status.md | 30 ++++++++++++++++++++---------- package-lock.json | 4 ++-- package.json | 2 +- 6 files changed, 33 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 908adf6..ba1e78b 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.13] — 2026-10-17 + +Thirteenth candidate. It carries rc.12 plus one fix to the upload service, so a +deployment's own copy of `services/uploads` matches what is deployed. It changes +no `.github/workflows` file relative to rc.12 and adds no generated outputs. + ### Fixed - The upload service refused every upload with "GitHub could not save the file @@ -1804,7 +1810,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.12...HEAD +[Unreleased]: https://github.com/crypticpy/phct/compare/v1.11.0-rc.13...HEAD +[1.11.0-rc.13]: https://github.com/crypticpy/phct/compare/v1.11.0-rc.12...v1.11.0-rc.13 [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 diff --git a/README.md b/README.md index a41104f..44651d1 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.12 # read-only: what this exact release changes, in two lists +npm run upgrade:check -- --to v1.11.0-rc.13 # 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 d7f791f..0d59619 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.12` (last stable release: `v1.10.0`) +- Candidate: `v1.11.0-rc.13` (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 2328970..0772a19 100644 --- a/docs/release-readiness-status.md +++ b/docs/release-readiness-status.md @@ -1,14 +1,24 @@ # PHCT and BCHC release-readiness status -- Evidence date: 2026-10-16 +- Evidence date: 2026-10-17 - 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/pull/116), - which carries the fix to one rc.11 test (`submit_uploads.test.mjs`, which read the deployment's own +- PHCT candidate: `v1.11.0-rc.13`, 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.13%22), + which carries [PR #117](https://github.com/crypticpy/phct/pull/117) on top of rc.12: the upload + service now accepts GitHub's stateless installation tokens (`ghs__`, about 520 + characters), which the service refused before. It was verified live in BCHC: a real upload returned + 201, a duplicate 201 with no write, a delete 204, and an end-to-end test submission + ([BCHC issue #147](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/issues/147) → + [BCHC PR #148](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/148)) had the scaffolder + copy a PDF and a screenshot before the cleanup workflow deleted both upload branches. rc.13 changes no + `.github/workflows` file relative to rc.12 (BCHC's lock) and adds no generated outputs, so the downstream + `PHCT_UPDATE_TOKEN` check in release-procedure step 5 does not apply and the ownership contract is unchanged. + Rollback point: `v1.11.0-rc.12`. + rc.12 (`f1f47d79cb4be4c4e1d84939075887851cbc1f8a`, [PR #116](https://github.com/crypticpy/phct/pull/116)) + carried 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`; 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. + carried rc.11 unchanged. It went live in BCHC via [run 39030564152](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/39030564152) → [BCHC PR #145](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/145) (`7818a4a`); + BCHC then turned uploads on ([BCHC PR #146](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/146), `c50e57e`). 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 @@ -152,7 +162,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.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`. | +| 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, 1.11.0-rc.10 and 1.11.0-rc.12 (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). The `v1.11.0-rc.12` update ([run 39030564152](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/39030564152) → [BCHC PR #145](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/145), `7818a4a`) passed it and deployed. Repeat the same rehearsal and checksum gate for `v1.11.0-rc.13`. | | 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. | @@ -232,8 +242,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.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-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`, and the `v1.11.0-rc.12` update ([BCHC PR #145](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/145)) at `7818a4a`. Remaining for `v1.11.0-rc.13`: 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.13` (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, rc.12 via BCHC PR #145) (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`. The `v1.11.0-rc.12` update then went through the live updater ([run 39030564152](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/39030564152) → [BCHC PR #145](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/145)), merged `7818a4a`. Remaining for `v1.11.0-rc.13`: tag it (it changes no `.github/workflows` file relative to rc.12, so the `PHCT_UPDATE_TOKEN` workflow-scope check does not apply), 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 4fef2b6..8fc3ebe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "phct", - "version": "1.11.0-rc.12", + "version": "1.11.0-rc.13", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "phct", - "version": "1.11.0-rc.12", + "version": "1.11.0-rc.13", "devDependencies": { "@eslint/js": "^10.0.1", "@tailwindcss/forms": "^0.5.10", diff --git a/package.json b/package.json index 5bf882e..ffcd19b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "phct", - "version": "1.11.0-rc.12", + "version": "1.11.0-rc.13", "private": true, "packageManager": "npm@10.9.4", "engines": { From 1fb182620075b6d0d107f000f6a65a38d2162d83 Mon Sep 17 00:00:00 2001 From: Christopher Collins Date: Sat, 17 Oct 2026 12:04:44 -0500 Subject: [PATCH 2/2] chore: record rc.13 verify evidence 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 0772a19..0bf119d 100644 --- a/docs/release-readiness-status.md +++ b/docs/release-readiness-status.md @@ -160,7 +160,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 `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. | +| 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.13` release-record commit `f3ad568192ce7277150aa2ee4469ede54e1959cd`: 1311 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, 1.11.0-rc.10 and 1.11.0-rc.12 (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). The `v1.11.0-rc.12` update ([run 39030564152](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/actions/runs/39030564152) → [BCHC PR #145](https://github.com/Big-Cities-Health-Coalition/use-case-catalog/pull/145), `7818a4a`) passed it and deployed. Repeat the same rehearsal and checksum gate for `v1.11.0-rc.13`. | | 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. |