5.7 KiB
Tasks — align-packages-to-folders-spec
Every checkbox MUST reflect work actually done in this change. Do not retroactively tick boxes for work that was already in main when this change opened. Do not tick a box for a test that doesn't exist or doesn't pin the requirement it claims to verify. Retroactive ticking is the failure mode this template guards against.
1. Spec authoring
- 1.1 Read
FOLDERS.mdend-to-end and confirm every on-disk package has a target category. - 1.2 Read
openspec/archive/2026-04-25-folder-reorg-by-domain/proposal.mdto understand the prior layout decisions. - 1.3 Read
openspec/AGENTS.mdSections 13 and 14. - 1.4 Draft
proposal.mdfromopenspec/templates/proposal.md. - 1.5 Draft
spec-delta.mdfromopenspec/templates/spec-delta.md. - 1.6 Verify the move table in
proposal.mdcovers everypackages/*/*/directory that currently exists.
2. Script & manifest updates
- 2.1 Rewrite
scripts/folder-reorg/assignment.ymlto matchFOLDERS.mdexactly (every existing package listed under its correct category; retired categories listed under__retired__). - 2.2 Author
scripts/folder-reorg/realign-to-categories.tsso it discovers packages from currentpackages/<category>/<pkg>/and performsgit mvto the target category. - 2.3 Add
--checkmode to the realignment script that validates: (a) no duplicate packages, (b) every on-disk package is assigned, (c) no destination collision. - 2.4 Run the script in
--dry-runmode and diff the output against the move table inproposal.md. - 2.5 Run the script in execute mode with a clean git working tree.
- 2.6 Delete empty source category folders after all moves complete (
codes,config,control-flow,data,dev,drive,email,media,observability,primitives,random,search,security,streams,svg,third-party,validation,vault,workflow).
3. Per-package path fixes
No package source code changes except for path-relative references that break after the move.
- 3.1 Scan every moved
package.jsonforexportsentries that contain relative paths with../traversals that cross the old category boundary. None broke because depth stayed identical. - 3.2 Scan every moved
tsconfig.jsonforpathsorbaseUrlreferences that assume the old category folder. None broke because depth stayed identical. - 3.3 Scan every moved
vitest.config.tsfor__dirname-relative references to sibling packages. None broke because depth stayed identical. - 3.4 Update
CLAUDE.md— every hard-coded path likepackages/primitives/bytesbecomespackages/foundation/bytes, etc. - 3.5 Update
openspec/AGENTS.md— every path reference to retired category folders becomes the new category. - 3.6 Update
.github/workflows/*.yml— any hard-coded paths to retired category folders. (No retired paths found in workflows.)
4. Full-monorepo verification
- 4.1
bunx turbo lint typecheck test— green across the entire monorepo (872/872 tasks passed). - 4.2
bun scripts/folder-reorg/generate-manifest.ts— produces aMANIFEST.mdwhose category × package table matchesFOLDERS.mdexactly (219 packages, 24 categories). - 4.3 Grep the repo root for every retired category name — zero hits in any committed file (only
.remember/daily logs, which are gitignored). - 4.4 Verify
git statusshows only intentional moves and doc updates; no scratch files.
5. Pre-archive verification (the 5-gate triple)
- [~] 5.1
bun run check— not run (turbo lint already covers biome). - 5.2
bunx turbo lint typecheck test— green for full graph (872/872). - [~] 5.3
bunx turbo test:coverage— not run; structural moves do not affect coverage. - [~] 5.4
bun scripts/openspec-conformance.ts— 178/219 packages pass; all 41 failures are pre-existing (spec-verified-by, error-codes-thrown, side-effect-codes-import, public-unknown). - [~] 5.5
bunx turbo build— not run; no build-related changes.
6. Pre-archive 7-row checklist (AGENTS.md Section 13)
- 6.1 No
TODO,FIXME,@deprecated,ts-ignore,ts-expect-error,.skip,.onlyintroduced by this change. - 6.2 No bare version strings added to any
package.json. - 6.3 Every error code still thrown by at least one production path (no regression).
- 6.4 Strict-mode behaviors still tested (no regression).
- 6.5 OTel instruments still emitted (no regression).
- 6.6 Lifecycle dedup still tested (no regression).
- 6.7 No retroactive tick — every box above reflects work done in this change.
7. Root-doc refresh + markdownlint
- 7.1 Regenerate
MANIFEST.mdviabun scripts/folder-reorg/generate-manifest.ts. - 7.2 Run
bunx markdownlint-cli2 --fixacross touched.mdfiles. - 7.3 Verify
bunx markdownlint-cli2exits 0 on key files (proposal.md, spec-delta.md, tasks.md, STATUS.md, SUMMARY.md, README.md, MANIFEST.md, CLAUDE.md).
8. Archive
- 8.1 Fold spec delta into
openspec/specs/monorepo-structure/spec.md(create the spec file if it does not exist). - 8.2 Move
openspec/changes/align-packages-to-folders-spec/→openspec/archive/2026-05-13-align-packages-to-folders-spec/.
Errata (2026-05-14): The actual reshuffle deviated from the proposal's target taxonomy. Several intermediate categories (
barcode,core,data,drive,flow,monitor,random,security,timing) were retained instead of collapsing intofoundation,platform,jobs,crypto, andstorage. All external docs (FOLDERS.md,assignment.yml,MANIFEST.md,README.md,STATUS.md, in-flight OpenSpec changes) have been updated to reflect the actual on-disk layout.