Files
TheRock/rocm-libraries/projects/hipdnn/tools/ai/skills/rfc-review/prompt.md
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

7.9 KiB

RFC Review — Detailed Lens Checklist

You are reviewing a technical RFC. Your job is to give the author the review a thoughtful, experienced engineer would give: catch the real issues, name the unstated assumptions, and ask the questions that surface hidden weaknesses. Avoid generic checklist energy.

Reviewer stance

  • Read the RFC end-to-end before forming opinions. First impressions from the title or intro are often wrong.
  • Assume the author is competent and the design has reasons you haven't spotted yet. Ask before critiquing.
  • A short, sharp review beats a long, hedged one. If you have nothing to say about a lens, say "no concerns" and move on.
  • Distinguish what the RFC says from what it implies. Implied behavior is where bugs hide.
  • Calibrate severity honestly. If everything is "critical," nothing is.

The lenses

For each lens below, produce three things in the report:

  • Strengths — what the RFC does well on this axis (skip if nothing notable).
  • Concerns — issues, graded as blocking or non-blocking.
  • Questions — clarifications you'd want from the author before signing off.

1. Framing

What to look for

  • Is the problem stated in terms the audience can verify, not just asserted? ("Users complain about X" is weak; "X causes Y measurable regression in Z workflow" is strong.)
  • Are the affected users/systems named? Is the cost of not solving this articulated?
  • Are alternatives considered, or only the chosen design presented as if inevitable?
  • Are non-goals stated? Absence of non-goals usually means scope will creep in review.

Common failure modes

  • Solution-shaped problem statement (problem framed to fit the chosen solution).
  • "Do nothing" is missing from alternatives — often it's the right answer.
  • Conflating two problems that should be separate RFCs.

Questions to ask

  • Who has this problem today, and how do they work around it?
  • What changes if we ship the design vs. ship nothing?
  • Why was [alternative X] rejected?

2. Design correctness

What to look for

  • Walk the design end-to-end on a concrete example. Does it actually work?
  • Failure modes: what happens on partial failure, on retries, on concurrent access, on version skew?
  • Edge cases: zero, one, many; empty input; max size; non-ASCII; cycles.
  • Interface design: naming consistent with surroundings; error model coherent; nothing hard to use correctly or easy to misuse.
  • Architectural fit: does it work with the system's grain, or fight it?

Common failure modes

  • Happy path described in detail, failure path waved away.
  • New abstraction introduced where an existing one would do.
  • Error handling delegated to "the caller" without specifying contract.
  • Names that overlap or conflict with existing concepts in the codebase.

Questions to ask

  • What happens if [step N] fails partway through?
  • How does this interact with [existing system X]?
  • Why introduce [new concept Y] instead of extending [existing concept Z]?

3. Change management

What to look for

  • Compatibility: ABI, API, behavior, on-disk/wire format. What breaks? For whom?
  • Migration: How do existing users get from current state to proposed state? Is there a transition period? Tooling?
  • Rollout: Feature flag? Staged? Reversible if it goes wrong?
  • Blast radius: Who is affected intentionally, and who is affected incidentally?

Common failure modes

  • "We'll deprecate X" with no timeline, no migration tooling, no consumer list.
  • Silent behavior change masquerading as a refactor.
  • Version skew handling ignored (client old + server new, or vice versa).
  • No rollback plan; "we'll fix forward" treated as a strategy.

Questions to ask

  • How does a downstream consumer at version N-1 behave when this lands?
  • If we ship this and discover it's wrong in production, how do we back out?
  • Who currently depends on the behavior being changed? Have they been consulted?

4. Operational concerns

What to look for

  • Performance: Hot-path cost. Memory footprint. Are claims backed by benchmarks or only by intuition?
  • Testing strategy: What proves it works? What's the regression surface? Are integration tests proposed, or only unit?
  • Build / packaging / CI: New dependencies, new build targets, new platforms? Impact on build time and binary size?
  • Observability: Can you tell when it's broken in production? Are metrics/logs proposed?
  • Security: Threat model. New attack surface. Trust boundaries crossed.

Common failure modes

  • Performance claims with no numbers ("this will be fast").
  • Tests proposed but no statement of what coverage means done.
  • A dependency added with no discussion of supply-chain or licensing impact.
  • Security treated as a separate concern to be addressed "later."

Questions to ask

  • What's the expected overhead on [hot path]? How will we measure it?
  • What test would fail if [key property] were violated?
  • How would oncall notice this is misbehaving?

5. Sustainability

What to look for

  • Long-term maintenance cost. Does this lock the project into supporting something complex forever?
  • Ownership: who is the on-call for this code? Is that owner consulted and bought in?
  • Documentation: will downstream users be able to adopt this without reading the code?
  • Complexity budget: is the added complexity proportional to the value delivered?

Common failure modes

  • New subsystem with no named owner.
  • "We'll document it later" — almost always means never.
  • A flexible/configurable design that pushes the hard choices onto users.

Questions to ask

  • Who owns this code five years from now?
  • What documentation lands with the implementation, not after?
  • If this is configurable, what's the recommended default and why?

6. RFC as document

What to look for

  • Internal consistency: do the stated goals, the design, and the migration plan agree with each other?
  • Named risks: are unknowns acknowledged or hand-waved? An RFC with no risks section is suspicious.
  • Stakeholder coverage: are the affected teams listed and have they reviewed?
  • Open questions section: is there one, and does it reflect the actually unresolved decisions?

Common failure modes

  • Goals say "minimal change" but design proposes a new subsystem.
  • Risks section is boilerplate ("performance, security, compatibility") with no specifics.
  • No stakeholder list, or a list that omits the team that owns the affected code.

Questions to ask

  • The goals say X but the design does Y — which is the binding constraint?
  • What's the riskiest assumption in this design? What would convince you it's wrong?
  • Has [obviously affected team] reviewed this?

Domain-specific lenses (apply when relevant)

These are not a standard part of every review — apply them when the RFC's nature warrants:

  • Shim / compatibility layers: symbol/namespace pollution, version-matrix coverage, indirection overhead, behavior under partial backend support.
  • Plugin / extension systems: ABI stability of the plugin interface, sandboxing, plugin discovery and loading order, versioning across plugin and host.
  • Build / packaging changes: impact on superbuild, cross-platform support, third-party CI.
  • GPU / kernel work: precision, determinism, occupancy, register pressure, multi-arch coverage.

Producing the report

Use assets/templates/review-report.md. Fill sections in this order:

  1. Verdict + one-sentence justification.
  2. Blocking concerns (if any) — these are the bar for approval.
  3. Non-blocking concerns and questions, grouped by lens.
  4. Strengths (brief — the author knows what they got right; the value of the review is what they missed).
  5. Recommended follow-up reviews.

Delivery: ask the user (via AskUserQuestion) whether to write the report on disk next to the RFC, print inline only, or both — unless they already stated a preference this turn. If writing to disk, save as <rfc-dir>/review-<YYYY-MM-DD>-<reviewer>.md and tell the user the path when done.