docs(qfd): add W14 portability requirement

Captures "I can carry the device and write away from a desk" as a
distinct WHAT from W11 (multi-day battery), weight 8. Recomputed
basement Σ (1546→1674); H8 climbs #6→#3 in the §3 priority list as
its voter base widens to include W14, and H12 enters the top six at
#4. §6's "(b) narrow voter base" override for H8 is retired and a new
§7 ADR-008 vs W11+W14 unresolved-conflict bullet records that wall
power in v0.1 now disappoints two WHATs, not one.
This commit is contained in:
Julien Calixte
2026-05-17 01:29:53 +02:00
parent b0169690c4
commit 1e1e59e716
2 changed files with 92 additions and 43 deletions

View File

@@ -42,6 +42,7 @@ What a user (= me) values about the device, with importance weights on a
| W11 | Multi-day battery life (v0.8 onward) | 4 | [roadmap → v0.8](roadmap.md#v08--power-battery--sleep--) |
| W12 | Local-only file scope coexists with git scope (v0.5+) | 5 | [README → scopes](../README.md#vision), [roadmap → v0.5](roadmap.md#v05--file-palette--multi-file--) |
| W13 | Typography sets a writing-tool tone — typewriter or developer editor, never gadget | 7 | [roadmap → v1.0](roadmap.md), [README → UX](../README.md#ux-boundaries-set-by-the-medium) |
| W14 | I can carry the device and write away from a desk | 8 | [roadmap → v0.8](roadmap.md#v08--power-battery--sleep--), [README → hardware](../README.md#hardware) |
---
@@ -86,22 +87,40 @@ from its basement row.
keeps a fixed-size glyph-cache load on top of that arena pressure.
2. **H2 — partial-refresh region area** (177). Bound how many pixels the
panel has to flip per keypress; [ADR-003] is the hardware-side answer.
3. **H1keypress latency** (148). The single most user-visible number;
3. **H8save durability** (156). Atomic-rename + fsync; FAT's weakness
is acknowledged in [ADR-007] and mitigated, not designed around. H8's
voter base spans W3 (power-loss correctness), W6 (long sessions),
W12 (file scopes), and W14 (carrying = unclean shutdowns) — the
fourth voter is what lifts H8 into the top three by arithmetic alone.
4. **H12 — Wi-Fi reconnect** (153). Mobile use is the chief driver
(W14 + W2 + W4 + W6); [ADR-005] PAT auth and reconnect backoff own
this. Previously below the top six on a stationary v0.1 reading;
W14 promotes it.
5. **H1 — keypress latency** (148). The single most user-visible number;
[ADR-002] and [ADR-003] are co-conspirators.
4. **H3 — full-refresh cadence** (144). The ghosting/flash tradeoff; lives
6. **H3 — full-refresh cadence** (144). The ghosting/flash tradeoff; lives
in the render layer.
5. **H6 — push success rate** (134). [ADR-004] (gitoxide) and [ADR-005] (PAT
over HTTPS) own this jointly; spike 7 is the kill-switch.
6. **H8 — save durability** (132). Atomic-rename + fsync; FAT's weakness is
acknowledged in [ADR-007] and mitigated, not designed around.
**Why H8 ranks where it does.** HoQ totals reward functions that touch many
WHATs over functions that absolutely matter for one WHAT. W3 ("Pulling
power never corrupts the file", weight 10) is the strongest single
requirement but its only strong link is H8. H9, by contrast, collects from
W1+W2+W6 to reach 193. The fix isn't to re-weight cells to chase intuition
— it's to use §6 as a curated rank that lifts narrow-but-critical
functions explicitly.
H13 (current draw, 137) sits at #7 — close to the top-six cutoff because
W14 promotes the "wall-power for v0.1, measure first" stance from
acknowledged tradeoff to watched metric. The v0.1 "measured only" target
(§2) is still right; what changes is that bench multimeter readings (§6)
gain a second audience — sizing the v0.8 cell against a real portability
target, not just informing ADR-008's deferral.
H6 (push success, 134) drops out of the top six. Its ADR ownership
([ADR-004] gitoxide + [ADR-005] PAT) and spike 7 kill-switch are unchanged
— the matrix simply reads W14's mobile-use voter as a louder signal for
reconnect (H12) than for the push transport itself.
**Why H8 ranks where it does.** Pre-W14, HoQ totals rewarded functions
that touch many WHATs over functions that absolutely matter for one WHAT.
W3 ("Pulling power never corrupts the file", weight 10) was H8's
strongest single voter, but H8 still sat at #6 because its base was
narrow. W14's "carrying = bumps = unclean shutdowns" widens H8's voter
base and pushes it to #3 by arithmetic. §6's "table-stakes correctness"
override is no longer the load-bearing argument for H8's prominence —
its acceptance-criteria override for H4/H5 still is. See §6.
The bottom three (H7 push time, H15 build time, H10 binary size) are real
costs but ones we knowingly took on ([ADR-001]) and are not in the critical
@@ -147,7 +166,9 @@ the design are called out below.
Affordable at our size class but worth watching as features land.
- **H11 stacks ↔ H13 current draw** (mild, future). Idle threads draw
little but never zero; a future light-sleep policy (v0.8) wants them
parked.
parked. W14's portability outcome raises the value of that policy
from "battery hygiene" to "the thing that lets the device leave the
desk."
- **H14 modularity ↔ H15 build time** (mild). More small crates = more
link work. Boring vs valuable; we lean toward modularity.
- **W13 typography ↔ H9 heap + H10 binary** (mild, future). Achieving a
@@ -233,11 +254,12 @@ Function-to-component matrix (9 strong / 3 medium / 1 weak):
## 6. Critical performance budget
A curated rank, drawing from §3 importance and §4 conflicts but with two
deliberate overrides: (a) acceptance-criteria critical paths (H4 boot,
H5 soak) move up regardless of weighted-vote spread, and (b) table-stakes
correctness (H8 durability) moves up despite a narrow voter base. These
are the numbers spikes 27 must validate before integration starts.
A curated rank, drawing from §3 importance and §4 conflicts, with one
deliberate override: acceptance-criteria critical paths (H4 boot,
H5 soak) move up regardless of weighted-vote spread. (Pre-W14 this list
also lifted H8 durability over its narrow voter base; W14 has widened
that base, so H8's #3 spot is now arithmetic — see §3.) These are the
numbers spikes 27 must validate before integration starts.
| Rank | Function | Target | Watched on | If we miss it |
| ---- | -------------- | ------------------------------------- | ----------------- | ----------------------------------------------------------------------- |
@@ -293,6 +315,14 @@ These are the live tensions we are watching, not deciding harder:
serif = typewriter feel). Not yet decided whether to ship both or one;
decision deferred to the v1.0 design pass. Cost preview per added font:
+H9 glyph-cache footprint, +H10 binary for embedded assets.
- **[ADR-008] vs W11+W14.** Wall power in v0.1 is now an explicit
disappointment of two WHATs, not one (battery W11 + portability W14).
The disappointment is bounded by [ADR-008]'s commitment to measure
current draw on real hardware before sizing v0.8's cell — spec the
cell against measured numbers, not against the spec sheet. The §3
promotion of H13 (current draw) from #11 to #7 is the matrix
registering this: bench multimeter readings now serve portability
sizing as well as power profiling.
---
@@ -354,6 +384,15 @@ These are the live tensions we are watching, not deciding harder:
(H8) get manual lifts. §3 now names the HoQ structural bias that makes
the curation necessary — reward for spread, penalty for narrow-but-
critical functions — using H8/W3 as the canonical example.
- **W14 added — portability outcome.** Captures "I can carry the device
and write away from a desk" as a distinct WHAT from W11 (multi-day
battery), weight 8. Recomputed basement Σ; H8 lifted from #6 to #3 in
the §3 priority list as its voter base widened from W3+W6+W12 to also
include W14, and H12 entered the top six at #4; H6 dropped out. The
ID "W14" was previously held by a deprecated typography row (see the
"W13 reframed, W14 removed" bullet above); the slot is now repurposed.
§6's "(b) narrow voter base" override for H8 no longer applies and
has been retired in the §6 preamble.
The minor variance between README's "~12 lines" and product/[ADR-003]'s
"~11 lines" of edit area is within rounding for a 14 px glyph in a 240 px

View File

@@ -1,6 +1,6 @@
# Quality House
The 13 WHATs × 15 HOWs House of Quality. The roof carries function-vs-
The 14 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
@@ -241,8 +241,8 @@ market"), not as a fair head-to-head buyer's guide.
\end{tikzpicture}%
}
% --- Dimensions tuned for the typewriter QFD (13 W x 15 H) ---
\def\qfdNW{13}
% --- Dimensions tuned for the typewriter QFD (14 W x 15 H) ---
\def\qfdNW{14}
\def\qfdNH{15}
\def\qfdWhatW{4.6}
\def\qfdImpW{0.7}
@@ -307,7 +307,8 @@ market"), not as a fair head-to-head buyer's guide.
10/{W10 I can repair or fork it with hobbyist tools},
11/{W11 Multi-day battery life (v0.8 onward)},
12/{W12 Local-only files coexist with git scope (v0.5+)},
13/{W13 Typography sets a writing-tool tone}%
13/{W13 Typography sets a writing-tool tone},
14/{W14 I can carry the device and write away from a desk}%
}
\node[anchor=west, font=\scriptsize,
text width=\qfdWhatTextW cm, align=left]
@@ -315,7 +316,7 @@ market"), not as a fair head-to-head buyer's guide.
% ---------- Importance (raw 1-10 weight) ----------
\foreach \r/\w in {1/10, 2/9, 3/10, 4/7, 5/6, 6/9, 7/8, 8/7,
9/8, 10/5, 11/4, 12/5, 13/7}
9/8, 10/5, 11/4, 12/5, 13/7, 14/8}
\node[font=\scriptsize] at ({-\qfdImpW/2}, {-\r + 0.5}) {\w};
% ---------- HOWs (rotated column titles) ----------
@@ -411,6 +412,12 @@ market"), not as a fair head-to-head buyer's guide.
% W13 row 13: H9M
\node[qfdrel/M] at ({9 - 0.5}, {-13 + 0.5}) {};
% W14 row 14: H4W H8M H12M H13S
\node[qfdrel/W] at ({4 - 0.5}, {-14 + 0.5}) {};
\node[qfdrel/M] at ({8 - 0.5}, {-14 + 0.5}) {};
\node[qfdrel/M] at ({12 - 0.5}, {-14 + 0.5}) {};
\node[qfdrel/S] at ({13 - 0.5}, {-14 + 0.5}) {};
% ---------- Roof correlations ----------
\node[font=\scriptsize] at (C-1-2) {$+\!+$}; % H1-H2 strong reinforce
\node[font=\scriptsize] at (C-1-3) {$-$}; % H1-H3 mild conflict
@@ -435,20 +442,20 @@ market"), not as a fair head-to-head buyer's guide.
% ---------- Basement: target / abs weight / rel weight % ----------
\foreach \c/\tgt/\abs/\rel in {%
1/{$\leq$200\,ms}/148/10,
1/{$\leq$200\,ms}/148/9,
2/{$\leq$1 line}/177/11,
3/{1 : 20}/144/9,
4/{$\leq$5\,s}/54/3,
4/{$\leq$5\,s}/62/4,
5/{$\geq$1\,h}/111/7,
6/{$\geq$95\,\%}/134/9,
6/{$\geq$95\,\%}/134/8,
7/{$\leq$30\,s}/27/2,
8/{100\,\%}/132/9,
8/{100\,\%}/156/9,
9/{$\geq$1\,MB}/193/12,
10/{$\leq$2\,MB}/41/3,
10/{$\leq$2\,MB}/41/2,
11/{$\leq$80\,KB}/45/3,
12/{$\leq$30\,s}/129/8,
13/{obs.}/65/4,
14/{$\leq$8}/117/8,
12/{$\leq$30\,s}/153/9,
13/{obs.}/137/8,
14/{$\leq$8}/117/7,
15/{$\leq$7\,min}/29/2%
} {
\node[font=\scriptsize] at ({\c - 0.5}, {-\qfdNW - 0.5}) {\tgt};
@@ -462,7 +469,7 @@ market"), not as a fair head-to-head buyer's guide.
\node[anchor=east, font=\scriptsize\itshape]
at ({-0.1}, {-\qfdNW - \k + 0.5}) {\lbl};
% ---------- Perception zone: 5 products x 13 WHATs (0-5 scores) ----------
% ---------- Perception zone: 5 products x 14 WHATs (0-5 scores) ----------
% Columns: \so=Typoena target, \st=reMarkable 2 + Type Folio,
% \sf=Freewrite Traveler, \sg=Pomera DM250,
% \sh=Freewrite Smart Typewriter.
@@ -481,7 +488,8 @@ market"), not as a fair head-to-head buyer's guide.
10/5/4/2/1/2,
11/1/5/5/4/5,
12/3/1/2/3/2,
13/3/5/2/2/2%
13/3/5/2/2/2,
14/2/4/5/2/5%
} {
\pgfmathsetmacro{\xo}{\qfdNH + (\so + 0.5)*\qfdCmpW/6}
\pgfmathsetmacro{\xt}{\qfdNH + (\st + 0.5)*\qfdCmpW/6}
@@ -597,14 +605,16 @@ hackable-Linux 3).
| W11 | Multi-day battery life (v0.8 onward) | 1 | 5 | 5 | 5 | 4 | Typoena v0.1 = wall-powered (battery deferred). reMarkable + both Freewrites legendary (~4 weeks; Sailfish trimmed 30 % typing / 50 % idle). Pomera ~24 h. |
| W12 | Local-only files coexist with git scope | 3 | 1 | 2 | 2 | 3 | Typoena v0.5+ design. reMarkable cloud-only. Freewrites have local + Postbox but no VCS. Pomera = pure local. |
| W13 | Typography sets a writing-tool tone | 3 | 5 | 2 | 2 | 2 | Typoena v0.1: single mono (serif option in v1.0). reMarkable: rich type rendering. Freewrite + Pomera: utilitarian. |
| W14 | I can carry the device and write away from a desk | 2 | 4 | 5 | 1 | 5 | Typoena v0.1 wall-powered (ADR-008), no enclosure spec yet — desk-bound by design. reMarkable + Type Folio bag-friendly with bulk. Freewrite Traveler is the form-factor reference (~1.6 lb, folds). Smart Typewriter ~5 lb, desk-bound. Pomera DM250 pocketable foldable. |
**Totals** (sum across 13 WHATs, no weighting): Typoena 50, Pomera 45,
Freewrite Traveler 42, reMarkable 41, Freewrite Smart Typewriter 41
(Traveler pre-Sailfish 39; Smart pre-Sailfish 38; reMarkable W1 dropped
3→2 after author's firsthand test). Pomera still ranking second is the
useful signal — we're effectively building "Pomera + Wi-Fi + git +
hackable BOM", which re-confirms the differentiation thesis from
`README.md`.
**Totals** (sum across 14 WHATs, no weighting): Typoena 52, Pomera 50,
Freewrite Traveler 47, reMarkable 45, Freewrite Smart Typewriter 42
(Traveler pre-Sailfish 44; Smart pre-Sailfish 39; reMarkable W1 dropped
3→2 after author's firsthand test). Pomera closing to within 2 of
Typoena is W14 doing what W14 should — surfacing the dimension on
which v0.1's tethered MVP loses ground that v0.8 is expected to
recover. The "Pomera + Wi-Fi + git + hackable BOM" framing from
`README.md` still holds and reads stronger.
Weighted totals (Σ score × W weight) tell the same story with more
contrast — left as exercise; the unweighted view is enough to read the
@@ -629,12 +639,12 @@ picture.
- **Importance (left column)** is the raw 110 weight from `qfd.md` §1, not
a normalised %, so adding stays cheap when a WHAT shifts. Sum of weights
is 95; treat each unit as ~1.05 % if you want a percentage view.
is 103; treat each unit as ~0.97 % if you want a percentage view.
- **Roof** carries the §4 symbols translated into classical QFD glyphs:
`++` strong reinforcement (`◎`), `+` mild reinforcement (`○`), `` mild
conflict (`×`), `` strong conflict (`⊗`).
- **Basement rows** are: v0.1 target → §3 column sum (`Σ` of
`weight × strength`) → relative weight as integer % of total (1546).
`weight × strength`) → relative weight as integer % of total (1674).
Relative weights round to 100.
- **H7, H10, H15** (push time, binary size, build time) sit at the bottom
of the basement — knowingly-paid costs per `qfd.md` §7, not signals to