Commit Graph
2 Commits
Author SHA1 Message Date
istosandClaude Fable 5 74adc09566 Merge origin/main into task/15: releases meet the AGENTS.md world and the LICENSE
Resolutions honouring both sides:
- CLAUDE.md: main's pointer form wins; this branch's release-era wording
  (tree diagram line, Updating section) ported into AGENTS.md where the
  brief now lives.
- update.sh: this branch's release-based rewrite wins; main's additions
  to the old file list (AGENTS.md from task 13, LICENSE) are carried by
  the release-manifest instead: added copy AGENTS.md and copy LICENSE.
- Starter local/: manifest and release.sh now seed the split pair
  (AGENTS.md notes + pointer CLAUDE.md) mirroring task 13's layout;
  artifact test updated to match.
- tests/test_update_round_trip.py (main's, aimed at the removed
  git-clone mechanism) retired; its two 13-specific intents ported into
  test_update_from_release.py as
  test_agents_brief_replaces_an_old_vendor_named_copy, its third already
  covered there. 147 tests green.
- release.sh's lost executable bit restored.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 08:15:28 +02:00
istosandClaude Fable 5 d6fb478466 Build bench releases from a manifest; update.sh consumes them
The repo is two things at once — bench-the-project and bench-the-
distribution — and install/update conflated them by cloning the repo
and subtracting what should not have come along. Invert it: one
curated artifact, correct by construction.

- manager/core/release-manifest: the whole shipping list in one place
  (copy/tree/once/keep/seed classes). update.sh's hardcoded top-level
  file list, promoted.
- release.sh: builds bench.tar.gz from the manifest (contents at the
  tarball root, stable asset name — the tokenless latest-release URL
  depends on both), stamps the source repo into the shipped update.sh,
  refuses on dirty tree or existing tag, tags v<VERSION> and publishes
  via gh release create. Never ships in the artifact.
- update.sh: downloads the latest release (BENCH_REF pins a tag) via
  gh with an anonymous curl fallback; refuses when the asset's VERSION
  disagrees with its tag; replaces manager/core/ wholesale plus the
  artifact manifest's `copy` files; touches nothing else. No release
  published -> says so and changes nothing; no silent git fallback.
- tests: the tarball equals exactly the manifest (no cards, no local/
  content beyond the generated starter, no state/tests/.claude), the
  artifact installs pristine and boots the board, and update.sh's
  replace/survive/refuse paths run hermetically against PATH-stubbed
  gh and curl.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 07:48:03 +02:00