Commit Graph

67 Commits

Author SHA1 Message Date
Julien Calixte
80f21648ce docs(postmortems): record Spike 7 on-device probe and PSRAM
libgit2 C cross-compiles for xtensa; blocker is missing esp-idf lwIP
headers (arpa/inet.h) because libgit2-sys builds standalone. PSRAM
enabled and hardware-verified.
2026-07-05 20:04:11 +02:00
Julien Calixte
9c9ad63793 docs: record Spike 7 outcome, gix HTTPS-push kill-switch fired
Postmortem + ADR-004 outcome note + risk-table update: gitoxide has no
HTTP(S) push, so v0.1 falls back to libgit2; the on-device libgit2 <->
mbedtls cross-compile is the next gate.
2026-07-05 19:38:48 +02:00
Julien Calixte
0b52f34940 docs(postmortems): record Spike 3 SD CMD59 card incompatibility
New docs/postmortems/ folder. The bench card (133 GB SDXC) rejects CMD59
(SPI-mode CRC) as illegal; CMD0/CMD8 succeed, so wiring and firmware are
proven and the fix is a compliant card. Captures the root cause, the
keep-CRC-required decision, and the reusable findings (EPD bus lock, LFN
requirement, R1-byte diagnostic) before the work pauses for hardware.
2026-07-05 18:16:49 +02:00
Julien Calixte
f77f6697d1 docs(roadmap): add v0.2.5 international input release
US-International dead-key accents, slotted after navigation without
renumbering later versions so ADR/qfd/README anchors stay valid. Also
adds a UTF-8-correct buffer groundwork bullet to v0.2.
2026-07-05 17:57:35 +02:00
Julien Calixte
b5274b6e68 docs: authorize file delete in v0.5 scope
Spike 14 relies on file deletion, which the roadmap did not list. Add it
explicitly, flagging that a Tracked-file removal must reach the next
Publish's staged set (git rm / add -A, not plain git add .).
2026-07-05 17:27:41 +02:00
Julien Calixte
ac56bc4aec docs: extract rendering spikes into docs/spikes.md
Spikes 8-14 are a cross-release display/UX bench batch, not part of the
v0.1 integration gate — only 8 and 9 feed v0.1. Move them out of the v0.1
technical doc into their own log (with a feeds-table and dependency notes),
leaving a pointer behind; link it from the README layout map.
2026-07-05 17:27:34 +02:00
Julien Calixte
a848c05afa docs: redesign v0.1 screen as side panel + writing column
Replace the header/status-bar layout with a full-height writing column
plus an always-visible side panel holding all metadata. Canonicalize the
new region vocabulary in CONTEXT.md (Writing column, Side panel) and retire
header / status line / edit area as terms-to-avoid.

Consequent sweeps: rewrite the Error UX section in side-panel terms and
give keyboard-disconnect a home (⌨ ✗, disconnect-only); drop the "line N"
readout; reconcile the render module ops and region shadow; sweep the
status-line/edit-area wording across the technical, roadmap, qfd, notes,
README, and ADR-003 docs (incl. the ~11→~13 line-count figure).
2026-07-05 17:27:25 +02:00
Julien Calixte
d3fd6f6ed1 fix(docs): open v0.1 working file from /sd/repo not /sd/local
The product doc opened notes.md from /sd/local, the permanently-private
scope where Publish is unavailable — contradicting the headline Ctrl-G
flow and every other doc. Point it at the Tracked working copy.
2026-07-05 17:26:00 +02:00
Julien Calixte
801860fafe docs(roadmap): brand v0.1 boot splash as Typoena 2026-05-21 00:36:36 +02:00
Julien Calixte
43eead0e23 docs(quality-house): drop reMarkable W1 perception 2→1
Latency is the dominant signal for W1 (sub-second response to typing)
and on a typing-focused device the reMarkable 2 + Type Folio's e-ink
delay disqualifies a 2. Updates the TikZ perception array, the table
row + rationale, and the totals narrative (reMarkable 45 → 44, ranking
unchanged).
2026-05-19 18:44:06 +02:00
Julien Calixte
572c83095b docs(quality-house): sync empty chassis to 14x14 after H14 retirement 2026-05-19 14:55:13 +02:00
Julien Calixte
db61a83f06 fix(qfd): correct §4 roof matrix size and glyph convention
Two stale bits in §4's preamble. (a) "15×15 roof matrix" still
referenced H14's pre-retirement column count — corrected to 14×14.
(b) The symbol legend named classical QFD glyphs (◎ ○ × ⊗) but
quality-house.md's roof actually renders ASCII (++ + − −−). Both
listings now lead with the ASCII glyphs that match the source of
truth, with classical equivalents kept in parens.
2026-05-19 14:52:43 +02:00
Julien Calixte
6dff2315c8 fix(quality-house): correct H10-H15 roof coord after H14 retirement
The H10-H15 mild conflict node still pointed at C-10-15 (H15's
pre-retirement column). H14's removal renumbered H15 to column 14,
so the roof coordinate becomes C-10-14. Missed in the earlier
sweep — comment line already says "H10-H15" so the intent was
unchanged, only the cell coord was stale.
2026-05-19 14:51:17 +02:00
Julien Calixte
b85bb27a9b docs(qfd): introduce Functions layer and GLOSSARY.md ontology
The doc previously conflated functions (transformations the device
performs) with characteristics (measurable attributes). Surfacing
Functions as their own ontology layer makes HOW names — which pack
a function reference plus an attribute — readable without function
definitions staying implicit.

- new GLOSSARY.md at root: 5-layer ontology stack (WHAT / Function /
  Characteristic / Metric+Unit / Target), peer to CONTEXT.md
  (device-specific vocabulary)
- qfd.md §2 opens with a Functions inventory (Type, Save, Publish,
  Recover, Boot, Provision); Render and Reconnect noted as
  sub-functions; Provision flagged as build-time-only in v0.1
- H1 "Keypress → glyph latency" → "Type latency (keypress → glyph)"
- H4 "Cold boot → cursor ready" → "Boot latency (cold)"
  (the arrow transformation moves to the Functions inventory; the
  parenthetical keeps the residual qualifier)
- cascade through §3 priority list, §6 critical-performance-budget
  rows for H1/H4, §8 inconsistencies, and quality-house.md TikZ
  column labels

Matrix cell strengths held; no Σ recompute.
2026-05-19 14:45:12 +02:00
Julien Calixte
8a223e7837 docs(qfd): retire H14 from HOWs
Module count / public-API surface is a static source-code property,
not a runtime function nor an artifact characteristic like H10 binary
or H15 build time. It was a refactor-leverage proxy for W9 — proxies
of proxies belong in the ADRs and the component matrix, not in the
HoQ. Removed from §2, §5 matrix, §4 conflict list, and the C12
overloaded-list mention; basement Σ total drops 1674 → 1557 so rel%
recomputed in quality-house.md.
2026-05-19 11:46:07 +02:00
Julien Calixte
2aa194bdb9 fix(quality-house): drop tex fences shikiji can't load 2026-05-18 15:26:56 +02:00
Julien Calixte
7e2d6eddc5 docs(quality-house): add empty training chassis 2026-05-18 15:06:27 +02:00
Julien Calixte
e79101d841 docs(notes): add setup context before the Ctrl-G concern 2026-05-17 13:01:44 +02:00
Julien Calixte
bf36c01502 docs(notes): trim Ctrl-G essay to its core (question + apocalypse)
The post's job is to land the timing question and the apocalypse
reframe — Wi-Fi rationale, optimisation diversions, and generalising
reflections were overexpansion. Cut.
2026-05-17 13:00:31 +02:00
Julien Calixte
b7a0aa7c5c docs: add "Durability before delivery" principle to Publish UX
The user-meaningful moment of a Publish is when the local commit
lands (~0.2 s), not when the push completes (~5–10 s). New principle
in CONTEXT.md, instantiated in v0.1 product doc with staged status
transitions and a corrected on-demand Wi-Fi status example.
2026-05-17 12:54:09 +02:00
Julien Calixte
011f79f134 docs(notes): add Ctrl-G perceived-latency essay
Long-form rationale for the "durability before delivery" framing —
why a 10-second network operation in response to a single keystroke
doesn't have to feel slow. Establishes docs/notes/ as the home for
shareable design rationale (not authoritative spec).
2026-05-17 12:54:04 +02:00
Julien Calixte
d5f22c697c docs(v0.1-tech): switch Wi-Fi to on-demand model, off by default
Always-on station mode burns ~410 mAh/day on the radio alone; on-demand
drops that to ~25 mAh/day at 10 Publishes/day. Radio comes up on Ctrl-G
with a 10 s association timeout, holds for a ~90 s grace window after
each Publish, then tears down. SNTP cached up to 24 h to avoid
re-querying every Publish.

Also removes stale SoftAP provisioning bullets that contradicted the
"v0.1 has no provisioning module" stance later in the same doc.
2026-05-17 12:38:47 +02:00
Julien Calixte
cbdd6aa197 docs: lock device to one linear branch via Publish-is-sync principle
The user's mental model of Publish is a Google Doc backed by git, not a
curated commit log. Branches fall out of scope under that framing; the
device tracks one stream of work on whichever branch the remote was
cloned on, and never switches. Drops :Gbranch from v0.7 to match.
2026-05-17 12:38:36 +02:00
Julien Calixte
ffcd49588a style: apply oxfmt to docs (table padding, italic style) 2026-05-17 01:30:36 +02:00
Julien Calixte
1e1e59e716 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.
2026-05-17 01:29:53 +02:00
Julien Calixte
b0169690c4 docs(quality-house): drop reMarkable W1 to 2 after firsthand test
reMarkable 2 with Type Folio tested less responsive than Freewrite Smart
Typewriter (Sailfish). With Smart at 3, reMarkable drops one notch to 2.
Total: reMarkable 42 → 41, now tied with Smart at 41.
2026-05-16 14:38:01 +02:00
Julien Calixte
059da87695 docs(quality-house): extend Sailfish rescore to Smart Typewriter
Sailfish ships on Smart Typewriter Gen 3 as well as Traveler, so the
same firmware-driven bumps apply: W1 2→3 (Smart still trails Traveler
by one notch on panel size), W5 3→4, W9 1→2. Smart total 38 → 41.
2026-05-16 14:27:59 +02:00
Julien Calixte
e152237477 docs: rename project to Typoena
Project gets a proper name. Replaces "Ours" / "Our product" placeholders
in the QFD perception zone and the working title "typewriter" in
README/CONTEXT headers and the npm name. "Typewriter" the category
noun (the writing-machine concept) stays unchanged — Typoena is the
brand, typewriter is the category. SoftAP SSID typewriter-setup and the
repo directory are deliberately left as-is.
2026-05-16 14:21:32 +02:00
Julien Calixte
52845849c1 docs(quality-house): note Freewrite Sailfish firmware and rescore W1/W5/W9
The Sailfish firmware (2025-11-19) rewrote the Freewrite Traveler OS in
Rust, cut keystroke latency 40–100 %, and trimmed power draw -30 %
typing / -50 % idle. Three rows are bumped: W1 3→4, W5 3→4, W9 1→2.
Freewrite now ties reMarkable at 42; Pomera still #2 at 45.
2026-05-16 14:17:52 +02:00
Julien Calixte
9573c08bad fix(quality-house): shrink Freewrite Smart marker so Traveler shows through 2026-05-16 12:53:29 +02:00
Julien Calixte
5e476a9651 docs(quality-house): add Freewrite Smart Typewriter to perception zone 2026-05-16 11:21:29 +02:00
Julien Calixte
8b161cc808 fix(quality-house): raise header height so HOW labels clear the roof 2026-05-16 01:27:02 +02:00
Julien Calixte
07bb0edcba fix(quality-house): compute WHAT-label width via pgfmath
text width={\qfdWhatW - 0.2}cm doesn't parse — the braces don't
evaluate the arithmetic, so TikZ sees "4.6 - 0.2cm" which isn't a
valid dimension. Pre-compute the narrower width with
\pgfmathsetmacro and reference the resulting macro instead.
2026-05-16 01:20:03 +02:00
Julien Calixte
3a4bd3db18 fix(quality-house): keep WHAT labels inside their column
Text box anchored at qfdLeftEdge + 0.1 with width qfdWhatW overflowed
0.1 cm past the cell's right edge into the Weight column, clipping
trailing words like "the", "lag,", "hob-". Shrink the box by 0.2 cm
so it has 0.1 cm clearance on both sides.
2026-05-16 01:05:17 +02:00
Julien Calixte
1aa1d0e3cf docs(roadmap): clarify hybrid line-number behaviour for v0.2
Spell out the Normal-vs-Insert distinction (relative with current line
absolute / absolute everywhere) so it's clear the gutter behaves like
Neovim's number+relativenumber combo, not flat absolute numbering.
2026-05-16 00:40:07 +02:00
Julien Calixte
3c825d8612 feat(quality-house): connect perception markers with profile lines
Each product now gets a profile line across all WHATs using the same
colour and dash pattern its legend entry already advertises, so the
shape of each competitor's strengths/weaknesses is readable at a glance
instead of having to mentally connect the dots.
2026-05-16 00:39:50 +02:00
Julien Calixte
852b7d8de0 fix(quality-house): give HOW labels and perception title room to breathe
Raise the header zone (qfdHdrH 3.2 → 4.2) so rotated HOW labels stop
crossing into the roof diamond grid, and wrap the perception title onto
two lines via text width so it stays inside its zone instead of bleeding
left over the H14/H15 column labels.
2026-05-16 00:32:35 +02:00
Julien Calixte
c716bdb379 fix: save to local for the mvp 0.1 2026-05-16 00:28:53 +02:00
Julien Calixte
c702ba83d8 docs(qfd,quality-house): make quality-house.md own §3 matrix and §4 roof
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.
2026-05-16 00:23:15 +02:00
Julien Calixte
32c40cd7e6 docs(quality-house): colour perception markers for overlap legibility 2026-05-16 00:12:24 +02:00
Julien Calixte
4ab4ec1ebc docs(roadmap): link to qfd.md from intro 2026-05-16 00:06:01 +02:00
Julien Calixte
d5277a8a53 docs(quality-house): add TikZ rendering with competitor benchmark
Renders qfd.md §1-§4 as a classical House of Quality with 13 WHATs x 15
HOWs, roof correlations, and a perception zone scoring reMarkable 2,
Freewrite Traveler, and Pomera DM250 against the v0.1 target. Scores are
guessed, not measured; rationale and caveats are in the doc.
2026-05-16 00:05:56 +02:00
Julien Calixte
e53be5062d docs(qfd): switch roof symbols to classical QFD single-char set 2026-05-15 00:09:28 +02:00
Julien Calixte
58932899db docs(qfd): reframe WHATs as outcomes, reconcile §3/§6 priorities 2026-05-14 23:28:46 +02:00
Julien Calixte
88cd08db39 docs(qfd): add font WHATs, tighten H15, fix Σ row arithmetic 2026-05-14 22:08:53 +02:00
Julien Calixte
76db470da2 docs(qfd): reframe ADR-003 tradeoff row around medium choice 2026-05-14 21:54:18 +02:00
Julien Calixte
9a167a25fb docs(v0.1-product): document e-ink scroll cadence in screen layout
Pulls the scattered refresh-strategy facts (1-in-20 ghost-flush, defer to
idle ≥ 1 s, full refresh on Ctrl-S/Ctrl-G) into one user-facing paragraph
so future readers know what scroll actually looks like on this panel and
the periodic ~1 s flash is documented intent, not a bug to chase.
2026-05-14 21:49:08 +02:00
Julien Calixte
a63d2fcb1e docs(adr): reframe ADR-003 as display medium decision
The old ADR documented the specific panel choice (GDEY0579T93 + DESPI-c579)
as if it were a freshly weighed option, but the hardware was already on
hand — the real architectural decision was choosing the medium (e-ink over
FSTN graphical / Sharp Memory LCD / OLED-TFT). Rewrite the ADR around the
medium with the panel as instantiation, note the Freewrite Alpha (2023)
data point as honest expectation-setting, and propagate the anchor /
narrative changes through qfd.md, v0.1-mvp-product.md, and README.md.
2026-05-14 21:49:01 +02:00
Julien Calixte
1d746ed628 docs(roadmap): promote theme/font-size to v1.0, drop spell-check
Move light/dark theme from v1.x stretch into v1.0 Polish as a
runtime-switchable, persisted setting, and extend font selection to
cover adjustable font size with the same persistence. Drop spell-check
from the stretch list — no longer in scope.
2026-05-14 21:05:12 +02:00
Julien Calixte
47eecdc058 docs(qfd): crosslink ADR mentions with reference-style links
Convert every `ADR-NNN` mention in qfd.md to a `[ADR-NNN]` shortcut
reference and add the link definitions at the bottom of the file, so
each ADR mention navigates to the matching adr.md section.
2026-05-14 20:52:41 +02:00