Files
fusion/scripts/lib/dashboard-browser-safe-core-modules.json
gsxdsm 93a403af67 fix(dashboard): import delete-attribution constants via browser-safe subpath
The client bundle aliases `@fusion/core` to the leaf `core/src/types.ts` to
keep Node-only dependencies out of the browser, so a package-root import of
`FUSION_CLIENT_HEADER`/`FUSION_DASHBOARD_UI_CLIENT` typechecked but failed
`vite build`:

  "FUSION_CLIENT_HEADER" is not exported by "../core/src/types.ts"

Follow the documented pattern instead of widening the root alias: declare a
`./task-delete-attribution` subpath export, add the matching Vite alias ahead
of the broader `@fusion/core` key (Vite matches in order), register the module
in the browser-safe-core allowlist, and import the subpath from the client.
`task-delete-attribution.ts` has no imports at all, so it is a safe leaf.

`app/utils/detectContentLanguage.ts` already warned about exactly this trap;
the miss was mine for verifying with typecheck, lint and test:gate but not
`pnpm build`, which is one of the four checks CI blocks on.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 13:22:18 -07:00

70 lines
2.5 KiB
JSON

{
"modules": [
{
"module": "types",
"reason": "2026-07-16: Vite aliases the package root to this browser-safe compatibility leaf.",
"verifiedAt": "2026-07-16"
},
{
"module": "near-duplicate-canonical",
"reason": "2026-07-16: Canonical activity helpers import types only, unlike near-duplicate which reaches node:crypto.",
"verifiedAt": "2026-07-16"
},
{
"module": "task-merge",
"reason": "2026-07-16: Shared task merge predicates are browser-safe UI logic.",
"verifiedAt": "2026-07-16"
},
{
"module": "model-pricing",
"reason": "2026-07-16: Model cost data and calculations have no Node-only dependencies.",
"verifiedAt": "2026-07-16"
},
{
"module": "mobile-nav-primary-items",
"reason": "2026-07-16: Mobile navigation selection helpers use erased core types only.",
"verifiedAt": "2026-07-16"
},
{
"module": "active-merge-status",
"reason": "2026-07-16: Merge-status predicate is a dependency-free browser helper.",
"verifiedAt": "2026-07-16"
},
{
"module": "workflow-settings-resolver",
"reason": "2026-07-16: Workflow setting resolution uses browser-safe workflow metadata helpers.",
"verifiedAt": "2026-07-16"
},
{
"module": "settings-schema",
"reason": "2026-07-16: Settings defaults and validation metadata are browser-safe.",
"verifiedAt": "2026-07-16"
},
{
"module": "session-advisor",
"reason": "2026-07-16: Session advisory predicates use erased core types only.",
"verifiedAt": "2026-07-16"
},
{
"module": "blocker-fanout",
"reason": "2026-07-16: Blocker fanout helper is dependency-free browser logic.",
"verifiedAt": "2026-07-16"
},
{
"module": "detect-content-language",
"reason": "2026-07-16: Language detection is pure shared string logic with an explicit Vite subpath alias.",
"verifiedAt": "2026-07-16"
},
{
"module": "task-delete-attribution",
"reason": "2026-07-26: Delete caller-attribution constants and the pure header resolver are shared by the browser client that stamps `x-fusion-client` and the route that reads it; the module has no imports at all.",
"verifiedAt": "2026-07-26"
},
{
"module": "live-agent-count",
"reason": "2026-07-21: FN-8453 shares pure workflow-trait-based Running and Waiting predicates with dashboard capacity indicators; its dependency graph has no Node-only modules.",
"verifiedAt": "2026-07-21"
}
]
}