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

2.7 KiB

Tasks: enterprise-crdt

  • Change ID: enterprise-crdt
  • Package: @suaveplan/crdt
  • Date: 2026-04-24

Prerequisites (must be published to Verdaccio first)

  • @suaveplan/error
  • @suaveplan/types
  • @suaveplan/events
  • @suaveplan/diff

Tasks

1. Scaffold package

  • Create universal/data/crdt/ directory tree per file layout in proposal.md
  • Write package.json (name @suaveplan/crdt, version 0.1.0, sideEffects: false, correct workspace deps and catalog externals)
  • Write tsconfig.json extending @suaveplan/typescript-config/library.json
  • Write vitest.config.ts using createTestConfig() from @suaveplan/testing/config

2. Error codes (src/error-codes.ts)

  • Define CrdtErrorCode union type
  • Call defineCodes to register all CRDT.* codes
  • Export registerCrdtErrorCodes() and CrdtError

3. Types (src/types/common.ts)

  • Define and export CRDT<TValue, TState> interface and CrdtOptions
  • Write common.md

4. Core utilities

  • Implement VectorClock in src/core/vector-clock/ with increment, merge, compare, Zod schema
  • Implement CrdtSyncManager in src/core/sync-manager/ using @suaveplan/diff delta encoding
  • Each module: .ts, .md, .types.ts, .test.ts, index.ts

5. CRDT implementations

  • GCounter in src/crdts/g-counter/
  • PNCounter in src/crdts/pn-counter/
  • ORSet<T> in src/crdts/or-set/
  • LWWRegister<T> in src/crdts/lww-register/
  • MVRegister<T> in src/crdts/mv-register/
  • TwoPSet<T> in src/crdts/two-p-set/
  • RGA<T> in src/crdts/rga/
  • Each: .ts, .md, .types.ts, .test.ts, index.ts; Zod state schema; event-bus integration; toJSON/fromJSON

6. OTel instrumentation

  • Add spans, counters, histograms per proposal.md §4

7. Tests

  • Unit tests co-located with each CRDT (100% coverage target)
  • tests/integration.test.ts — two-replica merge scenarios for each CRDT type
  • tests/property.test.ts — fast-check CRDT laws (commutativity, associativity, idempotency) per proposal.md §5

8. Benchmarks (src/__benchmarks__/crdt.bench.ts)

  • Implement benchmark cases per proposal.md §6

9. Docs

  • Every .ts implementation file has a sibling .md
  • Root README.md

10. Pre-publish gate

  • bunx turbo lint typecheck test --filter=@suaveplan/crdt green
  • bunx turbo test:coverage --filter=@suaveplan/crdt ≥ 100% on touched modules

11. Publish

  • bun scripts/publish.ts --package @suaveplan/crdt

12. Archive

  • Fold spec delta into openspec/specs/data/spec.md
  • mv openspec/changes/enterprise-crdt openspec/archive/2026-04-24-enterprise-crdt