Conversation
chee
commented
May 23, 2026
- defaults to subduction
- adds support for different folder strategies
- defautls to a vfs shape
- adds .pushworkignore support
- does less
Agent-Logs-Url: https://github.com/inkandswitch/pushwork/sessions/eabfbc7c-d4c1-4802-b282-d6de702ae606 Co-authored-by: chee <178266+chee@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
This PR is a major “pushwork@2.0.0” refactor that switches the default backend to Subduction, introduces pluggable “shape” encodings for folder strategies (defaulting to a VFS-style shape), adds .pushworkignore support, and migrates the test runner from Jest + shell scripts to Vitest-driven integration tests.
Changes:
- Replace the old core/snapshot/types/utils architecture with a new config/repo/shapes/fs-tree implementation.
- Add ignore loading (
.pushworkignore) and new “shape” encoders/decoders (vfs,patchwork-folder, and custom shapes). - Migrate testing from Jest/scripts to Vitest with new black-box CLI integration tests.
Reviewed changes
Copilot reviewed 80 out of 82 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| vitest.config.ts | Adds Vitest configuration (globals, node env, setup file, timeouts). |
| tsconfig.json | Removes Jest types from TS config. |
| test/unit/utils.test.ts | Removes legacy unit tests for old fs utilities. |
| test/unit/sync-timing.test.ts | Removes legacy unit tests around timing analysis. |
| test/unit/sync-convergence.test.ts | Removes legacy convergence tests tied to old snapshot/change-detection design. |
| test/unit/subduction-config.test.ts | Removes legacy tests for old config defaults/flags. |
| test/unit/repo-factory.test.ts | Removes legacy repo-factory subprocess tests. |
| test/unit/network-sync-sub.test.ts | Removes legacy waitForSync tests for old network-sync helper. |
| test/unit/enhanced-mime-detection.test.ts | Removes legacy enhanced MIME detection tests (old utils). |
| test/unit/deletion-behavior.test.ts | Removes legacy deletion behavior tests built around old snapshot model. |
| test/unit/artifact-nuke-reinsert.test.ts | Removes legacy sync-engine artifact regression test. |
| test/setup.ts | Adds Vitest setup mocking for ESM-only deps (chalk/ora). |
| test/run-tests.sh | Removes custom bash test runner. |
| test/jest.setup.ts | Removes Jest setup mocking file. |
| test/integration/sync-flow.test.ts | Removes legacy integration test suite (old config/core). |
| test/integration/sync-deletion.test.ts | Removes legacy deletion integration tests tied to old snapshot/core. |
| test/integration/sub-flag.test.ts | Removes legacy --sub integration tests (replaced by new backend semantics). |
| test/integration/README.md | Removes legacy integration-test documentation for scripts/Jest-based runner. |
| test/integration/manual-sync-test.sh | Removes legacy manual debug script. |
| test/integration/local.test.ts | Adds black-box integration tests for offline/local-only commands. |
| test/integration/init-sync.test.ts | Removes legacy init+sync integration tests. |
| test/integration/full-integration-test.sh | Removes legacy full integration bash script. |
| test/integration/exclude-patterns.test.ts | Removes legacy exclude-pattern integration tests (old listDirectory utils). |
| test/integration/deletion-sync-test.sh | Removes legacy deletion sync bash script. |
| test/integration/deletion-sync-test-simple.sh | Removes legacy simplified deletion bash script. |
| test/integration/debug-nested.sh | Removes legacy nested-directory debug script. |
| test/integration/debug-concurrent-nested.sh | Removes legacy concurrent nested-directory debug script. |
| test/integration/debug-both-nested.sh | Removes legacy “both nested” debug script. |
| test/integration/conflict-resolution-test.sh | Removes legacy conflict-resolution bash test. |
| test/integration/clone-test.sh | Removes legacy clone bash test. |
| src/version.ts | Adds version reporting utilities for dependencies/node. |
| src/utils/trace.ts | Removes legacy tracing helper. |
| src/utils/text-diff.ts | Removes legacy text diff/splice helpers. |
| src/utils/string-similarity.ts | Removes legacy string similarity helper. |
| src/utils/repo-factory.ts | Removes legacy repo construction/dynamic-import workaround module. |
| src/utils/mime-types.ts | Removes legacy enhanced MIME type detection module. |
| src/utils/index.ts | Removes legacy utils barrel export. |
| src/utils/fs.ts | Removes legacy fs helper module (listDirectory/read/write/etc). |
| src/utils/directory.ts | Removes legacy directory navigation helper. |
| src/utils/content.ts | Removes legacy content hash/equality helper. |
| src/types/snapshot.ts | Removes legacy snapshot type definitions. |
| src/types/index.ts | Removes legacy types barrel export. |
| src/types/documents.ts | Removes legacy document/type definitions (file/dir entries, enums). |
| src/types/config.ts | Removes legacy config/types/options definitions. |
| src/snarf.ts | Adds snarf storage/encode/decode helpers for local change capture. |
| src/shapes/vfs.ts | Adds VFS shape encoder/decoder (flat key→URL mapping). |
| src/shapes/types.ts | Adds shared shape and VFS tree types/utilities. |
| src/shapes/patchwork-folder.ts | Adds patchwork “folder doc” shape encoder/decoder. |
| src/shapes/index.ts | Adds shape resolution + exports for built-in/custom shapes. |
| src/shapes/file.ts | Adds file entry encoding/decoding helpers (bytes/content/pinning/artifacts). |
| src/shapes/custom.ts | Adds dynamic loading for user-provided custom shapes. |
| src/repo.ts | Adds repo opening logic for legacy/subduction backends + head-stability sync wait. |
| src/log.ts | Adds debug-based logging wrapper. |
| src/index.ts | Replaces broad exports with a curated public API surface. |
| src/ignore.ts | Adds .pushworkignore loading + always-ignore rules. |
| src/fs-tree.ts | Adds filesystem walking and (currently non-atomic) file writing helper. |
| src/core/snapshot.ts | Removes old SnapshotManager implementation. |
| src/core/move-detection.ts | Removes old MoveDetector implementation. |
| src/core/index.ts | Removes old core barrel export. |
| src/core/config.ts | Removes old ConfigManager implementation. |
| src/config.ts | Adds new config format (v4) and read/write helpers. |
| scripts/roundtrip-test.sh | Removes legacy roundtrip bash script. |
| README.md | Removes legacy README (features/commands/tests/profiling documentation). |
| pnpm-workspace.yaml | Adds pnpm workspace config (allowBuilds). |
| package.json | Bumps version to 2.0.0-preview.5, migrates Jest→Vitest, updates Automerge deps, adds debug, updates packaging files list. |
| babel.config.js | Removes Babel config (previously for Jest transforms). |
| ARCHITECTURE-ACCORDING-TO-CLAUDE.md | Removes generated architecture doc for the old codebase. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| } from "./pushwork.js"; | ||
| export type { HeadsEntry } from "./pushwork.js"; | ||
| export type { Snarf, SnarfEntry } from "./snarf.js"; | ||
| export type { Backend, PushworkConfig } from "./config.js"; | ||
| export { CONFIG_VERSION } from "./config.js"; | ||
| export type { Shape, VfsNode, UnixFileEntry } from "./shapes/index.js"; |
| return; | ||
| } | ||
| } | ||
| dlog("waitForSync timed out url=%s after %dms", handle.url, maxMs); |
| await fs.mkdir(path.dirname(target), { recursive: true }); | ||
| await fs.writeFile(target, bytes); |
Agent-Logs-Url: https://github.com/inkandswitch/pushwork/sessions/fdef5da3-44da-4c91-9a98-fa252a5d10e9 Co-authored-by: chee <178266+chee@users.noreply.github.com>
Add CI workflow to run tests
|
uh oh. this looks way nicer 👀 |
|
@copilot resolve the merge conflicts in this pull request |
Resolves merge conflicts in package.json and pnpm-lock.yaml. - Keeps 2.0.0-preview.8 version from two branch - Updates @automerge/automerge to 3.3.0-fragments.1 from main - Keeps Vitest test framework from two branch - Regenerates pnpm-lock.yaml
Resolved merge conflicts in Note: The 26 failing integration tests are pre-existing issues unrelated to the merge. |