Initial Commit
This commit is contained in:
64
openspec/archive/2026-05-25-enterprise-clipboard/tasks.md
Normal file
64
openspec/archive/2026-05-25-enterprise-clipboard/tasks.md
Normal file
@@ -0,0 +1,64 @@
|
||||
# Tasks — enterprise-clipboard
|
||||
|
||||
> Implementation checklist for migrating `@suaveplan/clipboard` from
|
||||
> `../suaveplan/packages/browser/clipboard` (1.0.3) into
|
||||
> `packages/foundation/data/clipboard/` at 0.1.0 with enterprise surface.
|
||||
|
||||
## Spec-inventory checklist
|
||||
|
||||
Spec delta contains 17 `### Requirement` blocks. Each item below maps 1:1 to a spec
|
||||
requirement and is checked off as the implementation lands.
|
||||
|
||||
- [x] R1 Stable error code registry — `src/errors/errors.ts`
|
||||
- [x] R2 ClipboardError extends SuaveplanError — `src/errors/errors.ts`
|
||||
- [x] R3 Secure-context guard — `src/security/security.ts`
|
||||
- [x] R4 AsyncQueue serialization — `src/queue/queue.ts`
|
||||
- [x] R5 Permission state probe — `src/permissions/permissions.ts`
|
||||
- [x] R6 Permission change subscription — `src/permissions/permissions.ts`
|
||||
- [x] R7 Plain-text copy via Clipboard API — `src/manager/manager.ts`
|
||||
- [x] R8 Plain-text copy fallback — `src/manager/manager.ts` + `src/fallback/fallback.ts`
|
||||
- [x] R9 Rich-content copy with image and blobs — `src/manager/manager.ts`
|
||||
- [x] R10 Rich-content read with image and blobs — `src/manager/manager.ts`
|
||||
- [x] R11 HTML sanitizer hook — `src/manager/manager.ts` + `src/sanitizer/sanitizer.ts`
|
||||
- [x] R12 Paste-event read fallback — `src/fallback/fallback.ts`
|
||||
- [x] R13 Async queue serializes manager calls — `src/manager/manager.ts`
|
||||
- [x] R14 Secure-context gate on copy — `src/manager/manager.ts`
|
||||
- [x] R15 OpenTelemetry instrumentation — `src/observability/observability.ts`
|
||||
- [x] R16 Injectable navigator and options bag — `src/manager/manager.ts`
|
||||
- [x] R17 Tree-shakeable subpath exports — `package.json`
|
||||
|
||||
## Steps
|
||||
|
||||
1. Scaffold `packages/foundation/data/clipboard/` with `package.json`, `vite.config.ts`,
|
||||
`vitest.config.ts`, `tsconfig.lib.json`, `README.md`.
|
||||
2. Author shared types in `src/types/clipboard.types.ts`.
|
||||
3. Implement `src/errors/errors.ts` with `CLIPBOARD_CODES`, metadata,
|
||||
`ClipboardError`. Add `errors.md` + `errors.test.ts`.
|
||||
4. Implement `src/security/security.ts` (`isSecure`, `requireSecureContext`).
|
||||
5. Implement `src/queue/queue.ts` (`AsyncQueue`).
|
||||
6. Implement `src/sanitizer/sanitizer.ts` (default identity + interface).
|
||||
7. Implement `src/observability/observability.ts` —
|
||||
`createClipboardObservability` + types module.
|
||||
8. Implement `src/permissions/permissions.ts` — probe + change subscription.
|
||||
9. Implement `src/fallback/fallback.ts` — textarea+execCommand copy + paste-event
|
||||
read fallback.
|
||||
10. Implement `src/manager/manager.ts` — `ClipboardManager` orchestrating queue,
|
||||
secure-context, observability, permissions, fallback, sanitizer.
|
||||
11. Wire `src/index.ts` with explicit named re-exports.
|
||||
12. Write co-located `.md` for every implementation file (≥200 words, six required
|
||||
sections, with simple + advanced examples that compile).
|
||||
13. Write tests at 100% line/branch/function/statement coverage in
|
||||
`vitest.config.ts` (`provider: 'istanbul'`, `environment: 'happy-dom'`,
|
||||
`pool: 'forks'`).
|
||||
14. Add `src/index.test.ts` covering package-level invariants (subpath exports
|
||||
present, no node imports).
|
||||
15. Add subpath exports for every feature module in `package.json` `exports` map.
|
||||
16. Update `scripts/folder-reorg/assignment.yml` to list `clipboard` under the
|
||||
`data` plugin.
|
||||
17. Run `bun scripts/folder-reorg/generate-manifest.ts` to refresh `MANIFEST.md`.
|
||||
18. Run gates: `bunx turbo lint typecheck test build --filter=@suaveplan/clipboard`
|
||||
and `bunx turbo test:coverage --filter=@suaveplan/clipboard`.
|
||||
19. Flip `@suaveplan/clipboard` `–` → `✅` in `STATUS.md`.
|
||||
20. Fold `specs/clipboard/spec.md` into `openspec/specs/clipboard/spec.md`.
|
||||
21. Move `openspec/changes/enterprise-clipboard/` →
|
||||
`openspec/archive/2026-05-25-enterprise-clipboard/`.
|
||||
Reference in New Issue
Block a user