- scripts/lint.py: reject raw rectangles, absolute coordinates, hue-budget and callout/group/formula-order violations at the source level - tests/invalid/ + tests/lint-invalid/: negative fixtures proving the package and linter reject bad input; test.sh now runs both directions - references/fallback.md: degraded path when no LaTeX is available - tests/group-callout.tex: exercise \stgroup and \stcallout - agents/openai.yaml: agent config - Docs and .sty updated to match
3.4 KiB
3.4 KiB
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×ais 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
\stgroupoutline names a composite the computation actually has, is captioned, and carries its members' role hue (neutralonly for genuinely mixed members). - Every
\stcalloutis an aside about its whole band, not a step: one per band, no taller than the band, and 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.
.texsource and vector artifact (PDF/SVG) linked.- Any degraded path stated explicitly — no CJK font, no
pdftocairo, fallback renderer, inferred shapes or conventions.