spec(v4): promote R4-P0-2 KLICKD_E_* user-facing error i18n table to normative (docs-only)#39
Merged
Merged
Conversation
…normative (docs-only)
Inscribes the normative user-facing error message contract for v4
`user.klickd` writers / readers in FR / EN / DE / LB, per RFC 2119.
R4-P0-2 lands now because R4-P0-1 §3.4 (passphrase confirmation) and
§3.6 (mandatory reload verification) already depend on a normative
user-facing error contract that the bare v3.x SDK code identifiers
(`KLICKD_E_AUTH`, `_VERSION`, `_FORMAT`, `_KDF`, `_CIPHER`,
`_WEAK_PASS`, `_SCHEMA`) cannot provide on their own.
What lands (docs-only):
- docs/spec/R4-P0-2-error-i18n-table.md — normative companion to
R4-P0-1, defining for every `KLICKD_E_*` code surfaced in the
wizard:
* user-facing message in FR / EN / DE / LB
* recommended autonomous user action (no "contact support")
* severity (error / warning / info) and recoverability class
* safe-disclosure rule (do not leak whether file vs passphrase
failed where unsafe; do not name failing gate / missing field)
- Coverage of every R4-P0-1 wizard step: passphrase creation,
save / download, mandatory reload verification, import / decrypt,
legacy version / migration, corrupt / unsupported file, locked
policy violation, and unsafe QR / deeplink (per
V4-ONBOARDING-QR-DEEPLINK.md C1-C7).
- Codes introduced docs-only for the wizard contract (not yet in
SDKs): `KLICKD_E_PASS_MISMATCH`, `KLICKD_E_SAVE_LOCAL`,
`KLICKD_E_LEGACY_VERSION`, `KLICKD_E_CORRUPT`,
`KLICKD_E_POLICY_LOCKED`, `KLICKD_E_UNSAFE_QR`. SDK alignment is
deferred to R4-P0-3 (Python) / R4-P0-4 (TypeScript).
- SPEC.md §33.12 added as the cross-reference pointer to the
R4-P0-2 artifact (mirrors §33.11 for R4-P0-1).
- docs/roadmap/ROAD-TO-V4-GA.md R4-P0-2 entry updated to reference
the new normative artifact and mark the contract as inscribed.
Strict scope guarantees:
- No on-the-wire field, schema, or vector change.
- No SDK code modified (errors.py / errors.ts untouched).
- No package version bump, Git tag, GitHub release, npm / PyPI /
Zenodo / DOI publication.
- No change to SPEC §33.7 forward-compatibility contract or §33.10
privacy invariants.
- No app i18n / UI implementation; wizard implementation remains
hors-repo (`klickd.app`).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
user.klickdwriters / readers in FR / EN / DE / LB as the docs-only companion to R4-P0-1 §3.4 (passphrase) and §3.6 (mandatory reload verification).docs/spec/R4-P0-2-error-i18n-table.mdcovering everyKLICKD_E_*code surfaced in the wizard, with: localized message FR/EN/DE/LB, recommended autonomous user action (no "contact support"), severity, recoverability, and a safe-disclosure rule (do not leak whether file vs passphrase failed where unsafe; do not name failing gate / missing field).SPEC.md§33.12 cross-reference (mirrors §33.11 for R4-P0-1) and updates thedocs/roadmap/ROAD-TO-V4-GA.mdR4-P0-2 entry to reference the new normative artifact (status: contract inscribed).KLICKD_E_PASS_MISMATCH,KLICKD_E_SAVE_LOCAL,KLICKD_E_LEGACY_VERSION,KLICKD_E_CORRUPT,KLICKD_E_POLICY_LOCKED,KLICKD_E_UNSAFE_QR. SDK alignment is deferred to R4-P0-3 (Python) / R4-P0-4 (TypeScript).Why this lands now
R4-P0-1 §3.4 and §3.6 already depend on a normative user-facing error contract; the bare v3.x identifiers (
KLICKD_E_AUTH,_VERSION,_FORMAT,_KDF,_CIPHER,_WEAK_PASS,_SCHEMA) are unusable to non-developer end-users (anti-pattern A6). This PR closes that dependency without touching SDK / schema / vectors.Scope (strict)
errors.py/errors.tsuntouched).klickd.app).Coverage (R4-P0-1 wizard contexts)
KLICKD_E_WEAK_PASS,KLICKD_E_PASS_MISMATCHKLICKD_E_SAVE_LOCALKLICKD_E_AUTH,KLICKD_E_FORMAT,KLICKD_E_SCHEMA,KLICKD_E_VERSION,KLICKD_E_KDF,KLICKD_E_CIPHERKLICKD_E_LEGACY_VERSION,KLICKD_E_CORRUPTKLICKD_E_LEGACY_VERSIONKLICKD_E_CORRUPT,KLICKD_E_FORMAT,KLICKD_E_KDF,KLICKD_E_CIPHERKLICKD_E_POLICY_LOCKEDKLICKD_E_UNSAFE_QRSafe-disclosure rule (excerpt)
KLICKD_E_AUTHmessage MUST remain ambiguous between wrong-passphrase and tampered-file.KLICKD_E_FORMAT/KLICKD_E_SCHEMAMUST NOT name specific missing envelope / payload fields to the user.KLICKD_E_POLICY_LOCKEDMUST NOT name the specific failing gate.KLICKD_E_UNSAFE_QRMUST NOT echo the offending payload.Files changed
docs/spec/R4-P0-2-error-i18n-table.md— new (~486 lines, normative)SPEC.md— +33 lines (§33.12 pointer)docs/roadmap/ROAD-TO-V4-GA.md— R4-P0-2 entry updatedTesting
KLICKD_E_*rows, each with FR / EN / DE / LB columns + action + severity + recoverability + safe-disclosure.errors.pyanderrors.tsuntouched.Recommended next branch
R4-P0-3 —
examples/v4/personas/(5 downloadable persona profiles: élève terminale FR, chef de projet PME FR, dev full-stack EN, créateur média previewmedia.klickd, joueur RPG previewgaming.klickd). R4-P0-3 fixtures can land as preview artefacts referenced by R4-P0-1 §3.1 (the "I already have auser.klickdfile → import" secondary path) ahead of strict P0-2 / P0-6 validation.🤖 Generated with Claude Code