Skip to content
Merged
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
33 changes: 33 additions & 0 deletions SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -2003,6 +2003,39 @@ body in a future PR, the cross-reference inside
[`docs/spec/R4-P0-1-onboarding-wizard.md`](./docs/spec/R4-P0-1-onboarding-wizard.md) §3.2 MUST be updated to
point at the new normative SPEC section.

### §33.12 Normative user-facing error contract — R4-P0-2 (`KLICKD_E_*` i18n)

While the field surface of §33 remains preview / non-normative, the
**user-visible error message contract** for any future v4
`user.klickd` writer / reader is now constrained by a normative
companion document:

- [`docs/spec/R4-P0-2-error-i18n-table.md`](./docs/spec/R4-P0-2-error-i18n-table.md) — Normative (V4 P0).

That document binds, in RFC 2119 language, the user-facing message,
recommended user action, severity, recoverability, and safe-disclosure
behaviour for every `KLICKD_E_*` code surfaced in the R4-P0-1 wizard
contexts (passphrase creation, save / download, reload verification,
import / decrypt, legacy version / migration, corrupt / unsupported
file, locked policy violation, unsafe QR / deeplink). It covers
**FR / EN / DE / LB** (the four officially supported project
languages) and defines an **EN fallback** rule for any other UI
language.

R4-P0-2 is **docs-only** and does **not** modify the v3.x SDKs
([`errors.py`](./packages/pypi/klickd/src/klickd/errors.py),
[`errors.ts`](./packages/@klickd/core/src/errors.ts)), introduce any
new on-the-wire field, schema change, vector, package version, Git
tag, or release. It does **not** relax or modify the §33.7
forward-compatibility contract or the §33.10 privacy invariants.

R4-P0-2 lands now because [R4-P0-1 §3.4 and §3.6](./docs/spec/R4-P0-1-onboarding-wizard.md)
(passphrase confirmation failure and mandatory reload verification
failure) already depend on this user-facing error contract. SDK
alignment (i.e., adding the R4-P0-2-introduced codes to the SDKs as
runtime identifiers) is deferred to R4-P0-3 (Python) / R4-P0-4
(TypeScript) and is **not** in scope of this PR.

---

## License
Expand Down
8 changes: 4 additions & 4 deletions docs/roadmap/ROAD-TO-V4-GA.md
Original file line number Diff line number Diff line change
Expand Up @@ -269,11 +269,11 @@ Chaque entrée précise : *Objet → Livrables → Critères de sortie (Definiti

- **Objet :** table `error_messages` mappant **chaque** code `KLICKD_E_*` à un message utilisateur + action recommandée, en FR/EN/DE/LB (langues officielles du projet).
- **Pourquoi :** Bitwarden et KeePassXC : codes seuls inutilisables par non-développeurs. Couvre l'anti-pattern A6.
- **Livrables :** `docs/errors/KLICKD_ERRORS.md` (table normative non-secrète), exemples par code, contrat de fallback (code anglais si la langue n'est pas couverte).
- **DoD :** chaque code `KLICKD_E_*` documenté dans la spec a une ligne `code → message FR/EN/DE/LB → action`. Au moins une action ne renvoie **jamais** « contactez le support » (autonomie utilisateur).
- **Livrables :** contrat normatif RFC 2119 dans [`docs/spec/R4-P0-2-error-i18n-table.md`](../spec/R4-P0-2-error-i18n-table.md) (table FR/EN/DE/LB + safe-disclosure + sévérité/recoverabilité + actions utilisateur), exemples par code, contrat de fallback (EN si la langue n'est pas couverte).
- **DoD :** chaque code `KLICKD_E_*` documenté dans la spec a une ligne `code → message FR/EN/DE/LB → action`. Au moins une action ne renvoie **jamais** « contactez le support » (autonomie utilisateur). **Statut :** contrat normatif R4-P0-2 inscrit (docs/spec) — alignement SDK différé à R4-P0-3 / R4-P0-4.
- **Garde-fou anti-pattern :** A6.
- **Périmètre :** docs-only. Les SDKs Python/JS ne sont pas modifiés tant que P0-3/4 n'attaquent pas l'API publique de validation.
- **Dépendances :** P0-1.
- **Périmètre :** docs-only. Les SDKs Python/JS ne sont pas modifiés tant que P0-3/4 n'attaquent pas l'API publique de validation. Les codes introduits par R4-P0-2 (`KLICKD_E_PASS_MISMATCH`, `KLICKD_E_SAVE_LOCAL`, `KLICKD_E_LEGACY_VERSION`, `KLICKD_E_CORRUPT`, `KLICKD_E_POLICY_LOCKED`, `KLICKD_E_UNSAFE_QR`) sont normatifs côté contrat utilisateur mais **non encore présents** dans les SDKs.
- **Dépendances :** P0-1, R4-P0-1 (le wizard §3.4 / §3.6 dépend de cette table pour ses messages d'erreur).

#### R4-P0-3 — Profils d'exemple téléchargeables (5 personas)

Expand Down
Loading
Loading