| name | code-review |
| description | Review Semiotic pull requests for behavioral bugs, regressions, contract drift, and missing evidence. Use for GitHub Copilot code review of TypeScript/React charts, Stream Frames, canvas and browser interactions, SSR, public exports, docs/examples, AI schemas and tooling, generated contracts, tests, CI baselines, and custom-lint changes. Use GitHub MCP for linked issue, incident, PR, and CI context and Playwright MCP for relevant browser behavior. |
Review Semiotic pull requests
Produce a findings-first review grounded in executable behavior. Treat
AGENTS.md as the repository authority. Do not restate the diff or praise the
change; identify defects that the author can act on.
Establish the review contract
- Read the pull request description, changed files, and relevant sections of
AGENTS.md.
- Classify the change surface: chart HOC, Stream Frame/runtime, browser
interaction, SSR/server, package surface, docs/example, AI/schema, generated
artifact, test infrastructure, or custom lint.
- Identify the user-visible or package-level behavior the change claims to
preserve or introduce.
- Use GitHub MCP when the pull request references an issue, incident, prior
pull request, or failing check. Read the referenced acceptance criteria and
compare them with the implementation. Do not infer requirements from an
identifier without retrieving it.
- Inspect available CI results through GitHub MCP when they can confirm a
suspected regression or reveal an unverified path. Distinguish a product
defect from a stale generated baseline or an unstable-rule disagreement.
Trace behavior, not files
Follow changed values across component boundaries. A local implementation can
be type-correct while breaking a downstream scene, renderer, or package
contract.
For chart HOCs and Stream Frames, check:
- Accessor, grouping, style, tooltip, hover, selection, legend, margin, and
frameProps precedence through the final Stream Frame props.
- Line-object versus flat-row normalization and preservation of parent series
metadata.
- Static mode versus push mode. Static and serialized paths require real data;
React push mode omits
data. data={[]} is not push mode.
- Controlled updates, refs, rAF scheduling, cleanup, transition continuity,
stable configuration identity, and retained-scene invalidation.
- Coordinate-space assumptions involving margins, legends, scales, responsive
dimensions, device pixel ratio, canvas bounds, and pointer type.
- Browser, SSR, hydration, static renderer, and serialized/MCP parity when the
shared behavior crosses those paths.
For public API changes, check all affected surfaces together:
- Runtime implementation and exported TypeScript types.
- Family entry points and package exports without accidental graph widening.
- Chart specs,
ai/schema.json, behavior contracts, prompts, examples, and
reference coverage when agent-visible behavior changes.
- Documentation examples using high-level charts and family subpath imports.
- Generated sections and manifests updated only through their owning
generator.
Demand meaningful evidence
Evaluate whether tests prove the changed behavior rather than merely mounting
a component or finding a canvas/SVG element.
- Prefer assertions against scene summaries, rendered marks, callbacks,
accessible output, or user-visible behavior.
- In canvas interaction tests, account for automatic legends, margins,
responsive sizing, and plot coordinates before trusting literal pointer
positions.
- Require regression coverage for the exact input form and interaction mode
that failed.
- Treat regenerated bundle, package, and measurement baselines as evidence of
an intentional contract change only when the implementation explains the
delta.
- Recommend focused checks from
AGENTS.md; do not claim a command passed
unless CI or a tool result shows that it completed successfully.
Use browser and MCP evidence selectively
Use Playwright MCP when the diff changes rendering, hover/click/keyboard
interaction, responsive behavior, accessibility, hydration, or a documentation
example. Reproduce the relevant route or minimal scenario, inspect browser
console failures, and compare observed marks and interactions with the claim.
Do not spend browser-tool time on pure type, text, or build-script changes.
If a Semiotic MCP server is configured, use its chart schema, diagnostics,
render evidence, or accessibility audit when reviewing serialized chart or AI
tooling behavior. A successful render alone is insufficient; check that marks,
domains, and accessible evidence are meaningful.
Evaluate custom lints as hypotheses
When check:custom-lints fails or a pull request changes custom lint policy,
read scripts/custom-lint/README.md and
scripts/custom-lint/registry.json. For every unstable-rule finding, evaluate
both the code and the rule. Accept one or more dispositions:
- Fix a real bug and record positive evidence for the unstable rule.
- Adjust, demote, or retire an imprecise rule and record contrary or revision
evidence.
- Promote only at the policy threshold with distinct positive references,
focused rule tests, and no grandfathered findings.
Do not recommend blindly syncing the baseline. Promotion never excuses an
unfixed violation, and a CI failure is not proof that the rule is correct.
Report only actionable findings
Order findings by severity. For each finding:
- Give a concise title describing the defect.
- Cite the narrowest changed line that causes it.
- State the concrete runtime, consumer, accessibility, or maintenance impact.
- Explain the triggering scenario and the evidence supporting it.
- Suggest the direction of repair without prescribing a speculative rewrite.
Do not report stylistic preferences, hypothetical concerns without a reachable
failure path, or issues outside the pull request's changed behavior. If no
findings remain, state that explicitly and identify only material residual
risks or verification gaps.