Skip to content

Three failure-kind remedy formatters word the new declared-no-loadable-entry kind as "declare it in the app's package.json" — wrong for a declared, installed package #14270

Description

@os-justin

Blocked-by: #14041 (the kind lands there; until it merges this is latent by definition)

Shape

#14041 adds a third HostImportFailureKind, declared-no-loadable-entry: the app declares the package, the install delivered it, and the package's own exports names no runtime entry Node can load (a types-only or browser-only publish, or an unexported subpath). The importer's own error message words that case correctly — the remedy lives in the package.

Three consumers pick their remedy line with a two-way branch written when only two kinds existed:

  • packages/cli/src/commands/serve.tsformatOrganizationsInstallRemedy: kind === 'declared-unresolvable' ? <repair the INSTALL> : <add the package to THIS APP — declare it in the app's package.json and install>
  • packages/verify/src/harness.ts (~:524) — same two-way branch in bootStack's multi-tenant fatal
  • packages/qa/dogfood/test/enterprise-organizations.ts (~:119) — same two-way branch in the enterprise probe's refusal

For the new kind, all three fall into the else leg and print the declare remedy — telling an operator whose app already declares and installs the package to declare and install it. That is the exact confidently-wrong-verdict class #14041 exists to remove, one layer up. Mitigation today: each site also prints the importer's own message (e.message / cause), which carries the right shape wording — the remedy bullet contradicts it rather than replacing it.

Why not fixed in #14041

Out of that card's declared file surface, and not mechanical there: serve.ts's remedy text is pinned by serve-organizations-message-spelling.test.ts, so the fix carries its own message-spelling test updates across three packages — its own small card, not a rider.

Suggested shape

Branch on "is the declaration the problem?" rather than on one kind: undeclared → declare-remedy; declared-unresolvable → install-remedy; declared-no-loadable-entry → a package-shape remedy (or defer to the importer's message, which already words it). Update the spelling pin test in the same PR.

Population

Latent until a real host package publishes no loadable entry (the organizations runtime and shipped cluster drivers are dual-published, so today this is reachable only by a broken third-party or customer package). Same latency class as #14041 itself.

Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions