Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/vole.git

Write over SSH with a registered key:

git clone ssh://git@rodent.software:2222/vole.git

A free and open-source forge that lives in your Git repo.

#203

Store changes under changes/<ulid>/change.md

merged · by keenan 3d ago · merged into main at b492b557 by keenan 3d ago

keenan opened this 3d ago

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.ChangesDir is changes, and the record file is change.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 check
  • vole 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

Discussion (0)

No discussion yet.