Declarations keep one identity
A ModuleSymbol combines project-relative module ownership with a declaration SiteId. Readable names remain useful without deciding semantics.
SYMBOLS · SITES · RESOLVE
Declarations now keep one stable identity across aliases, barrel exports, source caches, and private transformer clones. Cross-module analysis follows authored sites instead of transient AST objects.
SEMANTIC IDENTITY
A ModuleSymbol combines project-relative module ownership with a declaration SiteId. Readable names remain useful without deciding semantics.
Default and named exports, aliases, barrel chains, export *, cycles, and ambiguity now share one checked graph.
Owners, component calls, hooks, keyed lists, and effects carry deterministic source-local SiteIds across repeated compilation.
Consumers resolve a symbol first, then locate its authored site in their own normalized clone. Canonical AST mutation remains forbidden.
The 100-importer candidate removes half the clones and records a small directional build improvement with unchanged deployed JavaScript.
P0.9 will lower equivalent state-update syntax through the existing structured HandlerIR path without adding a JavaScript VM.
UPGRADE
npm install @kudzujs/core@^0.8.35