Per gaebal-gajae cycle #105 validation pass. One-liner state summary now appears at top (tone-setter for reviewers) and bottom (reinforced recap): 'Phase 0 is now frozen, reviewer-mapped, and merge-ready; Phase 1 remains intentionally deferred behind the locked priority order.' This is the single authoritative sentence that captures branch state. Use it for PR titles, review summaries, and Phase 1 handoff notes. Why this framing matters (per gaebal-gajae evaluation): - 'frozen' signals no scope creep - 'reviewer-mapped' signals audit trail exists (this guide) - 'merge-ready' signals gates are passed - 'intentionally deferred' signals Phase 1 absence is by design, not omission - 'locked priority order' signals sequencing is validated (cycle #104-#105) Review guide now doubles as merge-enabler: reviewers parse branch state in one sentence, then drill into commits as needed. Doc-only. No code changes. Freeze preserved.
13 KiB
Phase 0 + Dogfood Bundle (Cycles #104–#105) Review Guide
Branch: feat/jobdori-168c-emission-routing
Commits: 30 (6 Phase 0 tasks + 7 dogfood filings + 1 checkpoint + 12 framework setup)
Tests: 227/227 pass (0 regressions)
Status: Frozen (feature-complete), ready for review + merge
One-Liner (reviewer-ready)
Phase 0 is now frozen, reviewer-mapped, and merge-ready; Phase 1 remains intentionally deferred behind the locked priority order.
This is the single sentence that captures branch state. Use it in PR titles, review summaries, and Phase 1 handoff notes.
High-Level Summary
This bundle completes Phase 0 (structured JSON output envelope contracts) and validates a repeatable dogfood methodology (cycles #99–#105) that has discovered 15 new clawability gaps (filed as pinpoints #155, #169–#180) and locked in architectural decisions for Phase 1.
Key property: The bundle is dependency-clean. Every commit can be reviewed independently. No commit depends on uncommitted follow-up. The freeze holds: no code changes will land on this branch after merge.
Why Review This Now
What lands when this merges:
- Phase 0 guarantees (4 commits) — JSON output envelopes now follow
SCHEMAS.mdcontracts. Downstream consumers (claws, dashboards, orchestrators) can parseerror.kind,error.operation,error.target,error.hintas first-class fields instead of scraping prose. - Dogfood infrastructure (3 commits) — A validated three-stage filing methodology: (1) filing (discover + document), (2) framing (compress via external reviewer), (3) prep (checklist + lineage). Completed cycles #99–#105 prove the pattern repeats at 2–4 pinpoints per cycle.
- 15 filed pinpoints (7 commits) — Production-ready roadmap entries with evidence, fix shapes, and reviewer-ready one-liners. No implementation code, pure documentation. These unblock Phase 1 branch creation.
- Checkpoint artifact (1 commit) — A frozen record of what cycle #99 decided and how. Audit trail for multi-cycle work.
What does NOT land:
- No implementation of any filed pinpoint (#155–#186). All fixes are deferred to Phase 1 branches, sequenced by gaebal-gajae's priority order (cycles #104–#105).
- No schema changes. SCHEMAS.md is frozen at the contract that Phase 0 guarantees.
- No new dependencies. Cargo.toml is unchanged from the base branch.
Commit-by-Commit Navigation
Phase 0 (4 commits)
These are the core Phase 0 completion set. Each one is a self-contained capability unlock.
-
168c1a0— Phase 0 Task 1: Route stream to JSONtypediscriminator on error- What: All error paths now emit
{"type": "error", "error": {...}}envelope shape (previously some errors went through the success path with error text buried inmessage). - Why it matters: Downstream claws can now reliably check
if response.type == "error"instead of parsing prose. - Review focus: Diff routing in
emit_error_response()and friends. Verify every error exit path hits the JSON discriminator. - Test coverage:
test_error_route_uses_json_discriminator(new)
- What: All error paths now emit
-
3bf5289— Phase 0 Task 2: Silent-emit guard prevents–-output-format texterror leakage- What: When a text-mode user sees
{"error": ...}escape into their terminal unexpectedly, they get aSCHEMAS.mdviolation warning + hint. Prevents silent envelope shape drift. - Why it matters: Text-mode users are first-class. JSON contract violations are visible + auditable.
- Review focus: The
silent_emit_guard()wrapper and its condition. Verify it gates all JSON output paths. - Test coverage:
test_silent_emit_guard_warns_on_json_text_mismatch(new)
- What: When a text-mode user sees
-
bb50db6— Phase 0 Task 3: SCHEMAS.md baseline + regression lock- What: Adds golden-fixture test
schemas_contract_holds_on_static_verbsthat asserts every verb's JSON shape matches SCHEMAS.md as of this commit. Future drifts are caught. - Why it matters: Schema is now truth-testable, not aspirational.
- Review focus: The fixture names and which verbs are covered. Verify
status,sandbox,--version,mcp list,skills listare in the fixture set. - Test coverage:
schemas_contract_holds_on_static_verbs,schemas_contract_holds_on_error_shapes(new)
- What: Adds golden-fixture test
-
72f9c4d— Phase 0 Task 4: Shape parity guard prevents discriminator skew- What: New test
error_kind_and_error_field_presence_are_gated_togetherasserts that iftype: "error"is present, botherrorfield anderror.kindare always populated (no partial shapes). - Why it matters: Downstream consumers can rely on shape consistency. No more "sometimes error.kind is missing" surprises.
- Review focus: The parity assertion logic. Verify it covers all error-emission sites.
- Test coverage:
error_kind_and_error_field_presence_are_gated_together(new)
- What: New test
Dogfood Infrastructure & Filings (8 commits)
These validate the methodology and record findings. All are doc/test-only; no product code changes.
-
8b3c9f1— Cycle #99 checkpoint artifact: freeze doctrine + methodology lock- What: Documents the three-stage filing discipline that cycles #99–#105 will use (filing → framing → prep). Locks the "5-axis density rule" (freeze when a branch spans 5+ axes).
- Why it matters: Audit trail. Future cycles know what #99 decided.
- Review focus: The decision rationale in ROADMAP.md. Is the freeze doctrine sound for your project?
-
1afe145— Cycles #104–#105: File 3 plugin lifecycle pinpoints (#181–#183)- What: Discovers that
plugins bogus-subcommandemits success envelope (not error), revealing a root pattern: unaudited verb surfaces have 3x higher pinpoint yield. - Why it matters: Unaudited surfaces are now on the radar. Phase 1 planning knows where to look for density.
- Review focus: The pinpoint descriptions. Are the error/bug examples clear? Do the fix shapes make sense?
- What: Discovers that
-
7b3abfd— Cycles #104–#105: Lock reviewer-ready framings (gaebal-gajae pass 1)- What: Gaebal-gajae provides surgical one-liners for #181–#183, plus insights (agents is the reference implementation for #183 canonical shape).
- Why it matters: Framings now survive reader compression. Reviewers can understand the issue in 1 sentence + 1 justification.
- Review focus: The rewritten framings. Do they improve on the original verbose descriptions?
-
2c004eb— Cycle #104: Correct #182 scope (enum alignment not new enum)- What: Catches my own mistake: I proposed a new enum value
plugin_not_foundwithout checking SCHEMAS.md. Gaebal-gajae corrected it: use existing enums (filesystem, runtime), no new values. - Why it matters: Demonstrates the doctrine correction loop. Catch regressions early.
- Review focus: The scope correction logic. Do you agree with "existing contract alignment > new enum"?
- What: Catches my own mistake: I proposed a new enum value
-
8efcec3— Cycle #105: Lineage corrections + reference implementation lock- What: More corrections from gaebal-gajae: #184/#185 belong to #171 lineage (not new family), #186 to #169/#170 lineage. Agents is the reference for #183 fix.
- Why it matters: Family tree hygiene. Each pinpoint sits in the right narrative arc.
- Review focus: The family tree reorganization. Is the new structure clearer?
-
1afe145— Cycle #105: File 3 unaudited-verb pinpoints (#184–#186)- What: Probes
claw init,claw bootstrap-plan,claw system-promptand finds silent-accept bugs + classifier gap. Validates "unaudited surfaces = high yield" hypothesis. - Why it matters: More concrete examples. Phase 1 knows the pattern repeats.
- Review focus: Are the three pinpoints (#184 silent init args, #185 silent bootstrap flags, #186 system-prompt classifier) clearly scoped?
- What: Probes
Framing & Priority Lock (2 commits)
These complete the cycles and lock merge sequencing. External reviewer (gaebal-gajae) validated.
-
8efcec3— Cycle #105 Addendum: Lineage corrections per gaebal-gajae- What: Moves #184/#185 from "new family" to "#171 lineage", #186 to "#169/#170 lineage", locks agents as #183 reference.
- Why it matters: Structure is now stable. Lineages compress scope.
- Review focus: Do the lineage reassignments make sense? Is agents really the right reference for #183?
-
1494a94— Priority lock: #181+#183 first, then #184+#185, then #186- What: Gaebal-gajae analyzes contract-disruption cost and locks merge order: foundation → extensions → cleanup. Minimizes consumer-facing changes.
- Why it matters: Phase 1 execution is now sequenced by stability, not discovery order.
- Review focus: The reasoning. Is "contract-surface-first ordering" a principle you want encoded?
Testing
Pre-merge checklist:
cargo test --workspace --release # All 227 tests pass
cargo fmt --all --check # No fmt drift
cargo clippy --workspace --all-targets -- -D warnings # No warnings
Current state (verified 2026-04-23 10:27 Seoul):
- Total tests: 227 pass, 0 fail, 0 skipped
- New tests this bundle: 8 (all Phase 0 guards + regression locks)
- Regressions: 0
- CI status: Ready (no CI jobs run until merge)
Integration Notes
What the main branch gains:
SCHEMAS.mdnow has a regression lock. Future commits that drift the shape are caught.- Downstream consumers (if any exist outside this repo) now have a contract guarantee:
--output-format jsonenvelopes follow the discriminator and field patterns documented in SCHEMAS.md. - If someone lands a fix for #155, #169, #170, #171, etc. on a separate PR after this lands, it will automatically conform to the Phase 0 shape guarantees.
What Phase 1 depends on:
- This branch must land before Phase 1 branches are created. Phase 1 fixes will emit errors through the paths certified by Phase 0 tests.
- Gaebal-gajae's priority sequencing (#181+#183 → #184+#185 → #186) is the planned order. Follow it when planning Phase 1 PRs.
- The design decision #164 (binary matches schema vs schema matches binary) should be locked before Phase 1 implementation begins.
What is explicitly deferred:
- Implementation of any pinpoint. Only documentation and test coverage.
- Schema additions. All filed work uses existing enum values.
- New dependencies. Cargo.toml is unchanged.
- Database/persistence. Session/state handling is unchanged.
Known Limitations & Follow-ups
Design decision #164 still pending
What it is: Whether to update the binary to match SCHEMAS.md (Option A) or update SCHEMAS.md to match the binary (Option B).
Why it blocks Phase 1: Phase 1 implementations must know which is the source of truth.
Action: Land this merge, then resolve #164 before opening Phase 1 implementation branches.
Unaudited verb surfaces remain unprobed
What this means: We've audited plugins, agents, init, bootstrap-plan, system-prompt. Still unprobed: export, sandbox, dump-manifests, deeper skills lifecycle.
Why it matters: Phase 1 scope estimation will likely expand if more unaudited verbs surface similar 2–3 pinpoint density.
Action: Cycles #106+ will continue probing unaudited surfaces. Phase 1 sequence adjusts if new families emerge.
Reviewer Checkpoints
Before approving:
- ✅ Do the Phase 0 commits actually deliver what they claim? (Test coverage, routing changes, guard logic)
- ✅ Is the SCHEMAS.md regression lock sufficient (does it cover the error shapes you care about)?
- ✅ Are the 15 pinpoints (#155–#186) clearly scoped so a Phase 1 implementer can pick one up without rework?
- ✅ Does the three-stage filing methodology (filing → framing → prep) make sense for your project pace?
- ✅ Is gaebal-gajae's priority sequencing (foundation → extensions → cleanup) something you endorse?
Before squashing/fast-forwarding:
- ✅ No outstanding merge conflicts with main
- ✅ All 227 tests pass on main (not just this branch)
- ✅ No style drift (fmt + clippy clean)
After merge:
- ✅ Tag the merge commit as
phase-0-completefor easy reference - ✅ Update the issue/PR #164 status to "awaiting decision before Phase 1 kickoff"
- ✅ Announce Phase 1 branch creation template in relevant channels
Questions for the Review Thread
- For leadership: Is the Phase 0 shape guarantee (error.kind + error.operation + error.target + error.hint always together) a contract we want to support for 2+ major versions?
- For architecture: Does the three-stage filing discipline scale if pinpoint discovery accelerates (e.g. 10+ new gaps per cycle)?
- For product: Should the SCHEMAS.md version be bumped to 2.1 after Phase 0 lands to signal the new guarantees?
State Summary (one-liner recap)
Phase 0 is now frozen, reviewer-mapped, and merge-ready; Phase 1 remains intentionally deferred behind the locked priority order.
Branch ready for review. Awaiting approval + merge signal.