docs: record privacy declaration evidence join trace - #183
Merged
Conversation
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
✅ Deploy Preview for poetic-quokka-0fd859 ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Read-only falsification trace resolving the one dependency the Track C record deliberately left open. One new file, 196 lines, documentation only.
No CR identifier is minted, no remedy is proposed, and no
triage_core/source, schema, test, or fixture is changed. Candidate B is outside this record entirely. The only CR identifier appearing in the document isCR-DD-012B, cited as historical context.The inherited question
Track C's Finding 1 established that the operator's declared privacy class is not recoverable from the
route_decisionpayload, then explicitly declined to resolve whetherGovernedRunSnapshot.declared_privacywas nonetheless joined to that event in persisted evidence — because that distinguishes a genuine recording gap from an already-existing but undocumented join.Determination
On the ordinary execution path there is no persisted evidence join from
route_decisionto the operator's declared privacy class. This is a recording/provenance gap, not merely an undocumented existing join.Static evidence carries the conclusion
The census is corroborating only; the determination rests on the trace:
serialize_governed_decisionis called at exactly one site (client.py:573), for an in-memory serialize/reparse verification of the decision id. The route-decision append site (client.py:686) writes the route payload only.run_plan_review_confirmedhas an exact-key payload excluding the privacy value._CONFIRMATION_KEYSis a 12-member frozenset;declared_privacy_classis not among them.declared_privacy_class— a file on disk, not a ledger event.decision_id— zero occurrences in the module, so correlation could only be attempted bytask_id.--plan-outputdefaults toNoneand is conditioned on--plan,--model, and--task-id, enforced attc_cli.py:1084and:1104.Therefore an ordinary
tc runpersists neither a recoverable declared privacy value nor any join to one.Census with method controls
task_privacy_levelinroute_decisionselected_routeinroute_decisionzzz_not_a_real_keydeclared_privacy/declared_privacy_class/operator_intentzzz_fake_eventin corpusPlus a deliberately broader raw substring scan for
declared_privacyacross all 814 rows: 0. The controls are preserved so the zero-result method stays falsifiable — without them a table of zeros is indistinguishable from a census that silently reads nothing.Three distinctions the record preserves
plan_body_digest/artifact_byte_digestlet a holder authenticate a retained artifact against the ledger. A digest is not a preimage: ledger evidence alone cannot reconstruct the declared privacy class.decision_id = 0/8is historical-corpus context, not behavior. The corpus predates CR-DD-012B, which introduced the linkage. Absence in a corpus predating the feature carries no information about present-day emission, and the record says so explicitly. The determination does not depend on it.Explicit non-findings
Left open rather than resolved by inference: possible non-ledger persistence outside the traced scope; plan-artifact retention convention; present-day empirical
decision_idemission on a governed path; and whether the absence is intentional — it may be a deliberate minimisation choice, given the ledger already withholds prompt content. That question is prerequisite to any remedy and is not answered here.Test plan
main5003761before writing; all 19 resolved._CONFIRMATION_KEYSis 12 members withdeclared_privacy_classabsent;run_plan_artifact.pycontains zerodecision_idoccurrences.git diff --checkclean (exit 0, with-Nintent-to-add).git statusclean after commit.main— clean add, no conflict.No test-suite run: documentation only, no code changed. No model calls, no
tc run, no ledger writes.Review note
A pre-commit self-review found and corrected one defect in the baseline paragraph, which had implied the document contained 19 citations when it contained 17. The first correction was itself wrong in an instructive way — naming the two uncited locations by line number turned them into citations. The final wording states set membership rather than a count, so it cannot drift as the prose changes.
What this does not grant
Merge authority. Any implementation change. Any reopening of Track B or Track C. Any decision on Candidate A, or any modification to Candidate B.
🤖 Generated with Claude Code