From rtl-agent-team
Defines contract test directory structure, file types (interface compliance, timing checks, stubs), and merge-time verification procedures for RTL block-parallel development.
npx claudepluginhub babyworm/rtl-agent-team --plugin rtl-agent-teamThis skill uses the workspace's default tool permissions.
Each block maintains its contract tests under:
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.
Each block maintains its contract tests under:
sim/{block}/contract/
{block}_if_contract_tb.sv # Interface compliance tests
{block}_timing_check.sv # Timing assertion checks
{block}_stub.sv # Mock for counterpart blocks
{block}_if_contract_tb.sv)Verifies that the block's ports conform to the frozen interface definitions:
rtl/intf/*_if.sv signal namesrtl/pkg/codec_if_pkg.sv type definitions{block}_timing_check.sv)Verifies timing contracts embedded in interface files:
{block}_stub.sv)Provides a mock implementation of the block for use by other blocks' tests:
When merging a block into the integrated trunk, execute tests in this order:
Target block contract test: Run the merging block's own contract tests
sim/{block}/contract/{block}_if_contract_tb.sv → PASS required
sim/{block}/contract/{block}_timing_check.sv → PASS required
Cross-block integration test: Run integration tests with already-merged upstream blocks
sim/integration/{upstream}_{block}_integration_tb.sv → PASS required
Uses real upstream block (already merged) + stubs for not-yet-merged downstream blocks.
Blocks merge in dependency order — upstream blocks first:
1. entropy (no upstream dependency — merges first)
2. tq (depends on: entropy)
3. me (depends on: dpb for references, but dpb merges later — use dpb_stub)
4. mc (depends on: me, dpb — use dpb_stub)
5. intra (depends on: none for merge — reconstruction is downstream)
6. filter (depends on: reconstruction output)
Rationale: Upstream-first ensures that when a block merges, its upstream dependencies are already real (not stubs), providing higher-fidelity integration tests.
Exception: me and mc depend on dpb for reference frames, but dpb is a
downstream consumer of filter. Use dpb_stub.sv for me/mc merge tests, then
re-run integration tests after dpb merges.
On FAIL, the merge-time verification allows up to 3 retry attempts:
Attempt 1: Run contract tests → FAIL
→ Block worker fixes the issue, re-runs
Attempt 2: Run contract tests → FAIL
→ Block worker applies second fix, re-runs
Attempt 3: Run contract tests → FAIL
→ ESCALATE to user via coordinator
After 3 consecutive failures:
MERGE_BLOCKEDSendMessage to leader: MERGE_BLOCKED: {block} — {failure_summary}AskUserQuestionAfter each successful merge, re-run all previously merged blocks' contract tests to ensure the new block introduction does not break existing integrations.
sim/{block}/contract/{block}_stub.svEach stub MUST provide:
module {block}_stub (
// All ports matching the block's interface connections
// Directly derived from rtl/intf/*_if.sv
);
// 1. Default output drivers (valid=0, data=0)
// 2. Programmable response mode:
// - IDLE: all outputs deasserted
// - ECHO: reflect inputs after N-cycle delay
// - PATTERN: output predefined test vectors
// 3. Backpressure injection:
// - ready deassertion probability (0-100%)
// - maximum consecutive stall cycles
// 4. Transaction logging:
// - Log all input transactions to file
// - Configurable verbosity level
endmodule
As blocks merge in upstream-first order, stubs are progressively replaced:
Before entropy merge: ALL blocks use stubs
After entropy merge: entropy is real, others use stubs
After tq merge: entropy + tq are real, others use stubs
...
After filter merge: ALL blocks are real, no stubs needed
Each merge step replaces one stub with the real block in integration tests. Previously passing integration tests MUST be re-run with the real block.