From rtl-agent-team
Defines quality criteria, structured interview protocols, naming conventions, artifact specs, and checklists for Phase 1 hardware research pipeline. Use for spec parsing and requirement gathering.
npx claudepluginhub babyworm/rtl-agent-team --plugin rtl-agent-teamThis skill uses the workspace's default tool permissions.
Every ambiguity, design choice, or scope decision MUST be resolved via AskUserQuestion
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Every ambiguity, design choice, or scope decision MUST be resolved via AskUserQuestion BEFORE proceeding. Do not assume — ask. The cost of asking is low; the cost of a wrong assumption cascades to all later phases.
Before analyzing spec documents, conduct a structured user interview to understand intent, priorities, and constraints. Ask one question per message — do not batch.
Interview sequence (adapt to context, skip if already clear from spec):
Record answers in docs/phase-1-research/design-intent.md. These answers become
the interpretive context for all spec parsing — ambiguous spec language is resolved
using the user's stated intent, not agent assumptions.
When the spec allows multiple implementation paths (algorithm choices, architecture options, protocol selections), present structured comparisons to the user:
## OPEN-1-NNN: {topic}
| Approach | Pros | Cons | Area Est. | Latency Est. | Recommendation |
|----------|------|------|-----------|-------------|----------------|
| A: {name} | ... | ... | ... | ... | |
| B: {name} | ... | ... | ... | ... | ★ Recommended |
| C: {name} | ... | ... | ... | ... | |
Trade-off summary: {1-2 sentences}
Ask user to select via AskUserQuestion. Record choice + rationale in open-requirements.json
resolution_rationale field.
Do NOT present all requirements at once. Group by functional area and seek approval in stages:
At each stage, the user can correct misinterpretations before they propagate. Only after all stages are approved, finalize iron-requirements.json.
Actively invoke domain-consult to acquire domain expert knowledge on algorithms, standards, coding tools, filter characteristics, and HW implementation trade-offs. Do not research in isolation. Domain experts provide knowledge; spec-analyst captures results as structured artifacts.
Present algorithm/tool candidates with trade-offs. Let the user make final selections. Architecture-level decisions (pipeline, block partitioning, memory hierarchy) are Phase 2's responsibility. Phase 1 surveys and recommends; Phase 2 designs.
Spawn maximum agents in parallel to explore all solution paths. Every feasible approach must be investigated and compared before committing. Skip ONLY if user specifies exact algorithm + architecture (even then, explore at least 2 variants for validation).
AskUserQuestion MUST cover these areas (skip items already provided by user):
Mandatory 3 rounds, coordinated by rtl-architect (domain-agnostic default). If a domain chief exists (e.g., vcodec-chief-standard-expert for video-codec domain), invoke both rtl-architect AND domain chief for domain-specific validation:
reviews/phase-1-research/research-review-r1.mdreviews/phase-1-research/research-review-r2.mdreviews/phase-1-research/research-review-r3.mdReview criteria per round:
User may override round count: "set iterations to N" → N rounds (minimum 1).
Phase 1 produces TWO requirement files instead of a single requirements.json:
Located at docs/phase-1-research/iron-requirements.json. Contains functional and
performance requirements that are binding constraints for ALL downstream phases.
Each iron requirement MUST have:
"id": "REQ-F-NNN" (functional) or "REQ-P-NNN" (performance) — unique, sequential"type": "functional" or "performance""description": what the requirement is"priority": "must" | "should" | "may""source": {"document": "...", "section": "...", "line": N} for traceability"acceptance_criteria": array of measurable criteria (reject vague terms like "should support", "adequate", "sufficient")"violation_policy": "user_escalation" (all P1 iron requirements use this)Located at docs/phase-1-research/open-requirements.json. Contains research topics
that Phase 2 must investigate and resolve into architecture decisions.
Each open item MUST have:
"id": "OPEN-1-NNN" — sequential"topic": what needs to be investigated"context": why this is an open question"candidates": array of ≥ 2 candidates (single candidate = not a research topic)"evaluation_criteria": metrics Phase 2 should use for comparison"related_iron": array of REQ-F/REQ-P IDs that constrain this research"resolution_expected": how this should be resolved in Phase 2After iron/open files are produced, verify:
FAIL conditions (must fix before exit):
WARN conditions (log and proceed):
i_ prefix (e.g., i_data, i_valid) — NOT suffix _io_ prefix (e.g., o_result, o_ready) — NOT suffix _oio_ prefix (e.g., io_sda)clk (single domain) or {domain}_clk (e.g., sys_clk) — NOT clk_irst_n (single domain) or {domain}_rst_n (e.g., sys_rst_n) — NOT rst_nisys_clk / sys_rst_nSave to reviews/phase-1-research/research-review.md:
# Phase 1 Review: Research Completeness
- Date: YYYY-MM-DD
- Reviewer: spec-analyst
- Upper Spec: specs/
- Verdict: PASS | FAIL
## Feature Coverage Checklist
| Spec Section | Requirement ID | Status |
## Findings
### [severity] Finding-N: ...
## Verdict
PASS | FAIL: [reason]
Phase 1 spec analysis MUST enumerate ALL features defined in the specification and track their implementation status throughout the pipeline:
Feature enumeration: Extract every algorithm, mode, format, or capability from the spec
Reference model coverage check (if ref model exists at P1 or provided externally):
Gap escalation: When feature coverage < 100%, MUST ask user via AskUserQuestion:
Documentation: Save docs/phase-1-research/feature-coverage.md:
| Feature | Spec Count | Model Count | Coverage | Status |
|---------|-----------|-------------|----------|--------|
| Intra modes | 8 | 4 | 50% | USER_APPROVED / MUST_IMPLEMENT |
Every Phase 1 completion MUST include an ambiguity assessment:
Ambiguity_Assessment with per-axis scoresdocs/phase-1-research/ambiguity-assessment.mdThis is inspired by Ouroboros's AmbiguityScorer pattern:
Scoring: ambiguity_score = weighted_average(goal, constraint, ac) — higher = worse
After ambiguity gate (Step 7.5a) and iron/open verification (Step 7.5b) pass, run adversarial reinterpretation to surface ambiguities the initial analysis missed.
source.section, not REQ ID.
Output: challenge-report.json in .rat/scratch/stability/phase-1/.
Schema: skills/p1-spec-research/templates/challenge-report-schema.json.
Budget: max 30 challenges per pass.genuine = (HIGH + MEDIUM challenges) - NOT_GENUINE
resolved = RESOLVED + DOCUMENTED
resolution_ratio = resolved / genuine (if genuine == 0: pass)
gate_pass = (all HIGH resolved) AND (resolution_ratio ≥ 0.8)
Gate failure: list unresolved HIGH challenges, loop back to Step 7.7 (max 1 re-loop). After 2nd failure: escalate to user with full divergence report.
| Ambiguity Score | Adversarial Gate | Decision |
|---|---|---|
| PASS (≤0.3) | PASS | Proceed |
| PASS (≤0.3) | FAIL | BLOCK |
| CONDITIONAL (0.3-0.5) | PASS | Proceed with WARNING |
| CONDITIONAL (0.3-0.5) | FAIL | BLOCK |
| BLOCK (>0.5) | PASS | BLOCK |
| BLOCK (>0.5) | FAIL | BLOCK |
Rule: Either gate can block; neither can unblock the other.
| Severity | Criterion | Example |
|---|---|---|
| HIGH | Different RTL behavior | Signed vs unsigned arithmetic |
| HIGH | Different interface | 32-bit vs 64-bit datapath |
| MEDIUM | Different parameterization | Fixed depth vs configurable |
| MEDIUM | Different timing | 3-stage vs 4-stage pipeline |
| LOW | Cosmetic only | Block naming differences |
Boundary rule: alternative interpretation would cause different RTL module → HIGH. Same module but different parameters → MEDIUM. Same module, same parameters → LOW.
50% items at HIGH severity → spec fundamentally under-specified, escalate
docs/phase-1-research/iron-requirements.json exists and is valid JSONdocs/phase-1-research/open-requirements.json exists and is valid JSON"id": "REQ-NNN" fielddocs/phase-1-research/io_definition.json exists and is valid JSONi_/o_/io_ prefix (NOT suffix){domain}_clk, resets use {domain}_rst_ndocs/phase-1-research/timing_constraints.json exists with per-block timing targets (rough estimates)docs/phase-1-research/domain-analysis.md exists with cross-block dependency matrix and per-block timing targetsreviews/phase-1-research/research-review.md saved (consolidated)docs/phase-1-research/solution-tree.json exists (structured JSON)docs/phase-1-research/candidate-comparison.md existsdocs/phase-1-research/selected-approach.md existsdocs/phase-1-research/literature-survey.md existsdocs/phase-1-research/ambiguity-assessment.md saved with per-axis scores and overall ambiguity_scorereviews/phase-1-research/stability-report.md saved"violation_policy": "user_escalation"