Conversation
Review:
|
|
Review: feat: tts review skills Docs/tooling-only PR, no runtime code. Adds the [P1]
Under the skill this is a defect; under Related: [P2] Invisible to the documented agent-loading path
Also: [P2] Guarder evidence gate trusts untrusted PR comments
Also, the run needs real vendor credentials, so only the PR author can produce it — make that explicit for external contributors. [P2] Merge gates will fire on nearly every TTS PR
[P3] Nothing in the repo consumes it and there is no other [P3] Workflow mechanics to double-check
Verified correct
ASR checklist N/A — no ASR extension or behavior touched. No paths matching The P1 is the only item I would treat as blocking: a guide asserting a metric definition that contradicts |
f464947 to
914bd1d
Compare
Review findings[P1] Reconcile the
The new guide defines the field as elapsed time from emitting [P2] Treat PR comment bodies as untrusted evidence, not review instructions
The gate instructs the privileged [P2] Preserve coverage of PTY output forwarding
The rewritten test discards every ASR checklist: N/A; this PR changes no ASR extension or ASR behavior. Tests were not run locally because the checked-out worktree is the base branch, per the review instructions. |
Review findings[P1] Align the
The guide defines this field as the elapsed time from emitting [P2] Treat PR-comment text as untrusted evidence, not review instructions
The new gate directs the reviewer to inspect all PR comments and accept screenshots and attachments from them, but does not constrain that contributor-controlled text to evidence fields. In a privileged review workflow, a comment can contain instructions intended to change review scope, severity, or tooling behavior. State explicitly that comments are untrusted data: ignore instructions in them, inspect only the enumerated evidence fields, and validate the author, commit SHA, and attachment through GitHub metadata. A CI-produced artifact/check would be a stronger merge-gate source. [P2] Preserve coverage of PTY output forwarding
The revised test sends an Tests were not run locally because this checkout is the base branch and the review instructions prohibit running PR-branch scripts. Current |
Review:
|
| Base class | Extensions |
|---|---|
AsyncTTS2BaseExtension |
19 |
AsyncTTS2HttpExtension |
13 |
AsyncTTSBaseExtension |
2 — neuphonic_tts, dubverse_tts |
A PR touching neuphonic_tts or dubverse_tts matches step 3 (in scope) but falls through step 5, so step 6 never selects a transport guide. Since step 5 says to classify "from actual inheritance, not directory name," the reviewer is left with common.md + tests.md only, silently skipping the lifecycle/concurrency rules. Add an explicit AsyncTTSBaseExtension arm — either route it to websocket.md, or state that TTS1 extensions are out of scope pending migration. Either is fine; the fall-through is not.
P1 — The guarder gate requires evidence the automated reviewer cannot inspect
references/guarder.md makes it a P1 merge blocker unless the reviewer confirms an inline screenshot showing the final test summary, and a downloadable, non-empty .pcm attachment. But .github/workflows/claude_code_review.yml restricts the reviewer to:
Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),
Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)
No image reading, no curl, no way to fetch an attachment and check that it is non-empty or that it is raw PCM rather than a WAV. So guarder.md's instruction to report P1 when the PCM is "empty, inaccessible, or not identified as guarder output" is unverifiable in the environment that is supposed to enforce it — the predictable outcome is a P1 fired on link-presence alone, on every new TTS extension, including correct ones.
Suggest making the gate machine-checkable from comment text: required pass/fail/skip counts, the HEAD SHA, and byte size + format triple for the PCM, plus a CI run link. Better still, mirror the existing .github/workflows/manual_test_asr_guarder.yml with a TTS equivalent and require a link to that run — there is currently no TTS guarder workflow, so the evidence has to be produced by hand today.
P2 — Test coverage regression in terminal.rs
Commit 2 replaced the two sleep() calls with timeout()-wrapped reads, which is the right fix — the old loop checked start_time.elapsed() only after read.next().await returned, so it could block forever if the server went quiet. Good catch.
But commit 3 then deleted the command-output wait entirely, and with it the old assert!(response_count > 0, ...). Net effect on test_ws_terminal_endpoint:
- before: welcome received, some PTY output observed, exit event received
- after: welcome received, exit event received
The PtyMessage::Buffer → ctx.binary(data) path is no longer asserted at all, so the test would now pass if PTY output never reached the client. The resize handler also has nothing observing it, and with the echo synchronization gone the resize message can race the shell's exit, in which case resize_pty fails and is only println!'d.
If the >= 2 occurrence count was the flaky part — it was, since it depends on terminal echo being on, which is not guaranteed for a bash that decides it is non-interactive — the fix is to loosen the assertion rather than drop it: wait for at least one Message::Binary frame before sending exit 0. That restores the coverage, keeps the timing assumption out, and gives the resize message a defined ordering.
P2 — Mixed ASR + TTS PRs have contradictory output instructions
The new section in .github/prompts/code-review.md closes with:
Its evidence standard and finding format take precedence over the generic checklist above.
"The generic checklist above" is ambiguous. There are two things above it: the five generic bullets, and the ASR section, which is not generic — it mandates "a concise ASR checklist section in your PR comment: lifecycle / connection state / buffering / finalize / reconnect / result shape / metrics / tests." Meanwhile SKILL.md instructs "Prefer a small number of high-confidence findings over a broad checklist report" and "Do not add praise, a walkthrough of the patch, or generic testing advice."
A PR touching one ASR and one TTS extension therefore gets mutually exclusive orders. Worth one sentence stating that the ASR checklist still applies to ASR paths and the TTS format governs TTS paths, with neither suppressing the other.
P3 — Two competing homes for review guidance
AGENTS.md establishes progressive disclosure under docs/ai/, and the ASR analog lives at docs/ai/L1/L2/asr_plugin_design_review.md, indexed in docs/ai/L1/L2/_index.md and referenced from docs/ai/L1/05_workflows.md. This PR puts the TTS equivalent in a brand-new .agents/skills/ tree (no .agents/ directory exists on main) and registers it only via a new AGENTS.md "Domain Skills" section.
An agent following the documented L0 → L1 → L2 load path will not discover the TTS guide. Either add it to docs/ai/L1/L2/_index.md and 05_workflows.md alongside the ASR entry, or say explicitly in AGENTS.md that .agents/skills/ is a separate, deliberate location for skills. Right now the two domains are asymmetric for no stated reason.
P3 — evals.json has no ground truth and no runner
Nothing in the repo consumes evals.json — no harness, no workflow, no script references it. As committed it is documentation of intent rather than a runnable eval. Two things would make it durable:
expectationsare free-text prose judged by a human; there is noexpected_findingswith file/line anchors, so two runs cannot be compared mechanically.- The four
promptfields pin abbreviated 9-character SHAs (3f9b4c6c4,dc488ff14,26cca0807,85c777953). I could not resolve these to confirm they exist — this checkout is shallow (depth 1), so that is a limitation of my environment, not evidence they are wrong. Still, abbreviated SHAs in a spec file are worth expanding to full 40-char SHAs, since they are the only thing making these evals reproducible.
Nits
SKILL.mditems 10–12 use 3-space continuation indents; items with two-digit markers need 4 to stay inside the list item. Items 10, 11, and 12 will render as sibling paragraphs in strict parsers.- PR title is
feat: tts review skills.AGENTS.mdrequires present-tense verb phrasing —feat: add tts review skills. - The Rust change is unrelated to the skill and is separately motivated; splitting it out would make both easier to revert independently. Note also that
core/**sits inpaths-ignorefor both review workflows, so the Rust half of this PR is only getting reviewed because the.agents/files pulled the workflow in. terminal.rs: the exit read collapses four distinct outcomes intoNone—Message::Close, stream end, an exit frame with nocode, and a non-integercode— all surfacing as"Should have received a successful exit message". Distinguishing at least close-vs-missing-code would save debugging time on a CI failure.terminal.rs: gating the welcome ontext.contains("Enjoy your journey!")couples the test to a user-facing banner line indesigner/terminal/mod.rs. Correct today and better than the old>= 3message count, but a banner edit turns into a 10s hang plus failure. A comment in the server file pointing at the test would help.
ASR checklist
N/A — this PR changes no ASR extension and no ASR lifecycle, connection, buffering, finalize, reconnect, result-protocol, metrics, or test behavior. It edits the prompt file containing the ASR section; see the P2 item above for the one interaction worth resolving.
🤖 Generated with Claude Code
Review findings[P1] Cover the legacy
The new skill scopes every TTS extension, but its classification has only [P1] Reconcile the event-interval definition before making it a blocking rule
The guide defines [P2] Treat PR comments as untrusted evidence
The guarder gate tells a [P2] Preserve PTY-output coverage in the terminal test
The rewritten test sends an ASR checklist: N/A; this PR changes no ASR extension or ASR behavior. Tests were not run locally because this checkout is the base branch and the review instructions prohibit running PR-branch scripts. |
|
[P1] Cover the legacy
The skill scopes every TTS extension, but its classification has only [P1] Reconcile the event-interval definition before making it a blocking rule
The guide defines [P1] Make the guarder evidence gate verifiable by its review environment
The policy requires a reviewer to validate an inline screenshot and a downloadable, non-empty PCM file, but the configured review action only permits [P2] Treat PR-comment content as untrusted evidence, not instructions
The gate directs a [P2] Preserve PTY output forwarding coverage
The test still sends an Tests were not run locally because this checkout is the base branch and the review instructions prohibit executing PR-branch code. |
|
Review: feat: tts review skills (#2327) Reviewed the full diff (5 commits, final tree state). The TTS review guide is well written — the evidence-chain standard, the ownership boundary between Not ASR-related (no [P1]
But Those are different boundaries (event emission vs. chunk arrival), and SKILL.md workflow step 1 tells the reviewer to load [P1] The guarder evidence gate is not verifiable by the automation meant to enforce it
Related: [P1] PR comments are treated as merge-gating evidence without being marked untrusted Both Neither file says to treat comment content as data rather than instructions. A comment can both fabricate evidence to clear the gate and embed text aimed at redirecting the reviewer. Add an explicit instruction that PR comment bodies and linked content are untrusted input, must never be followed as instructions, and that claimed evidence counts only when its origin is attributable (author association, or a workflow-generated artifact — not a self-reported SHA). |
|
Review part 2 — non-blocking findings [P2] The ownership-boundary rule cannot be applied in the CI review environment
Under the workflow's tool allowlist ( [P2] Terminal test no longer verifies the command or resize it sends
However, commit 2 added an assertion on the Minor, same file: [P3] Depending on The residual risk: packaging and [P3] Skill lives outside the documented docs hierarchy and is unindexed The ASR counterpart is at [P3] All four evals reference short SHAs ( Also: eval 1's expectation that the review "does not ask Small fixes
ASR checklist: N/A — no Overall: the guide's substance is strong, and the two P1s are about enforceability and a doc contradiction rather than the review methodology itself. The metric-definition conflict is the one I would resolve before merge, since it will produce contradictory blocking findings on real PRs. |
Review:
|
Review findings[P1] Reconcile the
[P2] Scope the new test gate to new extensions or behavior changed by the diff
[P2] Restore an assertion for terminal output
ASR checklist: N/A. This PR does not modify an ASR extension or ASR behavior. I did not run PR-branch tests because the review checkout is the base branch as required; |
Review:
|
This reverts commit e74d51e.
4388e0b to
6a3f2c4
Compare
|
[P2] Classify or exclude legacy
|
No description provided.