6.0 KiB
6.0 KiB
1. Pre-flight validation
- 1.1 Confirm
packages/crypto/crypto-keys/does not exist on disk; confirmgrep -rln "@suaveplan/crypto-keys" packages/returns zero matches (excludingopenspec/archive/) - 1.2 Confirm
packages/crypto/crypto/src/derivation/coordinate/coordinate.tsexportsDerivationCoordinatecarryingmasterVersionandslotVersion - 1.3 Confirm
packages/crypto/crypto/src/derivation/layouts/layouts.tsexportsDERIVATION_LAYOUT_V1packingmasterVersion u16 ‖ userId u32 ‖ depth u8 ‖ slotVersion u8 - 1.4 Confirm
packages/crypto/crypto/src/wire-format/index.tsre-exportsPUBLIC_BUNDLE_MAGIC,CHAIN_BUNDLE_MAGIC,KEY_SLOT_PRIVATE_BYTE_SIZE,KEY_SLOT_PUBLIC_BYTE_SIZE,V1_COORDINATE_BYTE_SIZE,*_FORMAT_VERSION - 1.5 Run
bunx turbo test --filter=@suaveplan/cryptoand confirm green at HEAD
2. Verified-by pointer audit
- 2.1 For each
Verified by:pointer inopenspec/changes/crypto-spec-restore-versioning/specs/crypto/spec.md, parse out the<file-path>::"<test-name>"pair - 2.2 For each pair, run
grep -F "<test-name>" <file-path>and assert the test name string appears literally inside anit(ortest(call site - 2.3 Hard-fail this change if any pointer does not resolve. Adjust the spec text (rename scenario or pointer) and re-run until clean
- 2.4 Run
bunx vitest run packages/crypto/crypto/src/keychain/keychain.test.ts packages/crypto/crypto/src/keychain/validity/validity.test.ts packages/crypto/crypto/src/keychain/key-slot/key-slot.test.ts packages/crypto/crypto/src/derivation/layouts/layouts.test.ts packages/crypto/crypto/src/derivation/coordinate/coordinate.test.ts packages/crypto/crypto/src/domain-tags/domain-tags.test.ts packages/crypto/crypto/src/bundles/public-bundle/public-bundle.test.ts packages/crypto/crypto/src/bundles/chain-bundle/chain-bundle.test.ts packages/crypto/crypto/src/authority/authority.test.ts packages/crypto/crypto/src/identity/identity.test.ts packages/crypto/crypto/src/revocation/revocation-list.test.ts packages/crypto/crypto/src/audit-log/audit-log.test.ts packages/crypto/crypto/src/packer/packer.test.ts packages/crypto/crypto/src/chunked-packer/chunked-packer.test.ts --reporter=verboseand confirm every test name cited in the spec passes (not skipped, not todo)
3. Symbol presence audit
- 3.1 Run
grep -RnE "DERIVATION_LAYOUT_V1|DERIVATION_LAYOUT_V1_ID" packages/crypto/crypto/src/and confirm at least one definition site - 3.2 Run
grep -RnE "PUBLIC_BUNDLE_MAGIC|CHAIN_BUNDLE_MAGIC|KEY_SLOT_PRIVATE_BYTE_SIZE|KEY_SLOT_PUBLIC_BYTE_SIZE|V1_COORDINATE_BYTE_SIZE|MAX_CHAIN_LINKS" packages/crypto/crypto/src/and confirm definitions plus the wire-format barrel re-export - 3.3 Run
grep -RnE "DOMAIN_VAULT_V1|DOMAIN_PUBLIC_KEYCHAIN_V1|DOMAIN_PACKER_V1|DOMAIN_CHUNK_V1|DOMAIN_CRL_V1|DOMAIN_AUDIT_V1|DOMAIN_SLSA_BUILDER_V1|DOMAIN_BITPACKER_SIGNED_V1|DOMAIN_BITPACKER_HASHCHAIN_V1|DOMAIN_BITPACKER_MULTISIGN_V1" packages/crypto/crypto/src/domain-tags/and confirm exactly the 10 v1 tags exist - 3.4 Run
grep -RnE "KEYCHAIN.UNKNOWN_LAYOUT|KEYCHAIN.LAYOUT_TOO_WIDE|KEYCHAIN.LAYOUT_ALREADY_REGISTERED|KEYCHAIN.NOT_YET_VALID|KEYCHAIN.EXPIRED|KEYCHAIN.UNKNOWN_PURPOSE|KEYCHAIN.SLOT_INVALID|AUTHORITY.DISPOSED|AUTHORITY.ABORTED|AUTHORITY.REVOKED" packages/crypto/crypto/src/errors/and confirm every error code cited in the spec is defined
4. External-reference audit
- 4.1 Run
grep -rln "@suaveplan/crypto-keys" packages/ scripts/ docs/ apps/and confirm zero matches outsideopenspec/archive/ - 4.2 Run
grep -rln "openspec/specs/crypto-keys" .and confirm zero matches outsideopenspec/changes/crypto-spec-restore-versioning/andopenspec/archive/ - 4.3 If any external reference is found, block the change and update the consumer to reference
openspec/specs/crypto/(the surface was folded into@suaveplan/crypto)
5. OpenSpec validation
- 5.1 Run
bun openspec validate crypto-spec-restore-versioning --strictand confirm zero errors - 5.2 Run
bun openspec listand confirmcrypto-spec-restore-versioningappears withtasksstatus reflecting current progress - 5.3 Run
bun openspec diff crypto-spec-restore-versioningand confirm it emits a sensible delta listing 13 added requirements oncryptoand 5 removed requirements oncrypto-keys
6. Apply the change
- 6.1 Run
bun openspec apply crypto-spec-restore-versioning(or follow the equivalent manual fold peropenspec/AGENTS.md): copy the 13 ADDED requirements fromopenspec/changes/crypto-spec-restore-versioning/specs/crypto/spec.mdintoopenspec/specs/crypto/spec.mddirectly after the existing### Requirement: deriveKeyFromPasswordblock; remove the entireopenspec/specs/crypto-keys/directory - 6.2 Confirm
openspec/specs/crypto-keys/no longer exists on disk - 6.3 Confirm
openspec/specs/crypto/spec.mdnow contains the 13 new requirement headings exactly as authored
7. Post-apply validation
- 7.1 Run
bun openspec validate --strictagainst the entire spec corpus and confirm zero errors - 7.2 Run
bunx turbo lint typecheck test --filter=@suaveplan/cryptoand confirm green (this is a spec-only change but the package gate must remain green) - 7.3 Run
bunx turbo test:coverage --filter=@suaveplan/cryptoand confirm 100% across statements / branches / functions / lines (no regression) - 7.4 Run
bun scripts/conformance/check-crypto-core-allowlist.tsand confirm0 violations
8. Archive
- 8.1 Move
openspec/changes/crypto-spec-restore-versioning/toopenspec/archive/<yyyy-mm-dd>-crypto-spec-restore-versioning/peropenspec/AGENTS.md - 8.2 Confirm the archive contains
proposal.md,design.md,tasks.md(with all checkboxes ticked), andspecs/crypto/spec.md+specs/crypto-keys/spec.md - 8.3 Update any tracker (
STATUS.md, in-flight changes list) to reflect the archive - 8.4 Commit the change in a single commit titled
crypto-spec-restore-versioning: fold versioned-key vocabulary into live crypto spec