Files
suaveplan/.audit/status-audit-2026-05-25.md
2026-05-27 23:29:53 +01:00

80 lines
9.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# STATUS Audit — 2026-05-25
## Summary
- Reviewed: 35 rows marked `–` in STATUS.md (scope: non-api, non-react, non-r3f, non-games, non-python)
- **Actually shipped (flip `–` → `✅`): 7**
- `audio-engine-server`, `contacts`, `macos-contacts`, `audience-rules`, `streams-chunk-queue`, `streams-metadata`, `workflow`
- **Genuinely pending (no genesis src on disk): 28**
- `dmx`, `docs`, `pdf`, `email-templates`, `form-builder`, `caddy-imgproxy`, `emblem-solver`, `ports`, `imessage-adapter`, `sms`, `sms-providers`, `analytics-browser`, `pwa`, `electrobun`, `linter`, `overview`, `sandbox`, `test-vite`, `wip`, `clipboard`, `mcp`, `media`, `spatial-hash`, `storage-browser`, `storybook-test-utils`, `video`, `video-thumbnails`, `web-workers`
- **Partial / drift: 0** — every found row passes all 4 hard gates (package.json + non-stub index.ts + tests + substantive README); no half-built folders detected in scope.
## Detail — flips needed (`–` → `✅`)
| Package | Folder | OpenSpec change-id | Src state |
|---|---|---|---|
| `@suaveplan/audio-engine-server` | `/home/paul/web/genesis/packages/media/audio/audio-engine-server` | `openspec/archive/2026-05-23-enterprise-audio-engine-server` | 7 feature dirs (adapter, error-codes, fx, internal, sink, source) + 8 `*.test.ts`; `src/index.ts` 60 lines of real named exports (`BusOrchestrator`, `ServerTimelineAdapter`, schemas, types); README 56 lines; v0.1.0. |
| `@suaveplan/contacts` | `/home/paul/web/genesis/packages/commerce/contacts/contacts` | `openspec/archive/2026-05-20-migrate-contacts` | 8 feature dirs (core, error-codes, import-export, otel, schemas, stores, tree, types) + 15 `*.test.ts` + spec-conformance file; `src/index.ts` 121 lines real barrel; README 86 lines; v0.1.0. |
| `@suaveplan/macos-contacts` | `/home/paul/web/genesis/packages/commerce/contacts/macos-contacts` | `openspec/archive/2026-05-20-migrate-macos-contacts` | 8 feature dirs (applescript, bridge, error-codes, executor, otel, parser, schemas, types) + 8 `*.test.ts` + spec-conformance; `src/index.ts` 55 lines real barrel; README 41 lines; v0.1.0. |
| `@suaveplan/audience-rules` | `/home/paul/web/genesis/packages/commerce/contacts/audience-rules` | `openspec/archive/2026-05-23-enterprise-audience-rules` | 7 feature dirs (predicates, schemas, segment-evaluator, segment-refresher, store, types, error-codes) + 6 `*.test.ts` + spec-conformance; `src/index.ts` 67 lines real barrel with full docblock; README 93 lines; v0.1.0. |
| `@suaveplan/streams-chunk-queue` | `/home/paul/web/genesis/packages/foundation/flow/streams-chunk-queue` | `openspec/archive/2026-05-23-enterprise-streams-chunk-queue` | 11 feature dirs (binary-protocol, decryptor, errors, events, hooks, queue, rate-limiter, storage-adapter, telemetry, types, validator) + 13 `*.test.ts`; `src/index.ts` 82 lines real barrel; README 70 lines; v0.1.0. |
| `@suaveplan/streams-metadata` | `/home/paul/web/genesis/packages/foundation/flow/streams-metadata` | `openspec/archive/2026-05-23-enterprise-streams-metadata` | 6 feature dirs (errors, events, exif, metadata, mime, types) + 4 `*.test.ts`; `src/index.ts` 23 lines but with substantive named exports incl. `STREAMS_METADATA_CODES`, error classes, factories; README 70 lines; v0.1.0. (Smallest of the shipped set — verify next consumer agrees with surface, but it satisfies all 4 gates.) |
| `@suaveplan/workflow` | `/home/paul/web/genesis/packages/foundation/flow/workflow` | `openspec/archive/2026-05-24-enterprise-workflow` | 9 feature dirs (compensation, constants, core, errors, middleware, otel, steps, types, utils) + 14 `*.test.ts`; `src/index.ts` 118 lines real barrel; README 127 lines; v0.1.0. |
## Detail — partials
None. Every directory matching the scoped names that exists on disk fully passes gates (1)–(4). The remaining 28 rows have **zero** package directory under `packages/<cat>/<plugin>/<pkg>/` matching the package name (verified via `find packages/ -type d -name <pkg>`).
## Detail — true leaves (no `@suaveplan/*` runtime deps, ready to migrate)
Ranked smallest/cleanest leaf first. LOC = `wc -l` over all `*.ts` under main-branch `src/`. "ext deps" = non-`tslib` runtime deps in `package.json`. All listed packages have **zero** `@suaveplan/*` runtime dependencies in main — they can be migrated without any prior-package gating.
### Tier 1 — trivial leaves (≤ 1k LOC, 0–1 external dep)
1. **`wip`** — main src 18 LOC, ext deps: 0 (tslib only). Spec `enterprise/wip.md` 116 lines. The smallest possible leaf; effectively a placeholder package per spec — verify scope before swarming.
2. **`test-vite`** — main src 20 LOC, ext deps: `vite`, `vitest` (catalog). Spec `enterprise/test-vite.md` 101 lines. Tiny build-helper; pure tooling glue.
3. **`caddy-imgproxy`** — main src 49 LOC, ext deps: 0. Spec `enterprise/caddy-imgproxy.md` 118 lines. Server-tier image-proxy Caddy config emitter; very small.
4. **`overview`** — main src not in `src/` (skill loader package), 1 `@suaveplan/*` dep is install-time only per package.json structure (`deps: {}`). Spec `enterprise/overview.md` 116 lines. Already named in CLAUDE.md foundation; safe leaf.
5. **`storybook-test-utils`** — main src 392 LOC, ext deps: `@storybook/testing-library`, `@testing-library/react`, `react`. Browser-tier. Spec `enterprise/storybook-test-utils.md` 101 lines. Pure adapter shims.
6. **`spatial-hash`** — main src 663 LOC, ext deps: 0. Spec `enterprise/spatial-hash.md` 116 lines. Pure-algo gaming-adjacent broad-phase; trivial leaf despite categorisation note (CLAUDE.md says non-games scope here, but this is a generic data structure, not gameplay logic).
7. **`linter`** — main src 856 LOC, ext deps: `@biomejs/biome`, `glob`, `remark*`, `unified`, `unist-util-visit`. Spec 118 lines. Server-tier markdown/biome wrapper; many ext deps but all leaf-stable.
### Tier 2 — small leaves (~1–2k LOC, 0 `@suaveplan/*` runtime deps)
8. **`clipboard`** — main src 900 LOC, ext deps: 0. Browser-tier. Spec 104 lines.
9. **`mcp`** — main src 1024 LOC, ext deps: `zod`. Spec 119 lines. MCP server/client foundation; promising fresh-build candidate.
10. **`sandbox`** — main src 3432 LOC, ext deps: 0. Server-tier. Spec 118 lines. Larger but zero @suaveplan deps.
11. **`pdf`** — main src 9436 LOC, ext deps: 0. Server-tier. Spec 118 lines. Big but a clean leaf (likely consumes only pdfkit/puppeteer-style deps inlined as devDeps in main); inspect before swarming.
12. **`pwa`** — main src 2336 LOC, ext deps: 0. Browser-tier. Spec 115 lines.
13. **`emblem-solver`** — main src 2003 LOC, ext deps: 0. Spec 116 lines.
### Tier 3 — leaves with one `@suaveplan/*` runtime dep (gate one already-shipped pkg)
14. **`analytics-browser`** — 1037 LOC, depends on `@suaveplan/events` (shipped ✅).
15. **`web-workers`** — 961 LOC, depends on `@suaveplan/events` (shipped ✅).
16. **`storage-browser`** — 1724 LOC, depends on `@suaveplan/storage` (shipped ✅).
17. **`imessage-adapter`** — 718 LOC, depends on `@suaveplan/events` (shipped ✅).
18. **`video-thumbnails`** — 1067 LOC, depends on `@suaveplan/error` (shipped ✅).
19. **`sms-providers`** — 1755 LOC, depends on `@suaveplan/error` (shipped ✅).
### Tier 4 — multi-dep but all deps already shipped
20. **`media`** — 400 LOC; depends on `@suaveplan/mime` (shipped). Smallest of the multi-dep group. **Naming note:** the genesis category dir is also called `media/`, so the package will live at `packages/media/<plugin>/media/` — confirm plugin assignment in `scripts/folder-reorg/assignment.yml` before migration.
21. **`email-templates`** — 1953 LOC; React-tier (peer deps on `react`/`react-dom`). No @suaveplan runtime deps.
22. **`form-builder`** — 1355 LOC; `@suaveplan/error` + `@suaveplan/events` (both shipped).
23. **`ports`** — 2921 LOC; `@suaveplan/geo` (verify shipped; CLAUDE.md lists `geo` as shipped).
24. **`sms`** — 1389 LOC; `@suaveplan/error` + `@suaveplan/events` (both shipped).
25. **`docs`** — 1136 LOC; zero `@suaveplan/*` runtime deps (only `glob`/`remark*`/`unified`/`gray-matter`). Surprisingly a true leaf despite being listed mid-tier — could move to Tier 2 if confirmed.
26. **`video`** — 1517 LOC; `@suaveplan/error` + `@suaveplan/events` (both shipped).
27. **`dmx`** — 14012 LOC; `@suaveplan/events` + `@suaveplan/timing` (both shipped). **Largest pending** in scope.
28. **`electrobun`** — 2169 LOC; `@suaveplan/cli` + `@suaveplan/config` + `@suaveplan/templates` (all shipped) + external `iconz`.
### Noteworthy constraints
- **`docs` is misclassified in main as having deps** — the actual `dependencies` block is purely external (markdown toolchain). It's a true leaf.
- **`mcp`** at 1024 LOC + only `zod` is the highest-value/lowest-risk net-new build candidate; consider promoting in priority.
- **`overview`** is already listed under genesis foundation in CLAUDE.md as `overview` (machine-readable monorepo manifest). The `–` row in STATUS.md may be stale — **double-check disk** before swarming; if a sibling `overview` package exists outside the audited categories it may already be `✅` and just missing from this row's status. (My `find` against `packages/` for `overview` returned MISSING, so as of audit time the row is correct, but the spec sketches a richer surface than the CLAUDE.md description — reconcile before migration.)
- **`pdf` at 9.4k LOC and `dmx` at 14k LOC** are large enough that a single agent migration is risky — plan as multi-chunk OpenSpec changes (similar to recent api-plugin-campaigns chunks A/B/C).
- **`spatial-hash`** is technically gaming-category in CLAUDE.md taxonomy; user's scope filter excludes "games" but a generic spatial hash is a foundation data-structure — confirm whether it belongs in scope before migrating.
- **`storage-browser`** in main is superseded — the `2026-05-12-enterprise-browser-storage-browser-superseded-by-split` archive plus shipped `storage-browser-{indexeddb,localstorage,opfs}` rows in STATUS.md (lines 654/659 confirmed) means this row should likely be **retired**, not migrated. STATUS.md row at line 740 is stale; the package was split.