Files
kernbench2/.claude/commands/report.md
T
ywkang 1f36baa898 ADR: add 0038-0042 (pcie_ep, pe_mmu, pe_tcm, sram, tiling)
Fill component-model coverage gaps surfaced by /report's G4 analysis.
Each ADR documents the component's First action, latency model, and
honest notes on dormant code or implementation asymmetries discovered
during re-evaluation against current code.

- 0038 pcie_ep: thin protocol-overhead model; ComponentBase forwarding
  worker as-is; named-node contract for router helpers
- 0039 pe_mmu: component + utility dual role; sub-page region stopgap;
  D2.1 flags pipeline path missing mmu.overhead_ns timeout (asymmetric
  with non-pipeline; not visible at default tlb_overhead_ns=0)
- 0040 pe_tcm: dual-channel BW serialization (read/write Resource cap=1);
  TcmRequest schema owned by TCM; timing-only (no data store)
- 0041 sram: terminal scratchpad model + ResponseMsg on reverse path;
  D1.1 flags _worker override as currently dormant (no Transaction
  actually targets the SRAM node today)
- 0042 tiling: pure plan-generator module, not a component; corrects
  the G4 misclassification; pins GEMM/Math stage sequences and
  epilogue scope contract

Also: /report skill G3 refinement — only flag older->newer asymmetric
cross-references; newer->older (e.g., 0034-0037 citing infrastructure
ADRs) are expected one-way and no longer reported.

Bilingual pair verifier (tools/verify_adr_lang_pairs.py) passes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 14:43:03 -07:00

13 KiB
Raw Blame History

description
description
Generate a public-facing architecture design document from approved ADRs and SPEC.md, with gap analysis reported to chat only.

/report — Architecture Design Document Generator

Generates a public-facing architecture design document at docs/report/architecture-{YYYY}-{1H|2H}.md derived from the current ADR corpus, SPEC.md, CLAUDE.md, and the canonical component list.

This command is strictly read-only on docs/adr/, SPEC.md, CLAUDE.md, and src/. The only write is the report file itself (a derived artifact under docs/report/).


Invocation

Two modes:

  • /reportdry-run (default). No file is written. The command reads sources, performs classification, and reports the planned TOC
    • gap analysis to chat only. Use this to validate ADR-to-section mapping before committing.
  • /report writewrite mode. Performs the same procedure and writes docs/report/architecture-{period}.md. Use after a dry-run whose classification looks correct.

Period determination (both modes), from system date:

  • month 16 → {YYYY}-1H
  • month 712 → {YYYY}-2H

In write mode, if docs/report/architecture-{period}.md already exists, overwrite it without asking (regeneration is the expected operation).


Output Contract

Document body (docs/report/architecture-{period}.md)

Public release form. Reader is an external developer/architect. They do not have access to SPEC.md or ADR files. Therefore:

  • No ADR-NNNN identifiers in visible prose.
  • No SPEC R/§ identifiers in visible prose.
  • No internal jargon assumed without definition.
  • No diagram embeds — only <!-- DIAGRAM: ... --> placeholders.
  • Attribution via HTML comments — every prose paragraph that derives from a source carries an inline comment immediately above it: <!-- src: ADR-NNNN <section-name> --> (multiple sources allowed).

Chat-only report (not written to any file)

After writing the document, report to the user in the chat response:

  • File path written.
  • Section counts (e.g., "Detailed Architecture: 8 components covered, 2 in builtin/ have no ADR backing").
  • G1 gaps — SPEC requirements (R-numbers / §) with no ADR citing them.
  • G2 gaps — ADRs missing Context or Decision. Alternatives and Consequences are optional; their absence is NOT a gap.
  • G3 gaps — ADR cross-references without a back-reference. Only flag when the referencer's ADR number is less than the referenced ADR's number (older → newer). Newer ADRs citing older infrastructure ADRs (higher number → lower number) are expected to be one-way and are NOT flagged.
  • G4 suggestions — areas where an ADR seems missing based on the ADR corpus + SPEC reading. Phrase as suggestions, not findings. Each G4 item must say why it's suggested and remain falsifiable.
  • G5 consistency issues — ADR-to-ADR inconsistencies:
    • G5a (supersession not reflected) — ADR-A states it supersedes ADR-B, but ADR-B's Status is not marked as Superseded.
    • G5b (merge candidates) — two or more ADRs cover near-identical scope (detected naturally during section assignment, not via exhaustive pair-wise scan).
    • G5c (explicit contradictions) — two ADRs whose Decisions directly oppose each other. Must cite both quotations; do not speculate contradictions from topical similarity alone.
  • TOC rationale — for each section, list contributing ADR IDs (this is for the user's verification only, never written to the document itself).

G4 must never appear in the document body. G1G3 are also chat-only.


Procedure

Step 1 — Determine period

Use current system date. Compute {YYYY}-1H or {YYYY}-2H.

Step 2 — Ingest ADRs

For each docs/adr/ADR-NNNN-*.md:

  • If both ADR-NNNN-*.md (Korean) and ADR-NNNN-*.en.md (English) exist for the same number, prefer the Korean .md version.
  • Parse for the four canonical sections: Context, Decision, Alternatives (also accept "Alternatives Considered"), Consequences.
  • Record presence/absence of Context and Decision for G2. Alternatives and Consequences presence is recorded for use during authoring, but their absence is not a gap.
  • Record ADR-NNNN cross-references for G3, preserving the direction (referencer → referenced). G3 evaluation uses ADR numbers to distinguish older→newer (flagged when missing back-link) from newer→older (not flagged; see Output Contract G3).
  • Record Status (e.g., Accepted, Superseded, Draft) and any "supersedes ADR-NNNN" text in the body for G5a.

Process ADRs in numerical order for determinism.

Step 3 — Read canonical component list

List src/kernbench/components/builtin/*.py, excluding __init__.py, pe_types.py, and __pycache__/. Sort alphabetically. This is the canonical order for Detailed Architecture subsections.

Step 4 — Read SPEC.md and CLAUDE.md

For G1 detection: extract every R<N> and §<X.Y> identifier mentioned in SPEC.md. For each ADR, check which of these it cites. SPEC IDs with zero citing ADRs → G1.

Step 5 — Section assignment

Assign each ADR to exactly one of:

  • Design Principles — project-wide rationale, philosophy, mission (e.g., "why source-level kernel execution", "why fast multi-device scaling"). Includes ADRs that describe foundational invariants (e.g., latency model assumptions, verification strategy).
  • High-level Architecture — Tray / SIP / CUBE / PE hierarchy and cross-layer boundaries (e.g., runtime API ↔ sim_engine ↔ components).
  • Detailed Architecture — single-component internal designs. One subsection per file in the canonical component list. ADRs whose primary topic is the internal structure of one component go here.
  • Implementation Decisionscross-cutting algorithms / policies / schemes / models that don't belong to a single component: collective algorithms, parallelization policies, address schemes, routing algorithms, model assumptions.

Boundary rule between Detailed Architecture and Implementation Decisions:

Detailed Architecture = component-internal. Implementation Decisions = spans multiple components OR is an algorithm/policy/scheme/assumption rather than a structural choice.

If an ADR fits two sections plausibly, prefer the one that minimizes duplication and pick the more specific bucket (Detailed if it primarily concerns one component, else Implementation Decisions).

During classification, opportunistically detect ADR consistency issues:

  • G5b (merge candidate) — if two or more ADRs land in the same Detailed Architecture subsection or the same Implementation Decisions topic AND their primary scope is near-identical, record as a merge candidate. Topical adjacency is not enough; the scopes must be effectively the same question.
  • G5c (explicit contradiction) — if while reading you encounter two ADRs whose Decisions directly oppose each other on the same question, record both quotations verbatim with their ADR IDs. Do NOT speculate contradictions from similarity, vocabulary, or domain overlap — only explicit, citable opposition.

Do NOT perform an exhaustive pair-wise scan of all ADRs. G5b/G5c are byproducts of normal reading; if not encountered, the chat report shows "(none)".

Step 6 — Write the document (write mode only)

In dry-run mode, skip this step entirely. Proceed directly to Step 7.

# KernBench — Architecture Design Document
*{YYYY} {1H|2H}*

## Design Principles
<prose>

## High-level Architecture
<intro prose>

### Tray
### SIP
### CUBE
### PE

## Detailed Architecture
### <component-1>
### <component-2>
...

## Implementation Decisions
### <topic-1>
### <topic-2>
...

Authoring rules (apply to every section)

  • Stay grounded. Every claim must trace to an ADR's stated content (Context / Decision / Alternatives / Consequences). No invented motivation, no invented alternatives, no invented trade-offs.
  • 4-part discipline, naturally. Each subsection should naturally cover: the problem the design addresses, the decision made, the alternatives considered, the consequences. Do not label these with rigid headers like "Problem." — weave them into prose. But ensure all four are present if the source ADR documents them.
  • Missing → omit, not fabricate. If a source ADR has no "Alternatives" section, do not invent alternatives for the report. Simply write the remaining parts and record G2 in chat.
  • Attribution. Every paragraph derived from one or more ADRs carries an HTML comment immediately above: <!-- src: ADR-NNNN <section> [, ADR-MMMM <section>] -->.
  • Diagram placeholders. Where a diagram would help, insert <!-- DIAGRAM: <short description of what the diagram should show> --> on its own line. Never embed an image (![...](...)).
  • Public tone. Self-contained. Define internal terms (SIP, CUBE, PE, Tray, NOC, IPCQ, TCM, etc.) on first use within the document. Do not assume reader has read SPEC or ADRs.
  • No internal references. No ADR-NNNN in body text. No SPEC §X.Y or R<N> in body text. These appear only inside HTML attribution comments.
  • Detailed Architecture component subsections. Use the canonical list from Step 3 in order. For each component file, write a subsection drawing from any ADR that primarily concerns that component. If no ADR covers a component, write a one-line stub noting the component exists and flag it in chat report. If an ADR covers a topic not in the canonical list, place it under "Detailed Architecture → Other" (sub-subsection) and flag for canonical-list extension in chat.
  • Implementation Decisions topic naming. Derive topic names from ADR titles, made reader-friendly (no ADR number). Group related ADRs under one topic when natural (e.g., multiple address-related ADRs under "Address Scheme").

Step 7 — Generate chat report

After Step 6 (write mode) or directly from Step 5 (dry-run mode), emit the following to chat. Do not write any of this to a file.

In dry-run mode, replace the Wrote: line with: **DRY-RUN — no file written.** Review TOC and gaps below. Run \/report write` to commit.`

## /report — Generation Summary

**Wrote:** docs/report/architecture-{period}.md

**Section coverage**
- Design Principles: <N> ADRs
- High-level Architecture: <N> ADRs
- Detailed Architecture: <covered>/<total> components ; components without ADR: [...]
- Implementation Decisions: <N> topics, <N> ADRs

**TOC rationale (ADR → section mapping)**
- Design Principles: ADR-NNNN, ADR-MMMM
- High-level Architecture: ...
- Detailed Architecture → <component>: ADR-NNNN
- Implementation Decisions → <topic>: ADR-NNNN, ADR-MMMM

**G1 — SPEC requirements without ADR support**
- R<N> / §<X.Y>: not cited by any ADR
- (or "none")

**G2 — ADRs missing required sections (Context or Decision)**
- ADR-NNNN: missing <Context|Decision>
- (or "none")

**G3 — Broken cross-references** (older → newer only)
- ADR-NNNN cites ADR-MMMM (NNNN < MMMM); ADR-MMMM does not back-reference
- (or "none")
- Note: newer ADRs citing older infrastructure ADRs (NNNN > MMMM) are
  not flagged here — one-way references are the expected pattern.

**G4 — Suggested topics that may warrant a new ADR (verify before acting)**
- <topic>: <why agent thinks it may be missing — must be falsifiable>
- (or "none")

**G5 — ADR consistency issues**
- **G5a (supersession not reflected)**
  - ADR-NNNN claims to supersede ADR-MMMM, but ADR-MMMM Status is "<status>"
  - (or "none")
- **G5b (merge candidates)**
  - ADR-NNNN + ADR-MMMM: near-identical scope on <topic> — evaluate merge
  - (or "none")
- **G5c (explicit contradictions)**
  - ADR-NNNN says "<quote>"; ADR-MMMM says "<quote>" — direct opposition on <question>
  - (or "none")

Constraints (do not violate)

  1. Read-only on source. No writes to docs/adr/, SPEC.md, CLAUDE.md, or src/. Only write is docs/report/architecture-{period}.md.
  2. No fabrication. Every body paragraph traces to ADR content via HTML attribution comment.
  3. No diagram embeds. Placeholders only.
  4. No internal IDs in body. ADR-NNNN and SPEC R/§ stay inside HTML comments only.
  5. Determinism. ADRs processed in numerical order; components in canonical (alphabetical) order. Same inputs → same output.
  6. G4 stays in chat. Never written to the document.
  7. Korean bilingual preference. When both .md and .en.md exist for the same ADR number, use .md.
  8. All ADRs included. No exclusion list. ADRs about internal tooling (CLI, diagram views, verification strategy) are still included — usually under Design Principles or Implementation Decisions, written in publishable form.

Failure modes to avoid

  • Padding with general background not present in the source ADRs.
  • Inferring alternatives the ADR doesn't mention.
  • Quietly skipping an ADR because it seems internal. Include it, rephrase for public audience.
  • Inventing components not in src/kernbench/components/builtin/.
  • Auto-selecting diagrams from docs/diagrams/. Only placeholders.
  • Promoting G4 suggestions to the document. They stay in chat.