Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ keyless-signing/provenance, release, and verify-published lifecycle is in place.
ethical-catalog recommender with explanations, auth-gated self-hosted dashboard).

### Changed
- Reconciled the contradictory internationalization dispositions: the standard
now applies, deferred to backlog #17's fork/audience decision; `docs/I18N.md`
defines both decision paths and ADR 0007 supersedes only the i18n portion of
ADR 0006. No catalog or translation is claimed.
- Dependency security refresh: raised `starlette`/`msgpack` floors above known advisories (#10).
- Pinned all GitHub Actions `uses:` to full commit SHAs (#5).
- CI quick wins: least-privilege `permissions:`, SHA-pinning, blocking security gates (#4).
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ verified: 2026-07-16.*
| Release & Versioning | **Applies — automated lifecycle shipped; first release pending** | Pre-1.0 (`0.1.x` is the current, unreleased line per `SECURITY.md`). Signed annotated `v*` tags trigger exact-commit verification, package/SBOM and GHCR builds, keyless signing/provenance, GitHub Release publication, and post-publication verification. |
| Accessibility | **Applies** | Zero-violation gate from **two** blocking layers — a structural checker and pa11y/axe (browser-engine, incl. color-contrast; graduated from advisory 2026-07-05). Manual review-gate walkthroughs (keyboard, screen-reader, zoom/reflow, contrast) are still pending first release — see [`docs/audits/accessibility-2026-06-05.md`](docs/audits/accessibility-2026-06-05.md). |
| Observability | **Applies — Tier C** | Local-only, single-user, no network surface. Structured JSON logs, `/livez`, fail-closed `/readyz`, `/version` — see [`docs/ROADMAP.md` §Observability](docs/ROADMAP.md#observability) for the full per-signal N/A-with-reason declaration. |
| Internationalization | **Applies (declaration under review)** | [`docs/I18N.md`](docs/I18N.md) records an English-only, single-user opt-out, but the portfolio applicability manifest keeps I18N *applies* pending fork reconciliation with `queer-specfic-reader` (backlog #17); the final declaration lands with that reconciliation. |
| Internationalization | **Applies — deferred to backlog #17** | [`docs/I18N.md`](docs/I18N.md) now reconciles the manifest and prior single-user assumption; ADR 0007 defines the audience/fork decision paths and the first localization boundary. |
| AI Evaluation | N/A — no LLM/GenAI SDK anywhere; the recommender is a classic content/co-occurrence model | Has its own merge-blocking offline eval regardless (`make eval` — beats the popularity baseline); see [`docs/RESPONSIBLE-TECH-AUDITS.md`](docs/RESPONSIBLE-TECH-AUDITS.md#applicability--ai-evaluation-and-internationalization). |
| Documentation | **Applies** | This table, `CONTRIBUTING.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`, `CITATION.cff`, `CHANGELOG.md`, currency stamps throughout `docs/`. |
| Responsible-Tech Framework | **Applies** | Full A–F treatment, including an ASVS level declaration, in [`docs/RESPONSIBLE-TECH-AUDITS.md`](docs/RESPONSIBLE-TECH-AUDITS.md). |
34 changes: 25 additions & 9 deletions docs/I18N.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,29 @@
# Internationalization

i18n status: **N/A** · Reason: single-user, English-only personal tool (explicit
opt-out per `INTERNATIONALIZATION-STANDARD` §1) · Last verified: 2026-07-05.
i18n status: Applies — deferred to backlog #17 fork reconciliation

This is a self-hosted, single-user dashboard with one operator and one locale.
There is no user base to localize for, so every control under
`INTERNATIONALIZATION-STANDARD` is N/A once this declaration exists (I18N-02).
`<html lang="en">` is set and gate-enforced regardless (`app/render.py`,
`app/a11y_check.py`) since that's an accessibility floor, not an i18n feature.
Reason: The shipped dashboard is currently single-user and English-only, but
the portfolio manifest conservatively keeps internationalization applicable
until the `queer-specfic-reader` fork/symlink boundary and intended audience are
reconciled. Treating the requirement as applicable prevents an ambiguous
repository boundary from becoming a silent exemption.

If this ever grows a second user or a non-English audience, revisit this file
before adding any locale-specific feature.
**Owner:** Project maintainer

**Current state:** English-only, self-hosted dashboard with no locale catalog

Backlog #17 must decide whether this remains a single-operator product or gains
a broader reader-facing audience. If it remains strictly single-user, a new
ADR may restore N/A with evidence. If the audience expands, the first
localization slice covers navigation, search/browse, recommendation
explanations, reading-status labels, and safety/privacy guidance.

Any implementation must use stable message identifiers, preserve authored book
metadata and quotations in their source language, document the fallback chain,
and gate catalog parity and stale translations. Incomplete translations fall
back to clearly labelled English. `<html lang="en">` remains gate-enforced now
as an accessibility floor.

This declaration resolves the current applicability conflict; it does not
claim that a catalog or translated copy already exists. See
[`ADR 0007`](./adr/0007-internationalization-applies-pending-fork-reconciliation.md).
6 changes: 4 additions & 2 deletions docs/RESPONSIBLE-TECH-AUDITS.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,10 @@ Instantiates `/STANDARDS/RESPONSIBLE-TECH-FRAMEWORK.md`. Reading is sensitive
`AI-EVALUATION-STANDARD` doesn't apply. It has its own merge-blocking offline eval regardless
(`make eval` fails unless the recommender beats a popularity baseline; see
`docs/audits/eval-report.json`), which is AI-EVAL-shaped rigor applied where it's actually needed.
- **INTERNATIONALIZATION: N/A.** Single-user, English-only personal tool — see
[`docs/I18N.md`](I18N.md) for the full declaration (I18N-02).
- **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.md`](I18N.md) and ADR 0007.

---

Expand Down
3 changes: 3 additions & 0 deletions docs/adr/0006-i18n-and-ai-evaluation-not-applicable.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
* Status: accepted
* Date: 2026-07-05

> **Partially superseded:** ADR 0007 supersedes the internationalization
> decision. The AI Evaluation decision below remains accepted.

## Context and Problem Statement

`STANDARDS/CODE-QUALITY-STANDARD.md` (CQ-45) asks for an ADR-style record backing any
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# 0007. Internationalization applies pending fork reconciliation

* Status: accepted
* Date: 2026-07-23
* Supersedes: ADR 0006's internationalization decision only

## Context and Problem Statement

ADR 0006 declared internationalization N/A because the product was described
as a single-user English-only personal tool. The portfolio applicability
manifest later kept the standard applicable pending reconciliation with the
`queer-specfic-reader` fork/symlink and backlog #17. The repository therefore
claimed both N/A and Applies at once.

## Decision Outcome

Use the conservative disposition: internationalization applies, deferred to
backlog #17's repository/audience reconciliation. `docs/I18N.md` owns the
scope, fallback, and decision paths. No catalog or translation claim is made.

ADR 0006 remains accepted for AI Evaluation, which is still N/A because the
product uses no LLM/GenAI SDK and its classic recommender has a separate
merge-blocking evaluation.

## Consequences

- The README, applicability manifest, ADR log, and declaration no longer
contradict one another.
- A broader audience cannot inherit an accidental single-user exemption.
- A future N/A decision requires a new ADR with evidence that the product and
repository boundary remain strictly single-operator.
- A future localization implementation starts from the user-facing boundary
in `docs/I18N.md`, not from ad hoc string replacement.
Loading