Skip to content

refactor: decompose domain/services/ into 10 cohesive subdirectories#76

Merged
flyingrobots merged 6 commits intomainfrom
refactor/domain-services-decomposition
Apr 3, 2026
Merged

refactor: decompose domain/services/ into 10 cohesive subdirectories#76
flyingrobots merged 6 commits intomainfrom
refactor/domain-services-decomposition

Conversation

@flyingrobots
Copy link
Copy Markdown
Member

Summary

  • Cycle 0004 (design-only): audited the 83-file, 36k LOC flat domain/services/ directory via import graph analysis
  • Identified 10 cohesive groups with zero circular dependencies between them
  • Moved 59 files into subdirectories, updated all imports across 188 files
  • 25 shared kernel files remain in services/ root (JoinReducer, KeyCodec, PatchBuilderV2, etc.)

New structure

Subdirectory Files Responsibility
controllers/ 10 WarpRuntime delegation targets
codec/ 8 Wire format encoding/decoding
index/ 13 Roaring bitmap index lifecycle
state/ 6 Checkpoint/state serialization
sync/ 5 Multi-writer sync protocol
dag/ 4 Commit DAG algorithms (fully self-contained)
provenance/ 3 Paper III provenance tracking
query/ 5 Traversal + query engine
strand/ 2 Branch-and-compare
audit/ 2 Trust verification

No behavioral changes. All 5,150 tests pass.

Test plan

  • npm run test:local — 313 files, 5,150 tests pass
  • No module resolution errors in ESLint
  • No double-subdir paths from import rewriting
  • CI: full test matrix (node22, bun, deno)

Moves 59 files from the flat 83-file domain/services/ directory into
10 subdirectories based on import graph analysis (cycle 0004):

  controllers/  10 files  — WarpRuntime delegation targets
  codec/         8 files  — wire format encoding/decoding
  index/        13 files  — Roaring bitmap index lifecycle
  state/         6 files  — checkpoint/state serialization
  sync/          5 files  — multi-writer sync protocol
  dag/           4 files  — commit DAG algorithms
  provenance/    3 files  — Paper III provenance tracking
  query/         5 files  — traversal + query engine
  strand/        2 files  — branch-and-compare
  audit/         2 files  — trust verification

25 shared kernel files remain in services/ root.

No behavioral changes. All 5,150 tests pass.
All 10 CC_extract-services-* items from up-next/ are done —
decomposition landed in the previous commit.
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 3, 2026

Important

Review skipped

Too many files!

This PR contains 205 files, which is 55 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 46df1878-9353-4fa4-8b4b-ac339961fa79

📥 Commits

Reviewing files that changed from the base of the PR and between d5f99e2 and 21de3dd.

📒 Files selected for processing (205)
  • bin/cli/commands/debug/conflicts.js
  • bin/cli/commands/seek.js
  • bin/cli/commands/trust.js
  • bin/cli/commands/verify-audit.js
  • bin/cli/types.js
  • bin/presenters/text.js
  • docs/design/0004-domain-services-audit/analysis.md
  • docs/design/0004-domain-services-audit/witness.md
  • docs/method/backlog/asap/PROTO_patch-commit-atomic-cas.md
  • docs/method/backlog/asap/PROTO_patch-commit-visibility-contract.md
  • docs/method/backlog/asap/PROTO_same-writer-concurrent-patch-race.md
  • docs/method/backlog/up-next/CC_extract-services-audit.md
  • docs/method/backlog/up-next/CC_extract-services-codec.md
  • docs/method/backlog/up-next/CC_extract-services-controllers.md
  • docs/method/backlog/up-next/CC_extract-services-dag.md
  • docs/method/backlog/up-next/CC_extract-services-index.md
  • docs/method/backlog/up-next/CC_extract-services-provenance.md
  • docs/method/backlog/up-next/CC_extract-services-query.md
  • docs/method/backlog/up-next/CC_extract-services-state.md
  • docs/method/backlog/up-next/CC_extract-services-strand.md
  • docs/method/backlog/up-next/CC_extract-services-sync.md
  • eslint.config.js
  • index.js
  • src/domain/WarpApp.js
  • src/domain/WarpCore.js
  • src/domain/WarpRuntime.js
  • src/domain/services/HealthCheckService.js
  • src/domain/services/JoinReducer.js
  • src/domain/services/MaterializedViewService.js
  • src/domain/services/PatchBuilderV2.js
  • src/domain/services/VisibleStateComparisonV5.js
  • src/domain/services/VisibleStateScopeV1.js
  • src/domain/services/Worldline.js
  • src/domain/services/WormholeService.js
  • src/domain/services/audit/AuditReceiptService.js
  • src/domain/services/audit/AuditVerifierService.js
  • src/domain/services/codec/AnchorMessageCodec.js
  • src/domain/services/codec/AuditMessageCodec.js
  • src/domain/services/codec/CheckpointMessageCodec.js
  • src/domain/services/codec/MessageCodecInternal.js
  • src/domain/services/codec/MessageSchemaDetector.js
  • src/domain/services/codec/PatchMessageCodec.js
  • src/domain/services/codec/TrailerValidation.js
  • src/domain/services/codec/WarpMessageCodec.js
  • src/domain/services/controllers/CheckpointController.js
  • src/domain/services/controllers/ComparisonController.js
  • src/domain/services/controllers/ForkController.js
  • src/domain/services/controllers/MaterializeController.js
  • src/domain/services/controllers/PatchController.js
  • src/domain/services/controllers/ProvenanceController.js
  • src/domain/services/controllers/QueryController.js
  • src/domain/services/controllers/StrandController.js
  • src/domain/services/controllers/SubscriptionController.js
  • src/domain/services/controllers/SyncController.js
  • src/domain/services/dag/CommitDagTraversalService.js
  • src/domain/services/dag/DagPathFinding.js
  • src/domain/services/dag/DagTopology.js
  • src/domain/services/dag/DagTraversal.js
  • src/domain/services/index/BitmapIndexBuilder.js
  • src/domain/services/index/BitmapIndexReader.js
  • src/domain/services/index/BitmapNeighborProvider.js
  • src/domain/services/index/IncrementalIndexUpdater.js
  • src/domain/services/index/IndexRebuildService.js
  • src/domain/services/index/IndexStalenessChecker.js
  • src/domain/services/index/LogicalBitmapIndexBuilder.js
  • src/domain/services/index/LogicalIndexBuildService.js
  • src/domain/services/index/LogicalIndexReader.js
  • src/domain/services/index/PropertyIndexBuilder.js
  • src/domain/services/index/PropertyIndexReader.js
  • src/domain/services/index/StreamingBitmapIndexBuilder.js
  • src/domain/services/index/WarpStateIndexBuilder.js
  • src/domain/services/provenance/BoundaryTransitionRecord.js
  • src/domain/services/provenance/ProvenanceIndex.js
  • src/domain/services/provenance/ProvenancePayload.js
  • src/domain/services/query/AdjacencyNeighborProvider.js
  • src/domain/services/query/GraphTraversal.js
  • src/domain/services/query/LogicalTraversal.js
  • src/domain/services/query/Observer.js
  • src/domain/services/query/QueryBuilder.js
  • src/domain/services/state/CheckpointSerializerV5.js
  • src/domain/services/state/CheckpointService.js
  • src/domain/services/state/StateDiff.js
  • src/domain/services/state/StateReaderV5.js
  • src/domain/services/state/StateSerializerV5.js
  • src/domain/services/state/WarpStateV5.js
  • src/domain/services/strand/ConflictAnalyzerService.js
  • src/domain/services/strand/StrandService.js
  • src/domain/services/sync/HttpSyncServer.js
  • src/domain/services/sync/SyncAuthService.js
  • src/domain/services/sync/SyncPayloadSchema.js
  • src/domain/services/sync/SyncProtocol.js
  • src/domain/services/sync/SyncTrustGate.js
  • src/domain/warp/Writer.js
  • src/visualization/renderers/ascii/seek.js
  • test/benchmark/detachedReadBenchmark.fixture.js
  • test/benchmark/logicalIndex.benchmark.js
  • test/contract/NeighborProviderPort.contract.test.js
  • test/helpers/fixtureDsl.js
  • test/helpers/stateDigest.js
  • test/helpers/warpGraphTestUtils.js
  • test/integration/WarpGraph.integration.test.js
  • test/integration/api/materializedView.test.js
  • test/integration/api/multiwriter.test.js
  • test/unit/benchmark/detachedReadBenchmark.fixture.test.js
  • test/unit/domain/WarpGraph.autoCheckpoint.test.js
  • test/unit/domain/WarpGraph.conflicts.test.js
  • test/unit/domain/WarpGraph.coverageGaps.test.js
  • test/unit/domain/WarpGraph.frontierChanged.test.js
  • test/unit/domain/WarpGraph.invalidation.test.js
  • test/unit/domain/WarpGraph.lazyMaterialize.test.js
  • test/unit/domain/WarpGraph.observerBoundary.test.js
  • test/unit/domain/WarpGraph.patchCount.test.js
  • test/unit/domain/WarpGraph.patchesFor.test.js
  • test/unit/domain/WarpGraph.receipts.test.js
  • test/unit/domain/WarpGraph.seek.test.js
  • test/unit/domain/WarpGraph.seekDiff.test.js
  • test/unit/domain/WarpGraph.status.test.js
  • test/unit/domain/WarpGraph.strands.test.js
  • test/unit/domain/WarpGraph.test.js
  • test/unit/domain/WarpGraph.worldline.test.js
  • test/unit/domain/WarpGraph.writerInvalidation.test.js
  • test/unit/domain/WarpRuntime.snapshotHashStability.test.js
  • test/unit/domain/properties/Join.property.test.js
  • test/unit/domain/seekCache.test.js
  • test/unit/domain/services/AdjacencyNeighborProvider.test.js
  • test/unit/domain/services/AuditMessageCodec.test.js
  • test/unit/domain/services/AuditReceiptService.bench.js
  • test/unit/domain/services/AuditReceiptService.coverage.test.js
  • test/unit/domain/services/AuditReceiptService.test.js
  • test/unit/domain/services/AuditVerifierService.bench.js
  • test/unit/domain/services/AuditVerifierService.test.js
  • test/unit/domain/services/BitmapIndexBuilder.frontier.test.js
  • test/unit/domain/services/BitmapIndexBuilder.integrity.test.js
  • test/unit/domain/services/BitmapIndexBuilder.test.js
  • test/unit/domain/services/BitmapIndexReader.test.js
  • test/unit/domain/services/BitmapNeighborProvider.test.js
  • test/unit/domain/services/BoundaryTransitionRecord.test.js
  • test/unit/domain/services/CheckpointSerializerV5.test.js
  • test/unit/domain/services/CheckpointService.edgeCases.test.js
  • test/unit/domain/services/CheckpointService.test.js
  • test/unit/domain/services/CommitDagTraversalService.test.js
  • test/unit/domain/services/GraphTraversal.astar.test.js
  • test/unit/domain/services/GraphTraversal.bfs.test.js
  • test/unit/domain/services/GraphTraversal.crossProvider.test.js
  • test/unit/domain/services/GraphTraversal.dfs.test.js
  • test/unit/domain/services/GraphTraversal.dijkstra.test.js
  • test/unit/domain/services/GraphTraversal.levels.test.js
  • test/unit/domain/services/GraphTraversal.nodeWeight.test.js
  • test/unit/domain/services/GraphTraversal.rootAncestors.test.js
  • test/unit/domain/services/GraphTraversal.shortestPath.test.js
  • test/unit/domain/services/GraphTraversal.test.js
  • test/unit/domain/services/GraphTraversal.topoSort.test.js
  • test/unit/domain/services/GraphTraversal.transitiveClosure.test.js
  • test/unit/domain/services/GraphTraversal.transitiveReduction.test.js
  • test/unit/domain/services/HttpSyncServer.auth.test.js
  • test/unit/domain/services/HttpSyncServer.authorize.test.js
  • test/unit/domain/services/HttpSyncServer.test.js
  • test/unit/domain/services/IncrementalIndexUpdater.test.js
  • test/unit/domain/services/IndexRebuildService.deep.test.js
  • test/unit/domain/services/IndexRebuildService.streaming.test.js
  • test/unit/domain/services/IndexRebuildService.test.js
  • test/unit/domain/services/IndexStalenessChecker.test.js
  • test/unit/domain/services/JoinReducer.integration.test.js
  • test/unit/domain/services/LogicalBitmapIndexBuilder.stability.test.js
  • test/unit/domain/services/LogicalBitmapIndexBuilder.test.js
  • test/unit/domain/services/LogicalIndexBuildService.determinism.test.js
  • test/unit/domain/services/LogicalIndexBuildService.test.js
  • test/unit/domain/services/LogicalIndexReader.test.js
  • test/unit/domain/services/MaterializedView.equivalence.test.js
  • test/unit/domain/services/MigrationService.test.js
  • test/unit/domain/services/Observer.test.js
  • test/unit/domain/services/PatchBuilderV2.test.js
  • test/unit/domain/services/PropertyIndex.test.js
  • test/unit/domain/services/ProvenanceIndex.test.js
  • test/unit/domain/services/ProvenancePayload.test.js
  • test/unit/domain/services/SchemaCompat.test.js
  • test/unit/domain/services/StateDiff.test.js
  • test/unit/domain/services/StateSerializerV5.test.js
  • test/unit/domain/services/StreamingBitmapIndexBuilder.test.js
  • test/unit/domain/services/SyncAuthService.test.js
  • test/unit/domain/services/SyncController.test.js
  • test/unit/domain/services/SyncController.trustGate.test.js
  • test/unit/domain/services/SyncPayloadSchema.test.js
  • test/unit/domain/services/SyncProtocol.divergence.test.js
  • test/unit/domain/services/SyncProtocol.stateCoherence.test.js
  • test/unit/domain/services/SyncProtocol.test.js
  • test/unit/domain/services/SyncProtocol.wireGate.test.js
  • test/unit/domain/services/SyncTrustGate.test.js
  • test/unit/domain/services/TreeConstruction.determinism.test.js
  • test/unit/domain/services/VisibleStateScopeV1.test.js
  • test/unit/domain/services/WarpMessageCodec.test.js
  • test/unit/domain/services/WarpMessageCodec.v3.test.js
  • test/unit/domain/services/WarpStateIndexBuilder.test.js
  • test/unit/domain/services/WormholeService.test.js
  • test/unit/domain/services/logging.integration.test.js
  • test/unit/domain/services/noBufferGlobal.test.js
  • test/unit/domain/services/v3-compatibility.test.js
  • test/unit/domain/specCompliance.test.js
  • test/unit/domain/warp/Writer.test.js
  • test/unit/domain/warp/buildView.test.js
  • test/unit/domain/warp/checkpoint.gc-isolation.test.js
  • test/unit/domain/warp/hydrateCheckpointIndex.regression.test.js
  • test/unit/domain/warp/readPatchBlob.test.js
  • test/unit/security/protoPollution.test.js
  • test/unit/v7-guards.test.js

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/domain-services-decomposition

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

…int cleanup

H1: Fix PatchController JSDoc import('../services/JoinReducer.js')
    → import('../JoinReducer.js') (2 occurrences)
H2: Fix dag/ JSDoc import('../BitmapIndexReader.js')
    → import('../index/BitmapIndexReader.js') (5 occurrences)
M1: Update 48 stale @module tags in moved files to include subdirectory
M2: Remove completed backlog items from graveyard (graveyard is for
    rejected work per METHOD.md, not completed work)
L1: Remove duplicate eslint.config.js entries (StateReaderV5,
    SyncAuthService, GitGraphAdapter, ascii/path)
L2: Remove phantom WarpServeService.js eslint entry (file doesn't exist)
- query/Observer.js, query/QueryBuilder.js, query/LogicalTraversal.js,
  strand/StrandService.js, strand/ConflictAnalyzerService.js,
  sync/HttpSyncServer.js: ../WarpRuntime.js → ../../WarpRuntime.js
- state/StateReaderV5.js, query/Observer.js,
  controllers/ComparisonController.js: ../../../index.js → ../../../../index.js
- visualization/renderers/ascii/seek.js: services/StateDiff.js →
  services/state/StateDiff.js

tsc --noEmit: 0 errors. All 5,150 tests pass.
WarpApp.observer(), Worldline.observer(), and Observer.seek() return
values through the defineProperty delegation chain which ESLint
cannot trace. Suppressed with justification — return types are
declared in @returns JSDoc.

These 5 errors were already failing type-firewall on main.
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 3, 2026

Release Preflight

  • package version: 16.0.0
  • prerelease: false
  • npm dist-tag on release: latest
  • npm pack dry-run: passed
  • jsr publish dry-run: passed

If you tag this commit as v16.0.0, release workflow will publish.

markdownlint MD040 requires language specifiers on fenced code blocks.
Added `text` language tag to all bare fences in analysis.md and
witness.md.
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 3, 2026

Release Preflight

  • package version: 16.0.0
  • prerelease: false
  • npm dist-tag on release: latest
  • npm pack dry-run: passed
  • jsr publish dry-run: passed

If you tag this commit as v16.0.0, release workflow will publish.

@flyingrobots flyingrobots merged commit 8c90efa into main Apr 3, 2026
7 checks passed
@flyingrobots flyingrobots deleted the refactor/domain-services-decomposition branch April 3, 2026 19:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant