1.0 beta release readiness #41

Closed
opened 2026-08-03 22:41:29 +00:00 by TheAnachronism · 1 comment

Destination

A docs/ release-readiness markdown that defines 1.0 beta as sideload-to-friends ready — covering the product polish/bug bar, engineering maturity bar, and sideload packaging minimum — with other MVP non-goals staying deferred. Planning-only; implementation is a later handoff. Destination artifact: docs/1.0-beta-readiness.md (assembled).

Notes

  • Domain: Flutter Android Tiny Tiny RSS client. Orient with CONTEXT.md, docs/mvp-spec.md, and docs/adr/ before deciding.
  • Skills: /grilling + /domain-modeling for HITL tickets; /research for AFK fact-finding. Reach for architecture skills only when an architecture-health ticket calls for them.
  • Standing preference: plan, don't do — lock criteria and the readiness definition; do not implement polish, CI, or packaging in this map. Assembling docs/1.0-beta-readiness.md is the map destination (allowed; done).
  • Standing preference: avoid “friend” in user-facing / install / privacy / README prose — prefer installer, user, or sideload tester. Ticket titles on this map may still say “friends”; the shipped docs must not.
  • Known packaging facts: beta must move applicationId/namespace to dev.theanachronism.ttrssviewer (today still dev.anachronis.tt_rss_viewer); display name tt-rss Viewer; packaging workflow must retarget to beta/* tags (today still alpha/*) with tag-semver --build-name, epoch --build-number, asset tt-rss-viewer-beta-<semver>.apk, prerelease=true; README is empty; unit tests already exist under test/; no PR CI workflow yet; alpha still signs with runner debug keystore (to be replaced per Signing and update trust).
  • Prefer glossary language (Account, List hub, Drawer tree, Reader, Mark-read mode, etc.).
  • Readiness handoff skeleton: docs/1.0-beta-readiness.md — Goal → Non-goals → polish / eng / packaging bars (must-line + why) → Acceptance (happy path + all musts). Known-issues inventory lives in the polish bar.

Decisions so far

  • Readiness markdown structuredocs/1.0-beta-readiness.md; Goal → Non-goals → three bars → Acceptance; must-line + why; known-issues inventory inside polish bar.
  • Test landscape snapshot — 34 unit tests; strong domain/API/controllers; gaps in UI/theme/url_launcher/ReaderVideo/embeds/integration — see docs/research/test-landscape-snapshot.md on research/test-landscape-snapshot.
  • Quality-gate inventory — local analysis/test/release-build primitives exist, but only alpha/* tag packaging is automated; no PR or pre-tag CI gates — see docs/research/quality-gate-inventory.md on research/quality-gate-inventory.
  • Alpha APK signing reality — Alpha release-mode APKs use the runner's debug keystore (observed v2-only); update-in-place works only while that undeclared key persists, so clean/different runners can force friends to uninstall — see docs/research/alpha-apk-signing-reality.md on research/alpha-apk-signing-reality.
  • Product polish severity bar — Blocker / Document / Ignore; Blocker = core loop (incl. Mark-read + Unread correctness) or safety, even with workaround; Document = likely + surprising; Ignore = cosmetic/rare/MVP non-goal.
  • Seed known-issues inventory — 22-item MVP audit seed (bugs/incomplete, UX debt, by-design tagged); severity deferred — see docs/research/1.0-beta-known-issues-seed.md on research/1.0-beta-known-issues-seed.
  • Beta-blocking known issues — Blockers: Fresh (−3) unread delta + List/Drawer sid re-login; Document: #2/#5/#6/#9/#10; Ignore: rest incl. by-design — see docs/research/1.0-beta-known-issues-classified.md on research/1.0-beta-known-issues-classified.
  • CI quality gates for beta — PR: analyze+test; main/pre-tag: release APK build; tag workflow packaging-only; no format/lint/coverage/integration musts.
  • Test expectations for beta — Green suite + Blocker-fix regression tests (best seam, prefer unit/controller); landscape UI/media/integration gaps = debt not blockers; Document/Ignore fix tests not must.
  • Architecture health bar — Must: List/Drawer via withActiveClient (seed #3 seam) + analyze-clean light hygiene; named debt: UI↔repository drift; no FeedTreeSource/Controller collapse/formal audit must.
  • Contributor and user docs bar — Minimal README: one-liner, friend-install pointer, nix+non-nix build, short privacy blurb+link; no CONTRIBUTING/arch tour/glossary/doc-map must.
  • App identity and versioning — Change package id to dev.theanachronism.ttrssviewer; keep display tt-rss Viewer; tag semver→versionName, epoch→versionCode; APK stem tt-rss-viewer-…; channel prefix deferred.
  • Signing and update trust — Dedicated CI release keystore (not debug); v3-capable for future rotation; friends update via Forgejo Releases; plain alpha→beta reinstall note; operator owns key custody/loss risk.
  • Privacy surface for friends — Must-disclose: password+sid on-device re-login + network only to user’s tt-rss; lives in install docs + README blurb/link; no “friend” wording; no formal policy/in-app gate/third-party/analytics musts.
  • Friend install and update docsdocs/install.md: get APK, install, Sign-in/API tip, update via Releases, privacy list, alpha→beta reinstall; channel-agnostic; no “friend” wording / screenshots / known-issues section.
  • Release channel for beta — Tags beta/<semver>; prerelease=true; retarget packaging workflow to beta/* only; asset tt-rss-viewer-beta-<semver>.apk; install docs name beta (+ alpha→beta reinstall note only).
  • Assemble 1.0 beta readiness doc — Wrote docs/1.0-beta-readiness.md from locked decisions; Linux left open for its ticket; no implement of polish/CI/packaging.
  • Post-cut playtest feedback path — Pre-cut: issues always; readiness edits only for Blockers / known-issues inventory; eng/pkg must changes reopen criteria. Post-cut: freeze readiness; issues only.
  • Linux desktop release target for beta — Non-release target: no Linux build/packaging/CI/install-docs must; readiness Non-goal updated; local linux run ok for contributors only.

Not yet specified

(none — route clear; destination artifact assembled)

Out of scope

  • Implementing polish fixes, CI, packaging, or shipping the beta APK (later implement effort).
  • Offline reading, feed/category management, server search, push notifications, light mode / theme switcher, advanced Account auth options (MVP non-goals, stay deferred).
  • Play Store / F-Droid public listing as a beta gate (sideload-to-friends, not public store).
  • Linux desktop as a 1.0 beta release target (see Linux desktop release target for beta).
## Destination A `docs/` release-readiness markdown that defines **1.0 beta** as **sideload-to-friends ready** — covering the product polish/bug bar, engineering maturity bar, and sideload packaging minimum — with other MVP non-goals staying deferred. Planning-only; implementation is a later handoff. **Destination artifact:** `docs/1.0-beta-readiness.md` (assembled). ## Notes - Domain: Flutter Android Tiny Tiny RSS client. Orient with `CONTEXT.md`, `docs/mvp-spec.md`, and `docs/adr/` before deciding. - Skills: `/grilling` + `/domain-modeling` for HITL tickets; `/research` for AFK fact-finding. Reach for architecture skills only when an architecture-health ticket calls for them. - Standing preference: **plan, don't do** — lock criteria and the readiness definition; do not implement polish, CI, or packaging in this map. Assembling `docs/1.0-beta-readiness.md` is the map destination (allowed; done). - Standing preference: **avoid “friend” in user-facing / install / privacy / README prose** — prefer installer, user, or sideload tester. Ticket titles on this map may still say “friends”; the shipped docs must not. - Known packaging facts: beta must move `applicationId`/`namespace` to `dev.theanachronism.ttrssviewer` (today still `dev.anachronis.tt_rss_viewer`); display name `tt-rss Viewer`; packaging workflow must retarget to `beta/*` tags (today still `alpha/*`) with tag-semver `--build-name`, epoch `--build-number`, asset `tt-rss-viewer-beta-<semver>.apk`, prerelease=true; README is empty; unit tests already exist under `test/`; no PR CI workflow yet; alpha still signs with runner debug keystore (to be replaced per Signing and update trust). - Prefer glossary language (Account, List hub, Drawer tree, Reader, Mark-read mode, etc.). - Readiness handoff skeleton: `docs/1.0-beta-readiness.md` — Goal → Non-goals → polish / eng / packaging bars (must-line + why) → Acceptance (happy path + all musts). Known-issues inventory lives in the polish bar. ## Decisions so far - [Readiness markdown structure](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/42) — `docs/1.0-beta-readiness.md`; Goal → Non-goals → three bars → Acceptance; must-line + why; known-issues inventory inside polish bar. - [Test landscape snapshot](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/48) — 34 unit tests; strong domain/API/controllers; gaps in UI/theme/url_launcher/ReaderVideo/embeds/integration — see `docs/research/test-landscape-snapshot.md` on `research/test-landscape-snapshot`. - [Quality-gate inventory](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/46) — local analysis/test/release-build primitives exist, but only `alpha/*` tag packaging is automated; no PR or pre-tag CI gates — see [`docs/research/quality-gate-inventory.md`](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/src/branch/research/quality-gate-inventory/docs/research/quality-gate-inventory.md) on `research/quality-gate-inventory`. - [Alpha APK signing reality](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/53) — Alpha release-mode APKs use the runner's debug keystore (observed v2-only); update-in-place works only while that undeclared key persists, so clean/different runners can force friends to uninstall — see [`docs/research/alpha-apk-signing-reality.md`](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/src/branch/research/alpha-apk-signing-reality/docs/research/alpha-apk-signing-reality.md) on `research/alpha-apk-signing-reality`. - [Product polish severity bar](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/43) — Blocker / Document / Ignore; Blocker = core loop (incl. Mark-read + Unread correctness) or safety, even with workaround; Document = likely + surprising; Ignore = cosmetic/rare/MVP non-goal. - [Seed known-issues inventory](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/44) — 22-item MVP audit seed (bugs/incomplete, UX debt, by-design tagged); severity deferred — see [`docs/research/1.0-beta-known-issues-seed.md`](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/src/branch/research/1.0-beta-known-issues-seed/docs/research/1.0-beta-known-issues-seed.md) on `research/1.0-beta-known-issues-seed`. - [Beta-blocking known issues](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/45) — Blockers: Fresh (−3) unread delta + List/Drawer sid re-login; Document: #2/#5/#6/#9/#10; Ignore: rest incl. by-design — see [`docs/research/1.0-beta-known-issues-classified.md`](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/src/branch/research/1.0-beta-known-issues-classified/docs/research/1.0-beta-known-issues-classified.md) on `research/1.0-beta-known-issues-classified`. - [CI quality gates for beta](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/47) — PR: analyze+test; main/pre-tag: release APK build; tag workflow packaging-only; no format/lint/coverage/integration musts. - [Test expectations for beta](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/49) — Green suite + Blocker-fix regression tests (best seam, prefer unit/controller); landscape UI/media/integration gaps = debt not blockers; Document/Ignore fix tests not must. - [Architecture health bar](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/50) — Must: List/Drawer via `withActiveClient` (seed #3 seam) + analyze-clean light hygiene; named debt: UI↔repository drift; no FeedTreeSource/Controller collapse/formal audit must. - [Contributor and user docs bar](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/51) — Minimal README: one-liner, friend-install pointer, nix+non-nix build, short privacy blurb+link; no CONTRIBUTING/arch tour/glossary/doc-map must. - [App identity and versioning](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/52) — Change package id to `dev.theanachronism.ttrssviewer`; keep display `tt-rss Viewer`; tag semver→versionName, epoch→versionCode; APK stem `tt-rss-viewer-…`; channel prefix deferred. - [Signing and update trust](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/54) — Dedicated CI release keystore (not debug); v3-capable for future rotation; friends update via Forgejo Releases; plain alpha→beta reinstall note; operator owns key custody/loss risk. - [Privacy surface for friends](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/55) — Must-disclose: password+sid on-device re-login + network only to user’s tt-rss; lives in install docs + README blurb/link; no “friend” wording; no formal policy/in-app gate/third-party/analytics musts. - [Friend install and update docs](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/56) — `docs/install.md`: get APK, install, Sign-in/API tip, update via Releases, privacy list, alpha→beta reinstall; channel-agnostic; no “friend” wording / screenshots / known-issues section. - [Release channel for beta](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/57) — Tags `beta/<semver>`; prerelease=true; retarget packaging workflow to beta/* only; asset `tt-rss-viewer-beta-<semver>.apk`; install docs name beta (+ alpha→beta reinstall note only). - [Assemble 1.0 beta readiness doc](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/58) — Wrote `docs/1.0-beta-readiness.md` from locked decisions; Linux left open for its ticket; no implement of polish/CI/packaging. - [Post-cut playtest feedback path](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/59) — Pre-cut: issues always; readiness edits only for Blockers / known-issues inventory; eng/pkg must changes reopen criteria. Post-cut: freeze readiness; issues only. - [Linux desktop release target for beta](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/60) — Non-release target: no Linux build/packaging/CI/install-docs must; readiness Non-goal updated; local linux run ok for contributors only. ## Not yet specified _(none — route clear; destination artifact assembled)_ ## Out of scope - Implementing polish fixes, CI, packaging, or shipping the beta APK (later implement effort). - Offline reading, feed/category management, server search, push notifications, light mode / theme switcher, advanced Account auth options (MVP non-goals, stay deferred). - Play Store / F-Droid public listing as a beta gate (sideload-to-friends, not public store). - Linux desktop as a 1.0 beta release target (see [Linux desktop release target for beta](https://git.anachronis.dev/TheAnachronism/tt-rss-viewer/issues/60)).
Author
Owner

Map complete

All decision tickets are closed. Destination artifact: docs/1.0-beta-readiness.md.

The way is clear — implement polish, CI, packaging, README/docs/install.md, and cut beta/<semver> as a later handoff, not this map.

## Map complete All decision tickets are closed. Destination artifact: [`docs/1.0-beta-readiness.md`](../src/branch/master/docs/1.0-beta-readiness.md). The way is clear — implement polish, CI, packaging, README/`docs/install.md`, and cut `beta/<semver>` as a **later handoff**, not this map.
Sign in to join this conversation.
No description provided.