docs(register): C-83 — full-population hash sweep bounds the tampering residual - #170
Merged
Merged
Conversation
Polichinel
force-pushed
the
docs/c83-full-hash-sweep
branch
from
August 21, 2026 13:01
2c1cca6 to
b3917cd
Compare
…g residual The triage recorded on 2026-08-15 checked the eleven rows whose `$updatedAt` had moved and predicted that hashing the remaining 572 would add nothing. Against substituted bytes that prediction held exactly, and this does not correct it. Every row in both delivery collections has now been re-downloaded and re-hashed anyway: unfao 111/111 and production_forecasts 461/461 match their recorded file_hash. sha256, confirmed empirically across all 572 rather than assumed. Read-only, GET only. What the sweep added is a fact a sampled method could not reach: rows and files are a perfect bijection — 0 files without a row, 0 rows without a file, in both buckets. That bounds the residual the triage left open. A count-preserving delete-and-recreate must point its new row at a file that already exists, because the buckets were never writable. Pointing it at a file another row already claims leaves the displaced file referenced by nothing — an orphan. There are none, and there were no unreferenced files available to point at, so no file-level substitution is reachable by that route either. What survives is smaller and still unfalsifiable: a delete-and-recreate preserving fileId and file_hash while altering only descriptive fields. The verdict stands as written; its residual is now bounded to metadata semantics rather than to file bytes. docs/validate_docs.sh passes. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> No entry added or resolved, so the header counts are untouched by this edit. On this base they read 64 total / 12 resolved / 52 open — C-84 landed between C-83 and this amendment, so the 63 / 12 / 51 quoted in the first draft of this message was stale. Reproducible: grep -c '^### C-' -> 64 grep '^### C-' | grep -c '— RESOLVED' -> 12 docs/validate_docs.sh passes.
Polichinel
force-pushed
the
docs/c83-full-hash-sweep
branch
from
August 21, 2026 13:02
b3917cd to
8741ddf
Compare
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.
Amends the C-83 verification block. No entry added or resolved; header counts untouched. They read 64 / 12 / 52 on this base — C-84 landed between C-83 and this amendment, so the 63/12/51 I quoted earlier is stale.
The 2026-08-15 triage checked the eleven rows whose
$updatedAthad moved, and predicted that hashing the remaining 572 would add nothing. Against substituted bytes that prediction held exactly — this does not correct it.Every row was re-downloaded and re-hashed anyway:
unfaoproduction_forecastssha256, confirmed empirically across all 572 rather than assumed. Read-only,
GETonly.What it adds
A fact a sampled method could not reach: rows and files are a perfect bijection.
That bounds the residual. A count-preserving delete-and-recreate must point its new row at a file that already exists, since the buckets were never writable. Pointing it at a file another row already claims leaves the displaced file referenced by nothing — an orphan. There are none, and there were no unreferenced files available to point at. So no file-level substitution is reachable by that route either.
What survives
A delete-and-recreate preserving
fileIdandfile_hashwhile altering only descriptive fields —targets,name,description. Still unfalsifiable, for the reason the triage already gave. The verdict stands as written; its residual is now bounded to metadata semantics rather than file bytes.docs/validate_docs.shpasses.