4.9 KiB
4.9 KiB
Tasks — @suaveplan/streams-metadata
- Change ID: enterprise-streams-metadata
- Package:
@suaveplan/streams-metadata - Target path:
packages/foundation/flow/streams-metadata
0. Pre-flight (non-negotiable)
- 0.1 Confirm clean working tree (
git statusreports nothing) and no in-flight worktrees with uncommitted work (git worktree listthengit statusin each) - 0.2 Worktree under
.claude/worktrees/agent-a9864414c72f2d392is the active migration worktree branched offgenesis@ea6e6df5d; branch renamed tofeat/streams-metadatabefore any code was written - 0.3 Confirm the package set in
MANIFEST.mdmatches the actual package tree; regenerate viabun scripts/folder-reorg/generate-manifest.tsbefore archive
1. Spec authoring
- 1.1 Read upstream source at
/mnt/s/web/suaveplan/packages/universal/streams-metadata/end to end - 1.2 Read upstream enterprise audit
/mnt/s/web/suaveplan/enterprise/streams-metadata.md - 1.3 Read genesis reference packages:
@suaveplan/streams(parentBaseTransform),@suaveplan/mime(detection API),@suaveplan/exif(readMetadatasemantics) - 1.4 Draft
proposal.mdwith parity checklist + design upgrades - 1.5 Draft
specs/streams-metadata/spec.md— every requirement carries a**Verified by:**line at authoring time
2. Implementation — scaffold
- 2.1 Create
packages/foundation/flow/streams-metadata/withpackage.json(@suaveplan/streams-metadata, version0.1.0,sideEffects: false) - 2.2 Workspace deps:
@suaveplan/error workspace:^,@suaveplan/events workspace:^,@suaveplan/exif workspace:^,@suaveplan/mime workspace:^,@suaveplan/streams workspace:^,@suaveplan/types workspace:^,tslib catalog:build - 2.3 Dev deps:
@suaveplan/testing workspace:^,@types/node catalog:,@vitest/coverage-istanbul catalog:testing,typescript catalog:,vite catalog:build,vite-plugin-dts catalog:build,vitest catalog:testing - 2.4
tsconfig.lib.jsonextends../../../../tsconfig.base.json;vite.config.tsmirrors@suaveplan/streams;vitest.config.tsenforces 100/100/100/100 thresholds (provider: 'istanbul') - 2.5 All test files import runner primitives from
@suaveplan/testing/runnerper CLAUDE.md §11
3. Implementation — features
- 3.1
src/errors/errors.ts—defineCodes("STREAMS_METADATA", [...])registry +StreamsMetadataErrorbase + factory subclasses - 3.2
src/types/payload.ts—MetadataMode,MetadataPayload,MimeDetectionResult,EnrichedPayload - 3.3
src/types/process-options.ts—ProcessOptionsshape (signal + clock + logger) structurally compatible withBaseTransform - 3.4
src/events/events.ts—StreamsMetadataEventstype alias - 3.5
src/mime/mime.ts—MimeTransform extends BaseTransform<{}, StreamsMetadataEvents>+MimeTransformOptions; module-load registration of JPEG / PNG signatures via@suaveplan/mime::registerSignatureto defeat the upstream mime dist tree-shake - 3.6
src/exif/exif.ts—ExifTransform extends BaseTransform<{}, StreamsMetadataEvents>+ExifTransformOptions(withread?: ReadOptionspass-through) - 3.7
src/metadata/metadata.ts—MetadataTransform extends BaseTransform<{}, StreamsMetadataEvents>composing children; forwardsmime:detected+exif:detected; emitsmetadata:completeormetadata:error
4. Tests
- 4.1 Sibling
.test.tsfor every implementation file undersrc/; everyit(...)carries{ timeout: 5000 } - 4.2
errors.test.ts— every code resolves through the registry, error chain preservescause - 4.3
mime.test.ts— magic-bytes wins over extension, extension fallback, octet-stream fallback, event emission, passthrough, listener errors swallowed - 4.4
exif.test.ts— JPEG / PNG happy path, gibberish raisesExifFailedError, read options forwarded, passthrough, abort handling - 4.5
metadata.test.ts— happy path composes, child failure emitsmetadata:error+ returns original input, event forwarding, passthrough, dispose chains children
5. Documentation
- 5.1 Sibling
.mdper implementation.tswith all six required sections - 5.2 Root
README.mdlinking every co-located.md
6. Pre-publish gate
- 6.1
bunx biome check src/exits clean - 6.2
bunx tsc --noEmit --composite false -p tsconfig.lib.jsonexits clean - 6.3
bunx vitest run --coverageat 100/100/100/100 - 6.4
bun ../../../../scripts/docs-check.ts .exits clean - 6.5 Zero direct
vitest/bun:testimports insrc/
7. Archive
- 7.1 Fold
specs/streams-metadata/spec.mdintoopenspec/specs/streams-metadata/spec.md - 7.2
git mv openspec/changes/enterprise-streams-metadata openspec/archive/2026-05-23-enterprise-streams-metadata - 7.3 Regenerate
MANIFEST.md(bun scripts/folder-reorg/generate-manifest.ts)