Team, process, pipeline design and the 2026-09-03 readiness review #74

Merged
robert merged 3 commits from process/team-and-pipeline into main 2026-09-03 22:00:10 +02:00
Owner

What this is

Before the first line of code: the team, the process, and a verification pass over the entire project definition. Every finding is a checked fact — a package probed, a build timed, an experiment run — per D48's rule that only a checked fact reopens a document. Fourteen decisions (D49–D63) came out of it.

The team (docs/TEAM.md, .claude/agents/)

Seven personas versioned with the code: Vela (watch/C), Kestrel (Android), Meridian (navigation), Forge (build/CI), Sentinel (QA/gates), Atlas (product/tracker), Compass (your developer experience). All carry two rules: every claim tagged verified/recalled/reasoned, and D48 respected.

The process (docs/PROCESS.md, docs/TESTING.md)

The 5-minute requirement is met by decoupling, not speed: every push runs dev-artifact (build + publish, waits for no test) in parallel with the gates. The artifacts are structurally untaggable, so the fast path is not a back door. Measured: .pbw ~60-90 s, .apk ~2 min — 5 minutes is honest for both. Release gates: 15 of them (docs/TESTING.md), including field-currency on both watches and no unfinished thresholds.

What the readiness review found (docs/READINESS.md)

Closed the three biggest unknowns: toolchain solved (2.5 s builds), transport confirmed (PebbleKit 2 on Maven Central, matching the shipping Core app), CI budget measured honest.

Corrected the documents where facts demanded it:

  • DESIGN.md digit sizes don't fit their own cells — the default page overflows with its default field (D55)
  • BRouter emits no street names at any tier — FR-N4 becomes where-available (D58)
  • The whole-route 20 m gate was unachievable even in the ideal case — per-leg Frechet with a contiguous-run clause replaces it (D60)
  • Tier-2 Valhalla down and terms unviable — user-supplied endpoint, no default (D61)
  • The tracker had zero dependency edges while claiming otherwise — 91-edge graph now entered; the real critical path is #14/#2/#24, not the labelled blockers (D57)
  • No SDK mechanism detects HRM presence — the physical-gabbro probe is issue #5's first checkbox (D56)

Tracker updated: #5 (both watches, D56 probe), #6 (criteria rewritten from measurement — the spike is now one day, blocked on fixtures not engineering), #9, #27, #28, #63, #67 (pipeline ownership).

After merge

The six roots (#1, #2, #6, #14, #23, #48) are startable. One manual step needs Robert: runner registration in the Forgejo web UI (60 seconds). Then #2 and #14, and the first rideable build follows.

## What this is Before the first line of code: the team, the process, and a verification pass over the entire project definition. Every finding is a **checked fact** — a package probed, a build timed, an experiment run — per D48's rule that only a checked fact reopens a document. Fourteen decisions (D49–D63) came out of it. ## The team (docs/TEAM.md, .claude/agents/) Seven personas versioned with the code: **Vela** (watch/C), **Kestrel** (Android), **Meridian** (navigation), **Forge** (build/CI), **Sentinel** (QA/gates), **Atlas** (product/tracker), **Compass** (your developer experience). All carry two rules: every claim tagged verified/recalled/reasoned, and D48 respected. ## The process (docs/PROCESS.md, docs/TESTING.md) The 5-minute requirement is met by **decoupling, not speed**: every push runs `dev-artifact` (build + publish, waits for no test) in parallel with the gates. The artifacts are structurally untaggable, so the fast path is not a back door. Measured: **.pbw ~60-90 s, .apk ~2 min** — 5 minutes is honest for both. Release gates: 15 of them (docs/TESTING.md), including field-currency on both watches and no unfinished thresholds. ## What the readiness review found (docs/READINESS.md) **Closed the three biggest unknowns:** toolchain solved (2.5 s builds), transport confirmed (PebbleKit 2 on Maven Central, matching the shipping Core app), CI budget measured honest. **Corrected the documents where facts demanded it:** - DESIGN.md digit sizes don't fit their own cells — the default page overflows with its default field (D55) - BRouter emits no street names at any tier — FR-N4 becomes where-available (D58) - The whole-route 20 m gate was unachievable even in the ideal case — per-leg Frechet with a contiguous-run clause replaces it (D60) - Tier-2 Valhalla down and terms unviable — user-supplied endpoint, no default (D61) - The tracker had zero dependency edges while claiming otherwise — 91-edge graph now entered; the real critical path is #14/#2/#24, not the labelled blockers (D57) - No SDK mechanism detects HRM presence — the physical-gabbro probe is issue #5's first checkbox (D56) **Tracker updated:** #5 (both watches, D56 probe), #6 (criteria rewritten from measurement — the spike is now one day, blocked on fixtures not engineering), #9, #27, #28, #63, #67 (pipeline ownership). ## After merge The six roots (#1, #2, #6, #14, #23, #48) are startable. One manual step needs Robert: runner registration in the Forgejo web UI (60 seconds). Then #2 and #14, and the first rideable build follows.
Seven AI personas in .claude/agents/ with a charter (TEAM.md), the
development process with two decoupled CI lanes (PROCESS.md), and the
full test strategy with the 15 release gates (TESTING.md).

The readiness reviews of 2026-09-03 verified, rather than argued:

- D54: toolchain solved — pebble-tool 5.0.40, 2.5 s three-platform build
- D55: DESIGN.md digit sizes don't fit their own cells; fit-to-box fix
- D56: no SDK mechanism exists to detect HRM presence; physical-gabbro
  probe required before any platform-define branching
- D49-D52: PebbleKit Android 2 confirmed on Maven Central and against
  the shipping Core app manifest; 4.0.1 fallback broken by API 34
  registerReceiver, not by Pebble; auto-accept must be disabled for
  NFR-S8; companionApp block and datalogging channel recorded
- D53: background location probably unnecessary (FGS keeps app in use)
- D57: critical path is #14/#2/#24, not the labelled blockers; #4 gates
  8 and #6 gates 3 by reachability, not 'roughly forty'

Also fixed: README/REQUIREMENTS claimed the tracker carried dependency
edges it did not have (zero existed); a 91-edge graph derived from all
73 issue bodies is now entered in the tracker. FR-N19/N20/N10/N18
pointed at missing or wrong issues. Issues #5, #9 and #67 updated:
both-watch scope and the D56 probe (#5), i18n moved out of Phase 1
(#9), pipeline ownership incl. runner and artifact delivery (#67).
Meridian ran Spike C's experiment server-side against live BRouter
1.7.10, so these are numbers, not opinions:

- D58: BRouter has no street names at all (tag dictionary has no
  name tag; all nine timodes checked live). FR-N4 becomes
  'where available'
- D59: tier-0 source matrix corrected against live sources: komoot
  strips waypoints too (FR-N12's justification refuted), cycle.travel
  needs TCX not GPX, RWGPS is login-walled with localized sentences
  as cue text, Garmin/Strava unverified
- D60: whole-route 20m fidelity is unachievable even in the ideal
  case (BRouter misses its own output by 27.8m); gate is per-leg
  Fréchet with a contiguous-run clause, via spacing <= 100m
- D61: tier 2 Valhalla cut from Phase 3; user-supplied endpoint
  with no default (the public instance refuses TCP from two networks)
- D62: reference-track mode unreachable over AIDL and not matching;
  Spike C's stale AIDL link, queries-block and raw-track determinism
  hazards; spike is now one day, blocked on fixtures not engineering
- D63: 5-minute budget measured honest for both artifacts (.pbw
  60-90s, .apk ~2min with baked Gradle cache); delivery ends at a
  rolling pre-release with verified anonymous download

Issues #6 (criteria rewritten, cuts recorded), #27 (Fréchet gate),
#28 (Valhalla reshaped), #63 (parser surface) updated.
robert merged commit bd24352659 into main 2026-09-03 22:00:10 +02:00
Sign in to join this conversation.
No description provided.