Parent: #336 Related: #351, #355, #356, #359
#359 added a safe scheduled-moving boundary for Zig embedders, but C and Objective-C hosts can currently only attempt immediate quiescent compaction. Expose the same scheduling primitive without permitting movement inside an arbitrary native callback.
Scope:
- add a C extension that returns whether a precise-GC context accepted a pending compaction request;
- invalid, arena-backed, and unsupported contexts fail deterministically without state changes;
- requests made inside a native callback only set the pending bit; direct reentrant compaction remains unsupported;
- after the callback unwinds, a warmed baseline numeric tier may consume the request at its movement-safe checkpoint, or a later quiescent direct call may consume it;
- prove a protected C handle survives the scheduled in-tier move, while unprotected raw-value lifetime documentation remains explicit;
- update the public extension header, API inventory/audit, Objective-C host coverage, relocation docs, release matrix, and concise README only if the public boundary changes its statement.
Acceptance:
- the scheduling call is visible and signature-complete in C/C++/Objective-C headers and audits;
- a callback-scheduled request remains non-moving during callback execution and is consumed at the declared native checkpoint;
- exact compaction metrics remain available through the existing direct status API, and protected-handle identity/semantics survive;
- Debug, ReleaseSafe, TSan, C/C++ and Objective-C hosts, and all ABI inventories are green.