Signal that the app is usefully interactive (e.g. after an initial data load).
IDEMPOTENT — only the FIRST call counts; later calls are ignored. Forwards the
report to the runtime (ir-report-ready) so the host can resolve
ir.interactive = max(rootRenderCommit, reportedAt) (LP2-3) — calling it before
the root render commits can only delay the signal, never advance it.
UX contract (LOADING_UX_SPEC §9.1): calling this tells the host "keep your
loading skeleton up; I am not done yet" — the host holds the §3 reveal until
this call (or the load budget). Call it ONCE, when the first USEFULLY-interactive
frame is on screen — not at mount, and not after every async settle. An app that
never calls it reveals automatically at the root-render commit (the default path).
Signal that the app is usefully interactive (e.g. after an initial data load). IDEMPOTENT — only the FIRST call counts; later calls are ignored. Forwards the report to the runtime (
ir-report-ready) so the host can resolveir.interactive = max(rootRenderCommit, reportedAt)(LP2-3) — calling it before the root render commits can only delay the signal, never advance it.UX contract (LOADING_UX_SPEC §9.1): calling this tells the host "keep your loading skeleton up; I am not done yet" — the host holds the §3 reveal until this call (or the load budget). Call it ONCE, when the first USEFULLY-interactive frame is on screen — not at mount, and not after every async settle. An app that never calls it reveals automatically at the root-render commit (the default path).