Skip to content

README leaks code-level internals into user-facing sections — keep the user layer separate from the implementation layer #114

@bepcyc

Description

@bepcyc

Problem

The README mixes the implementation layer into user-facing sections. A non-technical cyclist gets the engineering retelling — issue numbers, spec IDs, internal component names, CI/release plumbing — instead of "what do I get." It reads as built-by-a-megageek-for-megageeks, which repels the actual target reader. The ## For developers section is the right home for tech detail; the leak is everywhere else.

All evidence below is quoted verbatim from the current README on main.

The leaks (quoted)

1. ## Roadmap — the worst offender. It is a dev changelog wearing a user roadmap's clothes. A user does not care about issue numbers, spec IDs, or internal mechanisms:

  • > #98 — VOICE-R2: turn the presentation strip into an allow-list so no internal metric code can ever leak into athlete-facing prose. — spec ID, "presentation strip", "allow-list".
  • > #103 — Scope the slow CI tiers to the change: a docs/text-only PR shouldn't pay the database, e2e, and image-build tax... — pure CI internals; zero user relevance.
  • > #39 — Wire durability ... with \work_above_cp_j` persisted on ingest so the number can be retrieved and cited.work_above_cp_j`, "persisted on ingest".
  • > #87 — Two-layer coach answer: a verifiable evidence layer the grounder reads ... split fail-closed... — "grounder", "fail-closed", "two-layer".
  • > #97 — Make the checkpoint \interrupt_id` stable across pause/resume (a known LangGraph re-run quirk; the fix may be a deterministic id or a documented spec carve-out).interrupt_id`, "LangGraph re-run quirk", "spec carve-out".
  • > #93 — Remove false-confidence tests (including GDPR-erasure tests that never exercise the production erase path)... — test-suite internals.

2. Quick start — honest, but written in engine terms.

  • > ...its connect path is intentionally inert here — it returns \422` until a credential probe is configured — so it will not pull data in the stock OSS container.` — "credential probe", "422", "stock OSS container" at a first-run user.
  • > # Prefer not to build? A released image exists, but note it is the pinned v0.0.1 snapshot, is linux/amd64 only, and may trail these docs: — "pinned snapshot", "may trail these docs" is release-engineering, not user copy.

3. ## How it works — mostly fine, one config-jargon line:

  • > Storage is a single connection string: SQLite by default, or PostgreSQL or MariaDB by changing that one setting... — "connection string" / "that one setting".

Proposed changes

Guiding rule: user-facing sections say what the user gets, in plain words. Issue numbers, spec IDs (VOICE-R2), internal component names (grounder, work_above_cp_j, interrupt_id, "credential probe"), and CI/release plumbing live in the GitHub issues/milestones, CONTRIBUTING, the ## For developers section, and the source — never in the user README.

  1. Rewrite ## Roadmap as user outcomes. Keep the nice codename framing (Banister / Coggan / Seiler + one line on what the release is about). Replace every #NN — <engineering> bullet with at most one plain sentence on what the user will be able to do (e.g. "v0.0.2 — more of the metrics you know, and the coach can cite them"). Drop issue numbers and spec IDs entirely; they already live on the GitHub milestones, which is where a contributor looks.
  2. Plain-language the intervals.icu note. e.g. "Automatic sync from services like intervals.icu isn't available in this build yet — for now, bring your data in by uploading files (above)." No 422, no "credential probe", no "stock OSS container".
  3. Plain-language the released-image note. e.g. "Building from source is recommended and runs on any machine. (A prebuilt x86-only image also exists.)" Drop "pinned snapshot / may trail these docs."
  4. Trim the storage line in How it works to "Runs on SQLite out of the box; point it at PostgreSQL or MariaDB when you outgrow it."
  5. Leave ## For developers as-is — that is the correct place for the stack, the test tiers, and the OpenAPI surface.

Acceptance

A reader who is a cyclist, not an engineer, can read the whole README and never meet an issue number, a spec ID, an internal component name, or a CI/release detail outside ## For developers. Implementation detail is findable (issues, dev docs, source) but not pushed at the user.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions