Skip to content

feat(release): commit a release manifest the site reads from main - #2560

Merged
modelmirror-agent merged 2 commits into
stagingfrom
claude/project-thread-7w1jg3-2356
Oct 19, 2026
Merged

modelmirror-agent merged 2 commits into
stagingfrom
claude/project-thread-7w1jg3-2356

Conversation

@modelmirror-agent

@modelmirror-agent modelmirror-agent commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Requested by ModelMirror · project thread

What & why

Before: the site kept its own list of releases (src/lib/releases.js in fedcourts.ai), so every new release also needed a fedcourts.ai change.

After: docs/releases.json lists every release, newest first, and the site reads it from main. A new release now reaches the site through its own PR, its tag, and a promotion. The manifest is validated for:

  • unique, URL-safe slugs and unique labels;
  • a tag that equals results/<slug>;
  • newest-first order;
  • summary and audit paths under docs/;
  • bare DOIs;
  • summary and audit documents that exist at the tag. CI checks out no tags, so there the check falls back to the working tree.

How:

  • The manifest is a reviewed docs file that goes through staging and a promotion. It is not data written by a writer.
  • Each release adds its own entry in its release PR, next to its filled documents, so the tagged commit already lists itself. The Tags section of docs/pipeline.md adds this to the release checklist.
  • Release 1 was added after its tag. Its tagged commit, 07bf288, has no manifest, and the site keeps reading the documents at that tag.
  • The entry copies the site's current values and adds code_doi 10.5281/zenodo.22966596, the software record's concept DOI, which its summary cites.
  • A new ReleaseManifest pydantic model is exported to schemas/.
  • docs/releases.json falls in CI's code lane, so a manifest change runs the full gate.

Artifact: this is the source the public Results page reads its release list from.

Effect check (after promotion): curl -sf https://raw.githubusercontent.com/ModelMirrorAI/fedcourtsai/main/docs/releases.json returns the manifest, and ModelMirrorAI/fedcourts.ai#37 then builds green.

Pairs with: ModelMirrorAI/fedcourts.ai#37 (closes fedcourts.ai#31). That PR merges only after this one reaches main.

Review: code-reviewer, which also covered the docs change, found no blockers. I applied both of its recommended changes and all three nits that needed code: the tag must name the slug, the code_doi description, and unique labels. I also noted the Release 1 ordering above. The checked values (tag, publish date, both DOIs, document paths at the tag) match the published release.

Merge: no owned paths, so I'll merge this to staging myself once CI is green.

Linked issue

Closes #2356

Checklist

  • Branched off staging and targets staging; focused on one thing.
  • Ran the local gate. lint, types and schemas pass; tests/test_release_manifest.py passes (20) and docs-tests pass (10). The two full-suite failures are the known root/proxy container cases (tests: two tests fail only in containers that run as root or behind an HTTPS proxy #2388).
  • Regenerated schemas/.
  • Updated docs (docs/pipeline.md).
  • No secrets, tokens, or credentials in code, data, or logs.

🤖 Generated with Claude Code

https://claude.ai/code/session_01DfjaLBEcsn9UBUSe33fpwE

docs/releases.json lists every results release, newest first, so
fedcourts.ai can build its Results index from main and publishing a
release needs no site change. ReleaseManifest validates it (URL-safe
unique slugs, unique results/ tags, newest first, docs/ Markdown paths,
bare DOIs) and tests/test_release_manifest.py checks the committed file
and that each entry's summary and audit exist at its tag (or in the
working tree where the tag is absent). docs/pipeline.md states where it
lives and that a release's entry rides the release PR via staging.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DfjaLBEcsn9UBUSe33fpwE
…ifest

The site serves /results/<slug> from the documents at the entry's tag, so
a tag not named for its slug would show one release under another's
address. Labels are unique too, and code_doi is described as the
software record's concept DOI.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DfjaLBEcsn9UBUSe33fpwE
@modelmirror-agent
modelmirror-agent marked this pull request as ready for review October 19, 2026 14:01
@modelmirror-agent
modelmirror-agent merged commit 4a38729 into staging Oct 19, 2026
11 of 12 checks passed
@modelmirror-agent
modelmirror-agent deleted the claude/project-thread-7w1jg3-2356 branch October 19, 2026 14:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants