Repository navigation
docs(provenance): remove fabricated history, and write nothing that is not true - #63
Merged
Merged
Conversation
CHANGELOG.md presented releases 0.1.0 (2025-08-16) through 0.9.0 (2026-07-18) on a dated schedule. Eight of those nine dates fall before the repository was created on 2026-07-07, so they cannot be accurate, and the v0.x tags contradict them further: v0.1.0 resolves to a 2026-08-21 commit while v0.9.0 resolves to a 2026-04-24 commit, and the targets of v0.7.0, v0.8.0 and v0.9.0 predate the repository itself. The dates are removed from the 0.x headings, which now read "date unrecorded", and a note at the top of the file explains why. The feature content of those entries is unchanged and remains verifiable in the codebase. Unlike the commit timestamps, which the README deliberately leaves unrewritten so the evidence survives, these dates were false assertions in the current tree. Correcting them removes a false claim without erasing any historical evidence. The README provenance section gains the tag and release-note findings and records the reasoning. Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
…dure The provenance disclosure made three claims that nothing in the repository backed with a reproducible artefact. This adds the evidence, removes the last false claims in the current tree, and provides a reviewed procedure for the one thing that has not been done: rewriting the history itself. Evidence (docs/history_provenance_evidence.md): - All ten fabricated identities and sixteen addresses, with per-identity commit counts: 181 of 329 commits on main (55%). - The four root commits, in two byte-identical tree pairs. - The timestamp collisions, including five commits under five identities at 2026-08-24 04:12:50. - The full tag table. Two new findings: the tagger timestamps of v0.6.0 and v0.7.0 precede the commits they tag, which is impossible for a tag created in normal use, and the v0.6.0-v0.9.0 taggers all land on exactly 15:00:00 UTC on the dates the changelog used to claim as release days. Current tree (CHANGELOG.md, README.md): - The v0.x compare links are replaced: v0.9.0 no longer exists to compare against, and the fabricated dates are gone. - The README records the tag findings, the corrected release note, and draws the line explicitly: false claims about the present are removed, fabricated history is kept and documented. Rewrite procedure (docs/history_rewrite.md, scripts/rewrite_history.sh): - Never pushes, never touches a remote, dry run by default, and writes a full bundle plus a raw text record of the old history before changing an object. - Tested end to end on a copy: 329 -> 327 commits on main, 4 -> 2 roots, 0 fabricated identities remaining, and the main tree hash unchanged (d38494c), which is the proof that no file content was altered. - Documents what a rewrite cannot do: recover the true dates, or leave the history any more verifiable than it is now. Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
…h and the record
The previous revision of this work offered a way to keep the commit graph by
clamping impossible dates to a marker. That was wrong, and it has been
deleted. Moving a date from 2025-01-14 to a plausible marker does not remove a
false claim, it launders one: an impossible date announces itself, a
plausible one does not.
The governing rule is now stated in the README and enforced by the tooling:
write nothing that is not true.
That rule has a consequence. Git requires an author and a date on every
commit, and there is no "author unknown". The real dates of this code are not
recoverable - it arrived as a copy from a private GitLab. So a commit that
cannot be honestly attributed has only three options: write an invented author
and date, write a true author and date that do not describe the original work,
or delete the commit. Options two and three both discard the per-commit
record, and nothing recovers it.
Three further measurements decided the shape of the fix:
- 213 of 329 commits on main carry metadata that cannot be true.
- No commit on main has a fabricated-free ancestry, so there is no honest
portion of the history to carry forward. The corruption is at the root.
- The tags make the same point: the tagger timestamps of v0.6.0 and v0.7.0
precede the commits they tag, and every v0.6.0-v0.9.0 tagger lands on
15:00:00 UTC on the dates the changelog used to assert as release days.
scripts/rewrite_history.sh now offers:
- --squash-import (recommended): one commit holding the byte-identical tree,
authored by the real owner, dated when it was created, with a message that
states the real numbers. Every field is true. Verified end to end on a
copy: 329 commits -> 1, 4 roots -> 1, tree d38494c unchanged, 0
fabricated identities remaining.
- --mailmap: kept, documented, and marked not recommended. It would
attribute 181 commits to the owner on inference and keep every fabricated
timestamp.
ATTRIBUTION.md replaces the deleted commit metadata as the human-readable
record: the genuine author, the tooling that is not a person, the ten names
that must never be credited, what their 181 commits actually changed, and an
explicit statement that no date and no split of work between individuals can
be established. This is the truthful residue of a history that cannot be
recovered - and it is a record the repository can actually stand behind.
The README provenance section, the evidence document and the changelog are
updated to match, and the evidence document now records that its own hashes
will not resolve from a fresh clone once the rewrite is applied.
Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
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.
Three commits. The rule they implement: write nothing that is not true.
The first revision of this work offered a way to keep the commit graph by clamping impossible dates forward to a marker. That was wrong and has been deleted — moving a date from
2025-01-14to a plausible marker does not remove a false claim, it launders one. An impossible date announces itself; a plausible one does not.The constraint that decides the design
Git requires an author and a date on every commit. There is no "author unknown". The real dates of this code are not recoverable — it arrived as a copy from a private GitLab. So a commit that cannot be honestly attributed has exactly three options:
Options 2 and 3 both discard the per-commit record. Nothing recovers it. That is the price, and it is unavoidable.
Three measurements that decided the shape of the fix
mainwith metadata that cannot be truev0.6.0–v0.9.0)Plus: the tagger timestamps of
v0.6.0andv0.7.0precede the commits they tag — by 11 and 4 weeks. A tag created in normal use cannot predate its target.What the tooling now does
scripts/rewrite_history.sh --squash-import(recommended). Replaces the history with one commit holding the byte-identical tree, authored by the real owner, dated when it was created, with a message stating the real numbers. Every field is true. Verified end to end against a real clone of this repo:The unchanged tree hash is the proof no file content moved. The script never pushes, never touches a remote, dry-runs by default, and writes a bundle backup plus a
git log --format=rawdump before changing an object.--mailmap(documented, marked not recommended). Keeps the commit graph, but attributes 181 commits to the owner on inference and leaves every fabricated timestamp in place. It is available because the choice between "no history" and "history with inferred authors" is the owner's to make — but the file and the script both say plainly which one writes unverifiable claims.Deleted:
scripts/rewrite_dates_callback.py, which implemented the clamping approach.ATTRIBUTION.md— the record that replaces the deleted metadataRemote changes made alongside this PR
v0.1.0–v0.9.0(nine fabricated tags).v1.0.0andv1.1.0remain. Deleting a ref removes the easiest way to inspect it, so the tag objects, taggers and targets are recorded by hash in the evidence document first.v1.0.0release note, which said "first stable tag on the rewritten maintenance history".Verification
mainwithgit log/git for-each-ref/git cat-file, and the README claims were re-derived rather than copied from the previous disclosure.docs/history_provenance_evidence.mdnow records that its own hashes will not resolve from a fresh clone once the rewrite is applied, and names the backup that keeps them checkable.Not done, deliberately
The rewrite has not been applied to
main. That is a force-push which invalidates every clone and open PR, and it belongs to the owner. The tested tooling is here so it can be a deliberate choice.