Skip to content

spec: T4 dialogue contract sketch (ADR-32) -- awaiting human review - #170

Merged
heyong4725 merged 3 commits into
mainfrom
spec/t4-dialogue-contract
Aug 12, 2026
Merged

spec: T4 dialogue contract sketch (ADR-32) -- awaiting human review#170
heyong4725 merged 3 commits into
mainfrom
spec/t4-dialogue-contract

Conversation

@heyong4725

@heyong4725 heyong4725 commented Aug 12, 2026

Copy link
Copy Markdown
Owner

Class-C change to SPEC 010 (CON-10/CON-14) — this PR awaits your review and is deliberately NOT auto-merged.

Proposed (full rationale in ADR-32 — renumbered from the original ADR-30 draft after #171 ratified that number for lockstep turns; ADR-31 is the T2 sign-off record):

  • human_msg (seeded scripted human-sim node) / robot_msg (task-state-machine confirmations), goal_id-correlated; robot_msg declared turn_edge: episodic so the dialogue cycle is legal under the ratified ADR-30 lockstep rules.
  • The policy learns the task from the dialogue, not the goal: in T4 the state machine drops its episode_goal edge and takes the request from human_msg; the goal carries the FINAL corrected target for the verifier only, validator-enforced (DIALOGUE_GOAL_LEAK). TC-7 goal schema unchanged; frozen verifier untouched.
  • Corrections increment a new dialogue_corrections counter — NOT HAR-3 retries (those fire on subtask failure); pass@1/pass@8 stay comparable across tiers.
  • Two increments: increment one (confirm + pre-delivery correction) is fully executable under the frozen verifier as-is; increment two (post-delivery return-and-redeliver) is declared but gated on its own VER-1/VER-3 env-change epoch, because VER-3's immediate wrong_object trigger makes it unscoreable today. The return motion is named honestly as a new return_item behavior, not RST-2 reuse.
  • Rejected alternatives: goal mutation (breaks TC-7 immutability), corrected_med goal field (un-blinds the policy / deadlocks the handshake — review findings 2+3), free-text + LLM judge (breaks CON-5).

Amended after the /review pass

The review found four blocking holes in the first draft (VER-3 kills the recovery path; corrected_med readable by the policy; TC-7 schema unamended → deadlock; ADR-30 number collision + unclassified lockstep cycle) and five precision issues (RST-2 hand-wave, HAR-3 semantics, script purity, seed/ordering underdefinition, curated-slot/CON-4 gaps). All nine are resolved in the amended ADR-32; full findings in the review comment below.

On approval, the T4 implementation lands as its own PR. Meanwhile the loop continues with fleet mode.

🤖 Generated with Claude Code

… review

Two goal_id-correlated JSON topics (human_msg from a seeded scripted
human-sim node, robot_msg for confirmations), correction semantics as
HAR-3 in-context retries, verifier kept dialogue-ignorant (the client
computes the final corrected target from the same seeded script). The
implementation follows only after this spec-change PR is human-approved
(CON-10/CON-14); the dev loop does NOT merge it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@heyong4725

Copy link
Copy Markdown
Owner Author

Pre-ratification review (/review) — 4 blocking findings, 5 precision issues

Scope check: CLEAN — the PR delivers exactly what it says (a T4 dialogue contract sketch as a review vehicle; ADR + two SPEC 010 table rows + inventory). The findings below are about the decision, which is what this PR asks to have reviewed. Every claim was verified against the cited file text, not pattern-matched.

Blocking (P1)

1. The tier's headline recovery path is unexecutable under the verifier the ADR claims not to touch. (confidence 9/10)
The ADR: "a delivered-then-corrected med still in the tray at timeout = wrong_object" and "The frozen verifier is untouched". But VER-3 (specs/040-verifier-reset.md:8): "wrong_object triggers the moment ANY non-target box enters the tray (safety asymmetry — do not wait for timeout)". If the judged target is corrected med B, the episode terminates the instant med A is delivered — the return-and-redeliver path can never run. "Handle 'that's the wrong one'" after delivery is the tier's point (design doc §3), and it is structurally impossible as specified.

2. The dialogue is theater: corrected_med in the goal payload is readable by the policy side. (confidence 9/10)
The task-state-machine consumes episode_goal directly (graphs/expert_t0.yaml:129-130); in expert_s1.yaml so do order-reader, task-planner, and s1-expert. The node executing "confirm-before-act" receives the final answer in its goal input. VAL-6 covers only oracle_state; no leak rule exists for goal fields, and TC-8 makes the oracle verdict the only scored truth — so a dialogue-skipping policy scores identically to a compliant one.

3. target_med / corrected_med double bind — TC-7's goal schema is never amended. (confidence 8/10)
TC-7 goal = {tier, target_med, timeout_s, seed} (specs/010-topic-contract.md:64); the PR's spec diff touches only the topics table. Either the verifier reads corrected_med (a frozen-verifier change, contradicting the ADR) or the client sets target_med=B — and then "on goal, emit confirm naming the requested med" names B while the human-sim script waits for a confirm naming A: deadlock on every corrected seed. The ADR specifies neither resolution.

4. ADR-30 number collision, and the contract is unreconciled with the ratified lockstep protocol it collides with. (confidence 10/10)
Main already has ADR-30 (lockstep turns, ratified via #171 as 8f47180); TC-2, VAL-2's CLOCK_* checks, and CAP-1 all cite "ADR-30" meaning lockstep. This PR adds a second, different ADR-30 (third number race from the parallel loop, after the ADR-28 and inventory incidents). Substantively: task-state-machine → robot_msg → human-sim → human_msg → task-state-machine is a cycle with no turn_edge classification — VAL-2's CLOCK_CYCLE rejects it — and human-sim has a forward path to bridge commands through the state machine, making it a turn participant that must watermark; the sketch's "per event" rows and "WAIT for confirm_reply" say nothing about any of this. Must renumber to ADR-31 and add the edge classifications.

Precision (P2/P3)

  1. RST-2 "reuse" is hand-waving (8/10). RST-2 returns the target box to a sampled shelf pose behind the TC-6 reset service — request payload (seed, mode), no object parameter, so it cannot return med A when the target is B; the state machine has no edge to the reset service; the bridge blacks out observations during it; and its fallback is a mid-episode teleport under an open TC-7 action. That is new machinery, not reuse.
  2. Corrections are not HAR-3 retries (7/10). HAR-3 retries fire "on subtask failure"; a confirm-phase scripted correction is not a failure. Counting it in retries makes every seed%4==0 episode structurally non-pass@1, so "pass@8 semantics unchanged" is false in effect — T4 becomes incomparable with other tiers. Needs a separate dialogue_corrections counter.
  3. "Pure function of the episode seed" is false as written (7/10). Script step (3) triggers on robot behavior (delivery), observed only via the policy's self-reported ack — the node under test attests its own action — and no declared edge gives human-sim the seed or target A at all. Only the final target is seed-pure; the ADR must say which artifact CON-5(a) binds.
  4. seed % 4 == 0 / "B = next med" underdefined (6/10). No med ordering cited (SCN-2 name list vs SCN-1 insertion order), wraparound undefined, and "seed" (per-goal TC-7 seed from HAR-1's contiguous ranges) makes correction frequency depend on the range's offset mod 4.
  5. Curated slot human-sim has no ratification path (6/10) — CAP-5 pins the core in curated_core.toml (Class C); the PR amends neither. Also CON-4 allows JSON only on *_result/report topics; the dialogue topics extend that exception silently (5/10).

Verdict

The decision shape is right — scripted seeded dialogue, frozen verifier, no goal mutation, no LLM judge — but the contract as written cannot execute its own tier: finding 1 kills the recovery path, finding 2 un-blinds the policy, finding 3 deadlocks corrected episodes, and finding 4 collides with the ratified protocol namespace. Recommend revision before ratification.

Adversarial pass: Claude subagent (9 findings, all file-grounded). Codex timed out at its 5-minute cap (4th consecutive) — cross-model coverage unavailable, noted per protocol.

🤖 Generated with Claude Code

…ed in favor of the ratified lockstep ADR

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@heyong4725 heyong4725 changed the title spec: T4 dialogue contract sketch (ADR-30) -- awaiting human review spec: T4 dialogue contract sketch (ADR-32) -- awaiting human review Aug 12, 2026
@heyong4725

Copy link
Copy Markdown
Owner Author

Amendment applied (15d5353): the contract is renumbered to ADR-32 (main had claimed ADR-30 via #171 and ADR-31 via the T2 sign-off) and restructured to resolve all nine review findings — dialogue-sourced task acquisition with a validator-enforced goal blind (findings 2+3), the increment split that keeps the frozen verifier genuinely untouched while declaring the VER amendment increment two needs (finding 1), lockstep edge classifications per the ratified ADR-30 (finding 4), dialogue_corrections separate from HAR-3 retries, SCN-2 cyclic med ordering, honest return_item framing, and the curated-core/CON-4 ratification paths. Branch is merged with current main; gates green (1061 unit, format, trace_check). Ready for CON-14 ratification review.

@heyong4725
heyong4725 merged commit 1ce0b28 into main Aug 12, 2026
4 checks passed
@heyong4725
heyong4725 deleted the spec/t4-dialogue-contract branch August 12, 2026 03:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant