Skip to content

chore(template): sync the mint machinery to rsr-template-repo 2be7b88 - #28

Merged
hyperpolymath merged 6 commits into
mainfrom
claude/template-sync
Nov 9, 2026
Merged

hyperpolymath merged 6 commits into
mainfrom
claude/template-sync

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Summary

estate-rules is red on main. Its step "Use-this-template mint end to end" runs tests/e2e/use_template_mint_test.sh as inherited from template c481073. That version re-mints this already-minted tree and fails on an unfilled {{OWNER}} token. The template fixed this across #275, #291, #293 and #294, and its current test self-skips in a minted child.

I reproduced both sides: the c481073 test fails on main, and the current test passes on this branch.

Changes

This is a three-way sync. The base is c481073, the commit this repository was minted from, and the target is template 2be7b88.

  • 43 files that this repository still held byte-identical to c481073 take the template's current version: mint machinery, hooks, workflows, checks and tests.
  • 9 new machinery files: chain-mint, replay-mint, check-mint-drift and format-container-kyaml, plus their tests. The template's own diagnostic workflow (oracle-segfault-diag.yml) and its lock record are left out.
  • Diverged files were three-way merged. These stay as this repository's own:
  • secret-scanner.yml takes the template's inline three-scanner workflow (rsr-template-repo#295: stable status contexts, no secrets: inherit). Its lock record is updated and its contract test wired.
  • non_interactive_mint_test.sh and chain_mint_test.sh carry test(mint): in a legacy minted child, assert the re-mint refusal instead of failing rsr-template-repo#300's guard. Without it, both tests fail in any legacy minted child. In a repository minted without (mint-answers), the guard asserts that repo-init refuses to mint again, by name.

RSR Quality Checklist

Required

  • Tests pass. Locally:
    • check-lock-sync: in sync.
    • check-workflow-edges, check-required-contexts, check-root-shape: pass.
    • run-proven-suite.sh: ALL LANES PASSED.
    • Every single-line estate-rules lane: the same five fail as on unmodified main. Four are environmental on this machine (asciidoctor, this machine's yq) and pass in CI.
  • No banned language patterns
  • SPDX license headers present on all new/modified source files
  • No secrets, credentials, or .env files included

Still red, and why


Generated by Claude Code

estate-rules is red on main. The step "Use-this-template mint end to end"
runs tests/e2e/use_template_mint_test.sh, inherited from template c481073.
That version re-mints this already-minted tree and fails on an unfilled
{{OWNER}} token. The template fixed it across #275, #291, #293 and #294; its
current test self-skips in a minted child. Reproduced: the c481073 test
fails on main, the current test passes here.

How the sync was made (three-way, base c481073, which this repo was minted
from):
- 43 files this repository still held byte-identical to c481073 take the
  template's 2be7b88 version: mint machinery, hooks, workflows, checks and
  tests.
- 9 new machinery files are added: chain-mint, replay-mint,
  check-mint-drift, format-container-kyaml, and their tests. The template's
  own diagnostic workflow, oracle-segfault-diag.yml, and its lock record are
  left out.
- Diverged files were merged with git merge-file. Kept as this repository's
  own: governance.yml (the #15 caller), README, mise.toml (yq added for
  scripts/kyaml-format.sh), the verdict-grid lane and rule-order policy
  (standards 8e48b1c renders; the template's e064539 does not), the
  rule-order checker and its test (from #22), and CHANGELOG.
- secret-scanner.yml takes the template's inline three-scanner workflow
  (#295: stable contexts, no secrets: inherit). Its lock record is updated
  and its contract test wired.
- tests/workflows/non_interactive_mint_test.sh and
  tests/e2e/chain_mint_test.sh carry hyperpolymath/rsr-template-repo#300's
  guard. In a legacy minted repo (no (mint-answers)) they assert repo-init's
  refusal to mint again, by name, instead of failing.

Checked locally:
- check-lock-sync: in sync.
- check-workflow-edges, check-required-contexts, check-root-shape: pass.
- run-proven-suite: ALL LANES PASSED.
- Every single-line estate-rules lane: the same five fail as on unmodified
  main, all environmental here (asciidoctor, this machine's yq) except
  governance_policy_test.
- governance_policy_test still fails on the #15 governance caller's
  pull_request branch filter. CI never reached that step before, because
  the mint test failed first. Left for the owner's decision.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYbQRtNu216R13jtZLmoqs
Canon lockstep is red on main. standards' canon.lock records 2.1.5 (#1424:
gate table 0.3.1 and the applicability policy changed; the criteria did
not), and this deed declared 2.1.3. Port of hyperpolymath/rsr-template-repo#298,
the spine's adoption.

- secret-types_chora.deed (canon): :version 2.1.3 to 2.1.5, and
  :gates-sha256 2f31f46d… to 5c510bba…. The criteria hash is unchanged.
  The (provenance) clause keeps 2.1.3: it records the canon this repository
  was minted against, which is history.
- tests/workflows/governance_policy_test.sh expects the 2.1.5 tuple. That
  test already fails on main earlier, on the governance.yml pull_request
  filter that #15's caller carries; this does not change that.

canon.lock marks 2.1.5 status "draft"; this adopts the identity the lock
records, which is what the lockstep gate compares.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYbQRtNu216R13jtZLmoqs
(cherry picked from commit 402f898)
…emplate #308)

The synced governance_policy_test.sh required an inline standards
checkout and an unfiltered pull_request trigger; this repository's
governance.yml (since #15) calls standards' governance-reusable.yml at
a 40-hex SHA and only ran for PRs into main/master. Owner ruling: keep
the caller, fix the test at source.

- Port hyperpolymath/rsr-template-repo#308: the test accepts a locked,
  SHA-pinned call of governance-reusable.yml as well as the inline
  checkout, and checks either in full.
- Drop the pull_request branch filter, so governance runs on stacked
  PRs too (the push filter stays).

governance_policy_test.sh passes in full here, canon 2.1.5 included;
lock sync, workflow edges and required contexts pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYbQRtNu216R13jtZLmoqs
…e wires

tests/workflows/governance_badge_test.sh requires README.adoc to read the
stable raw URL governance-badges/badges/k9.json. The template README
carries it with {{OWNER}}/{{REPO}} tokens; this repository's README never
had it, and the earlier re-mint failure in estate-rules stopped the job
before it reached this suite. The governance-badges branch already
publishes badges/k9.json here, so the badge renders.

governance_badge_test.sh passes in full (behaviour, wiring, firing
controls); all 174 .adoc files render clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYbQRtNu216R13jtZLmoqs
@hyperpolymath
hyperpolymath marked this pull request as ready for review November 9, 2026 15:40
@chatgpt-codex-connector

Copy link
Copy Markdown
Codex Review Summary: ❌ Failed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ❌ Failed 2026-11-09T15:40:30.160363Z
We couldn’t complete this review. Comment @codex review to try again.
612a04b Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

Estate Rules' "Converted YAML stays KYAML" step (synced from the
template) failed: build/container/compose.yaml is not KYAML. The file is
exactly the template's compose.yaml with its tokens filled. The template
quotes token keys ("{{SERVICE_NAME}}") because a brace token is not a
plain scalar; once filled, canonical KYAML writes the key unquoted
(scripts/format-container-kyaml.sh says so, and runs at mint). This
repository was minted before that formatter existed, so three filled
keys kept their quotes: "secret-types" (twice) and "secret-types-data".

Unquoted, matching the unquoted rokur-audit key the template's own file
carries and passes with. Parsed data is unchanged (compared as sorted
JSON). The byte-exact check needs mikefarah yq 4.53.3, which could not
be installed in this environment; CI runs it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYbQRtNu216R13jtZLmoqs
@github-actions

github-actions Bot commented Nov 9, 2026

Copy link
Copy Markdown

Hypatia grid orange

🟠 indeterminate · commit c23ac75285b3 · run 42655684863 · scope: this change (68 file(s))

Advisory: 11 row(s), worst 🟠 indeterminate (0 critical, 0 high) — reported, never grading the change.

Reporter Gate Status Critical High Medium Minor Since previous revision
Hypatia scan gating 🟠 indeterminate 0 0 0 0 — no comparable baseline
panic-attack assail advisory 🟠 indeterminate 0 0 0 0 — no comparable baseline
pons asinorum advisory 🟠 indeterminate 0 0 0 0 — no comparable baseline
accessibilitybot advisory ⚪ not applicable 0 0 0 0 — no comparable baseline
cipherbot advisory ⚪ not applicable 0 0 0 0 — no comparable baseline
echidnabot advisory ⚪ not applicable 0 0 0 0 — no comparable baseline
finishingbot (release readiness) advisory 🟠 indeterminate 0 0 0 0 — no comparable baseline
glambot (presentation quality) advisory 🟠 indeterminate 0 0 0 0 — no comparable baseline
panicbot advisory ⚪ not applicable 0 0 0 0 — no comparable baseline
rhodibot (RSR compliance) advisory 🟠 indeterminate 0 0 0 0 — no comparable baseline
seambot advisory ⚪ not applicable 0 0 0 0 — no comparable baseline
sustainabot advisory ⚪ not applicable 0 0 0 0 — no comparable baseline
Hypatia scan: error — the scanner produced no findings array
  • 🟠 indeterminate: the scanner produced no findings array
panic-attack assail: not_run — no status envelope was produced
  • 🟠 indeterminate: no status envelope was produced
pons asinorum: not_run — no status envelope was produced
  • 🟠 indeterminate: no status envelope was produced
accessibilitybot: not_applicable — template default: enrol once the repository serves HTML
  • ⚪ not applicable: template default: enrol once the repository serves HTML
cipherbot: not_applicable — template default: enrol once the repository implements cryptography
  • ⚪ not applicable: template default: enrol once the repository implements cryptography
echidnabot: not_applicable — template default: enrol once the repository carries proofs and an ECHIDNA engine is configured
  • ⚪ not applicable: template default: enrol once the repository carries proofs and an ECHIDNA engine is configured
finishingbot (release readiness): not_run — enrolled, but no report-back was received
  • 🟠 indeterminate: enrolled, but no report-back was received
glambot (presentation quality): not_run — enrolled, but no report-back was received
  • 🟠 indeterminate: enrolled, but no report-back was received
panicbot: not_applicable — panic-attack is already graded by the verdict grid's own panic-attack row, from static-analysis-gate.yml evidence; enrolling panicbot would report one scanner twice and give two rows that can disagree
  • ⚪ not applicable: panic-attack is already graded by the verdict grid's own panic-attack row, from static-analysis-gate.yml evidence; enrolling panicbot would report one scanner twice and give two rows that can disagree
rhodibot (RSR compliance): not_run — enrolled, but no report-back was received
  • 🟠 indeterminate: enrolled, but no report-back was received
seambot: not_applicable — template default: enrol once a seam register exists at spec/seams/seam-register.json
  • ⚪ not applicable: template default: enrol once a seam register exists at spec/seams/seam-register.json
sustainabot: not_applicable — reserved fleet slot; no adapter exists (gitbot-fleet bots/sustainabot/README.adoc)
  • ⚪ not applicable: reserved fleet slot; no adapter exists (gitbot-fleet bots/sustainabot/README.adoc)

Scope: static findings reported by each row's tool at the named commit. The table grades only findings in files this change touches, so the colour answers "does this change introduce anything?", not "what does the whole repository still carry?". Standing findings are counted in each accordion and in report.json; the baseline filter remains the place where acknowledged debt is recorded. The lane state is the worst GATING row; advisory rows are listed and counted but never set it. Purple, red, yellow and blue grade the worst GRADED finding present; orange is evidence missing, malformed or a scanner that did not run; grey is an explicit scope exclusion with its reason. No row is a security certification. report.json, badge.json and the raw findings are in the verdict-grid artifact on the linked run.

hyperpolymath added a commit to hyperpolymath/rsr-template-repo that referenced this pull request Nov 9, 2026
…kflow (#308)

## Summary

`tests/workflows/governance_policy_test.sh` required `governance.yml` to
check out `metadatastician/standards` inline. Some children instead call
`standards/.github/workflows/governance-reusable.yml` at a 40-hex SHA;
secret-types has done so since hyperpolymath/secret-types#15. That call
runs the same pinned policy, and keeps it defined once, in standards.
Such a child failed the test only because of its shape, and every
template sync brought the failure back. hyperpolymath/secret-types#28 is
red on exactly that today.

The owner chose to fix this at source and keep the caller.

## Changes

- The test now accepts either shape and checks each in full:
- **inline** (unchanged): a standards checkout at a 40-hex ref, whose
action is in the lock record with a locked dependency commit.
- **caller**: `jobs.governance.uses` names standards'
`governance-reusable.yml` at a 40-hex SHA. `actions.lock` must record
`owner/standards@<sha>` for `governance.yml`, with a locked dependency
commit.
- These still fail: a caller at a tag or branch, a caller missing from
the lock, and any `pull_request` filter.
- The header comment now describes the two shapes.

## RSR Quality Checklist

### Required

- [x] Tests pass: `bash tests/workflows/governance_policy_test.sh` on
the template (inline path).
- [x] No banned language patterns (Bun / JavaScript only).
- [x] SPDX headers unchanged.
- [x] No secrets.

## Testing

Controls run against a scratch copy of the repository:

| `governance.yml` | Result |
|---|---|
| caller at `@46ee183…`, locked | `PASS: governance calls the pinned
standards policy, and the call is locked` |
| same caller at `@v1.0.0` | `AssertionError: a governance caller must
call standards' governance-reusable.yml at a full 40-hex commit SHA` |
| caller with its lock record removed | `AssertionError: governance's
lock record must match the reusable workflow it calls` |
| template's own inline workflow | `PASS: governance executes the pinned
standards policy with locked actions` |

---
_Generated by [Claude
Code](https://claude.ai/code/session_01BYbQRtNu216R13jtZLmoqs)_

---------

Co-authored-by: Claude <noreply@anthropic.com>
Repository owner deleted a comment from coderabbitai Bot Nov 9, 2026
@hyperpolymath
hyperpolymath enabled auto-merge (squash) November 9, 2026 21:40
@coderabbitai

coderabbitai Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Explain Change →

Caution

Review failed

The pull request is closed.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@sonarqubecloud

sonarqubecloud Bot commented Nov 9, 2026

Copy link
Copy Markdown

@hyperpolymath
hyperpolymath merged commit 08e669d into main Nov 9, 2026
60 of 63 checks passed
@hyperpolymath
hyperpolymath deleted the claude/template-sync branch November 9, 2026 21:43
hyperpolymath pushed a commit that referenced this pull request Nov 10, 2026
…patible proof

#30 landed the same --cubical-compatible change
on main with its own helper names. The owner chose this PR's version, so
the 7 files that only #30 touched on main (Prelude, Generic,
proof-flags.sh, grade-receipt.sh, the receipt, PROOF-STATUS and
proof-debt) keep this branch's side. CHANGELOG keeps both new entries;
the template sync (#28) and the other main changes merge cleanly.

Checked with Agda 2.6.4.3 (Debian 13 agda-bin 2.6.4.3-1+b2):
check.sh (core proofs, 4 expected rejections, flag control),
minimal-laws.sh (3 laws, each needed), and grade-receipt.sh --check
(15 modules, all sha256 verified).

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0136P7ZmAsYpFA9gxfQLF3F6
Signed-off-by: Claude <noreply@anthropic.com>
hyperpolymath pushed a commit that referenced this pull request Nov 10, 2026
My earlier merge (ba2484f) took #32's head before #32 was updated
(3bf7f8e), because the local ref was stale. So this branch lacked main's
later changes (the template sync #28, canon 2.1.5 #27, https-only edges
#25) and kept some #26-only text. This merge corrects that.

Each conflicted file is a 3-way merge on 3bf7f8e (the #32 commit the
earlier merge used), so only this PR's legs changes are carried onto
main. Files the legs work does not own take main's version:
tests/workflows/governance_policy_test.sh, and docs/proof-debt.adoc
except its legs bullet (this restores #32's dated W-1 record). The
receipt is regenerated.

The diff against main is now the legs work: the Rocq and Lean sources,
check-legs.sh, the legs CI job, the receipt's (legs) block and RECONCILED
leg states (PWG-2ii derived), and the matching doc lines.

Checked with Agda 2.6.4.3, Coq 8.18.0 and Lean 4.24.0: check.sh,
minimal-laws.sh, check-legs.sh, grade-receipt.sh --check (15 modules),
check-escape-hatches.sh, the invisible-character scan and
tests/workflows/governance_policy_test.sh.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0136P7ZmAsYpFA9gxfQLF3F6
Signed-off-by: Claude <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request Nov 10, 2026
## Summary

Estate Rules is red on `main` ([run
42879373951](https://github.com/hyperpolymath/secret-types/actions/runs/42879373951))
at the verdict-grid lane suite: `FAIL: cannot locate Hypatia path
conversion`.

`tests/workflows/workflow_evidence_test.sh` comes from the template. It
reads the inline `jq --arg ws "$GITHUB_WORKSPACE/"` step that makes
Hypatia's finding paths repo-relative. This repository had kept a
one-job caller of
`metadatastician/standards/.github/workflows/hypatia-scan-reusable.yml`,
so the step was not there. The mint failure earlier in the same job hid
this until #28.

As the owner chose, this PR adopts the template's inline workflow.

## Changes

- `.github/workflows/hypatia-scan.yml`: now `rsr-template-repo` `main`
(`0208563`) byte for byte.
  - It builds the same Hypatia pin as before (`be98f74`).
- It uploads the SARIF (category `hypatia`) and the
`hypatia-scan-findings` artifact that `fork-governance.yml` and
`verdict-grid-publish.yml` already read.
  - It fails on any critical finding.
- The other workflows and `.github/workflows/README.adoc` already
describe this inline job.
- `.github/workflows/actions.lock`: the `hypatia-scan.yml` entry is the
template lock's entry for the same file. Every dependency record it
names was already in this lock. The `standards@46ee183` record stays for
its other users.

## RSR Quality Checklist

### Required

- [x] Tests pass (see Testing)
- [x] Code is formatted: the workflow is the template's file unchanged
- [x] Linter is clean
- [x] No banned language patterns
- [x] No `unsafe` blocks without `// SAFETY:` comments
- [x] No banned functions
- [x] SPDX license headers present
- [x] No secrets, credentials, or `.env` files included

### As Applicable

- None applies.

## Testing

Run locally on this branch:

- `scripts/check-lock-sync.sh`: pass (0 dangling edges, every workflow
has a lock key).
- standards `scripts/close-lock.sh --check .github/workflows` at
`d3e4b48`: closed, no dangling edges.
- `tests/workflows/workflow_evidence_test.sh`: pass (it failed with the
old caller).
- `scripts/check-workflow-edges.sh`: all workflow edges resolve.
- `tests/workflows/check_lock_sync_test.sh` and
`tests/workflows/governance_policy_test.sh`: pass.

The lock entry was copied from the template's tool-written lock for the
same file, not generated here: this session has no `gh actions-lock`.
`Lock Sync Gate` and `Actions lockfile verify` in CI are the authority
on it.

Hosted proof of the scan itself comes from this PR's `Hypatia Security
Scan` run.

## Screenshots

Not applicable.

---
_Generated by [Claude
Code](https://claude.ai/code/session_0136P7ZmAsYpFA9gxfQLF3F6)_

Signed-off-by: Claude <noreply@anthropic.com>
Co-authored-by: Claude <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request Nov 10, 2026
#36)

## Summary

Every pull request's verdict-grid comment is orange: "The renderer
pinned in metadatastician/standards@8e48b1caade0 was missing or did not
match its recorded sha256."

`scripts/verdict-grid-lane.sh` pins the renderer at standards `8e48b1c`
and records the sha256 of both renderer files at that commit. The 2
steps that fetch the renderer fetched `e064539` instead, a ref the
template sync (#28) brought in. At `e064539` neither file matches, so
the lane refuses to run the renderer. The CHANGELOG records that this
repository keeps `8e48b1c` because the renderer at `e064539` does not
render.

## Changes

- `.github/workflows/fork-governance.yml` (step "Checkout the verdict
grid renderer at the pinned standards commit") and
`.github/workflows/verdict-grid-publish.yml` (step "Checkout pinned
renderer"): `ref` moves from `e064539…` to
`8e48b1caade08a552646adeab66558ac43b4360d`.
- `actions.lock` does not change: `ref` is an input of
`actions/checkout`, not a `uses:` ref.

| File at standards | sha256 at `8e48b1c` | sha256 at `e064539` |
recorded in the lane script |
|---|---|---|---|
| `scripts/verdict-grid.sh` | `3ee93552…` | `1053d170…` | `3ee93552…` |
| `scripts/lib/verdict-grid.jq` | `5681fcef…` | `b02da89e…` |
`5681fcef…` |

## RSR Quality Checklist

### Required

- [x] Tests pass (see Testing)
- [x] Code is formatted: 2 changed lines
- [x] Linter is clean
- [x] No banned language patterns
- [x] No `unsafe` blocks without `// SAFETY:` comments
- [x] No banned functions
- [x] SPDX license headers present (unchanged)
- [x] No secrets, credentials, or `.env` files included

### As Applicable

- None applies.

## Testing

Run locally:

- Both renderer files fetched at `8e48b1c` match the recorded hashes
(`sha256sum -c --strict`).
- `tests/workflows/verdict_grid_test.sh`: 188 checks pass.
- `tests/workflows/workflow_evidence_test.sh` and
`tests/workflows/workflow_edges_test.sh`: pass.
- `scripts/check-workflow-edges.sh` and `scripts/check-lock-sync.sh`:
pass.

The hosted proof is this PR's own verdict-grid comment, which should
render instead of showing orange.

## Screenshots

Not applicable.

---
_Generated by [Claude
Code](https://claude.ai/code/session_0136P7ZmAsYpFA9gxfQLF3F6)_

Signed-off-by: Claude <noreply@anthropic.com>
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants