Files
suaveplan/openspec/archive/2026-04-24-enterprise-search/tasks.md
2026-05-27 23:29:53 +01:00

3.1 KiB

Tasks: enterprise-search

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

Prerequisites (must be published to Verdaccio first)

  • @suaveplan/error
  • @suaveplan/types
  • @suaveplan/pagination

Tasks

1. Scaffold package

  • Create universal/data/search/ directory tree per file layout in proposal.md
  • Write package.json (name @suaveplan/search, 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 SearchErrorCode union type
  • Call defineCodes to register all SEARCH.* codes
  • Export registerSearchErrorCodes() and SearchError

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

  • Define and export all public interfaces: SearchEngine, SearchDocument, SearchQuery, SearchFilter, SortSpec, PaginationSpec, SearchResult, SearchHit, FacetBucket, FieldConfig, MemorySearchEngineOptions
  • Write common.md

4. Text utilities

  • Implement tokenize, normalize in src/text/tokenizer/
  • Implement buildTrigrams, trigramSimilarity in src/text/trigram/
  • Implement tfIdfScore, bm25Score in src/text/scorer/
  • Each module: .ts, .md, .test.ts, index.ts

5. In-memory engine (src/engine/memory-engine/)

  • Implement inverted-index full-text search with configurable FieldConfig
  • Implement BM25 scoring
  • Implement trigram-based fuzzy matching
  • Implement faceted search (facetable fields → bucket counts)
  • Implement highlight extraction
  • Implement suggest prefix search
  • Integrate @suaveplan/pagination cursor and offset pagination on results
  • Write memory-engine.md, .types.ts, .test.ts, index.ts

6. SearchEngine interface (src/engine/search-engine/)

  • Define and export the generic SearchEngine<T> interface
  • Write search-engine.md, .types.ts, .test.ts, index.ts

7. OTel instrumentation

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

8. Tests

  • Unit tests co-located with each feature module (100% coverage target)
  • tests/integration.test.ts — index → search → paginate round-trip
  • tests/property.test.ts — fast-check properties per proposal.md §5

9. Benchmarks (src/__benchmarks__/search.bench.ts)

  • Implement benchmark cases per proposal.md §6

10. Docs

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

11. Pre-publish gate

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

12. Publish

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

13. Archive

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