Files
Marcos Paulo e8c8c06d1e
ci / ci (macos-latest) (push) Has been cancelled
ci / ci (ubuntu-latest) (push) Has been cancelled
ci / ci (windows-latest) (push) Has been cancelled
feat: smart folder model, media time fragments, link card URL guard (MiniMax); specs for 10 more gaps (Codex) and the registry with bloat measurements
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 14:41:26 -03:00

5.4 KiB
Raw Permalink Blame History

Tasks: note and secret-folder encryption design (roadmap 34)

Spec: spec.md. DESIGN ONLY: every OWNS path stays below this feature directory; no cargo/code/dependency edits. Tasks are sequential reviewable documents, individually checked against explicit cases. Existing source paths are inspection inputs, never writable in this phase. First tool call rule: read at most three listed inputs in first call; write FIRST OWNS document in SECOND call with initial checklist, then complete it. Code-stub/failing-test rule intentionally replaced with document acceptance cases because no crypto code is authorized. Standing VERIFY: resolve each referenced existing path with rg --files; compare document to spec acceptance matrix and cited primary sources; check no secret values/examples and no runnable crypto. Do not run cargo during this design phase. Standing DO NOT: change code/Cargo/git state; add dependency; implement encryption/decryption/KDF/RNG; weaken unsafe policy; freeze algorithm/format without owner approval; claim secure erasure.

  • 1. Threat model and trust boundaries. OWNS: specs/plugins-parity/note-encryption/threat-model.md (new, FIRST). FILES TO OPEN: specs/plugins-parity/note-encryption/spec.md D1; crates/engine/src/vault/session.rs; crates/vault/src/lib.rs. GOAL: asset/adversary/trust-boundary table for per-note and folder domains; separate locked/unlocked behavior, metadata and prior backups; explain local-at-rest vs sync E2EE; owner Q1/Q4 decision checklist with explicit pending status. TESTS: tabletop cases stolen locked vault, replayed old ciphertext, swapped object, hostile same-user process while unlocked, plaintext shared attachment, known filename and old snapshot; each maps protected/excluded/blocked plus reason. VERIFY: standing; D1 and acceptance 1/4 traced with no undocumented assumption. DO NOT: crypto snippets, promise zero knowledge or rollback protection, approve own threat model.
  • 2. Container format and bounded parser design. OWNS: specs/plugins-parity/note-encryption/format.md (new, FIRST). FILES TO OPEN: spec D2; task 1 threat model; crates/engine/src/vault/attachments.rs. GOAL: byte-by-byte candidate envelope, endian/length encoding, AEAD associated-data byte layout, encrypted manifest/object identity, key-slot integrity, versioning and pre-KDF bounds. Record AES-GCM/Argon2id as proposed; list dependency/RNG review questions. No format claims frozen before independent review. TESTS: design vectors for truncation at every field, oversized lengths/KDF cost, nonce reuse across retries, object swap, tampered header/tag, missing manifest object, unknown suite and version; specify expected rejection stage. VERIFY: standing + field/length/AAD consistency review; RFC 9106 parameter rationale measured-plan required. DO NOT: choose unapproved crate or write toy crypto; pass arbitrary hostile KDF cost to runtime.
  • 3. Key state machine and migration failure matrix. OWNS: specs/plugins-parity/note-encryption/key-lifecycle.md (new, FIRST), specs/plugins-parity/note-encryption/migration.md (new). FILES TO OPEN: spec D3–D4; crates/engine/src/vault/buffers.rs; crates/engine/src/sync/worker.rs. GOAL: unlock/lock state transitions, dirty save error/cancel, zeroization limits, rotation/key-slot recovery, idle/suspend races, session-only defaults and keychain/recovery alternatives; crash-safe atomic migration sequence and explicit plaintext removal authorization point. TESTS: tabletop wrong password, closed dirty tab, crash after every migration stage, low disk on lock, passphrase change interrupted, sync old key slot, forgotten password, OS lock during extraction; preserve work without claiming locked after failure. VERIFY: standing; each state transition names data retained/cleared and error behavior; key material never enters settings/logs/command params. DO NOT: guarantee wiping SSD/swap/backups; silently delete plaintext; implement keychain.
  • 4. Leakage integration inventory and owner review package. OWNS: specs/plugins-parity/note-encryption/integration-review.md (new, FIRST), specs/plugins-parity/note-encryption/approval-checklist.md (new). FILES TO OPEN: spec acceptance/questions; crates/engine/src/vault/find/content_search.rs; crates/engine/src/ai/assistant_gate.rs; later inspect crates/engine/src/vault/pdf_preview.rs, crates/engine/src/vault/attachments.rs, crates/engine/src/sync/worker.rs. GOAL: input/output/cache/history/trash/preview/OCR/export/AI/plugin/share/capture matrix, verified source path per boundary, proposed locked behavior and future regression test. Prepare owner questions with exact proposed dependencies only after safe-Rust/security/license investigation. Future implementation must have new approved spec/tasks; if new crypto crate chosen, first task explicitly owns/registers crates/crypto/Cargo.toml, crates/crypto/src/lib.rs, root Cargo.toml workspace dependency and xtask/src/layers.rs layer entry. TESTS: known encrypted path via all external command surfaces while locked denied; worker late publication after lock; stale index/cache snippets; shared attachment reference leakage; encrypted sync conflicts. Each unresolved surface blocks implementation approval. VERIFY: standing; trace all five spec acceptance criteria and Q1–Q4 to checklist; no approvals inferred. DO NOT: implement future task, modify root docs/status as shipped, mark design approval granted.