Repository navigation
Physics Hinge World Selected Protocol Controls
선행 코드의203개 경로를 Integration a59eaf877cde02b2138c54dc0be03dd4a6b295b7에서 확인했다. 실제 반영 기준 새 작업 공간의 코드 전 계약은 2ef344eb다. 아래 source-only 상태 설명은 선택 당시 기록이다. 현재 파일별 병렬 구현을 시작했으며 새 수치 실행은 아직 없다.
Root 선택과 참조 문법을 함께 사용한다. 아래26개는 계획 수다. 실제로 실행하지 않았다. 초기 reference.stage는 initial로 선택했다. S0는 기존 첫 empty RETURN의 source cursor0 요청만 재사용하며 새 native step을 만들지 않는다.
SOURCE ONLY. Selected Root/API/Controls/Reference Wiki pages override earlier proposals. Root's latest Integration check is b1ee4444; fe89 remains absent. No implementation or new calculation starts here. Read old physics-rigid-hinge-motor-reference/reference-controls.mjs only for strict-envelope/copy/JSON control structure. No old14/93 replay, new parser/import/build/model/reference execution or remote change.
Freeze 26 independent requests per complete graph:3 positive/copy,8 malformed initial,14 world-step data controls,1 actual malformed JSON line. In the14 step controls,12 expect protocol INPUT and2 expect resolved numerical MISMATCH. No extra native World/candidate/motor/projection calls. Existing29 constructor/28 step control population stays separate. No D limit campaign, guard export or accepted-store setter.
I0 is the exact original initial request {op:'initial',config,sourceState,sourceRawHex,negativeZeroPaths}. It uses original HINGE2 constructor values/order, public initial state,416B/832hex and the four pointer roots {sourceState,commands,attempt,output}; only sourceState may be nonempty. No moving initial carrier or expected numerical output is generated by these controls. For world-step, output has exactly {state,diagnostics} when returned, and is null when refused; state is the unchanged copied public World state.
S0 is a COPY of the first already independently qualified returned empty-command step from original accepted cursor0, captured by existing W0 setup or main first-step population. It contains original prior accepted input, actual output/attempt/raw and exact selected12 top-level keys. It is not generated by an extra native step or taken from an old detached case. Positive repetition re-evaluates independently from original input; actual saved frames remain comparisons, never expected seeds.
If no qualified S0 exists, retain that actual failure and run no S0 controls. Report actual reached requests, not26, and no full protocol GO. Do not manufacture output/partial progress or add a physical trial to fill the population. Freeze the mutation recipes below before code; actual S0 bytes become a hashed runtime control locator. Every mutated request must fit selected256KiB; overflow follows the selected resource failure policy, not a larger limit or a schema-error success claim.
All child responses have EXACT eight keys {ok,resolved,executionFailure,referenceStatus,metrics,reference,violations,error}. JSON bool/null are never coerced to numbers.
INPUT response: ok=false,resolved=false,executionFailure=true,status UNRESOLVED,metrics/reference=null,violations=[],error exactly {code:'REFERENCE_INPUT',message:'hinge world reference input is invalid'}.
JSON response has the same shape but exact {code:'REFERENCE_JSON',message:'hinge world reference line must be valid JSON'}. The raw request is one line containing { followed by LF; it is sent once through the actual selected IPC path, not through a fake local exception.
Qualified I0: ok=true,resolved=true,executionFailure=false,status RETURN,error=null,violations=[]; reference.stage=initial (not a producer attempt stage); no motor/free/projection/report calls; pairActualCompared=[false,false], pairReplies=[null,null]. Source/raw/config/initial cursor proof is actual, later phase errors are null. This selects initial response semantics before implementation.
Qualified S0: ok=true,resolved=true,executionFailure=false,status RETURN,error=null,violations=[]; both pairActualCompared true and both complete unchanged9-key parent replies retained. Parent prediction flags cannot satisfy actual qualification. First S0 reply is safely copied; mutate ONLY the caller's copied reply, then evaluate original S0 again. Require original input unchanged and fresh independent response equal to the pristine reply. Never cache that reply as an expected answer.
MISMATCH response: ok=false,resolved=true,executionFailure=false,status MISMATCH,error=null, nonempty violations naming the actual changed field/pair. Full reached proof and finite metrics remain. It is neither REFERENCE_INPUT nor CAP_REFUSAL. World status CAP_REFUSAL is not selected. Unknown native/observer objects are tested by native identity controls, never serialized into known protocol errors.
| ID | Request | Expected |
|---|---|---|
| P01 | I0 original initial | Qualified initial above; no numerical stage. |
| P02 | S0 captured returned request | Qualified step above. |
| P03 | S0 again after caller mutates copied P02 reply | Fresh cold same proof; input/reply isolation, no native call. |
Clone I0; one stated mutation each. All eight expect exact INPUT envelope before any parent solve.
| ID | Exact mutation / distinct risk |
|---|---|
| I01 | Add top-level extra:0 — exact request keys. |
| I02 | sourceState.timeSeconds=null — null is not numeric0. |
| I03 | sourceState.bodies[1].id='pairA0' — duplicate/wrong fixed IDs/order. |
| I04 | sourceState.bodies[0].angularVelocityRadps[0]=false — boolean is not numeric0. |
| I05 | sourceRawHex='00' — not416B. |
| I06 | Replace first8 source raw bytes with LE quietNaN 000000000000f87f, JSON unchanged — raw finite admission. |
| I07 | negativeZeroPaths.sourceState=['/pairStats/eligiblePairs','/pairStats/eligiblePairs'] — duplicate pointer guard precedes restoration/expected value. |
| I08 | negativeZeroPaths.sourceState=['/bodies/0/positionM/0'] — existing NONZERO target cannot encode negativezero. |
I07 is a schema-duplicate test, not proof that a negativezero counter is a valid constructor output. No JSON/parser call is used now to generate these bytes or results.
Clone captured S0; canonical byte proof keeps the original template. Twelve malformed rows below expect INPUT; the last two are valid-data mismatches. No real simulated pair failure is fabricated.
| ID | Exact mutation | Expected |
|---|---|---|
| S01 | dt=null | INPUT; original fixed step numeric required. |
| S02 | outcome='prediction' | INPUT; World wire has only returned/refused. |
| S03 | sourceState.timeSeconds changed to a different finite value, source cursor unchanged | INPUT; original source clock consistency. |
| S04 | commandsRawHex='00' while original empty commands remain[] | INPUT; vector count/order codec. S0 selected with empty commands. |
| S05 | rawFrames.angular='00' | INPUT; full frame416B length. |
| S06 | sourceState.bodies[0].positionM[0] changed by finite+.001, raw.source unchanged | INPUT; JSON/raw numeric correspondence, not geometry qualification. |
| S07 | negativeZeroPaths.sourceState includes '/bodies/0/velocityMps/1' while that raw source scalar remains authenticated+0 | INPUT; raw/pointer sign agreement. Use S0 original cursor0 input and authenticate that raw word is+0 before mutation; do not guess a later runtime sign. |
| S08 | negativeZeroPaths.sourceState=['/absent'] | INPUT; pointer must exist. |
| S09 | Keep returned output; set attempt=null and negativeZeroPaths.attempt=['/stage'] | INPUT; null root requires[]. Absence of a callback payload cannot contain zero-pointer proof. |
| S10 | attempt.pairProgress[1].projectedRawHex=null while actual returned projection and whole projected frame remain | INPUT; full/partial-mask consistency; no fabricated unreturned projection. |
| S11 | attempt.pairProgress[0].lastCall.ordinal=2 while it is operation report/returned for first pair/global report ordinal1 | INPUT; actual ordinal must match frozen pair/call ordering. |
| S12 | outcome='refused',output=null,error={name:'PhysicsError',code:'NUMERIC_LIMIT',message:'invented World error'}; output zero pointers cleared | INPUT; safe known tuple whitelist. Never accept a generic code as a valid cap. |
| S13 | output.state.joints[0].angleRad changed by finite+.01, all other input/attempt/report data retained | MISMATCH; valid number violates outgoing target/report authority. Not malformed JSON or a new motor input. |
| S14 | outcome='refused',output=null,error={name:'PhysicsError',code:'NUMERIC_LIMIT',message:'hinge0 exceeded motor reaction limit'}; output zero pointers cleared; complete actual report-ready attempt with below-cap norm retained | MISMATCH; KNOWN tuple with false actual/independent cap condition. It must not qualify a nominal World refusal or be recoded INPUT solely for failing a numerical gate. |
For S09 preserve all other request fields; complete actual output/diagnostics still supply frames and parent proof, but a null attempt must have an empty pointer list. For S13 recompute ONLY proof pointer list if an overwritten field was a recorded−0; do not change numerical values to make proof agree. For S14 preserve attempt.error=null (callback before cap), parent outputs/proofs/raw208B, full phase raw and true calls. No observer/payload unknown is fabricated. S10/S11 are structural reachability inconsistencies, not independent numerical mismatch tests.
Per complete graph: initial9requests (P01+I01..08), world-step16requests (P02/P03+S01..14), raw JSON1 =26. Across3 fully completed graphs:78 independent protocol requests; extra native World/motor/projection calls0. Cold independent reference evaluation still actually runs for reached requests; its internal helper/precision/parent solve counts are recorded separately. Among26:3 qualified/copy,20 INPUT,2 resolved MISMATCH,1 JSON. Record every request/reply before next, full actual IPC bytes/hash/LF/offset and reached count. No old14/93 reference population rerun.
No spawn/signal/fault-injection campaign is added. Actual transport malformed reply/resource/EOF failures use selected21 wrapper tuples and preserve first failure, not a fabricated child protocol envelope. Any parent reply retained is its actual unchanged success9-key or safe-refusal schema; outer8-key padding and reduced proof are forbidden. Summary never labels negative protocol controls numerical World GO.
Budget remains selected main1,024/fixed64/emergency8MiB, with all controls≤32MiB and existing request256KiB/reply512KiB/receipt4KiB. Most INPUT replies use only the fixed eight-key error envelope, but no compression/alias savings are assumed to enlarge the limit. Record protocol bytes separately from29 constructor/28 step controls. No runtime data is truncated to satisfy schema or budget; overflow stops with GRAPH_NO_COMPLETE_PROOF and no next request.
Original source-backed patterns: old reference-controls.mjs uses exact8-key checks, unknown-op/required-field/null/bool/raw-length/raw-JSON mismatch controls, actual askRaw('{'), and copy isolation. NEW World op names,416B/208B sizes, six-phase masks, four pointer roots, pairProgress ordinals, World error literals and MISMATCH cases come from the selected Wiki wire and must be fixed in the new before-code addendum, not attributed to old controls. Exact provider/native source hashes remain a start gate after adoption; this document changes no model, cap, physical fixture or gate.