Source: third full-project audit (2026-07-25). Severity: MEDIUM. Category: new finding.
Evidence
packages/element/src/index.ts:34-38 — five whole-module export type * seams (framework / manifest / render / style-sheet / vnode).
deno doc proves the root surface therefore carries ~50 types: FrameworkOptions, RouteEntry, ValidationResult, RegistryIndex, OpenElementMiddleware, HydrateEventDescriptor, AppShellConfig, IsrManifestEntry, DsdOptions, DsdBuildReport, ManifestDecision, SsrAdmissionDecision, WebComponentContract, OpenElementBlogOptions, OpenElementI18nContextOptions, etc. Several docstrings reference retired packages (framework.ts:32 "@openelement/content", :50 "@openelement/i18n") — the same speculative-type class alpha.18 deleted elsewhere.
- The seams are intentional ("Additive type-only seam consumed by build adapters",
index.ts:33) but contradict the direction of moving build types into build-utils, and PACKAGE_SURFACE.md does not mention them.
- Gate blind spot:
tools/check-public-interface-snapshot.ts:15-19 records only entry-file declaration lines + file hash; adding/removing types inside internal/protocol/*.ts does not change the snapshot.
Impact
Internal protocol types are de-facto public with no compatibility promise and no drift detection; any protocol edit silently changes the public type surface.
Suggested fix (decision needed)
Replace the five star seams with explicit type export lists (export what adapters actually consume), or extend the snapshot tool to resolve export type * targets and record the carried symbol names.
Source: third full-project audit (2026-07-25). Severity: MEDIUM. Category: new finding.
Evidence
packages/element/src/index.ts:34-38— five whole-moduleexport type *seams (framework / manifest / render / style-sheet / vnode).deno docproves the root surface therefore carries ~50 types:FrameworkOptions,RouteEntry,ValidationResult,RegistryIndex,OpenElementMiddleware,HydrateEventDescriptor,AppShellConfig,IsrManifestEntry,DsdOptions,DsdBuildReport,ManifestDecision,SsrAdmissionDecision,WebComponentContract,OpenElementBlogOptions,OpenElementI18nContextOptions, etc. Several docstrings reference retired packages (framework.ts:32"@openelement/content",:50"@openelement/i18n") — the same speculative-type class alpha.18 deleted elsewhere.index.ts:33) but contradict the direction of moving build types intobuild-utils, and PACKAGE_SURFACE.md does not mention them.tools/check-public-interface-snapshot.ts:15-19records only entry-file declaration lines + file hash; adding/removing types insideinternal/protocol/*.tsdoes not change the snapshot.Impact
Internal protocol types are de-facto public with no compatibility promise and no drift detection; any protocol edit silently changes the public type surface.
Suggested fix (decision needed)
Replace the five star seams with explicit type export lists (export what adapters actually consume), or extend the snapshot tool to resolve
export type *targets and record the carried symbol names.