Initial Commit
This commit is contained in:
73
openspec/archive/2026-04-29-vault/tasks.md
Normal file
73
openspec/archive/2026-04-29-vault/tasks.md
Normal file
@@ -0,0 +1,73 @@
|
||||
# Tasks — vault
|
||||
|
||||
> Every checkbox MUST reflect work actually done in this change. Do not retroactively tick boxes for work that was already in main when this change opened.
|
||||
|
||||
## 1. Spec authoring
|
||||
|
||||
- [x] 1.1 Read `MIGRATION.md` Section 7 (Vault Orchestration Layer) and Section 8
|
||||
- [x] 1.2 Read `openspec/AGENTS.md` Sections 13 and 14
|
||||
- [x] 1.3 Draft `proposal.md` from `openspec/templates/proposal.md`
|
||||
- [x] 1.4 Draft `specs/vault/spec.md` from `openspec/templates/spec-delta.md`
|
||||
- [x] 1.5 Every requirement carries a `**Verified by:**` line naming concrete `it(...)` titles
|
||||
|
||||
## 2. Implementation
|
||||
|
||||
- [x] 2.1 Scaffold package at `packages/vault/vault` with `package.json`, `tsconfig.json`, `vitest.config.ts`
|
||||
- [x] 2.2 Implement `Vault` class: `Vault.open(config)`, `unlock(password, secretKey)`, `lock()`, `isLocked`
|
||||
- [x] 2.3 Implement `vault.items` delegation: `create`, `get`, `update`, `delete`, `list`, `search` → `db-sqlite`
|
||||
- [x] 2.4 Implement `vault.attachments` delegation: `upload`, `download`, `delete` → `drive`
|
||||
- [x] 2.5 Implement `vault.shares` delegation: `createLink`, `revokeLink` → `drive-sharing`
|
||||
- [x] 2.6 Implement `vault.sync` delegation: `pull`, `push`, `sync` → `vault-sync`
|
||||
- [x] 2.7 Implement field encryption: concealed fields encrypted with per-item key from `crypto-vault`
|
||||
- [x] 2.8 Implement error module: `VaultError`, structured error codes
|
||||
- [x] 2.9 ~~Migrate `VaultManager` / `VaultFactory` from `@suaveplan/keys` into `@suaveplan/vault`~~ — N/A on genesis. Amended 2026-05-03: `@suaveplan/keys` was never created on genesis; keypair / Keychain / Authority / low-level vault primitives already live under `@suaveplan/crypto/keychain`, `@suaveplan/crypto/authority`, and `@suaveplan/crypto/vault`. `VaultManager` / `VaultFactory` are authored fresh inside `@suaveplan/vault` consuming those existing surfaces. See proposal `## Why` amendment block and `## Migration impact` for the revised ownership matrix.
|
||||
- [x] 2.10 Add `OpaqueKeyHandle` wrapper for `crypto-vault` keys
|
||||
- [x] 2.11 Add `rng?: Rng` injection to `Vault.open` and `Vault.unlock`
|
||||
- [x] 2.12 Wire subpath exports in `package.json` for every feature module
|
||||
- [x] 2.13 Add `README.md` with quick-start, modules list, and install instruction
|
||||
|
||||
## 3. Tests
|
||||
|
||||
- [x] 3.1 Unit tests at `src/vault/vault.test.ts` covering lifecycle, state transitions, zeroization
|
||||
- [x] 3.2 Unit tests at `src/items/items.test.ts` covering CRUD, encryption, history, validation
|
||||
- [x] 3.3 Unit tests at `src/search/search.test.ts` covering FTS5 delegation and filter correctness
|
||||
- [x] 3.4 Unit tests at `src/attachments/attachments.test.ts` covering upload/download round-trip
|
||||
- [x] 3.5 Unit tests at `src/shares/shares.test.ts` covering link creation, revocation, key exclusion
|
||||
- [x] 3.6 Unit tests at `src/sync/sync.test.ts` covering pull/push/bidirectional delegation
|
||||
- [x] 3.7 Spec-conformance tests at `src/spec-conformance.test.ts` pinning type-level / strict-mode scenarios
|
||||
- [x] 3.8 Integration tests verifying `vault` + `crypto-vault` + `db-sqlite` + `drive` end-to-end
|
||||
- [x] 3.9 Every `it(...)` carries `{ timeout: 5000 }` (or 30000 for genuinely async)
|
||||
|
||||
## 4. Documentation
|
||||
|
||||
- [x] 4.1 Sibling `.md` for every implementation `.ts` (≥200 words, basic + advanced examples, full API reference)
|
||||
- [x] 4.2 README links every co-located `.md` under `## Modules`
|
||||
- [x] 4.3 Update `CLAUDE.md` package listing if this is a new package
|
||||
- [x] 4.4 ~~Update `@suaveplan/keys` sibling docs to remove vault-related references~~ — N/A on genesis (no `@suaveplan/keys` package exists; see §2.9 amendment).
|
||||
- [x] 4.5 ~~Update `@suaveplan/keys` tests to remove `VaultManager`/`VaultFactory` coverage~~ — N/A on genesis (see §2.9 amendment).
|
||||
- [x] 4.6 ~~Add deprecation re-exports in `@suaveplan/keys` for one minor version~~ — N/A on genesis (see §2.9 amendment).
|
||||
- [x] 4.7 ~~Update `keys` sibling `.md` docs to reflect reduced scope~~ — N/A on genesis (see §2.9 amendment).
|
||||
|
||||
## 5. Pre-archive verification (the 5-gate triple)
|
||||
|
||||
- [x] 5.1 `bun run check` — Biome 0 errors / 0 warnings / 0 info across the whole monorepo
|
||||
- [x] 5.2 `bunx turbo lint typecheck test --filter=@suaveplan/vault` — green (167 tests pass across 16 files)
|
||||
- [x] 5.3 `bunx turbo test:coverage --filter=@suaveplan/vault` — 100/100/100/100 (statements/branches/functions/lines)
|
||||
- [x] 5.4 `bun scripts/openspec-conformance.ts @suaveplan/vault` — exit 0, 0 errors (2 `schemas-at-boundaries` warnings on `VaultItemSchema` and `ManifestArgon2idSchema` are advisory; both schemas are part of the public surface for downstream consumers)
|
||||
- [x] 5.5 `bunx turbo build --filter=@suaveplan/vault` — green
|
||||
|
||||
## 6. Pre-archive 7-row checklist (AGENTS.md Section 13)
|
||||
|
||||
- [x] 6.1 Generics threaded; `expectTypeOf` assertions on every literal-type claim
|
||||
- [x] 6.2 Zod schemas wired at every declared boundary
|
||||
- [x] 6.3 Every error code in `error-codes.ts` thrown by at least one production path
|
||||
- [x] 6.4 Strict-mode behaviors tested both on and off
|
||||
- [x] 6.5 OTel instruments emitted from production paths and asserted with a real in-memory `MeterProvider`
|
||||
- [x] 6.6 Lifecycle dedup tested where claimed (in-flight Promise, idempotent set/load)
|
||||
- [x] 6.7 No retroactive tick — every box above reflects work done in this change
|
||||
|
||||
## 7. Archive
|
||||
|
||||
- [x] 7.1 Fold spec delta into `openspec/specs/vault/spec.md`
|
||||
- [x] 7.2 Move `openspec/changes/vault/` → `openspec/archive/2026-04-29-vault/`
|
||||
- [x] 7.3 Refresh `MANIFEST.md` if package set or deps changed
|
||||
Reference in New Issue
Block a user