22 closed improvement issues × 22-step Phase Z pipeline audit. 4-axis verification: scope myopia, pipeline step mapping, cross-issue conflict, backlog ↔ code reality. Decision: CONDITIONAL GO for #19. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
15 KiB
INTEGRATION-AUDIT-01 -- Axis 2 pipeline map (22 issues x 22 steps)
Anchor (Stage 1 lock) :
This audit verifies pipeline contracts. It does not optimize any single MDX sample.
Companion file : docs/architecture/INTEGRATION-AUDIT-01-REPORT.md -- this MATRIX is the spin-off body of REPORT Section 4 (Axis 2). Combined REPORT exceeded the 10 KB readability threshold (REPORT u1 size = 21,070 bytes) at u1 completion, so the grid is housed here per the Stage 2 split rule. REPORT Section 4 carries a back-pointer to this file.
Pipeline reference : docs/architecture/PHASE-Z-PIPELINE-OVERVIEW.md (22-step master). Block A (Steps 0-12) = pre-render planning; Block B (Step 13) = render; Block C (Steps 14-22) = post-render telemetry / exception handling.
Closed issues under audit (22 total) : #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 #16 #17 #18 #45 #46 #47 #48 #49. #15 = parent; #45-#49 = execution children. Parent/child de-dup convention (Stage 1 lock) -- #15 row records integration glue only, no P (primary) cells; real code attribution lives in #45-#48 rows. #49 = verification-only, no new SHA, re-uses #48 evidence.
Step 0 precondition NOTE (NOT an axis, recorded above the grid)
Step 0 = docs/architecture/PHASE-Z-PIPELINE-OVERVIEW.md precondition block (catalog / contract / matching data / template / asset). Per Stage 2 plan, Step 0 is NOT a grid column; it is recorded here as a precondition note. Closed issues that touched Step 0 :
| issue | Step 0 touch | scope summary | evidence path |
|---|---|---|---|
#4 |
catalog + contract expansion (16 frame_partials + F17 paired_rows_4x2 + frame_contracts.yaml schema) | adds frame DB rows + contract schema fields | templates/phase_z2/catalog/frame_contracts.yaml ; templates/phase_z2/families/*.html |
#11 |
contract field min_height_px exposure |
additive contract payload field | templates/phase_z2/catalog/frame_contracts.yaml ; src/phase_z2_pipeline.py (commit a79bd8b) |
#13 |
build-time frame preview generator (salvage of capture_slide_screenshot) |
precondition asset only (lives in scripts/, NOT runtime pipeline) |
scripts/generate_frame_previews.py (commit 7d5639a) |
#14 |
slide-base template contract bit (embedded vs standalone) | precondition template surface | templates/phase_z2/slide_base.html (commit 7a52ceb) |
#18 |
doc-only carve-out (no Step 0 code change) | SVG gap report + 1-line backlog status flip | docs/architecture/IMP-18-SVG-GAP-REPORT.md (commit cbbc163) |
Step 0 touches above are precondition data / template / contract; they do not flow runtime decisions in Steps 1-22 directly, except via consumers already accounted for as Step 5 / 9 / 10 / 12 / 13 / 22 cells in the grid below.
Cell legend
P= primary touch (the issue's own declared scope per body / closing commit)A= adjacent contract (consumer / producer / cross-step dependency surface, not the primary scope).= not touched (blank-equivalent; dot used for column alignment in monospace renderers)
Rule applied : if an issue's body or closing commit explicitly names a step or its code file, that is P. If the change shape forces the issue to read from or write into another step's contract without being the primary scope, that is A. Otherwise ..
Parent #15 row carries no P cells per the Stage 1 de-dup convention; its child rows (#45-#48) carry the actual P cells.
22 x 22 grid (Step 1 columns -> Step 22 columns)
Column header shorthand : S1 = MDX upload | S2 = MDX normalize | S3 = content_object | S4 = section internal composition planning | S5 = V4 evidence | S6 = composition planning | S7 = layout vocabulary | S8 = zone+region ratio | S9 = region-level frame/display | S10 = frame contract | S11 = region-to-slot mapping | S12 = slot payload | S13 = render | S14 = visual_check | S15 = fit_classification | S16 = router | S17 = action | S18 = failure_classify | S19 = next_action | S20 = slide_status | S21 = debug.json | S22 = user UI/export.
| issue | S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9 | S10 | S11 | S12 | S13 | S14 | S15 | S16 | S17 | S18 | S19 | S20 | S21 | S22 | row total |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#2 |
. | P | A | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | A | . | 3 |
#3 |
. | A | P | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | A | . | 3 |
#4 |
. | . | . | . | A | . | . | . | A | P | . | A | A | . | . | . | . | . | . | . | . | . | 5 |
#5 |
. | . | . | . | A | A | . | . | P | . | . | . | . | . | . | A | A | . | . | P | . | . | 6 |
#6 |
A | . | . | . | . | P | A | A | A | . | . | . | A | . | . | . | . | . | . | . | . | A | 7 |
#7 |
A | A | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | P | 3 |
#8 |
. | . | P | . | A | A | . | . | A | . | . | . | A | . | . | . | . | . | . | . | . | A | 6 |
#9 |
. | . | . | . | . | . | A | P | A | . | . | . | A | . | . | . | A | . | . | . | . | . | 5 |
#10 |
. | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | A | . | P | 2 |
#11 |
. | . | . | . | . | . | . | . | A | . | . | . | . | . | . | . | . | . | . | . | . | P | 2 |
#12 |
. | . | . | . | . | . | . | . | . | . | . | . | . | A | . | P | P | P | A | A | . | . | 6 |
#13 |
. | . | . | . | . | . | . | . | . | . | . | . | . | A | . | . | . | . | . | . | . | . | 1 |
#14 |
. | . | . | . | . | . | . | . | . | . | . | . | P | . | . | . | . | . | . | . | . | A | 2 |
#15 |
. | . | . | . | . | . | . | . | . | . | . | . | . | A | A | . | . | . | . | . | A | . | 3 |
#16 |
A | A | . | . | . | . | . | . | . | . | . | . | . | A | . | . | . | . | . | . | A | A | 5 |
#17 |
. | . | . | . | . | . | . | . | . | . | . | P | . | . | . | A | A | . | . | . | . | . | 3 |
#18 |
. | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | 0 |
#45 |
. | . | . | . | . | . | . | . | . | . | . | . | . | P | A | . | . | . | . | . | A | . | 3 |
#46 |
. | . | . | . | . | . | . | . | . | . | . | . | . | P | A | . | . | . | . | . | A | . | 3 |
#47 |
. | . | . | . | . | . | . | . | . | . | . | . | . | A | P | A | . | . | . | . | . | . | 3 |
#48 |
. | . | . | . | . | . | . | . | . | . | . | . | . | A | A | . | . | . | . | . | P | . | 3 |
#49 |
. | . | . | . | . | . | . | . | . | . | . | . | . | A | A | . | . | . | . | . | A | . | 3 |
| col total | 3 | 4 | 3 | 0 | 3 | 3 | 2 | 2 | 6 | 1 | 0 | 2 | 5 | 9 | 6 | 4 | 4 | 1 | 1 | 3 | 8 | 7 | -- |
| HOTSPOT (>= 4) | . | H | . | . | . | . | . | . | H | . | . | . | H | H | H | H | H | . | . | . | H | H | -- |
Cell-count totals : sum of row totals = 77 ; sum of column totals = 77 (cross-check matches; 22 rows x 22 cols = 484 grid positions, of which 77 are non-blank).
HOTSPOT enumeration (column total >= 4)
9 of the 22 steps are HOTSPOT (touched by 4 or more closed issues). Listed in pipeline order :
| step | col total | touching issues | hotspot meaning |
|---|---|---|---|
S2 MDX normalize |
4 | #2 P, #3 A, #7 A, #16 A |
Step 2 is the entry surface for both the Stage 0 chained adapter (#2) and downstream content-object trace (#3), with reverse-path (#7) and verification utility (#16) as adjacent consumers. Cross-issue contract = parse_mdx output shape stays compatible with extract_* semantics. |
S9 region-level frame/display |
6 | #4 A, #5 P, #6 A, #8 A, #9 A, #11 A |
Step 9 is the heaviest pre-render hotspot. #5 is primary (V4 fallback / application_plan). #4 #8 #11 extend the contract / schema feeding Step 9. #6 #9 exercise the consumer of zone-region geometry. Cross-issue invariant : V4 candidates list + min_height contract + sub_section alias + region ratio must all agree at the Step 9 application_plan boundary. |
S13 render |
5 | #4 A, #6 A, #8 A, #9 A, #14 P |
Step 13 is the Jinja2 render surface. #14 (slide-base iframe mode) is primary. #4 #6 #8 #9 flow new payload / layout css into the same renderer. Cross-issue invariant : build_layout_css + frame_partial + slide_base remain deterministic with no AI in path. |
S14 visual_check |
9 | #12 A, #13 A, #15 A, #16 A, #45 P, #46 P, #47 A, #48 A, #49 A |
Highest column total. #15 parent + 5 children (#45-#49) all converge here. #12 #13 #16 are adjacent. Cross-issue invariant : detector producers (#45 #46) emit canonical event shape; classifier consumer (#47) reads the same shape; debug.json surfaces (#48) match -- to be re-verified by Axis 3 (REPORT Section 5). |
S15 fit_classification |
6 | #15 A, #45 A, #46 A, #47 P, #48 A, #49 A |
#47 primary (classifier consumes image + table events). All #15 family is adjacent. Cross-issue invariant : Step 14 producer event keys agree with Step 15 CONTENT_TYPE_PATTERNS. |
S16 router |
4 | #5 A, #12 P, #17 A, #47 A |
#12 primary (3-stage salvage cascade). #5 bridge fallback adjacent. #17 gated carve-out adjacent. #47 classifier output flows into router. Cross-issue invariant : router action map remains deterministic / no AI in normal path. |
S17 action |
4 | #5 A, #9 A, #12 P, #17 A |
#12 primary (zone_ratio_retry expansion + cross-zone donor + 3-stage cascade). #9 zone-geometry feeds the same retry surface. #5 V4 fallback shares PASS_WITH_FALLBACK status enum. #17 is gated. Cross-issue invariant : no common-CSS shrink (per feedback_phase_z_spacing_direction). |
S21 debug.json |
8 | #2 A, #3 A, #15 A, #16 A, #45 A, #46 A, #48 P, #49 A |
Second-highest column total. #48 primary (debug.json event surfacing). 7 issues adjacent. Cross-issue invariant : debug.json schema additive only; no key type / semantic conflict (Axis 3 re-verifies this category). |
S22 user UI/export |
7 | #6 A, #7 P, #8 A, #10 P, #11 P, #14 A, #16 A |
Frontend / CLI exit surface. 3 primary (#7 #10 #11). 4 adjacent. Cross-issue invariant : Front/ consumes backend artifacts as read-only payload; backend never reads from frontend except via the reverse path (#7). |
S2 S9 S13 S14 S15 S16 S17 S21 S22 = 9 distinct hotspot steps (col total >= 4). The col-total HOTSPOT row in the grid carries 9 H marks ; counting check matches.
Row total HOTSPOT (issues touching the most steps)
For information only -- this dimension is not an issue-body requirement, but is useful for scope-myopia cross-check with REPORT Section 3 :
| issue | row total | finding (per REPORT Section 3) |
|---|---|---|
#6 |
7 | Warning -- wide override blast radius (4 commits + Stage 4 blocker-fix 52ccb7f) -- matrix row total agrees |
#5 |
6 | OK -- pre-render bridge ; rank-1 path unchanged |
#8 |
6 | OK -- additive schema with explicit backward-compat alias resolver |
#12 |
6 | Warning -- large blast radius (4 src + 5 test modules in 56619a0) -- matrix row total agrees |
#4 |
5 | OK -- pre-render planning only ; catalog read-only for V4 |
#9 |
5 | OK -- 8-vocabulary build_layout_css with fixtures |
#16 |
5 | OK -- utility + design doc only ; gated by #7 activation |
The two Warning rows in Section 3 (#6 row total 7 and #12 row total 6) sit at the top of the row-total ranking -- this is consistent with "wide blast radius" findings in Section 3. The other high-row-total issues (#5 #8 #4 #9 #16) are all OK per Section 3 because each ships with explicit backward-compat guards / fixtures / gating.
Cross-check vs REPORT Section 3 adjacency list
REPORT Section 3 flagged 9 adjacent-contract pairs for Axis 3 re-verification. Each pair maps onto cells in this grid :
| Section 3 adjacency pair | matrix evidence |
|---|---|
#2 Step 2 normalize -> #3 Step 3 content_object |
#2 S2 P + #3 S2 A (producer/consumer same column) |
#3 content_object -> #8 sub_sections |
#3 S3 P + #8 S3 P (both primary on same step -- schema extension) |
#4 catalog -> #5 V4 fallback |
#4 S5 A + #5 S5 A (both adjacent on same step -- candidate pool dedup) |
#4 catalog -> #10 #11 min_height |
#11 S0 (NOTE) ; #11 S9 A (Step 9 consumer of min_height) -- direct adjacency |
#9 layout vocabulary -> #12 retry zone-ratio |
#9 S17 A + #12 S17 P (consumer/producer same step) |
#9 -> #11 Step 9 min_height test |
#9 S9 A + #11 S9 A (both adjacent on same step) |
#45 + #46 Step 14 -> #47 Step 15 |
#45 #46 S14 P + #47 S15 P ; #47 S14 A (cross-step producer/consumer) |
#48 debug.json -> open #21 consumer |
#48 S21 P ; #21 is out-of-scope (open) -- no grid row |
#17 AI carve-out -> #5 + #4 activation gate |
#17 S12 P ; #17 S16 A ; #17 S17 A (gated cells) |
All 9 adjacency pairs map onto provable cells. Axis 3 (REPORT Section 5) will verify each pair's producer-line / consumer-line on live code.
Empty columns (col total = 0)
S4 section internal composition planning-- 0 touches. Consistent with PHASE-Z-PIPELINE-OVERVIEW Step 4 statusmissing(no closed issue implemented Step 4 yet; it remains in the open backlog).S11 content unit / child group -> internal region -> frame slot mapping-- 0 touches. Consistent with PHASE-Z-PIPELINE-OVERVIEW Step 11 statusmissing(Layer A / Layer B 2-stage placement algorithm not implemented).
Step 4 and Step 11 are the two missing steps in Block A that no closed issue in the audit window addressed. This is expected per the master pipeline status; the audit records absence without claiming a gap (an implementation gap would require an OPEN issue to claim it, which is out of audit scope).
Low-touch columns (col total = 1)
S10 frame contract(1) --#4only ; consistent with#4being the catalog/contract owner.S18 failure_classify(1) --#12only ; consistent with#12being the retry cascade owner.S19 next_action(1) --#12only ; same.
Notes on parent / child row separation
#15row carries 3 adjacencies (S14 / S15 / S21) and zeroPcells per the Stage 1 de-dup convention.#45 #46 #47 #48carry the correspondingPcells (S14 for#45 #46; S15 for#47; S21 for#48).#49(verification-only, no new SHA) mirrors the#48adjacency pattern with all-Acells -- this is intentional and consistent with the Stage 1 lock that#49re-uses#48evidence (commit614c533). No double-count.
Sum cross-check : #15 3 + #45 3 + #46 3 + #47 3 + #48 3 + #49 3 = 18 row-total cells across the #15 family. None of these duplicate code attribution -- only #45 #46 #47 #48 carry the four P cells (one each), totaling 4 primary cells for the family. #15 #49 carry zero primaries.
End of MATRIX. Back to REPORT Section 4 for narrative integration.