Repository navigation
Releases
The monorepo is the development source of truth; upstream repositories remain the release vehicles for the deployed surfaces (HF Spaces, Railway).
The hub (Digital-Mailroom) versions itself with a Keep a Changelog + Semantic Versioning chain:
-
CHANGELOG.md(root) accumulates work under[Unreleased]between releases; every hub release is an annotated git tagvX.Y.Z(mailroom-hub vX.Y.Zmessage) mirrored as a GitHub Release cut from the matching changelog section. While the hub is0.x, a MINOR bump may carry breaking workspace changes; PATCH is fixes-only. -
scripts/release_chain.pyis the chain governor:status(snapshot),check(invariants — a version tag must never exist without its changelog section, sections must be semver + strictly descending, the hub pyproject version must never sit behind the newest tag), andcut X.Y.Z(stamps[Unreleased]into a dated section, bumps the hubpyproject.tomlversion;--applywrites,--tagtags; never commits or pushes). -
Enforcement:
.github/workflows/release-governance.ymlrunscheckon everyv*tag push;board-governance.ymlruns it on hub-scope path changes. -
Cut a release:
python scripts/release_chain.py cut X.Y.Z --apply --tag # stamps section + bumps pyproject + tags git push origin main vX.Y.Z # the commit (with its DMR-0NN reference), then the tag python scripts/release_notes.py X.Y.Z --title "<epoch>" --out release-notes-vX.Y.Z.md gh release create vX.Y.Z --title "Mailroom Hub vX.Y.Z — <epoch>" --notes-file release-notes-vX.Y.Z.md
The GitHub Release body is generated by
scripts/release_notes.pyfrom the freshly-stamped changelog section, so every release carries a summary of the changes, the highlights, the merged PRs, the key (HUB-card) commits, and references to the changelog + compare. Mirror the section title (Mailroom Hub vX.Y.Z — <epoch>) as the release name.
All hub GitHub Releases use the scripts/release_notes.py generator, which
renders the .github/RELEASE_TEMPLATE.md template with real data from the
release window:
- Highlights — one line per landed card, derived from the changelog section's bolded headlines.
-
Changes — the full
## [X.Y.Z]changelog section body (the detailed per-card record). -
Pull requests merged — every PR whose merge commit landed in
v<previous>..v<X.Y.Z>(resolved viagh; the offline fallback lists the merge commits from git only). - Key commits — the HUB-card-referenced commits in the window (the critical evidence), then the non-card commits to complete the trace.
-
Verify + reference — the changelog link, the
v<prev>...v<ver>compare URL, and the board note pointing to each card's Evidence.
Usage:
python scripts/release_notes.py X.Y.Z # print the notes body
python scripts/release_notes.py X.Y.Z --out notes.md # write the --notes-file
python scripts/release_notes.py X.Y.Z --title "visualizer epoch"
python scripts/release_notes.py X.Y.Z --no-net # offline (git-only PRs)
python scripts/release_notes.py X.Y.Z --json # machine-readableThe template placeholders mirror the generated sections; edit the template to change what every release carries, never hand-type a release body.
- Package versions at a hub release are recorded in that release's
changelog section (see the
[0.1.0]section for the baseline).
-
Propagate monorepo work upstream
python scripts/sync_packages.py push --package <name>(a subtree push per package). If subtree ancestry can't fast-forward (snapshot-based cursors), publish as clean patch commits to the standalone repo and re-baseline the cursor withsnapshot(see Sub-Package-Sync). -
Bump the consuming pins — release-time only:
packages/llm-mailroom/src/scripts/bump_dojo_scoring.pyfor the dojo pin. Never delete a pin line; bump only when cutting a release of the pinned package. -
Tag in the standalone repo — one tag per release (
vX.Y.Z), cut from the standalone repo the release ships from. -
Verify — the touched packages' FULL suites green;
git statusclean; the board card closed with Evidence naming the commits.
| Package | Pin | Consumed by |
|---|---|---|
| llm-mailroom | v0.6.0 | sandbox fetch-deps / [pipeline] extra |
| llm-dojo-scoring | v0.12.2 | llm-mailroom, llm-entity-extraction, sandbox |
| llm-entity-extraction | v0.20.0 | sandbox [evals] extra |
- Deploy configs inside each package (
Dockerfile,nixpacks.toml,railway.json) stay standalone-repo aware — build images from the package directory as before. - GitHub Pages sites: llm-entity-extraction,
The-Mailroom (pixel console
root; the new terminal console
lives under
/docs/terminal/), llm-mailroom-graph. -
The served Kanban board — Vercel: https://digital-mailroom-theta.vercel.app
(project
digital-mailroom, deploy rootboard-site/). It is its own deploy surface with its ownvercel.json, aGITHUB_TOKENproduction secret, and the redeploy workflow documented in Served-Board.