Coherent.js v1.0 — Wave 2a: Package Drops Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Spec: docs/superpowers/specs/2026-05-17-coherent-v1-hardening-design.md — Wave 2 (Section 1, "Dropped from 1.0" + "client/src/hydration.js deletion deferred from Wave 1").
Goal: Delete the three packages/modules the spec marks for removal — @coherent.js/runtime, @coherent.js/web-components, and the legacy packages/client/src/hydration.js — along with their tests, docs, and references. Leaves trunk green and shrinks the workspace from 26 packages to 24.
Architecture: Pure deletion, ordered to keep CI green between commits. runtime goes first (it consumes both web-components AND the legacy hydration.js, so removing it eliminates the only blockers to the next two deletions). web-components goes second (now has zero consumers). client/src/hydration.js and its legacy test suite go third (now safe — runtime was the last consumer).
Tech Stack: pnpm workspaces, Vitest, ESM only, Node ≥ 20.
Wave 2a NOT in scope (handled in later sub-plans):
- Package merges (
performance+profiler→devtools, three LSP packages →tooling,build-tools→cli) — Wave 2b integrations/consolidation (express/fastify/koa/nextjs/adapters → subpath exports) — Wave 2c- API surface lockdown, perf gates, HMR dev server, Playwright E2E — Waves 3, 4, 5
Pre-existing follow-ups already documented:
- Wave 1 CHANGELOG noted that
scripts/add-exports-sections.jsreferences removed forms APIs. Task 1 and Task 2 here trim that script'sruntimeandweb-componentssections at the same time, partially addressing that follow-up but not auditing the full script. - Wave 1 CHANGELOG noted that
packages/forms/README.mddocuments removed APIs — out of scope here; Wave 5 migration guide.
File Structure (changes by package)
| Path | Change | Reason |
|---|---|---|
packages/runtime/ (entire directory) |
Delete | Spec demotes runtime out of 1.0 |
packages/web-components/ (entire directory) |
Delete | Spec drops web-components from 1.0 |
packages/client/src/hydration.js |
Delete | Wave-1-deferred legacy file, runtime was its last consumer |
packages/client/test/event-system.test.js |
Delete | Tests the legacy registerEventHandler only |
packages/client/test/hydration-enhanced.test.js |
Delete | Tests legacy hydrate/hydrateAll/hydrateBySelector/makeHydratable |
packages/client/test/auto-hydration.test.js |
Delete | Tests legacy autoHydrate |
packages/client/test/integration-real.test.js |
Delete | Tests legacy hydration API |
packages/client/test/key-reconciliation.test.js |
Delete | Imports legacy hydration namespace |
packages/client/test/core-logic.test.js |
Modify | Drop Hydration Core Logic describe (lines 8-102); keep HMR Core Logic describe |
packages/client/types/hydration.d.ts |
Delete | Subpath-export types for the deleted module |
packages/client/package.json |
Modify | Remove ./hydration subpath export entry |
packages/client/build.mjs |
Modify (conditional) | Remove hydration.js from build inputs if present |
packages/client/tsconfig.typecheck.json |
Modify (conditional) | Remove types/hydration.d.ts from includes if present |
examples/runtime-features-demo.js |
Delete | Sole runtime example |
website/package.json |
Modify | Drop @coherent.js/runtime dependency |
docs/packages/runtime.md |
Delete | Doc for the deleted package |
docs/packages/web-components.md |
Delete | Doc for the deleted package |
docs/README.md |
Modify | Remove runtime + web-components bullets |
ARCHITECTURE.md |
Modify | Remove runtime + web-components from package tree |
DEVELOPMENT.md |
Modify | Same as above |
PUBLISHING_GUIDE.md |
Modify | Remove runtime + web-components from publish list |
.changeset/pre.json |
Modify | Drop runtime + web-components from prerelease tracking |
scripts/add-exports-sections.js |
Modify | Trim runtime + web-components sections |
pnpm-lock.yaml |
Modify | Regenerated by pnpm install |
CHANGELOG.md |
Modify | Add Unreleased entries for Wave 2a |
Pre-flight
- Step 1: Confirm clean working tree relative to Wave 1
Run: git status
Expected: only the pre-existing modifications carried from prior sessions (package.json, several tsconfig.tsbuildinfo files, packages/runtime/README.md). These are unrelated to Wave 1 or Wave 2a and should not be touched.
- Step 2: Confirm baseline is green
Run: pnpm test
Expected: green (~1792 tests). If something fails on a clean checkout of main, stop and investigate before proceeding — Wave 2a builds on a green baseline.
Task 1: Delete @coherent.js/runtime package
Files:
- Delete:
packages/runtime/(entire directory) - Delete:
examples/runtime-features-demo.js - Modify:
website/package.json(remove@coherent.js/runtimedependency) - Delete:
docs/packages/runtime.md - Modify:
docs/README.md(remove runtime bullet at line ~101) - Modify:
ARCHITECTURE.md(remove runtime entry at line ~100) - Modify:
DEVELOPMENT.md(remove runtime entry at line ~35) - Modify:
PUBLISHING_GUIDE.md(remove runtime entry at line ~38) - Modify:
.changeset/pre.json(remove runtime entry at line ~21) - Modify:
scripts/add-exports-sections.js(remove runtime entries at lines ~109-116 and ~244-256) - Modify:
pnpm-lock.yaml(regenerated)
Why first: runtime consumes both web-components (packages/runtime/src/index.js:9,65, runtimes/browser.js:8, types/index.d.ts:8) AND the legacy client/src/hydration.js (via @coherent.js/client for autoHydrate, makeHydratable). Removing runtime eliminates the only blockers to Tasks 2 and 3.
- Step 1: Confirm runtime consumers are exactly what's mapped
Run from /Users/thomasdrouvin/Perso/coherent:
grep -rn "@coherent.js/runtime\b" . \
--include="*.js" --include="*.ts" --include="*.json" --include="*.md" --include="*.mjs" \
2>/dev/null | grep -v "/node_modules/" | grep -v "/dist/" | grep -v "/coverage/" \
| grep -v "pnpm-lock.yaml" | grep -v "packages/runtime/" | grep -v "CHANGELOG"Expected output (or close — line numbers may shift): the list of files in the Files section above, plus docs/superpowers/ plan/spec files (which intentionally mention the package), plus ARCHITECTURE.md/DEVELOPMENT.md/PUBLISHING_GUIDE.md/docs/README.md/.changeset/pre.json. If anything else shows up, stop and add it to this task's scope.
- Step 2: Delete the runtime package directory
git rm -r packages/runtime- Step 3: Delete the runtime example
git rm examples/runtime-features-demo.js- Step 4: Remove runtime from
website/package.jsondependencies
Open website/package.json. Find the dependencies section (around line 13):
"@coherent.js/runtime": "1.0.0-beta.8",Delete that line. Verify trailing-comma syntax of the surrounding entries stays valid.
- Step 5: Delete
docs/packages/runtime.md
git rm docs/packages/runtime.md- Step 6: Remove runtime bullets from top-level docs
For each of these files, delete the line containing runtime/ or @coherent.js/runtime:
docs/README.md(around line 101:- \@coherent.js/runtime` - Universal runtime`)ARCHITECTURE.md(around line 100:│ ├── runtime/ # @coherent.js/runtime - Runtime enhancements)DEVELOPMENT.md(around line 35: same line as ARCHITECTURE.md)PUBLISHING_GUIDE.md(around line 38:7. \@coherent.js/runtime` - Enhanced runtimes`)
Each deletion is just one line. Read each file before editing to confirm the exact line number (they may have drifted).
- Step 7: Remove runtime from
.changeset/pre.json
Open .changeset/pre.json. Find the entry around line 21:
"@coherent.js/runtime": "1.0.0-beta.5",Delete that line. Verify trailing-comma syntax stays valid.
- Step 8: Trim
scripts/add-exports-sections.js
Open scripts/add-exports-sections.js. Find:
The runtime entry around lines 109-116:
'Universal runtime: `@coherent.js/runtime`', 'Browser runtime: `@coherent.js/runtime/browser`', 'Edge runtime: `@coherent.js/runtime/edge`', 'Static runtime: `@coherent.js/runtime/static`', 'Desktop runtime: `@coherent.js/runtime/desktop`' ], example: `import { createCoherent } from '@coherent.js/runtime'; import { createBrowserApp } from '@coherent.js/runtime/browser';`The example block around lines 244-256 with
createCoherent/createBrowserApp/createEdgeAppimports.
For both: delete the entire surrounding object/section that targets @coherent.js/runtime. Read the file structure first to identify the object boundaries (they appear to be entries in an array of { section, content, example } objects). Remove the whole runtime entry and any trailing comma on the prior entry that would become a trailing comma at end-of-array.
If the script becomes too fragile to edit safely (e.g., heredoc strings break trivial sed), just remove the smallest necessary chunks to leave the file syntactically valid. Verify with node --check scripts/add-exports-sections.js.
- Step 9: Regenerate the lockfile
Run: pnpm install
Expected: lockfile updates to drop runtime references. Verify with grep "@coherent.js/runtime" pnpm-lock.yaml — should return nothing (or only historical references in dependency hash trees, which is fine).
- Step 10: Full test + typecheck + build
Run:
pnpm test
pnpm typecheck:packages
pnpm buildExpected: all green. The runtime package's own tests (~50 cases) are gone, so total test count drops accordingly. No other package should break — runtime was only consumed by web-components-internal code (which is also doomed) and the website (which only used it as a dependency declaration, not in source).
If anything fails: most likely the scripts/add-exports-sections.js edits introduced a syntax error, or the website's package.json change broke pnpm install because of a peer-dep cycle. Fix and re-run.
- Step 11: Commit
git add -A packages website docs ARCHITECTURE.md DEVELOPMENT.md PUBLISHING_GUIDE.md .changeset scripts examples pnpm-lock.yaml
git commit -m "$(cat <<'EOF'
refactor(runtime): drop @coherent.js/runtime package from 1.0
The universal-runtime story (edge workers, Deno, Bun, etc.) is post-1.0.
Removes the runtime package, its example, its docs, and its dependency
declaration in the website. The package may re-emerge in a sibling
extras repo at 0.x but is no longer maintained in the main monorepo.
Part of Wave 2a (drops) for v1.0 stable hardening.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"Pre-commit hook runs full lint + typecheck + test + build (~3-5 min). If it fails, fix and commit again (new commit, do NOT amend).
Task 2: Delete @coherent.js/web-components package
Files:
- Delete:
packages/web-components/(entire directory) - Delete:
docs/packages/web-components.md - Modify:
docs/README.md(remove web-components bullet at line ~118 — note line may have shifted after Task 1) - Modify:
ARCHITECTURE.md(remove web-components entry at line ~102 — note line may have shifted) - Modify:
DEVELOPMENT.md(remove web-components entry at line ~37 — note line may have shifted) - Modify:
PUBLISHING_GUIDE.md(remove web-components entry at line ~50 — note line may have shifted) - Modify:
.changeset/pre.json(remove web-components entry at line ~25 — note line may have shifted) - Modify:
scripts/add-exports-sections.js(remove web-components section at lines ~197-199 — note line may have shifted) - Modify:
pnpm-lock.yaml(regenerated)
Why second: After Task 1 deletes runtime, web-components has zero consumers in the repo (verified — every match in the original grep was either inside packages/runtime/ or in docs/changelog files). Hard delete is safe.
- Step 1: Re-verify zero consumers
grep -rn "@coherent.js/web-components" . \
--include="*.js" --include="*.ts" --include="*.json" --include="*.md" --include="*.mjs" \
2>/dev/null | grep -v "/node_modules/" | grep -v "/dist/" | grep -v "/coverage/" \
| grep -v "pnpm-lock.yaml" | grep -v "packages/web-components/" | grep -v "CHANGELOG"Expected output: only docs files listed in the Files section above, plus docs/superpowers/ plan/spec files. No *.js / *.ts consumers in packages/ or examples/ or website/. If a .js/.ts consumer turns up, stop and report — Task 1 left a thread loose.
- Step 2: Delete the web-components package directory
git rm -r packages/web-components- Step 3: Delete
docs/packages/web-components.md
git rm docs/packages/web-components.md- Step 4: Remove web-components bullets from top-level docs
For each of these files, delete the line referencing web-components:
docs/README.md(look for\@coherent.js/web-components` - [Custom Elements]`)ARCHITECTURE.md(look for│ └── web-components/)DEVELOPMENT.md(look for│ └── web-components/)PUBLISHING_GUIDE.md(look for\@coherent.js/web-components``)
Read each file first to confirm the exact current line number (Task 1 already shifted line counts).
- Step 5: Remove web-components from
.changeset/pre.json
Open .changeset/pre.json. Find the entry:
"@coherent.js/web-components": "1.0.0-beta.5"Delete that line. Fix trailing-comma syntax of the prior entry.
- Step 6: Trim
scripts/add-exports-sections.js
Open scripts/add-exports-sections.js. Find the web-components section (around line 197 in pre-Task-1 numbering):
'Web Components: `@coherent.js/web-components`'
...
example: `import { defineComponent } from '@coherent.js/web-components';`Delete the surrounding object/section. Run node --check scripts/add-exports-sections.js to confirm syntax.
- Step 7: Regenerate the lockfile
pnpm installVerify: grep "@coherent.js/web-components" pnpm-lock.yaml returns nothing meaningful.
- Step 8: Full test + typecheck + build
pnpm test
pnpm typecheck:packages
pnpm buildExpected: all green. Web-components had its own test suite (verify what it contained — should be just a small set of tests on defineComponent and Shadow DOM helpers). Those go away with the package. Total test count drops slightly.
- Step 9: Commit
git add -A packages docs ARCHITECTURE.md DEVELOPMENT.md PUBLISHING_GUIDE.md .changeset scripts pnpm-lock.yaml
git commit -m "$(cat <<'EOF'
refactor(web-components): drop @coherent.js/web-components package from 1.0
The single-file Web Components / Custom Elements integration is not a
1.0 priority and had only one in-repo consumer (the now-deleted runtime
package). Removes the package, its 151 lines of source, its docs, and
its changeset tracking entry.
Part of Wave 2a (drops) for v1.0 stable hardening.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"Task 3: Delete legacy client/src/hydration.js + its test ecosystem
Files:
- Delete:
packages/client/src/hydration.js(1,857 lines) - Delete:
packages/client/types/hydration.d.ts - Delete:
packages/client/test/event-system.test.js - Delete:
packages/client/test/hydration-enhanced.test.js - Delete:
packages/client/test/auto-hydration.test.js - Delete:
packages/client/test/integration-real.test.js - Delete:
packages/client/test/key-reconciliation.test.js - Modify:
packages/client/test/core-logic.test.js(dropHydration Core Logicdescribe block — lines 8-102 — keepHMR Core Logicdescribe block at lines 104+) - Modify:
packages/client/package.json(remove./hydrationsubpath export) - Modify (conditional):
packages/client/build.mjs(drophydration.jsfrom build inputs if listed) - Modify (conditional):
packages/client/tsconfig.typecheck.json(droptypes/hydration.d.tsfrom includes if listed)
Why third: Wave 1 deferred this deletion because runtime consumed hydration.js's legacy exports (autoHydrate, makeHydratable, etc.). Task 1 of this wave deleted runtime, so the file now has only test consumers — all of which test the deleted API and should be deleted along with it. The modern hydration system in client/src/hydration/ (modular subdirectory) is unaffected and has its own test coverage independent of this file.
Step 1: Pre-check — confirm no surprise consumers
Run:
grep -rn "from.*['\"]\.\./hydration\.js['\"]\|from.*['\"]\.\./\.\./hydration\.js['\"]\|@coherent.js/client/hydration\b\|client/src/hydration\.js" . \
--include="*.js" --include="*.ts" --include="*.json" --include="*.mjs" \
2>/dev/null | grep -v "/node_modules/" | grep -v "/dist/" | grep -v "/coverage/" \
| grep -v "pnpm-lock.yaml" | grep -v "packages/client/package.json" \
| grep -v "packages/client/types/hydration.d.ts" \
| grep -v "packages/client/src/hydration.js"Expected: only the 7 test files listed in the Files section (event-system, hydration-enhanced, auto-hydration, integration-real, key-reconciliation, core-logic). If anything else turns up, stop and report — Task 1 should have cleared everything else.
Step 2: Delete the legacy hydration source and types
git rm packages/client/src/hydration.js
git rm packages/client/types/hydration.d.tsStep 3: Delete the legacy hydration test files
git rm packages/client/test/event-system.test.js \
packages/client/test/hydration-enhanced.test.js \
packages/client/test/auto-hydration.test.js \
packages/client/test/integration-real.test.js \
packages/client/test/key-reconciliation.test.jsStep 4: Trim core-logic.test.js
Open packages/client/test/core-logic.test.js. The file currently has two describe blocks:
describe('Hydration Core Logic', ...)— lines 8 through ~102, all tests exercise the deleted../src/hydration.jsdescribe('HMR Core Logic', ...)— line ~104 onward, exercises the Wave 1 throw-shim and pure-logic message processing
Delete the entire Hydration Core Logic describe block. The resulting file should start with the imports + comment block (lines 1-6), then go directly to describe('HMR Core Logic', ...).
After the edit, the file should look like:
/**
* Core logic tests that verify the actual implementation
* These tests focus on the algorithms and business logic
*/
import { describe, it, expect, vi } from 'vitest';
describe('HMR Core Logic', () => {
it('throws an informative migration error when legacy hmr.js is imported directly', async () => {
await expect(import('../src/hmr.js')).rejects.toThrow(/Coherent\.js 1\.0/);
await expect(import('../src/hmr.js')).rejects.toThrow(/coherentjs\.dev\/docs\/migration\/1\.0/);
});
it('should test HMR message processing logic', () => {
// ... existing body unchanged ...
});
it('should test URL construction logic', () => {
// ... existing body unchanged ...
});
});(Don't edit the bodies of the surviving it blocks — just delete the Hydration Core Logic describe and leave HMR Core Logic untouched.)
Step 5: Remove ./hydration subpath export from packages/client/package.json
Open packages/client/package.json. In the exports field (around lines 8-29), delete:
"./hydration": {
"types": "./types/hydration.d.ts",
"default": "./src/hydration.js"
},The surrounding entries (., ./events, ./router, ./hmr) stay. Verify trailing-comma JSON syntax.
Step 6: Check (and update if needed) build / typecheck configs
Read packages/client/build.mjs. If it contains a list of input files that includes 'src/hydration.js' or similar, remove that entry. If it uses a glob pattern that auto-discovers src/*.js, no edit needed — the file is just gone from the glob result.
Read packages/client/tsconfig.typecheck.json. If types/hydration.d.ts is listed in include or files, remove it. If the config uses a glob like types/*.d.ts, no edit needed.
Step 7: Full test + typecheck + build
pnpm --filter @coherent.js/client run test
pnpm --filter @coherent.js/client run typecheck
pnpm --filter @coherent.js/client run build
pnpm test
pnpm typecheck:packages
pnpm buildExpected: all green.
- The client package's test count will drop substantially (~6 test files plus a describe block deleted).
- The remaining client tests should still cover the modern hydration system (
src/hydration/subdirectory) via its own test files — verify by listingpackages/client/test/and confirming you still see tests likehydration-modern.test.jsor whatever names exist for the modular system. If suspiciously little remains, flag it as a coverage concern in the commit message.
Step 8: Commit
git add -A packages/client
git commit -m "$(cat <<'EOF'
refactor(client): delete legacy hydration.js and its test ecosystem
Removes the 1,857-line legacy hydration module that was kept for one
wave to support @coherent.js/runtime. Runtime was deleted in Task 1
of this wave, so the file now has no consumers. Drops the 5 legacy
hydration test files plus the Hydration Core Logic describe block
from core-logic.test.js (HMR Core Logic block kept). Removes the
./hydration subpath export from package.json and deletes the
corresponding types/hydration.d.ts.
The modern hydration system in src/hydration/ (modular subdirectory)
is unaffected and remains the only hydration API.
Part of Wave 2a (drops) for v1.0 stable hardening.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"Task 4: Wave 2a verification + CHANGELOG entry
Files:
- Modify:
CHANGELOG.md(extend Unreleased section)
Step 1: Full pre-flight quality gate
Run:
pnpm test
pnpm lint
pnpm typecheck && pnpm typecheck:packages
pnpm clean && pnpm buildThe pnpm clean && pnpm build is important — it catches stale dist/ artifacts from before the deletions that could mask issues (this is exactly how Task C of Wave 1 ended up with a follow-up fix). Expected: all four commands green.
If anything fails, report BLOCKED — do NOT make code edits in this task to fix regressions. The brief is: Wave 2a's three prior tasks each ran a pre-commit hook that exercised the full pipeline, so failures here would mean either a stale-build issue or a cross-task interaction.
Step 2: Confirm the workspace shrank to 24 packages
Run:
ls packages/ | wc -lExpected: 24 (was 26 before Wave 2a). Verify:
test -d packages/runtime && echo "FAIL: runtime still exists" || echo "OK: runtime gone"
test -d packages/web-components && echo "FAIL: web-components still exists" || echo "OK: web-components gone"
test -f packages/client/src/hydration.js && echo "FAIL: legacy hydration.js still exists" || echo "OK: legacy hydration.js gone"All three should print OK.
Step 3: Extend the ## [Unreleased] section of CHANGELOG.md
Open CHANGELOG.md. Find the existing ## [Unreleased] section (added in Wave 1 Task F, located around line 55). UNDER the existing Wave 1 entries, append a new subsection so the Unreleased section now reads (Wave 1 entries are shown for context — do NOT duplicate them):
## [Unreleased]
### Removed (Wave 1)
- ... existing Wave 1 entries unchanged ...
### Changed (Wave 1)
- ... existing Wave 1 entries unchanged ...
### Known follow-ups (Wave 1)
- ... existing Wave 1 entries unchanged ...
### Removed (Wave 2a)
- **BREAKING:** Removed `@coherent.js/runtime` package. The universal-runtime story (edge workers, Deno, Bun, Electron, Tauri) is post-1.0. Migration: there is no drop-in replacement in 1.0 — consumers should pin their existing `1.0.0-beta.8` version or use the underlying `@coherent.js/core` + framework-specific integration packages directly.
- **BREAKING:** Removed `@coherent.js/web-components` package. The single-file Custom Elements integration had no consumers outside the also-removed runtime package. Consumers should pin `1.0.0-beta.8` if they need the integration, or fold the small amount of code into their own project.
- **BREAKING (client):** Deleted `packages/client/src/hydration.js` and removed the `./hydration` subpath export from `@coherent.js/client/package.json`. Wave 1 already removed the legacy named exports from the main entry; this completes the removal by deleting the underlying file and types. Modern hydration via `import { hydrate } from '@coherent.js/client'` is unchanged.
- Deleted 5 test files (`event-system.test.js`, `hydration-enhanced.test.js`, `auto-hydration.test.js`, `integration-real.test.js`, `key-reconciliation.test.js`) and the `Hydration Core Logic` describe block of `core-logic.test.js` — all exercised the legacy hydration API only.
### Changed (Wave 2a)
- `scripts/add-exports-sections.js` no longer generates README sections for `runtime` or `web-components` packages (they don't exist).
- `website/package.json` no longer declares a dependency on `@coherent.js/runtime`.
### Notes (Wave 2a)
- Workspace shrank from 26 to 24 packages (`web-components`, `runtime` removed).
- Pre-existing Wave 1 follow-up about `scripts/add-exports-sections.js` referencing removed APIs is partially addressed (runtime + web-components sections trimmed); the forms references it carried will be addressed in Wave 5 doc cleanup.Notes:
- Place the Wave 2a subsections AFTER the existing Wave 1 ones, not interleaved.
- Use the exact heading text
### Removed (Wave 2a),### Changed (Wave 2a),### Notes (Wave 2a)so the Wave-1-vs-Wave-2a distinction is visible in the file. - Do NOT modify or duplicate the Wave 1 entries.
Step 4: Commit
git add CHANGELOG.md
git commit -m "$(cat <<'EOF'
docs(changelog): record Wave 2a drops
Documents the removal of @coherent.js/runtime, @coherent.js/web-components,
and the legacy packages/client/src/hydration.js along with its 5 test
files and the Hydration Core Logic describe block.
Closes Wave 2a of v1.0 stable hardening. Trunk is green; workspace is
now 24 packages (was 26). Ready for Wave 2b (package merges:
performance+profiler → devtools, three LSP packages → tooling,
build-tools → cli).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"Step 5: Final confirmation
git log --oneline f86a8a2..HEADExpected output (most recent first): your new CHANGELOG commit, then the Task 3 commit (hydration.js deletion), then the Task 2 commit (web-components), then the Task 1 commit (runtime). Four commits total.
git status --shortExpected: only pre-existing unrelated unstaged drift carried from prior sessions. Nothing from Wave 2a tasks left uncommitted.
Post-Wave-2a handoff
Wave 2a is done. Workspace is now 24 packages.
Next plans (each gets its own document):
- Wave 2b — Internal merges:
performance+profiler→devtools;build-tools→cli; newtoolingpackage absorbinglanguage-server+language-service+vscode-extension+testing. Plans for this should be drafted after Wave 2a merges so the workspace topology is current. - Wave 2c —
integrationsconsolidation: Newintegrationspackage with subpath exports forexpress,fastify,koa,nextjs, and the three adapters (astro/remix/sveltekit). The biggest restructure — many downstream consumers, lots of import-path renames. - Wave 3 — Lockdown (per spec).
- Wave 4 — Browser parity (per spec).
- Wave 5 — Release (per spec).
Reasoning for sub-plans per wave: each sub-plan produces shippable trunk and the post-deletion state materially changes the import topology for the next chunk. Writing all of Wave 2's sub-plans at once would generate stale instructions by Wave 2c.