Skip to content

TDD 0064: model roles and parent-model observation - #183

Merged
cahenesy merged 4 commits into
masterfrom
build/20261005-174458/0064-judgment-worker-defaults
Oct 5, 2026
Merged

cahenesy merged 4 commits into
masterfrom
build/20261005-174458/0064-judgment-worker-defaults

Conversation

@cahenesy

@cahenesy cahenesy commented Oct 5, 2026

Copy link
Copy Markdown
Owner

Implements TDD 0064 (PRD f6ef178, ADR 0015). Bottom of a 4-PR stack (0064 → 0065 → 0066 → 0067) from /build-tdds run 20261005-174458.

What changed

  • scripts/lib/models.sh rewritten:
    • Judgment slots resolve to inherit; pins win, and CLAUDE_CODE_SUBAGENT_MODEL is treated as a pin.
    • Mechanical verify runs on the light tier, capped at the parent's model (parent-cap).
    • The plan is classified by the existing tl_classify_plan.
    • New: tl_parent_model (reads the session transcript or Grok summary.json as JSON, never with a regex), tl_parent_effort, and tier and family placement.
    • Product names now appear only on the four binding lines plus the family list.
  • agents/design-reviewer.md is now model: inherit. The /tdd-author 7b and plugin.json wording changes from "different model" to "fresh worker".
  • tests/model-roles.test.sh (87 checks) runs every function in a clean env -i shell. build-tdds-skill.test.sh [D] is updated.
  • Version 3.45.0 → 3.46.0, with a matching releases.json entry.

Gates

Gate Result
test-first PASS (efe5adb test(failing) → f316a05 feat; red on master: 85/86 failed)
ci-checks PASS (model-roles 87/0)
runtime-verify (sonnet) PASS: 15/15 observations held, checked independently against fixtures it built itself; real-world tl_parent_model → claude-opus-5-5
review (opus) PASS: no blocker or major findings

Review minors:

  • releases.json missing 3.46.0. Fixed in 9fc720c.
  • models.sh larger than estimated. 321 diff lines against ~190 declared. The excess is mostly comments and the two-parser fallback.
  • The skill still dispatches the old way until 0066 merges. skills/implement/SKILL.md still passes tl_resolve_models values (now inherit) as a model, and passes plan text where a path is expected.

Nits:

  • the classifier's stderr passes through;
  • pin values aren't validated for newlines;
  • the .. check is conservative;
  • the ./plan-classifier.sh fallback is relative to the current directory.

⚠️ Merge note

Merge the whole stack (0064–0067) before running claude plugin update. A plugin with only 0064 would make the old /build-tdds dispatch the literal inherit as a model. Merge bottom-up; auto-delete is on, so each PR retargets onto master.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Ki3TDnP2bNqqpEkFoZaEXq

cahenesy and others added 4 commits October 5, 2026 13:53
Add tests/model-roles.test.sh: executes every scripts/lib/models.sh
function in a clean env -i shell against fixture TDDs, a Claude
transcript and a Grok summary.json (TDD 0064 Verification plan
observations 1-15), and pins the fresh-worker independence wording in
the design-reviewer, /tdd-author 7b and plugin.json. Register it in the
implement-gate aggregator. build-tdds-skill [D] now asserts the no-arg
resolve line build=inherit review=inherit verify=inherit.

Red against the unchanged models.sh (prior-gen pairing).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Ki3TDnP2bNqqpEkFoZaEXq
Rewrite scripts/lib/models.sh per ADR 0015 / NFR-3: judgment slots
resolve to inherit (dispatch with no model parameter); pins win, with
CLAUDE_CODE_SUBAGENT_MODEL treated as a Claude-only pin. Only the light
tier and the escalation target are named, on four binding lines.
Mechanical runtime-verify uses the light tier only when the parent is
above it, else inherits (parent-cap); the plan class comes from
plan-classifier.sh. tl_resolve_models and tl_model_sources share one
_tl_resolve_slot. tl_parent_model reads the Claude transcript
(.message.model of the newest assistant line, parsed as JSON via a
jq -> python3 cascade) or Grok summary.json current_model_id; an
unreadable model is reported, never guessed. tl_parent_effort reports
the session effort and its source.

The FR-10 design-reviewer now inherits the parent's model; /tdd-author
7b and the plugin.json description say independence is the fresh
worker, not a different model name. Plugin 3.45.0 -> 3.46.0.

The eval gains a key-order / user-line transcript fixture: the spec
fixture alone does not catch a first-match raw regex.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Ki3TDnP2bNqqpEkFoZaEXq
@cahenesy
cahenesy merged commit 83a1970 into master Oct 5, 2026
1 check passed
@cahenesy
cahenesy deleted the build/20261005-174458/0064-judgment-worker-defaults branch October 5, 2026 18:07
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