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

142 lines
6.6 KiB
Markdown

# 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)
- [x] `@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)
- [x] `@suaveplan/events` — convert feature barrels; gate; dep sweep (131/133 pass; same 2 pre-existing `third-party-elevenlabs`)
- [x] `@suaveplan/logger` — convert feature barrels; gate; dep sweep (50/50 pass)
- [x] `@suaveplan/validation` — convert feature barrels; gate; dep sweep (14/14 pass)
- [x] `@suaveplan/crypto-utils` — convert; gate; dep sweep (53/57 pass; 4 pre-existing: third-party-elevenlabs, crypto-bin)
## Crypto layer
- [x] `@suaveplan/crypto-hash` — gate green; pre-existing coverage gap at argon2id-password.ts:37 unrelated to barrel
- [x] `@suaveplan/crypto-curve` — gate green
- [x] `@suaveplan/crypto-cipher` — gate green
- [x] `@suaveplan/crypto-core` — gate green
- [x] `@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
- [x] `@suaveplan/crypto-sodium` — gate green
- [x] `@suaveplan/crypto-browser` — gate green
## Primitives layer
- [x] `@suaveplan/datetime` — gate green
- [x] `@suaveplan/timing` — gate green
- [x] `@suaveplan/diff` — gate green
- [x] `@suaveplan/mime` — gate green
- [x] `@suaveplan/serialize` — gate green
- [x] `@suaveplan/templates` — gate green
- [x] `@suaveplan/utils` — gate green (no feature-barrel violations; only root)
## Config / control flow
- [x] `@suaveplan/env` — gate green
- [x] `@suaveplan/feature-flags` — gate green
- [x] `@suaveplan/fsm` — gate green
- [x] `@suaveplan/idempotency` — gate green
- [x] `@suaveplan/retry` — gate green
## Data / pagination / dedup
- [x] `@suaveplan/dedup` — gate green
- [x] `@suaveplan/domain-normalizer` — gate green
- [x] `@suaveplan/pagination` — gate green
- [x] `@suaveplan/schema-registry` — gate green
## Streams / queue
- [x] `@suaveplan/streams` — gate green (53 test files, 617 tests)
- [x] `@suaveplan/queue` — gate green
## i18n / locale
- [x] `@suaveplan/i18n` — gate green (340 tests)
- [x] `@suaveplan/locale-data` — gate green
## API / auth / messaging
- [x] `@suaveplan/api-schemas` — gate green
- [x] `@suaveplan/oauth-client` — gate green
- [x] `@suaveplan/webhook-client` — gate green
- [x] `@suaveplan/sitemap` — gate green
- [x] `@suaveplan/network-websockets` — gate green
## Codes / barcodes / qr
- [x] `@suaveplan/barcode` — gate green
- [x] `@suaveplan/qrcode` — gate green
## Database / storage
- [x] `@suaveplan/db-sqlite` — gate green (119 tests)
- [x] `@suaveplan/storage` — gate green
## Email / suppression
- [x] `@suaveplan/dmarc` — gate green
- [x] `@suaveplan/suppression` — gate green
## Image / media / svg / fonts
- [x] `@suaveplan/exif` — gate green
- [x] `@suaveplan/audio-metadata` — gate green
- [x] `@suaveplan/compress-image` — gate green
- [x] `@suaveplan/compress-svg` — gate green
## Observability / platform
- [x] `@suaveplan/opentelemetry` — gate green
- [x] `@suaveplan/readline` — gate green
## Random
- [x] `@suaveplan/random` — gate green (108 tests)
- [x] `@suaveplan/pseudo-random` — gate green
- [x] `@suaveplan/noise` — gate green
## Security
- [x] `@suaveplan/data-masking` — gate green
- [x] `@suaveplan/password-formats` — gate green
- [x] `@suaveplan/security-codes` — gate green
- [x] `@suaveplan/slsa` — gate green (186 tests)
## Bitpacker family
- [x] `@suaveplan/bitpacker` — gate green
- [x] `@suaveplan/bitpacker-schema` — gate green
- [x] `@suaveplan/bitpacker-streaming` — gate green
- [x] `@suaveplan/bitpacker-validation` — gate green
## Testing infra
- [x] `@suaveplan/testing` — gate green
- [x] `@suaveplan/testing-dom` — gate green (matchers/setup converted to side-effect imports since the targets export nothing)
- [x] `@suaveplan/testing-e2e` — gate green
- [x] `@suaveplan/testing-integration-garage-s3` — gate green
- [x] `@suaveplan/testing-integration-mailpit` — gate green
- [x] `@suaveplan/testing-integration-postgres` — gate green
- [x] `@suaveplan/testing-integration-redis` — gate green
- [x] `@suaveplan/testing-integration-step-ca` — gate green
- [x] `@suaveplan/testing-integration-surrealdb` — gate green
- [x] `@suaveplan/testing-integration-typesense` — gate green
## Wrap-up
- [x] 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.