From c702ba83d88276551cfc7ce6aec4f2e60bb6afa8 Mon Sep 17 00:00:00 2001 From: Julien Calixte Date: Sat, 16 May 2026 00:23:15 +0200 Subject: [PATCH] =?UTF-8?q?docs(qfd,quality-house):=20make=20quality-house?= =?UTF-8?q?.md=20own=20=C2=A73=20matrix=20and=20=C2=A74=20roof?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop the duplicated 13x15 strength matrix and 15x15 roof tables from qfd.md; the same data already lives in quality-house.md's TikZ source. qfd.md §3/§4 keep the narrative reading (priority list, conflict list) and point to quality-house.md for the cells and basement sums. Both files' regenerate/maintenance notes flipped to reflect the new contract. --- docs/qfd.md | 62 +++++++++++++------------------------------ docs/quality-house.md | 40 +++++++++++++++++----------- 2 files changed, 43 insertions(+), 59 deletions(-) diff --git a/docs/qfd.md b/docs/qfd.md index 210fcb9..3d142c2 100644 --- a/docs/qfd.md +++ b/docs/qfd.md @@ -14,9 +14,11 @@ with the v0.2–v1.0 trajectory ([README](../README.md), glossary at [`../CONTEXT.md`](../CONTEXT.md). Format inspired by the classic House of Quality, kept compact. Strength -weights: **9** strong, **3** medium, **1** weak, blank none. A TikZ -rendering of §1–§4 (plus a guessed competitor perception zone) lives in -[`quality-house.md`](quality-house.md). +weights: **9** strong, **3** medium, **1** weak, blank none. The §3 +matrix and §4 roof — plus a guessed competitor perception zone — live +in [`quality-house.md`](quality-house.md); this file owns the WHAT/HOW +catalogues (§1, §2), the narrative reading of the numbers (§3, §4), and +the downstream sections (§5–§8). --- @@ -70,26 +72,11 @@ shows what "better" looks like (↑ higher, ↓ lower, → fixed). ## 3. House of Quality — WHATs × HOWs -Reading: row × column cell is how strongly the function (H) advances the -requirement (W). Importance at the bottom is `Σ(weight × strength)` — the -weighted vote on which functions deserve the most engineering attention. - -| | H1 lat | H2 area | H3 cad | H4 boot | H5 soak | H6 push% | H7 push s | H8 dura | H9 heap | H10 bin | H11 stk | H12 wifi | H13 mA | H14 mod | H15 build | -| ------- | :-----: | :-----: | :-----: | :-----: | :-----: | :------: | :-------: | :-----: | :-----: | :-----: | :-----: | :------: | :----: | :-----: | :-------: | -| W1 (10) | **9** | 9 | 3 | | 3 | | | | 1 | | 1 | | | | | -| W2 (9) | | | | | | **9** | 3 | | 9 | | | 9 | | | | -| W3 (10) | | | | | | | | **9** | | | | | | | | -| W4 (7) | | | | | | 3 | | | | | | 3 | | 1 | | -| W5 (6) | | | | **9** | | | | | | 3 | | | | | | -| W6 (9) | 3 | | 3 | | **9** | 3 | | 3 | 9 | | 3 | 3 | | | | -| W7 (8) | 3 | 3 | 3 | | | | | | | | | | 3 | 1 | | -| W8 (7) | 1 | 9 | **9** | | | | | | | | | | | | | -| W9 (8) | | | | | | | | | | 1 | 1 | | | **9** | 3 | -| W10 (5) | | | | | | | | | | 3 | | | 1 | 3 | 1 | -| W11 (4) | | | | | | | | | | | | | **9** | | | -| W12 (5) | | | | | | 1 | | 3 | | | | | | 3 | | -| W13 (7) | | | | | | | | | 3 | | | | | | | -| **Σ** | **148** | **177** | **144** | **54** | **111** | **134** | **27** | **132** | **193** | **41** | **45** | **129** | **65** | **117** | **29** | +The matrix (row × column = how strongly function H advances requirement +W) and its Σ row — the weighted vote `Σ(weight × strength)` on which +functions deserve the most engineering attention — live in +[`quality-house.md`](quality-house.md). The Σ totals quoted below are +from its basement row. ### Top engineering priorities (from importance) @@ -129,25 +116,10 @@ before the runtime decision does. The roof shows where pushing one function pushes another the wrong way. Classical QFD single-character symbols: **`◎`** strong reinforcement, -**`○`** mild reinforcement, **`×`** mild conflict, **`⊗`** strong conflict. - -| | H1 | H2 | H3 | H4 | H5 | H6 | H7 | H8 | H9 | H10 | H11 | H12 | H13 | H14 | H15 | -| ------- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| **H1** | — | ◎ | × | | ○ | | | | | | | | × | | | -| **H2** | | — | ◎ | | | | | | | | | | ○ | | | -| **H3** | | | — | | | | | | | | | | ○ | | | -| **H4** | | | | — | | | | | | × | | | | | | -| **H5** | | | | | — | ○ | | ○ | ⊗ | | | | | | | -| **H6** | | | | | | — | ○ | | ⊗ | | | ◎ | | | | -| **H7** | | | | | | | — | | × | | | ◎ | | | | -| **H8** | | | | | | | | — | | | | | | | | -| **H9** | | | | | | | | | — | ⊗ | | | | | | -| **H10** | | | | | | | | | | — | | | | | ⊗ | -| **H11** | | | | | | | | | | | — | | × | | | -| **H12** | | | | | | | | | | | | — | | | | -| **H13** | | | | | | | | | | | | | — | | | -| **H14** | | | | | | | | | | | | | | — | × | -| **H15** | | | | | | | | | | | | | | | — | +**`○`** mild reinforcement, **`×`** mild conflict, **`⊗`** strong +conflict. The 15×15 roof matrix lives in +[`quality-house.md`](quality-house.md); the cells that actually shape +the design are called out below. ### Conflicts that actually shape the design @@ -396,8 +368,10 @@ tall edit region and is not load-bearing. - When a spike returns numbers, update §6's "Target" or "Watched on" columns — this is the doc that _should_ feel out of date if measured reality drifts from estimates. -- The WHATs change rarely; the HOWs change with each release; the - matrices are recomputed when either side changes. +- The WHATs (§1) change rarely; the HOWs (§2) change with each release. + When either changes, re-score the matrix and recompute the basement Σ + in [`quality-house.md`](quality-house.md); then check the §3 priority + list and §4 conflict list here still match the new picture. [ADR-001]: adr.md#adr-001-language-and-runtime--rust-on-esp-idf-rs-std [ADR-002]: adr.md#adr-002-ui-strategy--custom-widgets-on-embedded-graphics-not-ratatui diff --git a/docs/quality-house.md b/docs/quality-house.md index 20f58ce..7eb88f2 100644 --- a/docs/quality-house.md +++ b/docs/quality-house.md @@ -1,12 +1,15 @@ # Quality House -Visual rendering of [`qfd.md`](qfd.md) — the same 13 WHATs × 15 HOWs as a -classical House of Quality. The roof carries function-vs-function -correlations from §4; the basement carries v0.1 targets (§2) plus the -weighted-vote sums and relative weights from §3. +The 13 WHATs × 15 HOWs House of Quality. The roof carries function-vs- +function correlations; the basement carries v0.1 targets (mirrored from +[`qfd.md`](qfd.md) §2) plus the weighted-vote sums +(`Σ = Σ(W weight × cell strength)`) and rounded relative weights. The +narrative reading of these numbers lives in `qfd.md` §3 (priority list) +and §4 (conflict list). -`qfd.md` is authoritative — this file lags it. Regenerate when the matrix -or roof changes; if numbers diverge, trust `qfd.md`. +This file is the authoritative source for the matrix cells, the roof +correlations, and the basement Σ + relative weights. WHATs (§1) and HOWs +(§2) are mirrored here from `qfd.md`; if those diverge, trust `qfd.md`. Out of scope here: §5 component mapping (would need a second house), §6 critical performance budget (already a curated rank), §7 tradeoffs @@ -589,17 +592,24 @@ picture. ## Regenerating -When `qfd.md` §1–§4 change, re-derive: +The matrix cells (`\node[qfdrel/{S,M,W}]`), roof symbols (`C-i-j` slots), +and basement Σ + Rel% are native to this file — re-score directly in the +TikZ source, then update the §3 priority list and §4 conflict list in +`qfd.md` to match the new picture. + +When `qfd.md` §1 or §2 changes: 1. Importance column → §1 weight column. -2. HOW titles + targets → §2 (v0.1 target column). -3. Relation cells → §3 matrix strengths (9 → `S`, 3 → `M`, 1 → `W`). -4. Roof symbols → §4 (◎→`++`, ○→`+`, ×→`−`, ⊗→`−−`). -5. Basement Σ + Rel% → §3 bottom row, divided by the new total. -6. Perception scores are **not** derived from `qfd.md` — they live only in - this file. Update them when (a) a competitor ships a relevant change, - (b) measurement replaces a guess, or (c) a WHAT is added/removed in - §1. Each score should keep its one-line rationale in the table above. +2. HOW titles + v0.1 targets → §2 target column. +3. Recompute basement Σ for any HOW whose column changed: per-cell + contribution = `(W weight) × (cell strength: 9 / 3 / 1 / 0)`. +4. Recompute relative weight: each Σ ÷ total Σ × 100, rounded to integer + percent. + +Perception scores are **not** derived from `qfd.md` — they live only in +this file. Update them when (a) a competitor ships a relevant change, +(b) measurement replaces a guess, or (c) a WHAT is added/removed in §1. +Each score keeps its one-line rationale in the table above. If a renderer rejects the `tikz` fence, the file is still readable as source — the placement comments name each WHAT, HOW, and cell. The