Skip to content

docs(ux): inscribe QR/deeplink onboarding decision + V4 security constraints#37

Merged
Davincc77 merged 1 commit into
mainfrom
docs/v4-onboarding-qr-deeplink
May 24, 2026
Merged

docs(ux): inscribe QR/deeplink onboarding decision + V4 security constraints#37
Davincc77 merged 1 commit into
mainfrom
docs/v4-onboarding-qr-deeplink

Conversation

@Davincc77
Copy link
Copy Markdown
Owner

Summary

Docs-only PR that inscribes the maintainer-validated decision (2026-05-24, Vince) on QR / deeplink onboarding for .klickd v4 and the security constraints that surround it. Follows the merge of #36 (SHA 27e53be44cf512c0420143c2e36bef2b39d4d9a1).

The previous R4-P1-5 entry in docs/roadmap/ROAD-TO-V4-GA.md listed three open alternatives (a/b/c). Vince validated the direction: QR / deeplink is a trigger for the import / resume UI, never a transport for secrets. This PR closes that decision and writes it down.

Changes

  • docs/ux/V4-ONBOARDING-QR-DEEPLINK.md (new, NON-NORMATIVE) — load-bearing decision:
    • Trigger-only. A QR / deeplink MUST NOT carry raw .klickd content, passphrase, durable token, or permanent public link to a .klickd file.
    • Preferred zero-server flows: custom URI scheme klickd://import and stateless HTTPS launcher https://klickd.app/import-klickd (PWA / WASM, decryption client-side via Web Crypto / hash-wasm Argon2id). User then picks the local file and enters the passphrase locally — same path as R4-P0-1.
    • Conditional future server-temporary URL (NOT V4 P0) gated behind seven constraints (C1–C7): encrypted file only, short TTL ≤ 10 min, one-time use, no passphrase or raw payload transported, explicit per-transfer consent, no durable sender/receiver identifier, RFC Accepted before shipping.
    • Classification table: local import + reload verification = V4 P0 (unchanged, R4-P0-1); klickd://import and HTTPS launcher = P1 conditional; server-temporary URL = P2 conditional + future RFC; QR / deeplink transporting raw payload or passphrase = REJECTED (anti-pattern A3).
    • Security constraints summary: untrusted-input handling, never auto-decrypt on receipt, trigger budget ≤ 256 bytes, surface resolved scheme/host (consent-first per V4-UX-SPEC.md P3), metadata-only audit logs.
  • docs/roadmap/ROAD-TO-V4-GA.md §2.4 R4-P1-5 — replace the placeholder a/b/c decision with the inscribed decision and cross-link the new spec. P1 conditional → P2 if zero-server architecture review blocks is preserved.

Strict governance respected

  • No SPEC / schema / SDK / vector / wire-format change.
  • No publish (npm / PyPI / Zenodo / IANA).
  • No tag / release.
  • No package version bump.
  • No locked_* field touched.
  • No destructive change.
  • V4 Acceptance Checklist unchanged.
  • P0 remains exactly local import + reload verification (R4-P0-1).

Test plan

  • Local docs heading structure verified.
  • Python vectors: python verify_vectors.py → 59/59 passed (0 failed).
  • CI klickd Cross-Impl Test Vectors green on this branch.
  • Reviewer confirms the inscribed decision matches the maintainer-validated direction (QR / deeplink = trigger, never transport).

🤖 Generated with Claude Code

…traints

Capture maintainer-validated decision (2026-05-24): QR codes and deeplinks
are trigger-only UX for `.klickd` v4 onboarding; they never transport raw
file content, passphrase, durable token, or permanent public link.

- New `docs/ux/V4-ONBOARDING-QR-DEEPLINK.md` (NON-NORMATIVE):
  - preferred zero-server flows `klickd://import` and
    `https://klickd.app/import-klickd` launcher (PWA/WASM, server-stateless);
  - conditional future server-temporary URL gated behind C1–C7
    (encrypted-file-only, short TTL, one-time use, no passphrase, explicit
    consent, no durable identifier, RFC-gated);
  - classification table: local import + reload = P0; trigger schemes =
    P1 conditional; server-temporary URL = P2 conditional; raw-payload QR =
    REJECTED (anti-pattern A3).
- `docs/roadmap/ROAD-TO-V4-GA.md` §2.4 R4-P1-5: replace placeholder
  decision (a/b/c) with the inscribed decision and cross-link the new spec.

Strict governance respected: no SPEC / schema / SDK / vector / wire-format
change; no release / tag; no package version bump; no locked_* touched;
docs-only.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@Davincc77 Davincc77 merged commit 6e34c73 into main May 24, 2026
3 checks passed
@Davincc77 Davincc77 deleted the docs/v4-onboarding-qr-deeplink branch May 24, 2026 18:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants