Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,20 @@ major version, and each entry says so when it happens.

## [Unreleased]

## [1.9.0-rc.7] — 2026-08-28

### Fixed

- The refresh-reminder guidance now names the deployment's actual verified-date
field: the workflow reads the schema's `entry.verified_key` from the script
instead of assuming a field literally named `verified`, so a catalog that
renamed the field is told to stamp the right key.
- The verification sweep hands its drafted issue bodies to the follow-up step
through a file under the runner's temp directory instead of a step output, so
a sweep that drafts many reminders in one run can no longer hit the runner's
per-environment-entry size cap; `count`, `slugs` and `max_new` remain
ordinary outputs.

## [1.9.0-rc.6] — 2026-08-27

### Added
Expand Down Expand Up @@ -1168,7 +1182,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.9.0-rc.6...HEAD
[Unreleased]: https://github.com/crypticpy/phct/compare/v1.9.0-rc.7...HEAD
[1.9.0-rc.7]: https://github.com/crypticpy/phct/compare/v1.9.0-rc.6...v1.9.0-rc.7
[1.9.0-rc.6]: https://github.com/crypticpy/phct/compare/v1.9.0-rc.5...v1.9.0-rc.6
[1.9.0-rc.5]: https://github.com/crypticpy/phct/compare/v1.9.0-rc.4...v1.9.0-rc.5
[1.9.0-rc.4]: https://github.com/crypticpy/phct/compare/v1.9.0-rc.3...v1.9.0-rc.4
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.9.0-rc.6 # read-only: what this exact release changes, in two lists
npm run upgrade:check -- --to v1.9.0-rc.7 # read-only: what this exact release changes, in two lists
```

The whole protected-update and manual-recovery recipe: [`docs/upgrading.md`](docs/upgrading.md).
Expand Down
12 changes: 6 additions & 6 deletions docs/polish-and-publish-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -251,17 +251,17 @@ maintainer can diagnose a failed workflow and roll back without live coaching.
After work packages 0–4 are green:

1. Freeze reusable changes and update the evidence ledger from current live data.
2. Open a release-record PR that sets the package/lock version to `1.9.0-rc.6`, updates CHANGELOG,
2. Open a release-record PR that sets the package/lock version to `1.9.0-rc.7`, updates CHANGELOG,
migration notes, documentation status, supported scale/browser statements, and release links.
3. Run the entire parent suite from a clean clone and require every protected check on the exact
release-record head.
4. Confirm the generated showcase and every preset come from that same commit.
5. Create immutable tag `v1.9.0-rc.6` only from the merged, verified release commit.
5. Create immutable tag `v1.9.0-rc.7` only from the merged, verified release commit.
6. Publish candidate notes with full SHA, compatibility impact, protected-path migrations,
rollback instructions, known limitations, SBOM, SBOM SHA-256, and CI evidence.
7. Verify tag-to-commit equality and download/inspect the published release assets.

If further parent fixes are required, create rc.7; never move or replace rc.6.
If further parent fixes are required, create rc.8; never move or replace rc.7.

Exit: one immutable parent candidate contains all intended reusable polish and complete evidence.

Expand Down Expand Up @@ -314,8 +314,8 @@ does not imply that fictional content is real.
## Work package 8 — stable publication and deployment

1. After the candidate and live gates pass, open a stable release-record PR directly on top of the
accepted rc.6 commit. Change `package.json`, `package-lock.json`, CHANGELOG, release status, and
other version-bearing release documentation from `1.9.0-rc.6` to `1.9.0`; do not include a
accepted rc.7 commit. Change `package.json`, `package-lock.json`, CHANGELOG, release status, and
other version-bearing release documentation from `1.9.0-rc.7` to `1.9.0`; do not include a
reusable behaviour change.
2. Review the candidate-to-stable diff against that allowlist and run every protected parent check
on the exact stable-version head.
Expand All @@ -325,7 +325,7 @@ does not imply that fictional content is real.
statement, known limitations, candidate provenance, and links to exact CI runs.
5. Run BCHC's updater against `v1.9.0`. Let it open a stable update PR whose lock release, lock SHA,
parent package version, and fetched tag all agree; do not hand-edit the candidate lock.
6. Mark the rc.6 BCHC candidate PR superseded only after the stable update PR exists and its
6. Mark the rc.7 BCHC candidate PR superseded only after the stable update PR exists and its
provenance is verified. Retain both PRs as evidence.
7. Re-run protected-file checksums and the complete downstream suite on the stable update head.
8. Human-review and merge the stable BCHC update, then verify the Pages deployment SHA and all
Expand Down
2 changes: 1 addition & 1 deletion docs/release-readiness-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.9.0-rc.6`
- Candidate: `v1.9.0-rc.7`
- Parent repository: [`crypticpy/phct`](https://github.com/crypticpy/phct)
- Downstream demo: [`crypticpy/bchc-ai-use-case-catalog`](https://github.com/crypticpy/bchc-ai-use-case-catalog)

Expand Down
25 changes: 14 additions & 11 deletions docs/release-readiness-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,20 @@

- Evidence date: 2026-08-28
- PHCT starting baseline: `c9fcb223826f2fc8c945d894420c16a2b8ff5da0`
- PHCT candidate: `v1.9.0-rc.6`, cut from protected `main` at the merge of the
searchable "Also deployed by" listings ([PR #46](https://github.com/crypticpy/phct/pull/46),
all ruleset-required contexts plus scale, audit, and CodeQL green at merged head
`cf55fd735d091172222801d551ee989abb3b0319`) — the head of the entry-lifecycle,
concept-search and search-performance line merged in
- PHCT candidate: `v1.9.0-rc.7`, cut from protected `main` at the merge of the two
rc.6 refresh-cycle robustness fixes found in downstream review
([PR #49](https://github.com/crypticpy/phct/pull/49), merged at
`af54f2810ed9d94fbfbb9b92ecf500ceaba18ddb`) and this release pull request.
It supersedes
[`v1.9.0-rc.6`](https://github.com/crypticpy/phct/releases/tag/v1.9.0-rc.6), published at
immutable commit `c33e76b05fda6a9bdaa7beea7527414b13d74c1b` — cut at the merge of the
searchable "Also deployed by" listings ([PR #46](https://github.com/crypticpy/phct/pull/46)),
the head of the entry-lifecycle, concept-search and search-performance line merged in
[PR #43](https://github.com/crypticpy/phct/pull/43),
[PR #44](https://github.com/crypticpy/phct/pull/44) and
[PR #45](https://github.com/crypticpy/phct/pull/45) — and this release pull request.
It supersedes
[`v1.9.0-rc.5`](https://github.com/crypticpy/phct/releases/tag/v1.9.0-rc.5), published at
immutable commit `607169f1b12c6bb44e959e626c19f2ca9eefa6f0`, which itself superseded
[PR #45](https://github.com/crypticpy/phct/pull/45) — which itself superseded
[`v1.9.0-rc.5`](https://github.com/crypticpy/phct/releases/tag/v1.9.0-rc.5) at
immutable commit `607169f1b12c6bb44e959e626c19f2ca9eefa6f0`, which superseded
[`v1.9.0-rc.4`](https://github.com/crypticpy/phct/releases/tag/v1.9.0-rc.4) at
`c41149eaacab353c82403477bf0c5b2f26a48650`; the
[`v1.9.0-rc.2`](https://github.com/crypticpy/phct/releases/tag/v1.9.0-rc.2) record at
Expand Down Expand Up @@ -51,7 +54,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 at release-record commit `ce46cbdc5cdddda78878cb367b119fe9ef440aa1`: 796 Node tests across 3 suites, 233 Ruby tests with 578 assertions, 109 build-matrix tests across 6 suites, 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 at release-record commit `f1e5699f147ce770137cc50d3d7c86c372c83a37`: 799 Node tests across 3 suites, 233 Ruby tests with 578 assertions, 109 build-matrix tests across 6 suites, 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 rc.6 | 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`. Repeat the same rehearsal and checksum gate for rc.7 and the stable update. |
| 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. |
Expand Down Expand Up @@ -135,7 +138,7 @@ No automated P0 or P1 defect is known at this checkpoint.
|---|---|---|---|
| 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 resets the line: the stable cut now requires an rc.7 candidate and one more human-reviewed BCHC update. |
| 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 | Complete for rc.6 — 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); offline rollback proof retained 2026-08-28: reverting update merge `c0826d9` restores the full `v1.9.0-rc.5` state (58 template files, lock included) touching zero deployment-owned content — the live revert-PR path stays open under RR-H07. Repeat for rc.7 and the stable tag. |
| 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-side rehearsal and the notification-delivery confirmation remain open. |
| 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. |
| RR-H06 | Manually test current Firefox, Safari, Edge, iOS Safari, and Android Chrome plus VoiceOver and NVDA; verify 200%/400% zoom, keyboard-only use, visible focus, forced colors, reduced motion, and representative long/empty/error content. | Accessibility reviewer | Open |
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "phct",
"version": "1.9.0-rc.6",
"version": "1.9.0-rc.7",
"private": true,
"packageManager": "npm@10.9.4",
"engines": {
Expand Down