MICA-176: the launcher badge count, read through the facet registry rather than
re-exported from ./inProcess/facets/reports. That re-export was a value edge across
the host seam — facetSwap() in vite.addon.config.ts rewrote the specifier for an
add-on build, so the same source line named two different stores and only a resolver
plugin decided which. pendingReportCount is already a member of the reports facet on both
sides, so the registry answers it with no new facet name and no permission-table row.
facets.reports(), not useReports(): this export has never been permission-gated
(it is read at app-registration time, before any host exists) and gating it here would be
a behaviour change wearing a refactor's commit message. The shell re-checks the wire call
behind the store either way (AGENTS.md §7).
lazyBadge because the composition has to wait for the facet set to be registered:
shell/state/registry.ts globs every manifest at the earliest moment in the phone's
life, and a manifest naming this at module scope would otherwise read the registry before
the entry point had filled it.
MICA-176: the launcher badge count, read through the facet registry rather than re-exported from
./inProcess/facets/reports. That re-export was a value edge across the host seam —facetSwap()invite.addon.config.tsrewrote the specifier for an add-on build, so the same source line named two different stores and only a resolver plugin decided which.pendingReportCountis already a member of thereportsfacet on both sides, so the registry answers it with no new facet name and no permission-table row.facets.reports(), notuseReports(): this export has never been permission-gated (it is read at app-registration time, before any host exists) and gating it here would be a behaviour change wearing a refactor's commit message. The shell re-checks the wire call behind the store either way (AGENTS.md §7).lazyBadgebecause the composition has to wait for the facet set to be registered:shell/state/registry.tsglobs every manifest at the earliest moment in the phone's life, and a manifest naming this at module scope would otherwise read the registry before the entry point had filled it.