Skip to content

feat(gate1): publish a real review round + the measurement protocol — gate 1 / PR 4 - #375

Merged
jeffcrouse merged 1 commit into
mainfrom
feat-gate1-real-media
Sep 19, 2026
Merged

jeffcrouse merged 1 commit into
mainfrom
feat-gate1-real-media

Conversation

@jeffcrouse

Copy link
Copy Markdown
Member

Summary

Fourth and last code PR of gate 1 (plan: docs/roadmap/continuous-creative-workflow-gate1.md). Real media, honestly produced, plus the protocol for the measurement the gate actually asks for.

mcp/gate1/publish_review.py — one honest round

uv run --directory mcp python gate1/publish_review.py --project ~/Music/vivid-gate1/song-sketch --from-example --scene 0 --bars 8

save + snapshot the baseline → record the brief → render the baseline excerpt → for each direction: copy the project to an isolated sibling, load the copy, apply the edits, save, render the same excerpt, work_snapshot_version … into=<original> (ADR-0062 §2: the foreground document is never edited) → candidate records with provenance (edits, working copy) and evidence (export result, dropped frames, measured RMS for the audition-only level match, "intent evaluator unavailable") → reload the original → publish one review item. Refuses an excerpt whose export dropped frames. Nothing in work/ is hand-written. On song-sketch: 28 s for the round, 3 × 465 frames.

Control server + MCP (gate-1 slice; full families are gate 2 / ADR-0063)

  • work_status — records dir, has_records, preferred_version, dirty, brief rev, open reviews.
  • work_snapshot_version {label, source, parent, brief_rev, into} — refuses an unsaved document (it reads disk).
  • work::snapshot_version_into() + test.

Fixes found on the way

  • save_project over MCP never cleared the dirty flag / autosave slot (the GUI save does) — an agent's save left the edited-dot on and the quit prompt armed.
  • Leaving Review wrote review_visited into any folder project, creating work/ where none existed (it did so in examples/song-sketch). Now only when work/ already exists.

docs/roadmap/gate1-measurement.md — the protocol

Creator returns cold, two minutes, no transcript; eight silent observations; the ADR-0064 probes (no agent connected, undo/redo truthfulness, feedback on an older preview, Neither, back to Create, save prompt); a Result section to fill. Pass = found it, could say what changed, chose, left a bar-specific comment, all inside 2:00 without leaving Review.

Verified live

The published round appears in Review (badge 1) with three lockstep tiles, level match enabled from the measured RMS, brief + protections shown.

Test plan

  • test_work_records (+ snapshot_version_into: 114 checks) · full headless ctest green (91)
  • MCP name parity + argument parity green · layering guard green · vivid builds
  • publish_review.py end to end on a scratch copy of song-sketch (28 s, 0 dropped frames)
  • CI
  • The measurement session itself — needs the creator; result lands in gate1-measurement.md + ADR-0064's acceptance section as a follow-up

🤖 Generated with Claude Code

… gate 1 / PR 4

mcp/gate1/publish_review.py plays the agent for one honest round on a project folder: save +
snapshot the baseline, record the brief (rev 1 + log), render the baseline excerpt with
export_av, then for each direction copy the project to an ISOLATED sibling folder, load the
copy, apply the edits, save, render the same excerpt, and snapshot the copy INTO the original's
work/versions (ADR-0062 §2 — the foreground document is never edited); write the candidate
records with provenance (the edits, the working copy) and evidence (export result, dropped
frames, measured RMS for the audition-only level match, "intent evaluator unavailable"); reload
the original and publish one review item + review_opened. Refuses to publish an excerpt whose
export dropped frames. The whole round on song-sketch: 28 s, 3 × 465 frames.

Control server + MCP (gate-1 slice; full families are gate 2):
- work_status — records dir, has_records, preferred_version, dirty, brief_rev, open reviews.
- work_snapshot_version {label, source, parent, brief_rev, into} — a version of the LOADED folder,
  optionally into another project's records; refuses an unsaved document (reads disk).
- work::snapshot_version_into() behind it (+ test: the copy's own work/ is never content, nothing
  lands in the copy).

Fixes found on the way:
- save_project over MCP never cleared the dirty flag / autosave slot (the GUI save does): an agent's
  save left the edited-dot on and the quit prompt armed. Now mark_saved() + autosave::clear().
- Leaving Review appended review_visited into ANY folder project, creating work/ where none existed
  (it wrote into examples/song-sketch). Now only when work/ already exists.

docs/roadmap/gate1-measurement.md is the protocol for the gate itself: the creator returns cold,
two minutes, no transcript, eight silent observations, the ADR-0064 probes, and a Result section
to fill in. The plan doc's PR 4 section reflects what shipped.

Verified live: the published round appears in Review (badge 1) with three lockstep tiles, level
match enabled from the measured RMS, brief + protections shown. Full headless ctest green (91);
MCP name + argument parity green; layering guard green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jeffcrouse
jeffcrouse enabled auto-merge (squash) September 19, 2026 14:21
@github-actions

Copy link
Copy Markdown
Contributor

Production gate (core): ✅ PASS

  • 91/91 tests passed (0 failed) in 20.15s

@jeffcrouse
jeffcrouse merged commit fe3157b into main Sep 19, 2026
8 checks passed
@jeffcrouse
jeffcrouse deleted the feat-gate1-real-media branch September 19, 2026 14:29
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.

1 participant