Instantiates /STANDARDS/RESPONSIBLE-TECH-FRAMEWORK.md. Reading is sensitive — a queer/trans reading history can out someone — so privacy and source-ethics carry the weight here, alongside never corrupting the real libraries. Checklists run in CI from M0; artifacts are committed and regenerated by make verify.
- Worst misuse: the tool leaks or exposes a reading history that reveals someone's identity, or it quietly damages the user's real Calibre/KOReader libraries.
- Mitigations: self-hosted + private; no reading-derived egress; public catalog metadata is fail-closed and explicitly opt-in; strictly read-only, snapshot-first access to source databases.
- "Works as intended" harm: recommendations that mirror gatekept bestseller catalogs, narrowing rather than widening discovery. → Ethical sources + deliberate diverse/small-press surfacing.
- Non-goals: not a public reading profile; not a library editor. Auto-gated: read-only + no-egress tests. Review-gated: ethics review.
- Segments: books by source/catalog, by press size, by theme.
- Risks: representational bias (small-press/own-voices work under-surfaced), and reductive pigeonholing of authors by identity.
- Tests: diverse-source presence; sourced-tags-only (no auto-assigned author identity labels).
- Commitment: widen the aperture beyond bestseller bias; describe books, don't label authors. Auto-gated: source-mix + sourced-tags tests. Review-gated: representation review.
- Data inventory: your library metadata + reading stats + progress (sensitive); derived app state.
- Handling: reading history, progress, tags, and taste weights stay on your seedbox behind auth; no third-party analytics. Optional public-catalog requests contain only predeclared broad subjects or explicit public-list URLs—never reading-derived values.
- Commitment: self-hosted, private, minimal retention; reading history is never shared or exposed. Auto-gated: no-egress/no-telemetry + auth tests. Review-gated: privacy review.
- Per recommendation: the reasons and the source catalog/list; data-source limitations noted.
- Commitment: no unexplained recommendations; honest about source coverage. Auto-gated: explanation-present + source-shown tests. Review-gated: framing review.
- Dashboard: keyboard-complete; charts/Wrapped have data-table equivalents; theme tags never color-only; readable typography.
- Commitment: zero
axeviolations plus a committed manual walkthrough. Auto-gated: structural, axe/contrast, chart-table, dark-preference, and 320px-reflow tests. Review-gated: human keyboard, magnification, and screen-reader walkthrough sign-off.
- Threat model: unauthorized access to the self-hosted app, source-DB corruption, API-key leakage, dependency risk.
- Controls: required auth, read-only/snapshot source access, secrets handling, outbound host allowlist, SAST + deps + secret scans merge-blocking.
- Residual-risk register committed in
docs/audits/. Auto-gated: scanners + access + read-only tests. Review-gated: threat-model sign-off. - ASVS 5.0 level: L2 (reading history = sensitive personal data). Rationale: single-user auth-gated app handling data that can out a reader — above L1 baseline, below L3 (no high-value/regulated transaction surface). Declared 2026-07-05.
- Container scan: ✓ blocking Trivy scan (
.github/workflows/container-scan.yml), HIGH/CRITICAL, fixable-only. - SBOM / signing: not yet produced — no release pipeline exists yet (see
docs/ROADMAP.mdand the tracked gap noted inCHANGELOG.md/README §Standards). Will be generated (CycloneDX) and signed (cosign keyless + SLSA provenance) by the release workflow once built. - VEX policy: none needed; empty ignore-list policy in
docs/audits/residual-risk.md(no accepted advisories exist to VEX against).
- AI-EVALUATION: N/A. No LLM/GenAI SDK is used anywhere in this repo (verified: no
anthropic/openai/transformers imports). The recommender is a classic content/co-occurrence model
plus optional local hash embeddings — not a generative or LLM-backed system, so
AI-EVALUATION-STANDARDdoesn't apply. It has its own merge-blocking offline eval regardless (make evalfails unless the recommender beats a popularity baseline; seedocs/audits/eval-report.json), which is AI-EVAL-shaped rigor applied where it's actually needed. - INTERNATIONALIZATION: Applies — deferred to backlog #17. The current
surface is single-user and English-only, but the portfolio manifest keeps the
standard applicable until the fork/audience boundary is reconciled. See
docs/I18N.mdand ADR 0007.
docs/audits/reading-privacy.md(self-hosted, no egress, sensitivity rationale)docs/audits/source-ethics.md(ethical catalogs, Goodreads exclusion, diverse surfacing)docs/audits/library-safety.md(read-only + snapshot access to Calibre/KOReader)docs/audits/accessibility-YYYY-MM-DD.mddocs/audits/real-library-dogfood-YYYY-MM-DD.mddocs/research/real-user-study-plan.mddocs/audits/residual-risk.md