Session 0045 — 2026-04-22
Opening
- Start time: 2026-04-22 13:10:53 BST
- Repository age: 25 days (from 2026-03-28)
- Sessions completed: 43 (SESSION-0001 through SESSION-0044; SESSION-0037 did not run)
- LAUNCH-1: CLOSED — GO decision (SESSION-0021, 2026-04-15). Protective disciplines
active. Day-180 go/no-go checkpoint remains. No active countdown. - Starting state (per SESSION-0044 close):
- Highest SPEC-N: SPEC-148
- Highest SCHEMA-N: SCHEMA-7
- Highest VAL-N: VAL-5
- Highest DOC-N: DOC-12
- Highest RELEASE-N: RELEASE-10
- Open items: 35 SPEC (SPEC-114–SPEC-148) + 1 SCHEMA + 1 VAL + 4 DOC +
5 RELEASE = 46 total - Closed items: 113 SPEC + 6 SCHEMA + 3 VAL + 5 DOC + 5 RELEASE +
1 LAUNCH = 133 total - Deferred (not counted): VAL-2, DOC-2 = 2
- Completion: 133/179 ≈ 74.3%
- v1.0 SPEC blockers: 35 open SPEC items (SPEC-114–SPEC-148), each
classified in TRACKING.md per the ratification-quality framing
(PROVR_RULES rev 24) as category (a) ratification-blocker or
category (b) legitimately deferred.
- Cleanliness check: PASSED. Git check — 0 commits between last
state-file update (3e3c183) and HEAD; state file current.
Session-file check — SESSION-0044 closing section populated (end
time, duration, ending state, commits, next work unit, notes).
Working tree clean. - Mid-flow notes from SESSION-0044 close:
- Next work unit (carry-forward from SESSION-0044): work through
the SPEC-114–SPEC-148 backlog under the ratification-quality
framing. Default posture: make the design call, write it in, close
the item. Start with the ~13 ratification-blocker items resolvable
without external input, then the ~7 requiring real design work,
then evaluate which of the ~10 remaining are legitimately deferred
(external standards evolution, out-of-session user action, explicit
v1.1 roadmap). - Before diving in: the 34 factual fixes applied in SESSION-0044
are already committed (cb2b077and2807b72) and onmain. Not
awaiting review — locked in. (The SESSION-0044 "Review before
commit" carry-forward note is now stale — commits happened.) - Classification confirmation: first step is to confirm the
TRACKING.md classification for SPEC-114–SPEC-148 matches the
user's current read before starting resolution work. - Commit discipline: PROVR_RULES rev 25 active — single-focus
subjects, narrative bodies, enumeration only for list-shaped
content (not diff-parroting), pre-commit self-check. - Framing guard: PROVR_RULES rev 24 active — no MVP-iterate-later
framing for spec work. Ratification-quality up front. If uncertain
about framing, pause and ask. - Downstream order: SPEC-114+ batch → DOC-9 corpus regeneration
(fold SPEC-114 / SPEC-148 schema and signing-input changes in once)
→ RELEASE-8 pre-Rust review gate → RELEASE-9 external cryptographic
review.
- Next work unit (carry-forward from SESSION-0044): work through
- Fixes / follow-ups flagged in CURRENT_SESSION_STATE.md and
SESSION-0044 Notes:- CURRENT_SESSION_STATE.md carry-forward section should absorb the
framing-note content from TRACKING.md's preamble so it survives
the next state-file rewrite. - CLEANUP.md entry "PQC algorithm tag not bound in canonical signing
inputs" (SESSION-0031) is now formally tracked as SPEC-143; the
CLEANUP entry can be removed when SPEC-143 lands. - Design-doc Status-header audit across all
docs/design/files
should be re-run at next opportunity (rev-20 coupling rule
applies);ledger_architecture.mdwas updated in SESSION-0044 but
others were not re-checked. - DOC-3, DOC-9, DOC-11, DOC-12 remain open; DOC-9 scope expanded.
- SCHEMA-2 (v1.1), VAL-4 (post-RELEASE-8), five RELEASE gates still
open.
- CURRENT_SESSION_STATE.md carry-forward section should absorb the
- Recent environment changes:
- Rev 24 (ratification-quality framing) + rev 25 (commit message
discipline) both live Notes-side from SESSION-0044. ~/hijackr/Notes/provr/AUDIT_METHODOLOGY.mdis the canonical
pre-ratification audit procedure.
- Rev 24 (ratification-quality framing) + rev 25 (commit message
Work
Large ratification-progress session. 33 SPEC items closed across four
waves.
Wave 1 — SPEC-114 + SPEC-148 (the C1 architectural remediation)
The Category C signing-coverage gap from the SESSION-0044 audit. Three
manifest-level attestation arrays — read_verifications,repudiations, resolutions — were children of Manifest but were
not bound into any signing construction. The spec's claim in §6.27.5
/ §6.28.7 that they were "bound indirectly via dataset_merkle_root"
was factually incorrect — dataset_merkle_root is built fromFileRecord entries only per §6.3.9. Attack surface on every signed
v1.0 manifest: forge a ReadVerification with match_result = true
to satisfy require_dual_read, forge a RepudiationNote to cast
false doubt on a clean chain, or forge a ResolutionNote to suppress
a legitimate dispute warning.
Option (a) / SPEC-114: manifest_body_hash added to §6.7.0 signing
input after integrity_policy_hash. New §6.7.0.2 definescanonical_manifest_body with per-entry canonical encodings at
§6.7.0.2.1 / §6.7.0.2.2 / §6.7.0.2.3 covering every field of each
table including the optional per-attestor signatures introduced in
option (b). 32-zero-byte sentinel rule mirrors the existingintegrity_policy_hash pattern. §6.27.5 / §6.28.6 bullet 1 / §6.28.7
rewritten to state the correct binding.
Option (b) / SPEC-148: optional per-attestor signature fields on all
three tables (operator_*, repudiator_*, resolver_*), each a
hybrid pair. Three new canonical signing inputs at §6.27.6 / §6.28.8
/ §6.28.9 under PROVRRDV / PROVRRPD / PROVRRSV domain tags.
Sub-call SUB-2 resolved: new attested conformance level at §6.16.5,
above forensic, requiring per-attestor signatures on every
attestation entry plus a valid Registry registry_ack plus every
signing DID resolvable in the production's ApprovedSignerList.conformance_level enum expanded to {basic, forensic, attested}.SigningKeyStorage deliberately left orthogonal to tier selection so
software-distributed credential-bundle onboarding remains a valid
path at attested — the bundle is a delivery mechanism that imports
into hardware-backed storage on the recipient device, not a new
software tier.
Commits: df69bee (spec), 5a86b10 (schema+tests).
Wave 2 — SPEC-117 (manifest_scope binding)
One-byte field added to §6.7.0 signing input after manifest_state_le1,
before integrity_policy_hash. Closes scope-confusion surface where
a signed FileScope manifest's signature would have verified against
a bytewise-relabelled VolumeScope or ProductionScope copy. No
schema change; manifest_scope field already existed. Commitfa62e84.
Wave 3 — Batch A (11 mechanical ratification-blockers)
User-approved batch through clearly-answered items. One commit per
item:
- SPEC-115 (
cd16931) —ERR_ALGORITHM_FORBIDDEN(0x2B); forensic- attested reject MD5 / SHA1 / XXHASH* for
file_hash.
- attested reject MD5 / SHA1 / XXHASH* for
- SPEC-116 (
8aacaca) — Pin W3C DID Core to v1.0 Recommendation (19
July 2022). - SPEC-131 (
cf8c2c1) — Registry idempotency key extended to(dataset_merkle_root, signer_did, generation_number). - SPEC-132 (
1486540) — Document the 24-hour cache-window
revocation-lag tradeoff; recommend one-hour / four-hour windows for
high-security productions. - SPEC-133 (
e95d4eb) — §6.30.7 revocation-bypass MAY → SHALL at
forensic / attested; basic retains theWARN_CUSTODY_GAPfloor. - SPEC-136 (
9eb313e) — Daemon bearer-token config file requires
mode0600POSIX / owner-only ACL Windows; refuse to start if
group/world-readable. - SPEC-140 (
0458b48) — §7.10 explicitly forbids provr from
fabricating legacy hashes;legacy_hashespopulated only from
external imports. - SPEC-141 (
a7936c4) — New §9.1.1 defines the canonical.provrignoreencoding as an eight-step pipeline. - SPEC-142 (
25b435f) — NewWARN_MIGRATED_GENERATION(0x2C)
exit code for migrated-generation surfacing in verifier output. - SPEC-144 (
8dff051) — Non-normative replay-resistance note on
§6.7.0 addressing empty-file / single-file manifest edge cases. - SPEC-149 (
a2a7728) —SigningKeyStorage.SecureEnclave = 5
added to the enum; accepted at forensic + attested alongsideHardwareHSMandCameraEmbedded; phantomSoftwareFileStore
reference in §6.16.5 corrected.
Wave 4 — Tier 2 + Batch B (16 Tier-2 decisions + 3 mechanical)
User walked through all 16 Tier-2 questions with plain-language
briefing, approved all recommendations, left for school run, then
approved "keep going" to finish the batch on return.
Phase 1 (13 spec-text-only items, one commit each):
- SPEC-118 (
4a18818) —Manifest.timestampfallback surfaces at
forensic + attested viaWARN_CUSTODY_GAP. - SPEC-121 (
0ed0e5f) — Manufacturer-extension non-duplication
rule clarified as aspirational. - SPEC-124 (
362ae92) — Cumulative custody gap uses TSRgenTime
per §6.12.5. - SPEC-125 (
d0f8d3e) — Regex dialect pinned to RE2. - SPEC-126 (
38e665f) —min_locationshostname-proxy limitation
documented; Registry-provided counts recommended. - SPEC-128 (
c45c0fb) —RecordAsSymlinktargets constrained to
relative form. - SPEC-129 (
7824fa4) — Ledger offline-TSR fallback via newTimestampFulfilledEventType (16) and §6.25.4.1 deferred-
timestamping pattern. - SPEC-130 (
5dc7be8) — DeterministicReadVerification
attribution rule. - SPEC-134 (
fb9e66f) — did:web TOFU mitigations (out-of-band
fingerprint, binary pinning, explicit TOFU disclosure). - SPEC-135 (
a5a0524) — Lock-freshness rationale documented;
configurable in[1 hour, 7 days]. - SPEC-137 (
c8e794e) — Daemon default loopback; non-loopback
requires TLS. - SPEC-138 (
4afb155) — Privileged-helper-binary model
recommended for OS-level unlock operations. - SPEC-139 (
52b0207) — Periodic reconciliation scan mandated inprovr watchto close event-loss across FSEvents / inotify /
ReadDirectoryChangesW.
Phase 2 (5 schema-change items):
- SPEC-119 (
a3fe771) —jumbf_payload_hashfield; omit-when-
unchanged dedup in §6.7.1.1. - SPEC-120 (
c2a9ccb) —timecode_rate_numerator+timecode_rate_denominatorfor exact NTSC rational. - SPEC-122 (
d1d5b4f) —resumed_from_scope_id32-byte identifier
binding each Partial chain to its scope (new §6.4.4.1,PROVRSCP
domain tag). - SPEC-127 (
c1cd434) — Three freeform strings converted to enums
(VolumeRole,VFXVersionStatus,SourceOperation), each withOther = 255+ companion_otherstring. - SPEC-123 (
4cbe43b) —PolicyOverridePQC signature slot
(approver_pqc_signature+approver_pqc_algorithm); bringsPolicyOverrideunder the v1.0 hybrid-mandatory model.
Phase 3 (1 cross-cutting item):
- SPEC-143 (
fc5b428) —pqc_algorithm_tagbyte added to every
signing input across §6.7.0 / §6.7.2 / §6.16.1 / §6.23 / §6.24.5 /
§6.24.7 / §6.27.6 / §6.28.8 / §6.28.9 / §6.29.4 / §6.30.9. All
test vectors regenerated.
Carry-forward from SESSION-0044 addressed
The SESSION-0044 carry-forward noted three specific reverts (SPEC-145
exit-code split, SPEC-146 Appendix A audit, SPEC-147 Part I/II
split) that were deliberately deferred to separate large-scope
sessions. Those remain open; they are explicitly NOT in the Batch A
/ Batch B scope. Three other deferred items (the three Tier-3 large
items) stay open.
Non-SPEC work
- TRACKING.md closure notes backfilled for all 33 items with commit
hashes. - ROADMAP.md gained ticked rows for every closure.
- Two memory entries added: credential-bundle delivery architecture
(clarifying that bundles import into hardware-backed storage on
the recipient device, not a new software tier), and SPEC-134
developer-handoff artefacts (four deliverables Offloadr / registr
engineering need for TOFU mitigation work).
Mid-session framing correction
No MVP-framing slips this session — the ratification-quality framing
(PROVR_RULES rev 24) held throughout. Sub-call on SPEC-148 conformance
tier was handled deliberately (three options presented with
recommendation, user chose SUB-2 = new attested tier).
Commits
33 commits on main:
Wave 1: df69bee, 5a86b10.
Wave 2: fa62e84.
Wave 3: cd16931, 8aacaca, cf8c2c1, 1486540, e95d4eb,
9eb313e, 0458b48, a7936c4, 25b435f, 8dff051, a2a7728.
Wave 4 Phase 1: 4a18818, 0ed0e5f, 362ae92, d0f8d3e,
38e665f, c45c0fb, 7824fa4, 5dc7be8, fb9e66f,
a5a0524, c8e794e, 4afb155, 52b0207.
Wave 4 Phase 2: a3fe771, c2a9ccb, d1d5b4f, c1cd434,
4cbe43b.
Wave 4 Phase 3: fc5b428.
None pushed to origin — all commits remain local pending user
instruction.
Closing
- End time: 2026-04-22 21:09:06 BST
- Duration: approximately 8h (started 13:10:53 BST; ~1h school-run
gap mid-session; late-session SPEC-147 close and SPEC-150 strategic
filing after the initial 17:41 BST close draft) - Ending state:
- Highest SPEC-N: SPEC-150 (was SPEC-148 at session start;
SPEC-149 and SPEC-150 filed this session) - Highest SCHEMA-N: SCHEMA-7 (unchanged)
- Highest VAL-N: VAL-5 (unchanged)
- Highest DOC-N: DOC-12 (unchanged)
- Highest RELEASE-N: RELEASE-10 (unchanged)
- Open SPEC items: 3 — SPEC-145 (12-code exit-code split),
SPEC-146 (Appendix A full audit), SPEC-150 (C2PA signature
validation / Depth 2 alignment, filed at session tail as a new
v1.0 ratification-blocker for adoption-critical C2PA alignment) - Closed SPEC items: 147 (113 at session start + 34 this session —
34 includes SPEC-147 which landed at session tail) - Open non-SPEC: 1 SCHEMA (SCHEMA-2 v1.1) + 1 VAL (VAL-4
post-RELEASE-8) + 4 DOC (DOC-3, 9, 11, 12) + 5 RELEASE (3, 4,
8, 9, 10) = 11 - Total open: 14; total closed: 147 + 6 SCHEMA + 3 VAL + 5 DOC +
5 RELEASE + 1 LAUNCH = 167 - Deferred (uncounted): VAL-2, DOC-2 = 2
- Completion: 167 / (167 + 14) ≈ 92.3%
- v1.0 SPEC blockers: 3 items. RELEASE-8 pre-Rust review gate is
the remaining ratification gate after those three land.
- Highest SPEC-N: SPEC-150 (was SPEC-148 at session start;
- Commits: 40 commits on
main, all pushed toorigin/main. See
commit list below.
Late-session work (after the initial 17:41 BST close draft)
- SPEC-147 closed (commit
7dd810c) — Part I / Part II
structural decision. Option (b) chosen: Part I (§1–§6) covers the
format; Part II (§7–§16) covers operations and conformance;
appendices follow Part II. Existing "Part I: Format Specification"
heading renamed to "Part I — The Format" with scope paragraph;
new "Part II — Operations and Conformance" heading inserted
before §7 with parallel scope paragraph stating the conformance-
floor rule. - State-file tidies (commits
b04843c,987f632,5bf0bbd) —
three follow-ups reconciling CURRENT_SESSION_STATE.md after
SPEC-147's late close: removed SPEC-147 row from open-items
table, updated narrative sections, fixed Priority Ordering and
reading-guide from three-blocker to two-blocker framing. - Strategic conversation on C2PA alignment for adoption. User
raised that industry-recommended C2PA pass-through from capture
to delivery is the single highest-leverage adoption feature
provr can ship at v1.0 — positioning provr as "the C2PA custody
layer" for SMPTE / ASC / Netflix / Disney / Apple engagement.
Initial recommendation to defer Depth 2 validation to v1.1 was
challenged and reversed: the scope is public, stable standards
consumption (JUMBF ISO/IEC 19566-5, C2PA 1.x Recommendation,
Adobec2pa-rsreference implementation) — no coalition
membership required, no schema change, no test-vector work,
~1–2 hours of normative prose. - SPEC-150 filed (commits
8932473,907ec1a) — C2PA
signature validation (Depth 2) as a new v1.0 ratification-blocker.
Scope: new §6.7.1.3 normative section; two new exit codes
(WARN_C2PA_SIGNATURE_INVALID,WARN_C2PA_TRUST_UNRESOLVED)
allocated after SPEC-145's block; §12 "fully verified" definition
extended; §4 References add C2PA + JUMBF pins; Content
Credentials verified-logo display template shared with SPEC-146.
Depth 3 (bidirectional assertion extension) remains on the
SCHEMA-2 v1.2+ track.
Commits (full list, 40 on main, all pushed)
Wave 1 (SPEC-114 + SPEC-148): df69bee, 5a86b10.
Wave 2 (SPEC-117): fa62e84.
Wave 3 (Batch A, 11 items): cd16931, 8aacaca, cf8c2c1,
1486540, e95d4eb, 9eb313e, 0458b48, a7936c4, 25b435f,
8dff051, a2a7728.
Wave 4 Phase 1 (Tier 2 spec-text, 13 items): 4a18818, 0ed0e5f,
362ae92, d0f8d3e, 38e665f, c45c0fb, 7824fa4, 5dc7be8,
fb9e66f, a5a0524, c8e794e, 4afb155, 52b0207.
Wave 4 Phase 2 (schema, 5 items): a3fe771, c2a9ccb, d1d5b4f,
c1cd434, 4cbe43b.
Wave 4 Phase 3 (SPEC-143): fc5b428.
Initial close draft: a7bea48.
Late-session: 7dd810c (SPEC-147), b04843c, 987f632, 5bf0bbd
(state-file tidies), 8932473, 907ec1a (SPEC-150 filing).
Next work unit
SESSION-0046 should tackle the three remaining v1.0 ratification-
blockers in this order:
SPEC-145 — 12-code specific split of the
WARN_CUSTODY_GAP
(0x07) overloading. Large mechanical sweep across every section
currently routing to0x07: §6.4.1, §6.16.3, §6.16.4 (five
fields), §6.27.3, §6.27.4, §6.29.7, §6.30.7, §6.2.2. Twelve new
exit codes allocated from0x2Dupward (0x2B–0x2Care now
occupied by SPEC-115 and SPEC-142 respectively, so the original
SPEC-1450x2B–0x35allocation must shift). Updates to §11
table, exit-code class range extension, sweep of every cross-
reference, no test-vector regeneration needed. Moderate size
commit; diff touches many sections. Lands first so its
exit-code block is known before SPEC-150's two new codes are
allocated.SPEC-150 — C2PA signature validation (Depth 2). Adoption-
critical for SMPTE / ASC / Netflix / Disney / Apple alignment.
New §6.7.1.3 normative section requiring forensic and attested
verifiers to parsejumbf_payloadper JUMBF ISO/IEC 19566-5 and
validate embedded C2PA Manifest Store signatures per the pinned
C2PA 1.x Recommendation. Two new exit codes
(WARN_C2PA_SIGNATURE_INVALID,WARN_C2PA_TRUST_UNRESOLVED)
allocated after SPEC-145's block. §12 "fully verified" definition
extended to require both provr chain intact AND present C2PA
claims valid. §4 References add C2PA + JUMBF ISO pins. No
schema change, no test-vector work — ~1–2 hours of normative
prose. Lands after SPEC-145 for exit-code-allocation
cleanliness.SPEC-146 — Appendix A full audit. Substantial prose work.
Everyprovr show SHALL display Xnormative assertion checked
against Appendix A coverage; display templates defined for every
gap. Known gaps: §6.28.5 (RepudiationNote), §6.28
(ResolutionNote), §6.7.2 (superseding_signatures), §6.29.7
(ack_policy_violations), §6.30.8 (cryptographic-only verifier
informational message), §6.27 (ReadVerification), §6.16
(PolicyOverride), §6.20.2 (DriveState). Coordinate with
SPEC-150 on the Content Credentials verified-logo display
template so it is defined once across both items. Opus 1M
recommended; probably 3–5 hours; reserve a longer focused
session.
After these three land, the spec is at ratification-quality across
every item from the SESSION-0044 audit plus the adoption-critical
C2PA alignment. RELEASE-8 (pre-Rust implementation and
interoperability review) then becomes the next session's work unit —
with all 150 SPEC items resolved and the spec in a truly
ratification-ready state including C2PA pass-through validation
that positions provr as the industry's C2PA custody layer.
Notes for SESSION-0046
- Commit discipline under PROVR_RULES rev 25 held throughout the
session — single-focus subjects, narrative bodies, enumeration
only for list-shaped content. Continue. - Ratification-quality framing under PROVR_RULES rev 24 held
throughout — no MVP slips this time. The Tier-2 walk-through with
plain-language briefing + user approval before execution is a
good pattern for batch closure and is worth repeating. tools/gen_signing_vectors.pyis now at the post-SPEC-143 shape
and covers every signing input currently defined in the spec. Any
future SPEC that touches a signing input should extend the
generator in the same commit as the spec change./tmp/provr-sigvecvenv containsblake3+cryptographyfor
the generator; the venv is ephemeral (will be wiped on reboot).
Next time the generator is run, recreate viapython3 -m venv /tmp/provr-sigvec && /tmp/provr-sigvec/bin/pip install blake3 cryptography.- 40 commits pushed to
origin/main. If SESSION-0046 is run on a
different machine, pull first. - Memory now carries a SPEC-134 developer-handoff entry describing
four artefacts Offloadr / registr engineering need when
implementing the TOFU mitigations. Hand those over when that
implementation work starts.
Carry-forward for SESSION-0046
- Resolve SPEC-145 first — 12 exit codes, sweep every affected
section, update §11. Re-allocate starting at0x2Dbecause0x2B–0x2Care now occupied. Lands first so the exit-code
block is defined before SPEC-150's two new codes are allocated
on top. - Resolve SPEC-150 — C2PA signature validation (Depth 2). New
§6.7.1.3, two new exit codes after SPEC-145's block, §12
extension, §4 References update. No schema change, no test
vectors. ~1–2 hours of prose. - Resolve SPEC-146 — full Appendix A audit. Coordinate with
SPEC-150 on Content Credentials display template. Reserve a
longer focused session. - Then RELEASE-8 review gate against a complete ratification-
quality spec. - Then DOC-9 corpus regeneration once the spec is stable.
SPEC-147 was closed at SESSION-0045 tail (commit 7dd810c) — no
longer in the carry-forward queue. Next session starts with only
these three ratification-blockers remaining.