- Bracket ink is part of the fit: \st@facebody drops -inkw/-inke extreme coordinates and \stface/\ststack register them with the enclosing group/col/row fit, so a group outline can no longer be crossed by a member's bracket arms - \stlink inside \stgroup or \stcol is now a package error: sub-flow members never terminate a pending connector, so the arrow was dropped silently while the label still rendered - \stgroup requires role= (explicit role=neutral for mixed groups) and must bind at least two members or one \stcol partition; a lone stack or face inside a group is a dirty-build warning - lint: default budget is one \stcallout per figure; the allow-multiple-callouts directive relaxes it to one per band - build.sh: clean-build hint no longer names hue budget (lint owns it) - tests/group-callout.tex reworked: multi-member group with a bracketed member as a regression probe, single callout; new negative fixtures group-link, group-norole, group-single, callout-budget - api.md, checklist.md, style.md, layout.md, SKILL.md updated to match
69 lines
3.4 KiB
Markdown
69 lines
3.4 KiB
Markdown
# Pre-delivery checklist
|
||
|
||
`build.sh` already checks the source rules, package invariants, missing glyphs and text-box
|
||
overflow. The math, semantics and rendered relationships below still require inspection.
|
||
Any mandatory violation means redraw, not patch.
|
||
|
||
## 1. Math (before looking at the picture)
|
||
|
||
- [ ] Every shape recomputed independently from the source formula or code.
|
||
- [ ] Block multiplication, broadcasting, reductions and sharding algebra verified.
|
||
- [ ] Axis identities that the figure asserts actually hold in the numbers drawn
|
||
(`d = h·d_h`, `Σ_e n_e = T·k`, shards summing to the parent).
|
||
|
||
## 2. Semantics ledger
|
||
|
||
- [ ] Every discrete or overloaded symbol has one type, domain and range.
|
||
- [ ] Score, index and mask are three distinct objects in three distinct grammars.
|
||
- [ ] Producer-to-consumer chain closed: scores → indices → gather/mask → values.
|
||
- [ ] Shared selectors drawn once, with the reuse axis marked.
|
||
|
||
## 3. Geometry ledger
|
||
|
||
- [ ] Equal shapes have identical faces everywhere.
|
||
- [ ] `a×a` is square; every transpose physically swaps the face.
|
||
- [ ] Both occurrences of each contracted axis have the same edge length.
|
||
- [ ] Shards tile their parent exactly; concat reverses split; elisions use an ellipsis.
|
||
|
||
## 4. Full-size visual audit
|
||
|
||
Open the PNG at 100 %. Most of the first three items are automatic under the flow layout;
|
||
they still need looking at, because the cursor only guarantees that objects do not *push*
|
||
into each other, not that the figure reads correctly.
|
||
|
||
- [ ] Every lint exemption in the source is genuinely required and explained; deliverables
|
||
normally have none.
|
||
- [ ] No forbidden intersection, tangency, clipping or occlusion — including stack offset
|
||
sheets, brackets, arrow labels and the meaning box.
|
||
- [ ] Every connector's white label underlay covers only its own connector.
|
||
- [ ] No connector crosses a box that is not its endpoint.
|
||
- [ ] Symbols and shapes sit on two flat lanes per row; stage headings share a left rail.
|
||
- [ ] Every `\stgroup` outline names a composite the computation actually has, binds at
|
||
least two members or a `\stcol` partition, is captioned, and carries its members'
|
||
role hue (`neutral` only, and explicitly, for genuinely mixed members).
|
||
- [ ] At most one `\stcallout` in the figure (exemption comment if more), an aside about
|
||
its whole band, no taller than it, nothing in it that belongs in `\stmeaningbox`.
|
||
- [ ] Top zone compact (≤2 formula lines, no shape underbraces).
|
||
- [ ] Bottom box: one column, ≤3 rows, no overflow, no shrunken type.
|
||
- [ ] If requested, signature is outside the box, one line, accurate, unclipped and subdued.
|
||
- [ ] Structural support exact: known zeros unfilled, masks and diagonals exactly right.
|
||
|
||
## 5. Thumbnail audit
|
||
|
||
Open `*-thumb.png` (360 px).
|
||
|
||
- [ ] ≤4 active hue families per row plus gray; each role keeps one hue across stages.
|
||
- [ ] Base colors still muted, not saturated.
|
||
- [ ] Three visibly separated lightness levels where values vary; nothing is uniform pastel.
|
||
- [ ] Borders neutral, not tensor-colored.
|
||
- [ ] Dense texture reads as noise, not as stripes, checkerboard or a symmetric motif.
|
||
- [ ] The main structural claim of the figure is still legible at this size.
|
||
|
||
## 6. Delivery
|
||
|
||
- [ ] PNG preview shown.
|
||
- [ ] Short mechanism explanation in prose.
|
||
- [ ] `.tex` source and vector artifact (PDF/SVG) linked.
|
||
- [ ] Any degraded path stated explicitly — no CJK font, no `pdftocairo`, fallback renderer,
|
||
inferred shapes or conventions.
|