When a Runtime Kit feature breaks, do not guess. Identify which public link failed: package file, named data read, target request, reply decoding, local state, or activation.
What this is
Runtime Kit deliberately hides private implementation details from app code. That is good for product architecture, but it means debugging should follow the public chain instead of poking unpublished code.Use this chain:01
Name what the user sees, not what you assume broke.
02
Pick boundary, read, request, reply, local state, or activation.
03
Capture the safe name, payload shape, state, or error.
04
Fix one link and prove the expected state appears.
Start with the symptom
Find the link first. Then fix that link.
First five minutes
Do this before editing code:If you cannot fill in the contract, that is the bug. Write the contract first, then debug the link that does not match it.
Package file failures
Check the boundary file before blaming React.Valid packages have one boundary file:Fix package file problems in the package. Do not work around them in the app surface.Fast boundary checklist:
Named data read failures
IfuseBitfieldData(...) does not return the value you expected, check the input name and surface contract.The correct fix is usually to repair the package/surface contract or the component states, not to create a private read path.Read failures split into two different problems:
Do not solve either problem by reading local files from the component. That creates a second data path and hides the real broken link.Verify the fix:
Missing read scope errors
If you see an error like:Target request failures
The request function needs a non-empty public action name.Do not import the target implementation to “make the button work.” That bypasses Runtime Kit.Request failures split into four common cases:
Verify the fix:
Reply decoding failures
The reply is bytes:- Decode the bytes as text only if the target promises text or JSON.
- Parse JSON only if the target promises JSON.
- Check whether the reply is an error payload with a different shape.
- Check whether the target changed its public reply shape.
- Update either the action reply shape or the decoder, not both blindly.
Payload conversion surprises
Runtime Kit converts payloads before sending:That last row is easy to miss. If your target needs a JSON
null, send an object with an explicit field instead, such as { "value": null }.A record reads back empty even though you just wrote it
A record’s address mode is part of its identity. Read it the same way it was written, or the engine will not find it — even though the bytes are present.A workflow
write step that targets a :: address with no explicit address mode stores it label-hash. If a reader (or a producer poll) looks for that address in identity-text mode, it gets “not found” forever. When a value “won’t read back,” read it at both modes to discover which one the writer used, then make the reader match.A surface I removed still shows in the sidebar
Removing aplaceable-surface (or any current-state record) from things-to-store-and-run.json and redeploying with the live-log-only path does not remove it from the running app. That deploy is additive — it writes the records present in your source; it never retracts records you deleted from source.To retract an already-admitted record, add an explicit tombstone to your source and redeploy:A loading card (AI producer) is stuck “Working…” forever
A board/producer surface dispatches an action, then polls a result address to know when it is done. If the poll’s address mode does not match where the action actually wrote its result, the surface never sees the result and shows its loading copy forever — even though the action finished successfully and wrote a real record.Local state confusion
Customer-visible Bitfield state lives under:Do not copy one device’s local state to another device as a fix. Device permission and package state need the right owner flow.Safe support note:
Boundary failures
Check for these violations before debugging private files:Code tends to connect things directly when the boundary is not repeated clearly. Use Build with AI agents only when the feature is being generated by an AI agent.Use this note when a change crosses the Runtime Kit boundary:
Escalation checklist
Before asking for support, capture the public facts:- The package name.
- The package set name.
- The public input name that failed.
- The public action name that failed.
- The payload shape, without secrets or customer data.
- The visible error message.
- Whether the problem happens on one device or every device.