Skip to content

Monorepo cleanup: dead packages, unshipped wrappers, boundary drift #61

Description

@davidcrowe

Cleanup list from an internal review (2026-08-16). The -core seam is principled (validatabl/limitabl/transformabl-core: zero-dep, 600-780 LOC each, well-tested, consumed directly). The rest:

Dead / ghost:

  • explicabl-core: 0-byte sources, package.json names it @gatewaystack/observability-core, absent from root build. Delete.
  • compat, integrations: no package.json (npm workspaces ignores them), 16 LOC combined, yet docs/packages.md:53-57 advertises compat as shipped. Delete or fold into fixtures.
  • ~12 empty pre-monorepo leftover files at package roots (identifiabl-core/verifyJwt.ts etc.).
  • proxyabl/src/tool-gateway.ts — 1,339 lines (44% of the package), NOT exported from the index, no consumer. Delete.

Wrapper drift: every consumed -core stays in semver range with downstream; the middleware wrappers (validatabl, limitabl, transformabl) have drifted out of range because nothing imports them. Consolidate the six wrappers into one @gatewaystack/express package or retire them.

Boundary leaks: identifiabl-core redefines GatewayIdentity locally (src/index.ts:15-33) and has drifted from request-context/src/types.ts:7-14; bridged by an unchecked cast at identifiabl/src/index.ts:69. proxyabl's router doesn't route through proxyabl-core's assertUrlSafe (docs/packages.md:37-39 notes this).

Docs vs reality: CLAUDE.md claims all wrappers have vitest suites; four of six have zero tests. Root build script omits limitabl-core, proxyabl-core, explicabl-core.

Proposed end state: ~7 packages — the four cores, request-context, one consolidated express middleware package, explicabl.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions