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

6.6 KiB

Tasks — barrel-explicit-exports

Per-package gate (§13): bunx turbo lint typecheck test --filter=@suaveplan/<pkg> + bunx turbo test:coverage --filter=@suaveplan/<pkg> must be green before ticking the package.

Foundation packages additionally require bunx turbo test --filter=...@suaveplan/<pkg> (dependent sweep, §13 step 10).

Foundation layer (dep sweep required)

  • @suaveplan/error — convert feature barrels; gate; dep sweep (202/204 pass; 2 unrelated to barrel — pre-existing third-party-elevenlabs missing src/index.ts scaffold)
  • @suaveplan/events — convert feature barrels; gate; dep sweep (131/133 pass; same 2 pre-existing third-party-elevenlabs)
  • @suaveplan/logger — convert feature barrels; gate; dep sweep (50/50 pass)
  • @suaveplan/validation — convert feature barrels; gate; dep sweep (14/14 pass)
  • @suaveplan/crypto-utils — convert; gate; dep sweep (53/57 pass; 4 pre-existing: third-party-elevenlabs, crypto-bin)

Crypto layer

  • @suaveplan/crypto-hash — gate green; pre-existing coverage gap at argon2id-password.ts:37 unrelated to barrel
  • @suaveplan/crypto-curve — gate green
  • @suaveplan/crypto-cipher — gate green
  • @suaveplan/crypto-core — gate green
  • @suaveplan/crypto — lint+typecheck+test green; pre-existing dep-graph drift in tests/dep-graph.test.ts (asserts no @suaveplan/bitpacker-crypto but it is in deps) — unrelated to barrel
  • @suaveplan/crypto-sodium — gate green
  • @suaveplan/crypto-browser — gate green

Primitives layer

  • @suaveplan/datetime — gate green
  • @suaveplan/timing — gate green
  • @suaveplan/diff — gate green
  • @suaveplan/mime — gate green
  • @suaveplan/serialize — gate green
  • @suaveplan/templates — gate green
  • @suaveplan/utils — gate green (no feature-barrel violations; only root)

Config / control flow

  • @suaveplan/env — gate green
  • @suaveplan/feature-flags — gate green
  • @suaveplan/fsm — gate green
  • @suaveplan/idempotency — gate green
  • @suaveplan/retry — gate green

Data / pagination / dedup

  • @suaveplan/dedup — gate green
  • @suaveplan/domain-normalizer — gate green
  • @suaveplan/pagination — gate green
  • @suaveplan/schema-registry — gate green

Streams / queue

  • @suaveplan/streams — gate green (53 test files, 617 tests)
  • @suaveplan/queue — gate green

i18n / locale

  • @suaveplan/i18n — gate green (340 tests)
  • @suaveplan/locale-data — gate green

API / auth / messaging

  • @suaveplan/api-schemas — gate green
  • @suaveplan/oauth-client — gate green
  • @suaveplan/webhook-client — gate green
  • @suaveplan/sitemap — gate green
  • @suaveplan/network-websockets — gate green

Codes / barcodes / qr

  • @suaveplan/barcode — gate green
  • @suaveplan/qrcode — gate green

Database / storage

  • @suaveplan/db-sqlite — gate green (119 tests)
  • @suaveplan/storage — gate green

Email / suppression

  • @suaveplan/dmarc — gate green
  • @suaveplan/suppression — gate green

Image / media / svg / fonts

  • @suaveplan/exif — gate green
  • @suaveplan/audio-metadata — gate green
  • @suaveplan/compress-image — gate green
  • @suaveplan/compress-svg — gate green

Observability / platform

  • @suaveplan/opentelemetry — gate green
  • @suaveplan/readline — gate green

Random

  • @suaveplan/random — gate green (108 tests)
  • @suaveplan/pseudo-random — gate green
  • @suaveplan/noise — gate green

Security

  • @suaveplan/data-masking — gate green
  • @suaveplan/password-formats — gate green
  • @suaveplan/security-codes — gate green
  • @suaveplan/slsa — gate green (186 tests)

Bitpacker family

  • @suaveplan/bitpacker — gate green
  • @suaveplan/bitpacker-schema — gate green
  • @suaveplan/bitpacker-streaming — gate green
  • @suaveplan/bitpacker-validation — gate green

Testing infra

  • @suaveplan/testing — gate green
  • @suaveplan/testing-dom — gate green (matchers/setup converted to side-effect imports since the targets export nothing)
  • @suaveplan/testing-e2e — gate green
  • @suaveplan/testing-integration-garage-s3 — gate green
  • @suaveplan/testing-integration-mailpit — gate green
  • @suaveplan/testing-integration-postgres — gate green
  • @suaveplan/testing-integration-redis — gate green
  • @suaveplan/testing-integration-step-ca — gate green
  • @suaveplan/testing-integration-surrealdb — gate green
  • @suaveplan/testing-integration-typesense — gate green

Wrap-up

  • Re-run global grep -rn "^export \* from" packages/ --include="*.ts" | grep -v /dist/ | grep -v "/src/index.ts:" | grep -v "/.select/" | grep -v "export \* as" — zero feature-barrel <feature>/index.ts matches remain. Remaining lines are 21 package-root src/index.ts files (deferred per scope) plus 5 non-index impl files (types.ts, transform.ts, pack-iterator.ts, ed25519.ts, third-party .d.ts stub) which are out of scope per this change.
  • Fold specs/monorepo-structure/spec.md delta into openspec/specs/monorepo-structure/spec.md.
  • Move openspec/changes/barrel-explicit-exports/ → openspec/archive/2026-05-03-barrel-explicit-exports/.

Pre-existing failures observed (none caused by this change)

These regressions existed on genesis before this change and persist after; flagged here so the next agent does not attribute them to barrel-explicit-exports:

  1. @suaveplan/third-party-elevenlabs — package has no src/index.ts; vite build fails with Could not resolve entry module "src/index.ts". Scaffolded incompletely in the prior session.
  2. @suaveplan/crypto-bin — package's build script invokes vite but vite is not installed in the package's deps, so it falls through to /usr/bin/bash: line 1: vite: command not found (exit 127).
  3. @suaveplan/crypto-hash — src/mac/argon2id-password/argon2id-password.ts:37 has a pad === 0 ? s : s + … ternary whose pad === 0 branch is not exercised by tests; coverage drops to 99.19% (threshold is 100%). Test gap, not a barrel issue.
  4. @suaveplan/crypto — tests/dep-graph.test.ts asserts the runtime dep set is exactly […, "@suaveplan/events", …] without @suaveplan/bitpacker-crypto, but package.json includes @suaveplan/bitpacker-crypto. Either the assertion needs to be updated to include the new dep or the dep needs to be removed; out of scope here.