Skip to content

[CI][Docs] Trim stale service/store-postgres references from tooling and docs - #292

Merged
vedanshujain merged 2 commits into
feat/in-process-commercefrom
chore/post-deletion-cleanup
Sep 20, 2026
Merged

vedanshujain merged 2 commits into
feat/in-process-commercefrom
chore/post-deletion-cleanup

Conversation

@vedanshujain

Copy link
Copy Markdown
Contributor

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 |service alternative from
    plugin-is-sandbox-clean's path regex (3 spellings), corrected stale prose in
    console-imports-no-workspace-package's comment. domain-is-io-free and
    store-emdash-is-sandbox-clean are left untouched per the plan's literal scope, but now
    carry TODO(#291) markers since they still name "service" too — tracked in [CI] Two dependency-cruiser rules still name the deleted service package #291, filed as
    part of this increment.
  • packages/plugin/test/depcruise-boundary.test.ts: dropped the now-meaningless "unresolved
    service import is forbidden" test case; re-fixtured the SQL-store test case from a
    store-postgres stub to a fictional store-sqlite stub so the suite no longer depends on
    any real adapter existing.
  • CLAUDE.md: removed the [Service] row from the PR-tag table; corrected the status
    paragraph and adapter examples to list only packages that exist.
  • CONTRIBUTING.md: mirrored the same PR-tag table fix (dropped [Service] row, adapters
    wording corrected to store-emdash, stripe, x402).
  • DEVELOPMENT.md: restated (not deleted) the stale "REST API in @otta-sh/service... over
    a live test server" verification bullet to describe the actual current architecture — the
    contract suite runs in-process via InProcessCommerceClient/makeCommerceClient over
    @otta-sh/store-emdash, with ctx.http bound to a rejecting stub — so it no longer
    contradicts CLAUDE.md's own non-negotiables, which cite DEVELOPMENT.md as authoritative.

Review

Two independent reviews, both APPROVE:

  • Dependency-cruiser rule correctness, including mutation-tested proof that the surviving
    store-[^/]+ negative-lookahead in plugin-is-sandbox-clean is still meaningful, plus the
    full CI workflow file read and confirmed to reference neither deleted package.
  • A whole-repo completeness sweep that caught the CONTRIBUTING.md/DEVELOPMENT.md
    staleness in its first pass, verified fixed in the closure pass.

QA (targeted verification)

  • pnpm lint — 0 violations, 1364 modules
  • pnpm typecheck — pass
  • pnpm format:check — pass
  • changeset status — exit 0, no package bumps (confirmed docs/CI-only change: zero files
    under packages/*/src)
  • packages/plugin/test/depcruise-boundary.test.ts — 16/16 passing, run standalone

An 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 beforeAll picking up the repo's live .dependency-cruiser.cjs
mid-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

  • [CI] Two dependency-cruiser rules still name the deleted service package #291 (filed this increment): the two dependency-cruiser rules deliberately left out of this
    increment's scope still name the deleted service package — now marked with TODO(#291).
  • Deferred, out of scope for this increment (flagged for INC-D4 or later): root README.md
    still describes the service as "a standalone Node/Hono + Postgres service";
    packages/plugin/test/contracts/README.md still describes "more than one transport" /
    HttpCommerceClient; and one DEVELOPMENT.md bullet adjacent to the one fixed here still
    reads "No speculative EmdashStore / InProcessCommerceClient before the EmDash primitive
    ships."

Test plan

  • pnpm lint
  • pnpm typecheck
  • pnpm format:check
  • changeset status
  • packages/plugin/test/depcruise-boundary.test.ts (16/16, standalone)

🤖 Generated with Claude Code

https://claude.ai/code/session_01CQbJYWWm8tf8owshm7XRp8

vedanshujain and others added 2 commits September 20, 2026 14:35
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
@vedanshujain
vedanshujain merged commit 550ebb3 into feat/in-process-commerce Sep 20, 2026
2 checks passed
@vedanshujain
vedanshujain deleted the chore/post-deletion-cleanup branch September 20, 2026 14:58
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