Files
2026-05-27 23:29:53 +01:00

3.7 KiB
Raw Permalink Blame History

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.

  • R1 Stable error code registry — src/errors/errors.ts
  • R2 ClipboardError extends SuaveplanError — src/errors/errors.ts
  • R3 Secure-context guard — src/security/security.ts
  • R4 AsyncQueue serialization — src/queue/queue.ts
  • R5 Permission state probe — src/permissions/permissions.ts
  • R6 Permission change subscription — src/permissions/permissions.ts
  • R7 Plain-text copy via Clipboard API — src/manager/manager.ts
  • R8 Plain-text copy fallback — src/manager/manager.ts + src/fallback/fallback.ts
  • R9 Rich-content copy with image and blobs — src/manager/manager.ts
  • R10 Rich-content read with image and blobs — src/manager/manager.ts
  • R11 HTML sanitizer hook — src/manager/manager.ts + src/sanitizer/sanitizer.ts
  • R12 Paste-event read fallback — src/fallback/fallback.ts
  • R13 Async queue serializes manager calls — src/manager/manager.ts
  • R14 Secure-context gate on copy — src/manager/manager.ts
  • R15 OpenTelemetry instrumentation — src/observability/observability.ts
  • R16 Injectable navigator and options bag — src/manager/manager.ts
  • 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/.