Open bug report

Need to redact old commits before a page goes public (student IDs and a recording in history)

John Lauer · 19d ago

@kcknox I need to redact old commits on a page before it goes public, and there is no way to do it from the CLI or API.

The situation

ut-austin-ece-364d/ut-bldc-motor-controller is the project page for a UT Austin ECE senior design team that Adom is sponsoring. It is private today and is meant to go public. I cleaned the current files, but earlier commits still hold content that cannot be public:

What Where in history Why it cannot be public
The team's proposal PDF with seven student ID numbers docs/proposal.pdf as added in fdbc993c8490 (replaced by a redacted copy in 31a996296f87) Student personal information
A 10-minute screen recording of the kickoff call docs/meetings/2026-09-30-kickoff-screen.mp4, added in 779b3f8c0b62, deleted in 9f857b2bfa6c Shows the Adom lab floor and a personal desktop
The recording's poster frame and a lab-tour still docs/meetings/2026-09-30-kickoff-poster.png and -lab-tour.png, added in e415196e26c2, deleted in a8ed07cd3ff9 and b4bc69143896 Same

The current tree is clean. Anyone who can read the page can still open those files from the commit history once it is public.

What I tried

  • adom-wiki repo rm removes a file from HEAD only; the blob stays reachable at the old commits.
  • There is no history rewrite, squash, or per-file purge in adom-wiki repo, and no git wire protocol to force-push a rewritten history.
  • repo delete --hard followed by a re-create would drop the history, but it also throws away the page id, the 301 from the old adom/ut-bldc-motor-controller URL, and the hero, so I have not done it.

What would fix it

Either of these:

  1. Squash the page history to a single commit of the current tree (the simplest for this page), or
  2. Purge specific blobs from every commit (the general tool; it is the same need as #212, which asks for hard-delete of versions and files after a leak).

For this page, option 1 is fine. Please do not make the page public until the history is clean. I'll leave it private until you say it's done.

2 Replies

Colby Knox · 19d ago

The server can already do this: the history purge from #212 removes paths from every commit on a page. The CLI has no verb for it yet (adom-wiki repo purge is coming), so for now it's a raw API call. Please run it yourself; it needs manage rights on the page, which you have.

I checked the page's history. These are the four paths to purge (the lab-tour still is 2026-09-30-kickoff-lab-tour.png):

adom-wiki api /api/pages/ut-austin-ece-364d/ut-bldc-motor-controller/files/purge -X POST --body '{
  "confirm": "ut-austin-ece-364d/ut-bldc-motor-controller",
  "paths": [
    "docs/proposal.pdf",
    "docs/meetings/2026-09-30-kickoff-screen.mp4",
    "docs/meetings/2026-09-30-kickoff-poster.png",
    "docs/meetings/2026-09-30-kickoff-lab-tour.png"
  ],
  "reason": "student IDs and kickoff recordings in history"
}'

Things to know before you run it:

  • It removes the redacted docs/proposal.pdf too. A purge takes the path out of every commit, HEAD included. Re-push the redacted copy right after: adom-wiki repo push ut-austin-ece-364d/ut-bldc-motor-controller --files docs/proposal.pdf -m "Redacted proposal".
  • It cannot be undone. Every commit sha on the page changes, and the old ones stop resolving. Any local clone needs a fresh repo clone.
  • The response confirms it. The server checks that no purged path is left in any ref before it answers. A 200 with "ok": true means those files are gone from the history.
  • No edge cleanup is needed. The page has been private the whole time, so Cloudflare never cached these files.

After the re-push, the page is clean to make public. Reply here if anything in the response looks off, and close this once it's public.

Colby Knox · 19d ago

This is ready: adom-wiki repo purge shipped in adom-wiki 1.7.62. Update with adom-wiki pkg install adom/adom-wiki-cli, then run it under your own account:

adom-wiki repo purge ut-austin-ece-364d/ut-bldc-motor-controller \
  docs/proposal.pdf \
  docs/meetings/2026-09-30-kickoff-screen.mp4 \
  docs/meetings/2026-09-30-kickoff-poster.png \
  docs/meetings/2026-09-30-kickoff-lab-tour.png \
  --reason "student IDs and kickoff recordings in history"

It previews first, then asks you to type or paste ut-austin-ece-364d/ut-bldc-motor-controller to confirm. Nothing is sent before that. The preview for these four paths should read:

  • docs/proposal.pdf: 2 commits, and it is at HEAD, so it is removed from HEAD too.
  • The three docs/meetings/2026-09-30-kickoff-* files: 2 commits each, already deleted at HEAD.

Note the lab-tour still is 2026-09-30-kickoff-lab-tour.png, with "kickoff" in the name.

The purge rewrites every commit and cannot be undone. Afterwards:

  1. Re-push the redacted proposal, since the purge takes it off HEAD as well: adom-wiki repo push ut-austin-ece-364d/ut-bldc-motor-controller --files docs/proposal.pdf
  2. Make the page public only after that.
  3. Clone again if you have a local copy; old commit links stop working.

Log in to reply.