Summary
The tree now stores change records at changes/<ulid>/change.md, matching the
word the web, the CLI, and the docs already use. approvals/, comments/, the
frontmatter fields, ULIDs, and #N numbering are unchanged.
This is a format change: the top-level layout is still closed, so a
requests/... path no longer validates. The live vole branch is rewritten
after this lands and the new binary is deployed.
What changed
metadata.ChangesDirischanges, and the record file ischange.md.- The two path parsers derive the directory from the constant; the closed-layout check, writers, index refresh and touch times, push-event parsing, hook scope and quota, and the landing hint follow it.
- The change page’s file-path hint and the format docs show the new layout.
- Test fixtures spell the new paths.
Compatibility and migration
The server and CLI must run this build before the branch is rewritten; an old
binary rejects changes/ as an unknown top-level directory. The rewrite itself
is an audited admin force-push, so pre-receive validates the new tree, writes
push.force, and post-receive rebuilds the index. A rewritten tip is not a
descendant of the stored one, which is exactly the signal forge/index uses for
a full rebuild; server/events.go likewise resets its metadata cursor instead
of replaying the history.
Dry run on a copy of the live branch (currently 556 commits): renaming both
paths preserves every commit, its subject, author and committer dates, and blob
ids; the tree is identical after mapping; the #N sequence is identical. Keep a
copy of the pre-migration bare repository, because audit.log will name the old
tip.
One caveat for any future migration: a moved approvals/<account>.md looks to
pre-receive like an added approval by that account, so a repository with
approvals by other accounts would reject the force-push. This repository has
none today, which is why the migration is safe now.
Checks
vole workflow checkvole workflow run verify(format, vet, build, licenses, govulncheck, packages, deployment files, links, and the race test suite)- Rewrite dry run plus a numbering comparison against the live branch