diff --git a/projects/dataforth-dos/8B5BSCM-RENDER-VERIFY-2026-06-18.md b/projects/dataforth-dos/8B5BSCM-RENDER-VERIFY-2026-06-18.md new file mode 100644 index 00000000..0a449b04 --- /dev/null +++ b/projects/dataforth-dos/8B5BSCM-RENDER-VERIFY-2026-06-18.md @@ -0,0 +1,42 @@ +# 8B/5B/SCM Render Fix — Diagnosis + Stage/Verify Results (2026-06-18) + +Driving the ~5,148 unpublished 8B/5B/SCM PASS records (render-coverage gap, same class as DSCA). + +## Root cause (validated) +1. **parseRawData bug (general):** a PASS/FAIL line is wrongly consumed as the step-response line + for non-DSCA families that omit the `"0","0",v` line (8B45/8B49/5B39/SCM5B33...) -> drops the + first Final-Test group -> measurement-count mismatch -> null. Fix: change the step-skip guard to + `if (!((family === 'DSCA' || skipStepIfStatus) && looksLikeStatus))` and pass `skipStepIfStatus` + only for templated models (so non-templated models are byte-unchanged). +2. **No per-model Final-Test template:** one hardcoded `DATA_LINES['8B']` (RTD-shaped) -> wrong + param names/specs for non-RTD models (8B45 is frequency-input == DSCA45). Needs per-model + templates, same as DSCA. The "published" siblings render null too (legacy content on Hoffman; + `api_uploaded_at` was back-populated from Hoffman inventory, NOT from our render). + +## Artifacts +- `8b5bscm-templates.json` — 136 models mined from Hoffman originals (accOut, accHeader, rows, _srcSerial). +- Verify harness pattern: patch a TEMP copy of datasheet-exact.js (parse-fix + template-gated + Final-Test, footer skip), render each model's published `_srcSerial`, content-normalized compare + to its Hoffman original. (Never touches the live renderer.) + +## Verify results (template-gated Final-Test only; NO slotmaps/precision/accuracy-label work yet) +Content-only (cosmetic header/spacing deferred, per the DSCA byte-fidelity decision): +- 15 models content-perfect (>=0.99) — publishable as-is. +- 17 within precision-tuning distance (0.93-0.97) — single value-row rounding diffs. +- 27 @ 0.85-0.93, 7 < 0.85. +- 70 NULL — render-count mismatch -> need per-model slotmaps. +- By family: 8B avg 0.97, SCM5B 0.93 (strong); 8B38 0.78; 7B ~0.88 (separate parse path). + +## Remaining work = the SAME machinery AD2 built for DSCA +1. Per-model **slotmaps** for the 70 nulls (AD2 `_derive_slotmaps.js`) — derive by matching rendered + measured values to the Hoffman original's displayed values. +2. **QB single-precision rounding** (AD2 `Math.fround`) — closes the 0.93-0.97 precision diffs. +3. **Frequency/AAC accuracy-block labels + stimulus formatting** — the still-open DSCA45/33 piece + (8B45/8B49/5B45 are frequency-input; SCM5B33 is AAC). Solving once covers BOTH 8B/5B AND DSCA45/33. +4. 8B38 (0.78) + 7B family (separate SCM7B path) — family-specific. + +## Recommendation +Converge with AD2's mature DSCA machinery rather than re-implement in parallel in the shared +`datasheet-exact.js`: feed the mined `8b5bscm-templates.json` into AD2's template/slotmap/rounding +path and finish the frequency/AAC accuracy renderer once for DSCA + 8B/5B/SCM together. +The 15 content-clean models can be published immediately if a partial win is wanted.