[CI][Docs] Trim stale service/store-postgres references from tooling and docs - #292
Merged
vedanshujain merged 2 commits intoSep 20, 2026
Merged
Conversation
INC-D3b removed packages/service and packages/store-postgres. Two kinds of reference to them survived, and both are the sort that rots quietly. `.dependency-cruiser.cjs`: `plugin-is-sandbox-clean` banned `service` in all three of its spellings — the node_modules path, the bare specifier and the `^packages/` path. A ban on a package that cannot be imported is a clause no fixture can exercise, so nothing would notice if it stopped matching, which is precisely the failure mode the `^node:`-only builtin clause had for months. Dropped, with the reasoning recorded in the rule's own comment next to the three narrowings before it. store-postgres was never named literally in that rule: it was caught by the `(?!store-emdash(/|$))store-[^/]+` lookahead, which is untouched. That is the difference the cleanup turns on — the lookahead is a statement about the store family and still bans a store-postgres reintroduced tomorrow, whereas `service` was a statement about one dead package. `domain-is-io-free` and `store-emdash-is-sandbox-clean` still name `service`; they are out of this increment's scope and are flagged rather than edited. `depcruise-boundary.test.ts`: the "unresolved service import is forbidden" case tested the clause that is gone, so it goes with it. The store case is the one worth keeping — it is the only one exercising the RESOLVED half of the store ban — so its fixture moves from `store-postgres` to a `store-sqlite` stub that is deliberately not a real package, and the suite stops depending on whichever SQL adapter happens to exist. CLAUDE.md: the `[Service]` tag row named an area that no longer exists, and the status paragraph listed `@otta-sh/service` among the packages under `packages/`. The adapters row loses its postgres/sqlite/d1 examples for the same reason. CI needed no change and gets none: there is no service matrix and no service deploy job — `unit` and `integration` are both workspace-wide. Verified by grep, not assumed. The Postgres service container and `test:pg` stay: store-emdash still needs a real database for the no-oversell race. No changeset: nothing under `packages/*/src` changed, so no published package's behaviour moves. Verified: pnpm lint green (551 modules, no violations), pnpm typecheck green, pnpm format:check green, depcruise-boundary.test.ts 16/16 passing, changeset status exit 0. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CQbJYWWm8tf8owshm7XRp8
Two files outside this increment's named scope carried the same rot it was opened to clear, and nothing later in the plan reaches them. CONTRIBUTING.md's PR-tag table was a copy of the one CLAUDE.md already had fixed: a `[Service]` row for a package that no longer exists, and an adapters row naming postgres/sqlite/d1. A contributor reading it would pick a tag for a deleted package. Fixed the same way CLAUDE.md was — the `[Service]` row is gone, and the adapters row names the three adapter packages that survive. DEVELOPMENT.md §3 claimed the REST API in `@otta-sh/service` mirrors the port 1:1 and that the contract suite runs against `HttpCommerceClient` over a live test server. Both were deleted with the service. CLAUDE.md's non-negotiables cite DEVELOPMENT.md as the authority for that section, so the two documents contradicted each other. Restated rather than dropped: what verification looks like now is the same behavioral suite, running every case it ever ran, against the one in-process tier over a real document store, with `ctx.http` bound to a rejecting stub. `domain-is-io-free` and `store-emdash-is-sandbox-clean` still hardcode `service`. That is outside this increment's scope and is a comment-level inaccuracy rather than a behavior change — a ban on a package that cannot be imported can never fire — so each now carries a one-line pointer to #291 instead of being edited here. The reported intermittent failure in depcruise-boundary.test.ts did not reproduce: ten consecutive standalone runs were 16/16 green. The harness has no shared mutable state to race on — one mkdtemp per run, every filesystem call synchronous, depcruise invoked through spawnSync, and cases within the file sequential. No test change. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CQbJYWWm8tf8owshm7XRp8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
INC-D3c: remove stale references to the two packages deleted in the prior increment
(
@otta-sh/service,@otta-sh/store-postgres) from tooling config and docs..dependency-cruiser.cjs: removed the dead|servicealternative fromplugin-is-sandbox-clean's path regex (3 spellings), corrected stale prose inconsole-imports-no-workspace-package's comment.domain-is-io-freeandstore-emdash-is-sandbox-cleanare left untouched per the plan's literal scope, but nowcarry
TODO(#291)markers since they still name "service" too — tracked in [CI] Two dependency-cruiser rules still name the deletedservicepackage #291, filed aspart of this increment.
packages/plugin/test/depcruise-boundary.test.ts: dropped the now-meaningless "unresolvedservice import is forbidden" test case; re-fixtured the SQL-store test case from a
store-postgresstub to a fictionalstore-sqlitestub so the suite no longer depends onany real adapter existing.
CLAUDE.md: removed the[Service]row from the PR-tag table; corrected the statusparagraph and adapter examples to list only packages that exist.
CONTRIBUTING.md: mirrored the same PR-tag table fix (dropped[Service]row, adapterswording corrected to
store-emdash, stripe, x402).DEVELOPMENT.md: restated (not deleted) the stale "REST API in@otta-sh/service... overa live test server" verification bullet to describe the actual current architecture — the
contract suite runs in-process via
InProcessCommerceClient/makeCommerceClientover@otta-sh/store-emdash, withctx.httpbound to a rejecting stub — so it no longercontradicts CLAUDE.md's own non-negotiables, which cite DEVELOPMENT.md as authoritative.
Review
Two independent reviews, both APPROVE:
store-[^/]+negative-lookahead inplugin-is-sandbox-cleanis still meaningful, plus thefull CI workflow file read and confirmed to reference neither deleted package.
CONTRIBUTING.md/DEVELOPMENT.mdstaleness in its first pass, verified fixed in the closure pass.
QA (targeted verification)
pnpm lint— 0 violations, 1364 modulespnpm typecheck— passpnpm format:check— passchangeset status— exit 0, no package bumps (confirmed docs/CI-only change: zero filesunder
packages/*/src)packages/plugin/test/depcruise-boundary.test.ts— 16/16 passing, run standaloneAn intermittent 3/16 failure (inverted results) was observed once during review but was not
reproducible across 16 total standalone re-runs (10 during revision, 6 during closure). The
believed cause is the test's
beforeAllpicking up the repo's live.dependency-cruiser.cjsmid-edit while this increment's own changes were still being written — not a defect in the
test or the production code. The test is left unmodified.
Follow-ups
servicepackage #291 (filed this increment): the two dependency-cruiser rules deliberately left out of thisincrement's scope still name the deleted
servicepackage — now marked withTODO(#291).README.mdstill describes the service as "a standalone Node/Hono + Postgres service";
packages/plugin/test/contracts/README.mdstill describes "more than one transport" /HttpCommerceClient; and one DEVELOPMENT.md bullet adjacent to the one fixed here stillreads "No speculative EmdashStore / InProcessCommerceClient before the EmDash primitive
ships."
Test plan
pnpm lintpnpm typecheckpnpm format:checkchangeset statuspackages/plugin/test/depcruise-boundary.test.ts(16/16, standalone)🤖 Generated with Claude Code
https://claude.ai/code/session_01CQbJYWWm8tf8owshm7XRp8