ADR-0030: The product and the hackathon live apart: everything about how Proven was built moves to hackathon/
Status: accepted · Date: 2026-10-23
Decided by: the owner · Written by: the advisor (claude-code, claude-opus-5-5), 2026-10-23
Trigger: the owner, 23 October: tidy the repository along Go's usual layout, and "put fleet and everything else not
strictly about the project into a hackathon folder, so that after the hackathon we are left with a proper repository
without post-hackathon rubbish."
Context
Proven's code already follows Go's usual layout (cmd/, internal/, docs/, assets/). Its root does not: beside
the product it holds the record of the build week (fleet/, planning/, SAPHAN.md, DESIGN.md), test material in
two places (tests/, conformance/), and the hackathon's metadata.json. A reader cannot tell the product from the
process, and after the hackathon the process would be left behind in the product.
On 23 October 49 Markdown files linked into fleet/ or planning/, 78 links pointed at fleet/decisions/, and
metadata.json named paths in both. No Go code depends on those paths.
Decision
-
Two halves. Everything outside
hackathon/is the product, and stays after the hackathon.hackathon/holds how it was built:fleet/(orders, status, reviews, messages, infrastructure, the cost ledger),planning/(the topic, the answers, the daily conversations),SAPHAN.md, andDESIGN.md(the plan of 20 October, kept as written). -
The target layout:
-
The design decisions are the product's, so they move to
docs/adr/and stay. -
Two phases, both on 23 October (the owner moved phase 2 forward the same day: "today, before the push, when the agents stop, we migrate the whole repository"). Phase 1: this decision, the layout map in the README,
CONTRIBUTING.md. Phase 2, before the day-2 push, while the agents are paused: every move withgit mv, every link and every path inmetadata.jsonrewritten, and the masters' train orders updated to the new paths. The four days left before the last push are there to catch what the move broke. -
Links are checked for good, not once. Phase 2 adds
make check-links, run in CI: every relative link in every Markdown file and every path inmetadata.jsonmust resolve. A deliberately broken link must turn it red. -
After the hackathon: tag the repository
hackathon-final, point the links fromdocs/adr/intohackathon/at that tag, movemetadata.jsonand its schema intohackathon/, then removehackathon/from the default branch. The record stays readable at the tag.
Consequences
- A judge, and later a user, sees the product first; the build's record is one folder away.
- Phase 2 touches most documents at once; the link check is what makes that safe.
- Links into the record from outside the repository (posts, the submission) should use a tag, not
main.