Skip to content

Cut v1.3.1 catalog (absorb ir-formal-grammar drift; signed)#20

Merged
TSavo merged 2 commits into
mainfrom
chore/v1-3-1-cut
May 2, 2026
Merged

Cut v1.3.1 catalog (absorb ir-formal-grammar drift; signed)#20
TSavo merged 2 commits into
mainfrom
chore/v1-3-1-cut

Conversation

@TSavo
Copy link
Copy Markdown
Owner

@TSavo TSavo commented May 2, 2026

Summary

v1.3.1 patch bump over v1.3.0. Re-sync only; no protocol-level changes. Absorbs ir-formal-grammar spec-CID drift introduced by PR #10 (the Bridge target pinning: the shim-poisoning vector normative subsection landed without a follow-up catalog cut). CI's recompute-spec-cids --verify was failing on main; this PR re-bakes the catalog and re-signs under the v0 foundation key.

New catalog CID

blake3-512:dab2eca97eaea7cc107b1ff3f2326094d804a5e91749bf8e9caa36cd049dc0ae1cb65afb353af8fcd271f87e9e0fc7e7710ec6a68666da6a11f802bc304ff799

Drifts absorbed

Exactly one spec drifted between v1.3.0 (2026-05-02 15:00Z) and v1.3.1 (2026-05-02 17:00Z):

key old CID (v1.3.0) new CID (v1.3.1)
ir-formal-grammar blake3-512:99f091633181eda7ad1798c15316c49c829899f8622146fae5de698dfbe36bd6038d45da334514c87b8e978739b538ab61f96c44093624c60d7a242ae37cc4bb blake3-512:fc26a82bc5e40b2bc96c0cacc5831a063239452137dad9cbb52f3ca21b13d20c0538093bd4810eb620cc2a1003522ab4f4796d339bcfdfe16128b2129b72f42c

The other 19 spec CIDs are unchanged. v1.3.0 mementos and .proof bundles remain valid; v1.3.0's CID 5a3129f4...205d24c7 stays attestable via .provekit/catalog-signatures/v1.3.0.json for anyone pinned to it.

Verification (locally, on this branch)

$ provekit verify-protocol --signed
ProvekIt protocol conformance (signed)
  expected         : blake3-512:dab2eca9...304ff799
  actual           : blake3-512:dab2eca9...304ff799
  attested CID     : blake3-512:dab2eca9...304ff799
  signer (pubkey)  : ed25519:IVL40Zt5HSRFMkLhXy6rbLfP+ntqXtMAl5YOBpiB2xI=
  CID match        : ok
  attested CID     : ok
  signer match     : ok
  signature        : ok
  status           : match

$ cargo run --release --manifest-path tools/recompute-spec-cids/Cargo.toml -- --verify
# Protocol catalog freeze (v1.3.1)
Catalog CID:     blake3-512:dab2eca9...304ff799
exit 0

$ cargo test --release --manifest-path implementations/rust/Cargo.toml -p provekit-cli protocol::
test result: ok. 12 passed; 0 failed

provekit verify-protocol --signed reports match/ok/ok/ok locally on this branch.

Files touched

  • protocol/specs/2026-04-30-protocol-catalog.json (version, declaredAt, ir-formal-grammar property, _unsigned rotated)
  • tools/foundation-keygen/Cargo.toml (new sign-catalog-v1-3-1 bin entry)
  • tools/foundation-keygen/src/lib.rs (new V1_3_1_DECLARED_AT const)
  • tools/foundation-keygen/src/bin/sign_catalog_v1_3_1.rs (new)
  • tools/recompute-spec-cids/src/main.rs (target comment + print line bumped to v1.3.1)
  • .provekit/catalog-signatures/v1.3.1.json (new; canonical attestation)
  • implementations/rust/provekit-cli/assets/catalog-signature-v1.3.1.json (new)
  • implementations/rust/provekit-cli/assets/protocol-catalog.json (refreshed)
  • implementations/rust/provekit-cli/src/protocol.rs (EXPECTED_CATALOG_CID, EMBEDDED_CATALOG_SIGNATURE filename, comments)
  • implementations/rust/provekit-cli/src/main.rs (docstring v1.3.0 -> v1.3.1)
  • docs/launch/bluepaper.md (S0 CID, Appendix A entry, v1.3.1 changelog entry)

Out of scope (noticed, not fixed here)

Makefile lines 26-35 still pin "Catalog v1.2.0" with the v1.2.0 CID. The v1.3.0 cut already left this stale; rolling it forward is a separate concern (touches make conformance invariants and pinned mint CIDs). Flagging here for a follow-up PR.

Test plan

  • CI's recompute-spec-cids --verify is green (was red on main)
  • make catalog-verify green on the merge commit
  • make conformance green (caveat: per above, Makefile pins are still on v1.2.0; the catalog gate itself passes)
  • cargo test -p provekit-cli protocol:: 12/12 (incl. embedded_catalog_recomputes_to_expected_cid and embedded_signature_verifies_against_embedded_pubkey)

The 2 commits since the v1.3.0 cut (2ec87ad) modified one spec file.
PR #10 added the `Bridge target pinning: the shim-poisoning vector`
normative subsection to ir-formal-grammar without a follow-up catalog
cut, leaving the v1.3.0 catalog's recorded CID stale. CI's
`recompute-spec-cids --verify` is currently red. This commit re-bakes
the catalog as v1.3.1 (re-sync only) with the new property CID and
signs the new attestation under the same foundation v0 key.

v1.3.1 catalog CID:
  blake3-512:dab2eca97eaea7cc107b1ff3f2326094d804a5e91749bf8e9caa36cd049dc0ae1cb65afb353af8fcd271f87e9e0fc7e7710ec6a68666da6a11f802bc304ff799

Re-minted spec CIDs (drift caused by the 2 commits since v1.3.0):
  ir-formal-grammar    99f09163...e37cc4bb -> fc26a82b...29b72f42c

The other 19 spec CIDs are unchanged. v1.3.1 is a pure re-sync over
v1.3.0; no protocol-level changes. v1.3.0 mementos and .proof bundles
remain valid; v1.3.0's CID `5a3129f4...205d24c7` stays attestable via
.provekit/catalog-signatures/v1.3.0.json for anyone pinned to it.

Consumer surfaces migrated:
  - implementations/rust/provekit-cli/src/protocol.rs:24
    EXPECTED_CATALOG_CID = dab2eca9...304ff799
  - implementations/rust/provekit-cli/src/protocol.rs:47
    EMBEDDED_CATALOG_SIGNATURE = catalog-signature-v1.3.1.json
  - implementations/rust/provekit-cli/assets/protocol-catalog.json
    refreshed with v1.3.1 catalog
  - implementations/rust/provekit-cli/assets/catalog-signature-v1.3.1.json
    new attestation
  - .provekit/catalog-signatures/v1.3.1.json
    canonical attestation
  - tools/foundation-keygen: V1_3_1_DECLARED_AT + sign_catalog_v1_3_1
    binary parameterized via existing build_signed_attestation_for
  - tools/recompute-spec-cids: comment + print line bumped to v1.3.1
  - docs/launch/bluepaper.md (S0 + Appendix A + version log entry)

Verified empirically:
  $ provekit verify-protocol --signed
    expected         : blake3-512:dab2eca9...304ff799
    actual           : blake3-512:dab2eca9...304ff799
    attested CID     : blake3-512:dab2eca9...304ff799
    signer (pubkey)  : ed25519:IVL40Zt5HSRFMkLhXy6rbLfP+ntqXtMAl5YOBpiB2xI=
    CID match        : ok
    attested CID     : ok
    signer match     : ok
    signature        : ok
    status           : match

  $ cargo run --release --manifest-path tools/recompute-spec-cids/Cargo.toml -- --verify
    exit 0  (workspace conformance with on-disk catalog)

  $ cargo test -p provekit-cli protocol::
    12/12 pass (incl. embedded_catalog_recomputes_to_expected_cid +
    embedded_signature_verifies_against_embedded_pubkey)

Both conformance modes pass: CLI-internal-state + workspace-on-disk.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 2, 2026 16:43
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 2, 2026

Warning

Rate limit exceeded

@TSavo has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 36 minutes and 33 seconds before requesting another review.

To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 585e1243-a3b9-4e07-b5d8-5c7bc5cd0896

📥 Commits

Reviewing files that changed from the base of the PR and between cd32a5d and a96dd03.

📒 Files selected for processing (11)
  • .provekit/catalog-signatures/v1.3.1.json
  • docs/launch/bluepaper.md
  • implementations/rust/provekit-cli/assets/catalog-signature-v1.3.1.json
  • implementations/rust/provekit-cli/assets/protocol-catalog.json
  • implementations/rust/provekit-cli/src/main.rs
  • implementations/rust/provekit-cli/src/protocol.rs
  • protocol/specs/2026-04-30-protocol-catalog.json
  • tools/foundation-keygen/Cargo.toml
  • tools/foundation-keygen/src/bin/sign_catalog_v1_3_1.rs
  • tools/foundation-keygen/src/lib.rs
  • tools/recompute-spec-cids/src/main.rs
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/v1-3-1-cut

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
Review rate limit: 0/1 reviews remaining, refill in 36 minutes and 33 seconds.

Comment @coderabbitai help to get the list of available commands and usage tips.

@TSavo TSavo merged commit 6f50e2c into main May 2, 2026
3 of 4 checks passed
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Cuts protocol catalog v1.3.1 as a signed “re-sync” over v1.3.0 to absorb the ir-formal-grammar spec-CID drift (from PR #10) and restore green recompute-spec-cids --verify / verify-protocol --signed checks.

Changes:

  • Re-bakes the protocol catalog to v1.3.1 (updated ir-formal-grammar CID, bumped declaredAt, refreshed _unsigned metadata).
  • Adds a new foundation-keygen signer binary and declaredAt constant for v1.3.1.
  • Updates the Rust CLI embedded catalog/signature assets and expected catalog CID; updates launch bluepaper pinned CID/changelog.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated no comments.

Show a summary per file
File Description
tools/recompute-spec-cids/src/main.rs Updates target version labeling/output to v1.3.1.
tools/foundation-keygen/src/lib.rs Adds V1_3_1_DECLARED_AT constant used for deterministic signing.
tools/foundation-keygen/src/bin/sign_catalog_v1_3_1.rs New signer utility to generate .provekit/catalog-signatures/v1.3.1.json.
tools/foundation-keygen/Cargo.toml Registers sign-catalog-v1-3-1 binary target.
protocol/specs/2026-04-30-protocol-catalog.json Updates catalog version/declaredAt and re-bakes ir-formal-grammar CID; adds v1.3.1 _unsigned summary.
implementations/rust/provekit-cli/src/protocol.rs Bumps EXPECTED_CATALOG_CID and embedded signature asset reference to v1.3.1.
implementations/rust/provekit-cli/src/main.rs Updates verify-protocol --signed help text to v1.3.1 signature asset.
implementations/rust/provekit-cli/assets/protocol-catalog.json Refreshes embedded catalog JSON to v1.3.1 to match expected CID.
implementations/rust/provekit-cli/assets/catalog-signature-v1.3.1.json Adds embedded v1.3.1 signed attestation JSON.
.provekit/catalog-signatures/v1.3.1.json Adds committed v1.3.1 signed attestation JSON.
docs/launch/bluepaper.md Updates pinned catalog CID references and appends v1.3.1 changelog entry.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

TSavo added a commit that referenced this pull request May 5, 2026
…366) (#387)

* fix(baselines): resolve P1 review concerns from #293/#326 inline

Closes #366 partial (generator + BridgeV14 kit work).

P1 concerns addressed:

#1 Critical (CodeRabbit) — apply_builtin dead ctor0 branch: removed the
unreachable `a == 0` guard introduced by `let a = if arity == 0 { 1 }`.
Now arity=0 (serde default) correctly means unary; the ctor0 path is gone.

#5 Major (Copilot) — gte double-wrap: the old gte arm applied
ctor1(left, ctor1(sig, s)) in both branches of a dead if/else.
Fixed to ctor1(left, s) — the property applied directly to the input
variable, not to the builtin result.

#9 + #11 (CodeRabbit Major) — rust in lang list causes duplicate
rust-std-baseline-v1: removed "rust" from the hard-coded langs array.
rust is already minted by provekit-baseline-rust-std (#292). rust.toml
kept as reference but is not read by this binary.

#13 (Copilot) — silent skip on missing config changed to panic: a
missing config is always a repo error, not a runtime skip.

#14 (Copilot) — unknown predicate kind silently skipped changed to
panic: unknown kinds indicate a stale config or missing handler, not
a soft warning.

#15 (Copilot Major) — missing gte.args.left defaulting to signature
changed to panic: malformed configs must not silently produce
wrong-but-passing baselines.

#19 (CodeRabbit Major) — PHP Minter.php mintBridgeV14 now validates
and normalizes the tagged-union target before signing. Extra keys are
stripped; missing kind or cid fails with InvalidArgumentException.

#20 (CodeRabbit Critical) — Python bridge_v14.py missing `import base64`
added. The base64 module is used at line 101 but was not imported.

BridgeV14 kit work (from #326, unique to that branch):
- C kit: bridge_v14.c + self_contracts.h header
- PHP kit: Minter.php (+ validation fix above)
- Per-kit BridgeV14 in cpp, csharp, go, python, ruby, swift, ts, zig

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(baselines): regenerate 11 per-kit std baseline catalogs

Baselines minted by `mint-all-baselines` against the corrected
orchestrator (P1 fixes from previous commit). Rust excluded from this
binary — handled by provekit-baseline-rust-std.

11 kits minted: c, cpp, csharp, go, java, php, python, ruby, swift,
typescript, zig.

CIDs:
  c          blake3-512:6a30a452...
  cpp        blake3-512:64fc0845...
  csharp     blake3-512:e221722e...
  go         blake3-512:efa64a6c...
  java       blake3-512:22a41119...
  php        blake3-512:93028afd...
  python     blake3-512:224e0cbe...
  ruby       blake3-512:1c52edaf...
  swift      blake3-512:313ab922...
  typescript blake3-512:9da2bdff...
  zig        blake3-512:5f7e1f73...

These are byte-deterministic: same seed (FOUNDATION_V0_SEED = [0x42; 32]),
same configs, same produced_at timestamp. Regeneration on any platform
with the corrected binary must produce identical CIDs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(baseline-std): silence dead-code warnings + document rust.toml exclusion

- Rename ctorN -> ctor_n (snake_case, fixes non_snake_case warning)
- Add #[allow(dead_code)] to ctor0/ctor2 with explanatory comment; they are
  scaffolding for future N-ary predicate kinds, not bugs
- Add comment to configs/rust.toml explaining it is intentionally excluded from
  the mint_all_baselines langs list — Rust baselines are owned by
  provekit-baseline-rust-std (#292) to avoid duplicate rust-std-baseline-v1

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <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.

2 participants