Commit Graph

105 Commits

Author SHA1 Message Date
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
9d24f6e89e 2026-05-16 00:41:33 2026-05-16 00:41:33 +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
d8060caf19 chore(remanso): widen pageWidth to 600px 2026-05-14 21:05:33 +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
Julien Calixte
22aeb449e3 docs(qfd): align with v0.1 refresh, ADR-010, and CONTEXT.md
- Re-anchor W1..W4 source links to the renumbered v0.1 user stories
  (story 1 "First run" was deleted in the v0.1 refresh).
- W2 now points at ADR-010 and CONTEXT.md as well as the product spec.
- W4 reframed from "first-run setup" to "one-shot provisioning, never
  repeated mid-session" so it covers both the v0.1 build-time path and
  the v0.9 on-device path.
- ADR-005 tradeoff row rewritten: "captive-portal form" was wrong after
  the v0.1 refresh; replaced with the binary-as-secret-store framing.
- New ADR-010 row in the tradeoffs table.
- Read-across notes flag that C12 owns ADR-010's implementation but not
  its UX contract, and that C11 LittleFS is unused in v0.1.
- Section 8 picks up three new cross-doc inconsistencies that were
  spotted and fixed during the refresh (commit-message format mismatch,
  captive-portal vs. solo target user, vocabulary leak resolved by
  CONTEXT.md).
2026-05-14 20:40:30 +02:00
Julien Calixte
7055d01e9d docs: refresh v0.1 spec for gct publish flow and dev-only build-time config
Two coupled changes that emerged from one /deep-design session, both touching
the same v0.1 paragraphs:

(1) Align Ctrl-G with the user's existing gct shell alias: git add . ->
    short-circuit if nothing staged -> commit with an ISO-8601 timestamp (no
    wip prefix) -> push -> on push failure, git pull --no-edit then retry.
    Atomic from the user's view. Recorded as ADR-010. The previously-planned
    v0.7 commit-message-prompt item is removed; it contradicts the
    gct/timestamp model.

(2) Replace the v0.1 captive-portal first-run with build-time env-var
    config: build.rs reads TW_* env vars and embeds them as constants. No
    NVS read, no LittleFS mount, no AP mode, no HTTP server. The v0.1
    target user is the dev themselves; the first release usable by non-dev
    users is v0.9, and the v0.9 settings entry is reframed accordingly.
    ADR-005 updated to describe the build-time path and the v0.9 migration.

The two changes share files because the v0.1 spec is one interlocked
document; splitting further would require line-level surgery without
improving auditability.
2026-05-14 20:40:09 +02:00
Julien Calixte
668478aa40 docs: add CONTEXT.md glossary and cross-link from README + ADR log
CONTEXT.md fixes the project's user-facing vocabulary (Tracked, Local,
Save, Publish) and the principles that fall out of those definitions
(the device is a writing tool, not a sync engine; it does no git work
the user did not explicitly request). README's file-scopes section and
repo-layout listing point at the new glossary so a first-time reader
lands on canonical definitions, and the ADR log carries an inbound link
so future ADRs can rely on the same terms.
2026-05-14 20:37:43 +02:00
Julien Calixte
ae555e40a4 docs(adr): split C / C++ option into two ADR-001 rows
The original row collapsed C and C++ together, but they trade differently
on the ESP-IDF target (RAII, generics, binary size, exception story). Split
them so the language-and-runtime decision actually reflects what was
considered.
2026-05-14 20:36:59 +02:00
Julien Calixte
a233798431 2026-05-14 13:15:47 2026-05-14 13:15:47 +02:00
Julien Calixte
00c1f7ced4 chore(zed): add project settings with oxc and oxfmt format-on-save 2026-05-14 13:08:09 +02:00
Julien Calixte
a399d06864 style(docs): apply oxfmt to README and v0.1 docs
Aligns markdown table columns and converts *emphasis* to _emphasis_.
No content changes.
2026-05-14 12:56:13 +02:00
Julien Calixte
23ccd5d43e chore: add oxfmt fmt and fmt:check scripts 2026-05-14 12:56:07 +02:00
Julien Calixte
4eefd2c244 docs(qfd): convert requirement sources to clickable cross-references
The customer-requirements (WHATs) Source column was plain text ("product
§UX", "README v0.8"). Replace with anchored Markdown links into the
product spec, README, and roadmap so each requirement's provenance is
one click away.
2026-05-14 12:50:50 +02:00
Julien Calixte
04a323da1c docs(v0.1): link technical risk register to qfd unresolved-conflicts section 2026-05-14 12:50:34 +02:00
Julien Calixte
90e98d2375 docs(v0.1): cross-link technical doc to ADRs and qfd
Adds a companion-docs header and inline ADR jumps on every load-bearing
choice (ADR-001 runtime, ADR-002 UI, ADR-004 git kill-switch, ADR-006
concurrency, ADR-007 storage, ADR-009 USB-host gate). Render module
also points at qfd §3 to anchor "why these functions rank top."
2026-05-14 12:50:12 +02:00
Julien Calixte
2a2c268010 docs(v0.1): cross-link product spec to companion docs and ADRs
Adds a "Companion docs" header (README, technical, ADR, QFD, roadmap)
and inline pointers from the auth section to ADR-005, the screen
layout to ADR-003, and the acceptance criteria block to qfd §6 — so
each "what must this do" claim has a one-click jump to its rationale
or target.
2026-05-14 12:49:52 +02:00
Julien Calixte
05f87efea4 docs(adr): cross-link ADR-007/008/009 to v0.1 docs and roadmap
Adds inline pointers from ADR-007 (storage) to the v0.1 technical
persistence + file-layout sections, from ADR-008 (power) to the v0.1
out-of-scope and roadmap v0.8, and from ADR-009 (keyboard) to spike 4
in the v0.1 technical bring-up order.
2026-05-14 12:49:47 +02:00
Julien Calixte
baf1407785 docs(readme): link software stack section to qfd.md 2026-05-14 12:49:17 +02:00
Julien Calixte
f44da5892a docs(readme): list pnpm + oxfmt toolchain in repo layout 2026-05-14 12:49:04 +02:00
Julien Calixte
efc694eb9b docs(adr): cross-link ADRs to README, roadmap, qfd, and v0.1 docs
Adds a "Related docs" header at the top of adr.md and inline "See also"
pointers from ADR-001 (binary/build tradeoffs → qfd §7) and ADR-002
(render module → v0.1 technical, top H1/H2 functions → qfd §3). Makes
the design-doc set walkable instead of a flat list.
2026-05-14 12:48:45 +02:00
Julien Calixte
e1e456e02d docs(roadmap): add Mermaid Gantt and split version detail into roadmap.md
Macro-plan dates start 2026-06-01 with `after` dependencies between
versions. Per-version checklists move to docs/roadmap.md so the README
stays synthetic.
2026-05-14 12:47:01 +02:00
Julien Calixte
8fb8cce729 docs(qfd): add quality function deployment design doc
Translates user-facing requirements (the WHATs) into engineering
functions (the HOWs) and components, with a House-of-Quality matrix,
roof tradeoffs, function→component mapping (anchored to ADRs), and a
critical performance budget keyed to upcoming spikes. Cross-references
adr.md throughout.
2026-05-14 12:45:18 +02:00
Julien Calixte
56c934e97e docs(adr): correct ADR-006 stack budget to 76 KB
Prior text said "~40 KB of stack space"; the v0.1 technical design's
task table sums to 76 KB (usb 8 + wifi 8 + ui 16 + render 12 + git 32).
Also widens the std::thread stack-cost note from a flat 8 KB to 8–32 KB
to match the per-task budget. No design change — 76 KB still fits
comfortably in the ESP32-S3's 512 KB internal SRAM.
2026-05-14 12:45:12 +02:00
Julien Calixte
0159f7f6bb chore: add remanso writing-tool config 2026-05-14 12:45:05 +02:00
Julien Calixte
8a44ba50a6 chore: add pnpm + oxfmt for repo formatting
Pins Node 24 via .node-version, declares pnpm 10.32.1 as packageManager
in package.json, and adds oxfmt as a dev dependency with .oxfmtrc.json
(single quotes, no semi, 80 cols). Ignores node_modules.
2026-05-14 12:45:01 +02:00
Julien Calixte
3b24a288ca chore: add .gitignore for Rust and esp-idf artifacts 2026-05-14 12:32:31 +02:00