Repository navigation
Physics Hinge World Integration Preparation
실제 반영 기준 a59eaf87의 새 Physics 작업 공간에서 구현을 작성했다. 코드 전 계약 2ef344eb, 구현 9f7d32c3, 전체507개 소스 고정 SHA 906a68f937b454f1c3f1a1ff5e91fc54b032e377527b2c8d5e94973b0945d986다. 단계/진단, World/store/query/controls, 독립 참조를3에이전트가 분리했다. Physics/CAD/Viewer package와 shared/root/lock은 수정하지 않았다.
자체 CAD build0/3.843180458s, Physics tsc0/3.874825625s, index bundle0/.492494125s, private types0/1.370448250s, 구문16개 모두0이다. 실제554개 산출물 ledger SHA 00d78b5e5cf8d60ae77efb69eb520e9578b436009cd5f3815f3a894a83e9cad7는 실제 build/types 소스 9f7d32c3와 보고 커밋 039f4852를 구분한다.
첫 실행은 초기 참조 입력에서 멈췄다. Consumer exit1/1.059732250s, World step0/projection0, 실제 초기 요청1개가 REFERENCE_INPUT을 반환했다. 통과한 public 생성자1/private 거절17개, W0 생성/입력 복사/초기 상태를 보존했다. 원래 raw/stdout/stderr/종료/primary 오류와 이후SIGTERM은 archive 238c45b6,13자료/295073B, manifest SHA 8a1c5f7fd1b3e16fd311c456a87f5fcc9300fb447a515c75f2c76a1df721420f에 있다. 물리 World NO-GO가 아닌 참조 admission 오류다.
원인은 inherited exact-radius admission 호출에 Decimal context가 없던 것이다. 기존 부모는80/120 context 안에서 같은 검사를 실행한다. 한 callsite만 localcontext120으로 감쌌다(04ffb17a). 부모 검사·상수·입력·법칙·cap·gate는 유지했다. 새508개 소스 고정 SHA e55ffb84c930ebccbf49e433be0a356f02d89f899e83ad4fc994a3790d1f6e5f, 기존554emits는 일치했다. 저장된 실패 초기 입력 한 건만 독립 평가해 exit0/.080301167s/RETURN/violations[]를 확인했다(855688b5). 새 native step/projection은0이다.
다음은 아직 실행하지 않은 단계의 SOURCE 이어가기다. 기존20개 native 기록/raw와 완료된 초기 참조를 인증해 재사용한다. 기존18개 admission/copy 검증을 반복하지 않는다. 실제 런타임을 만들 W0 생성1회는 필요한 복구 호출이며 논리 사례 수와 실제 추가 호출 수를 나눠 기록한다. Setter/restore를 추가하지 않는다. 새로운 전체 source/emitted 고정 후 미실행 controls·1,200단계·repeat/actualcompiled를 진행한다. 새 World/Viewer/공개 엔진 GO는 아직 없다. #1179/#660 OPEN, 현재 integration 화면/파일/복구는 별도674/1254다.
작성 고정, 실제 build/emitted, 첫 실패와 수정 계약.
선행 detached motor/report native c8bb2281→fe89b765의203개 새 경로를 Integration a59eaf877cde02b2138c54dc0be03dd4a6b295b7와 mode/type/blob까지 확인했다. 반영 커밋의 부모는 49dea5fe096473df269e6065710f332070f521a5다. Native 자체 ancestry를 직접 merge한 형태는 아니다. 확인 실패0, 인증 자료 SHA 22a04eaa2ff9df4bdc84f83aab3143d68d55639cd2e45639de9bd21c0370298d다. 원래 missing stderr와 별도 첫 실패를 유지한다.
선행 시작 조건이 충족됐다. 다음 기존 #1179의4 sphere/2 hinge World를 실제 반영 기준의 새 Physics 작업 공간에서 구현한다. 단계/진단, World transaction/controls, 독립 참조를3개 에이전트에 나눠 맡긴다. 선택 계약, 참조 문법, protocol controls26개를 코드 전 기준으로 사용한다. 실제 전체 source/input/error/reference freeze와 영향 build/types/emitted 출처를 확인한 뒤에만 새 수치 호출을 한다. 완료된14/93개는 재실행하지 않는다.
아직 새 World 코드 검증·1,200단계·Viewer·공개 엔진 GO는 없다. #1179/#660은 OPEN이다. 화면/SaveOpen/복구는 #674/#1254의 별도 후속이며 코드 시작을 막지 않는다. 다음 아래 문서의 ‘adoption pending’ 문구는 당시 이력이다.
선택 준비 계약에 API·POSTCONTACT 단계·두 관절 순서·전체 rollback·partial progress·독립 참조의 정확한 wire/오류·controls·저장·종료 기준을 정리했다. API, controls, 참조와 자료는 병렬로 준비하고 Root가 충돌을 해결한 문서다. 이전 제안의 getter/schema/budget보다 이 선택이 우선한다.
기존 #1179를 사용한다. 다음 목표는 원래4 sphere/2 hinge, dt1/120,1,200단계/10초다. Native fe89b765의 정확한 Integration 채택은 아직 확인되지 않았다. 확인 후 새 Physics 격리 작업 공간에서 파일을 나눠 구현한다. 화면·저장·열기·복구 후속 검증은 코드 시작을 막지 않는다. 현재 문서 선택만 완료했으며 새 World 구현·수치·화면 GO는 없다. 공개 범용 엔진과 Box3D 수준의 품질 목표는 엔진 목표에 남아 있다. #1399의 실제 World NO-GO와 기존 원본 실패 증거도 유지한다.
SOURCE·반복·genuine compiled 각각14개(반환12·strict cap 거절2), native guards와 독립 protocol controls가 통과했다. 전체 JSON151기록/raw14,680B의 바이트 일치와 EOF·개수·hash를 확인한 뒤에만 저장 alias를 만들었다. 실제 exit0/4.388922083s다. 완료 자료72개 manifest 28e99bc780d2ce4e2319e637a925631002da8fdc234f8b8bc6306abc9ba2541f, 커밋 62188f1a. 현재 제품 로드맵의 출처·과거 실패·새 호출 수를 유지한다.
완료 자료·출처 감사는 모두 통과했다. native 인계의 정확한 코드 채택과 필요한 API 확인을 다음 소비자의 시작 조건으로 유지한다. 전체 World 계약 제안은 계획 상태이며 Root의 남은 선택을 명시한다.
다음 작업은 아래 §8의 원래 네 sphere/two hinge 월드에 대한 전체 before-code 계약이다. 현재는 계약 작성 단계이며 새 World 계산·코드·1200-step GO는 없다. 선행 GO를 월드나 공개 엔진의 GO로 표시하지 않는다. 기존 #1179에서 계속 추적한다.
Root는 d743c836에서 누락 단계 계약과 실제 데이터 감사(SHA256 80efbd1690a34af6f6a3cc8cf0902daee17a01fbd958516d8aa6380c59ef0fae)를 먼저 기록했다. 에이전트 3개가 저장된 자료의 인증·부호 복원, 기존 소비자의 REST 완료 함수, 독립 참조와 로그 코드를 분리해 작성·검토한다. 새 소스 전체 고정과 실행 전 산출물 기록 전에는 계산하지 않는다.
SOURCE genuine의 통과 기록은 그대로 사용한다. 후보나 독립 참조를 다시 호출하지 않는다. REST는 저장된 실제 출력과 raw로 실패한 독립 평가만 한 번 한다. 통과하면 원래 고정 입력의 case3..14를 진행한다. REST가 수치 불일치면 그 결과를 보존하고 다음 SOURCE 사례를 실행하지 않는다. 독립 참조가 답을 주지 않으면 실행 오류로 기록한다. 원래 실패 기록은 별도 자료로 유지한다.
논리 SOURCE 사례 수와 새 호출 수를 나눠 기록한다. 전부 통과할 경우 과거 native2 + 새 native12 = 논리14, 과거 완료 참조1 + 새 참조13 = 완료14다. 원래 실패한 참조 요청1도 이력에 남는다. 아직 실행하지 않은 native guards·독립 protocol controls와 repeat·genuine compiled prefix는 각각 처음 실행한다. 전체 JSON/raw를 비교한 뒤에만 같은 자료의 저장 alias를 쓴다. 원래 build/types/548개 실제 산출물의 출처는 새 소비자 소스와 구분한다. 물리 모델·입력·cap·수치 기준은 그대로다.
현재는 코드 작성 단계다. 전체14개 통과, World·Viewer·공개 엔진·발행 결과는 아직 없다.
원래 genuine 입력의 실제 첫 검사는 통과했다. 모터는 remembered0.8에서 차단됐고 j0이다. Projected B의 correction report KB=[0,0,0.032042209723911974]N·m·s가 strict0.01 cap을 넘었다. Copied report-ready callback은 한 번이며 cap 전 attempt.error=null이다. 실제 cap 오류와 독립 CAP_REFUSAL 결과가 일치한다. Accepted output/World GO가 아니라 report 의미 검사1개의 통과다.
다음 REST는 실제 native output과 다섯 프레임을 반환했지만 독립 Python이 exit1로 끝나 답을 주지 않았다. Consumer exit1/0.6830073749879375s, Source 두 기록·raw2080B·첫548개 산출물 ledger·소스·로그를 c94dc51a에 보존했다. 첫60자료/542,716B manifest SHA256 344532b1167fd89fdefa62a63fc50f5bbb2ebf0b5a1a38ef14d932a064acf25d. 새 모듈의 첫 build0/7.836108s와 strict private types0/1.079151s,11MJS·1Python syntax는 통과했다. 그 결과를14개 사례 전체 통과로 확대하지 않는다.
원래 Python stderr는 in-process로만 수집돼 파일에 남지 않았다. 원래 오류 세부는 미확보다. 같은 미완료 REST 독립 요청만 한 번 별도 진단했다. 새 진단 exit1/0.106279541s와 stderr1521B를 보존했으며 원래 로그를 복구한 것으로 표시하지 않는다. 실제 KeyError 원인은 RETURN diagnostics에 없는 jointReport 조회다. 이 값은 반환 객체의 top-level에서 이미 검증된다. Cap attempt에만 embedded report가 있어 첫 genuine은 통과했다.
실제 부분 결과와 코드 전 수정 계약. 한 곳의 wire adapter만 수정하고 물리 계산·입력·schema·cap·gate를 유지한다. Source genuine과 REST native output은 다시 계산하지 않는다. 완료된 genuine을 보존하고, 저장된 REST 출력의 미완료 독립 평가 후 사례3..14·미실행 controls·repeat/compiled를 이어간다. 새 전체 소스 고정과 원래548개 actual build/types/emitted 관계를 공개한 후 실행한다. 아직 전체14/parity/World/Viewer/public/release GO는 없다.
네 선택을 채택했다. 부모의 finite-only remembered angle을 모터 입력으로 유지한다. 다음 report는 adopted pose의 exact target이며 raw angle은 별도다. copied observer를 cap 전에 최대 한 번 호출한다. genuine/overload의 예상 CAP_REFUSAL은 report 의미 검사이며 accepted World GO가 아니다. 고정 midpoint motor work와 spin-only work를 비교한다.
독립 검토의 두 조건을 적용한다. Nonnegative는 KE와 부모 objective에만 적용한다. Motor/command work와 free/projection ΔK는 음수를 허용하는 finite 값이다. 독립 참조는 원래 scalar 연산마다 binary64 반올림과 raw zero 부호를 정하고, 자기 예상 FREE로 부모 pose/rows/Fraction 해를 계산한다. Decimal 전체 계산 뒤 마지막 한 번 반올림하거나 후보 FREE를 초기값으로 쓰지 않는다. 실제 projected 보고·cap·error와 immutable 입력을 첫 실행에서 비교한다. 아래 초안의 일반적인 energy 문구는 이 구체 규칙으로 제한한다.
API/attempt/diagnostics keys, 정확한 입력·오류·리터럴·참조 및 소유 파일을 에이전트 3개가 상세화 중이다. 이 선택은 새 수치 결과가 아니다. 코드 전에 전체 계약을 고정하고, 실제 전체 소스와 빌드 산출물을 소비자 실행 전에 다시 고정한다. #1399 UI·저장 상태를 이 독립 준비의 대기 사유로 삼지 않는다.
#1349의 실제 채택 코드를 사용할 수 있다. #1399의 화면 검증은 시작 조건이 아니다. 아래는 새 계산 전 제안이며 구현·수치 결과가 아니다. 기억된 accepted report 각도, 원래 motor/free 순서, 명시된 impulse 보고·cap, 독립 입력 참조를 구체화했다. Root는 exact diagnostics/attempt keys와 소유 파일을 확정한 뒤 코드 전에 고정한다. 단위·반력 상한을 낮은 부하로 바꿔 실패를 숨기지 않는다.
SOURCE-ONLY. 새 계산·모델·reference·World·build/type/parser/AST 실행은 없다. 진행 중 #1399 output은 읽지 않았다. root가 아래 선택을 BEFORE-CODE로 승인·고정한 뒤에만 구현한다. #1349의 실제 93 detached outputs GO와 #1279/#1309의 실제 NO-GO를 유지한다. 새 조합과 1200-step World는 UNMEASURED다.
| 선택 | 한 가지 제안 |
|---|---|
| incoming report memory | 부모 finite-only admission 유지. 추가 [-.8,.8] 범위나 raw-angle agreement admission을 넣지 않는다. 모터는 incoming carrier.joints[0].angleRad를 그대로 읽는다. 기억된 값과 raw geometry 차이는 진단만 한다. |
| outgoing report/observer | angleRad는 adopted projection.poseReport.targetAngleRad다. rawFinalAngle은 별도 진단이다. snap/slop/reclamp는 없다. copied observeAttempt는 최대 한 번이며 report-ready에서 cap enforcement 전에 호출한다. |
| genuine/overload disposition | 두 named case의 예상은 CAP_REFUSAL. 정확한 독립 pipeline 예측과 실제 동일한 code/message·report·cap을 비교한다. 이 예상은 새 실행 결과가 아니다. 올바른 예상 cap 거절은 REPORT/CAP 의미 검증의 통과이고 accepted simulation step GO가 아니다. |
| work convention/gates | motor work는 입력/출력 상대속도의 midpoint와 실제 j로 정의한다. 별도 spin-only midpoint Δω work와 비교한다. translation energy와 projection objective를 motor work로 섞지 않는다. 아래 고정 operation order와 단위별 gate를 쓴다. |
ONLY NEW examples/physics-rigid-hinge-motor-reference/**. adopted #1349 source527a4407/native0e296d1e를 그대로 사용한다. #1349 worktree는 future runtime dependency가 아니다. 새 lane의 adopted own copies를 상대 import한다. 원래 #1279의 native0de27c archive/hash와 physical NO-GO는 별도 역사 증거다. 부모·package·Integration·Viewer 파일을 바꾸지 않는다.
advanceDrivenHingePairReference(config,carrier,dt,commands=[],{observeAttempt?}={}) → {bodies,jointReport,diagnostics}.
이 API는 detached 한-step 조합이다. World·snapshot import·accepted-store·dispose·queue API를 만들지 않는다. 입력은 부모의 two1kg/.1m spheres, +Z axis, anchors±.1, limits±.8, motor target .5/maxImpulse .0001/maxReaction .01, gravity0, dt1/120이다. group0 Z0, 원래 group1 Z1 또는 명시한 canonicalZ0 parent case만 사용한다. 새 axis/mass/inertia override/coherence admission은 없다.
부모 prepareInput으로 rest metadata를 파싱한 뒤 copied raw13을 복원한다. moving body에 resting-scene admission을 다시 호출하지 않는다. carrier cursor/time/기존 joint report는 그대로 남긴다. 이후 adopted projection 내부 admission 호출은 그대로 두며 physical law 호출 수로 세지 않는다.
- 부모 dt → 구조/profile/raw/finite remembered report admission. copied sourceBodies/config/carrier 확보.
- 원래 parseCommands와 admitDynamicHingeCommands. per-call commands만 사용한다. 선형 명령 또는 원래 perpendicular threshold 초과는 기존 오류로 거절한다.
- 원래 angular update:
inverseInertia(angularImpulse + torque*dt)를 기존 add/scale 순서로 적용. angularBodies 저장. - driveDynamicHingeMotor 한 번. 각도 인자는 incoming remembered report다. geometry/normalized q/clamped raw 값으로 대체하지 않는다. motorBodies와 실제 scalar j를 저장한다.
- 원래 angular bounds → advanceOrientation → 원래 linear update와 위치 적분/이동 bounds. freeBodies 저장. 추가 position/angle 보정은 없다.
- projectHingePoseVelocityReference 한 번에 copied FREE carrier를 공급한다. P/L targets는 실제 FREE 입력이다. 이전 초기값이나 예상 결과로 바꾸지 않는다. parent one-clamp pose와 0/1/2 velocity choices를 유지한다.
- projectedBodies, 보고, work 및 finite checks를 만든다. report-ready copied attempt observer → strict reaction cap → copied complete output 순서다.
원래 source report .8과 raw .7999999999999999는 모터의 서로 다른 입력이다. positive .5 motor는 remembered .8에서 차단된다. lower −.8은 이 positive target의 lower-block 조건에 해당하지 않는다. adopted velocity stop eligibility는 FREE raw에서 나온 exact target을 계속 사용한다. 이 두 권위를 합치지 않는다.
baseline은 projection input FREE다. 각 body i에 대해 원래 sub 먼저, scalar scale 다음 순서로
-
J_i = (1/inverseMass_i) * (v_projected_i - v_FREE_i)— N*s. -
K_i = parsedScalarI_i * (ω_projected_i - ω_FREE_i)— Nms. - jointReport는 기존
{id,kind,aId,bId,angleRad,linearImpulseNs,angularImpulseNms,motorImpulseNms}만 쓴다. linearImpulseNs=J_B, angularImpulseNms=K_B, motorImpulseNms=실제 j. motor를 correction에 다시 더하지 않는다. - angular report norm >.01만 거절, equality는 통과한다.
.01에 tolerance를 더하지 않는다. 선형 report는 기존처럼 finite만 요구하며 새 cap을 만들지 않는다. - scalar I는 원래
.4*mass*radius**2의 parsed binary 값이다. K 계산은 새 명시된 scalar report이며 원래 inertia(body,delta)의 bit parity를 주장하지 않는다. KKT 승수·force/dt·calibrated reaction으로 바꾸지 않는다.
motor before는 angularBodies, after는 motorBodies다. sBefore=dot(ωBbefore-ωAbefore,axis), sAfter=dot(ωBafter-ωAafter,axis). motorWorkJ = (j(sBefore+sAfter))*.5* 순서로 계산한다.
spin-only 비교는 A 다음 B 순서다: 각 i에 대해 sub로 Δω, add로 ωbefore+ωafter, xyz dot, (.5*I_i)*dot(Δω,sumω)를 만들고 두 body 값을 더한다. 큰 total KE 두 값의 차이로 work를 정의하지 않는다. source→angular external work, motor work, free-integration energy, projection ΔK, parent objective를 각각 기록한다. energy는 finite/nonnegative 검사만 하며 자동 conservation/dissipation을 약속하지 않는다.
genuine orbital input은 원래1309 orbitalLossCandidateControl.input을 그대로 쓴다. remembered .8 때문에 j=0이고 source ω0이므로 free q는 유지된다. 반대의 vY와 대칭 위치에서 FREE COM/P와 L targets가 유지된다는 source 대수, one-clamp/held-orientation centre 재구성, physicalX0가 같은 점을 근거로 기존1349의 high common spin correction이 이 조합에서도 cap을 넘을 것으로 예상한다. 이미 관측한 detached ωB=8.010552430977992는 .01/parsedI의 허용 Δω보다 크다. 이 값은 기존 detached 결과이며 새 pipeline 관측값으로 이름을 바꾸지 않는다.
overload는 rest/B의 원래 angularImpulse[0,0,.1]이다. 예상 CAP_REFUSAL은 독립 angular-command/motor/free/pose/velocity 조합의 입력-only symbolic/rational 예측으로 먼저 고정한다. 새 projection 호출로 예상 값을 채우거나 old World refusal을 새 cap 증거로 쓰지 않는다. 첫 허용 flow에서 예상과 다르면 첫 불일치를 NO-GO로 저장하고 cap·입력·각도·row·budget을 수정하지 않는다.
overload 예측의 작은 대수 근거: 동일한 r/I의 planar 쌍에서 ℓ=.1, 실제 motor j, FREE 상대각 θ를 두면 S0=ℓ/I, D0=(ℓ+2j)/I다. 닫힌 anchor/COM/P/L rows의 독립 식은 C=I+(r²/2)*(1+cosθ), S=ℓ/C, D=I*D0/(I+(r²/2)*(1-cosθ))다. 이 literal은 θ가 작은 양수이고 D0>0이므로 |K_B| >= (ℓ/2)*(1-I/C)라는 cap 방향 예측을 준다. cosθ>0에서 얻는 보수적 bound도 .01보다 크다. 이는 source 수식 추론이며 새 solve/관측값이 아니다. reference는 binary I와 raw/normalized geometry로 별도 검증하고, 이 ideal 식을 candidate frame seed로 쓰지 않는다.
positive cases는 rest/signedzero, exact endpoint memory, 네 stop directions, A/B angular impulse.001, B torque.001+impulse.001, namedZ1이다. parser/cursor/copy/reflection/cap-equality guards는 별도다. 93 parent cases를 새 pipeline으로 반복하지 않는다. genuine과 overload를 제외하거나 더 낮은 입력으로 교체하지 않는다.
우선순위: 부모 dt→structural/profile/raw/reportfinite→commands→original angular/movement bounds→parent projection/body/certificate errors→finite new report/work→copied observer→reaction cap→complete return.
finite report 오류는 기존 PhysicsError/NUMERIC_LIMIT/unsafe joint reaction, cap 오류는 ${joint.id} exceeded motor reaction limit을 사용한다. 원래 command message와 parent exact class/code/message bridge를 유지한다. finite-only를 선택했으므로 새 memory range 오류는 없다. unknown Error/object/null/반사 오류는 같은 값으로 전파한다.
stage 계산 중 실패하면 이미 copied된 reached fields와 safe error metadata를 observer에 한 번 전달하고 원래 오류를 던진다. 성공적으로 report-ready가 되면 observer를 catch 밖에서 한 번 호출하고 그 뒤 cap을 검사한다. 따라서 cap refusal에서 observer를 다시 부르지 않는다. observer exception은 후속 cap보다 먼저 이기며 같은 값이 전파된다.
attempt의 source/angular/motor/free/projected frames, projection/report/work는 미도달 시 null이다. report-ready에는 실제 norm/cap/exceedsCap을 저장하되 아직 accepted output은 아니다. 원래 입력 config/carrier/commands/raw bytes/cursor를 바꾸지 않는다. 진단을 복사하다 원래 예외를 덮지 않는다. 성공 반환 body/report/frames/parent diagnostics는 서로 분리된 copy다.
source→FREE는 원래 빈 add 연산으로 -0를 +0로 바꿀 수 있다. 입력 raw bits와 각 출력 raw bits를 따로 보존한다. source→projected identity를 새로 주장하지 않는다. parent identity일 때의 FREE→projected v/ω bit retention만 유지한다.
Python은 original config/carrier/commands에서 remembered-motor decision, 실제 command update, motor/free frames, parent pose/independent rows/Fraction optimum을 먼저 만든다. candidate frame·report·lambda는 expected 초기값이 아니다. native parsed binaryI와 ideal geometricI, raw/normalized q geometry, scalar trig repeat와 Decimal algebra를 분리한다.
parent1349의 모든 선택·gate를 유지한다: p/q1e-12, coefficient relative1e-12, exact nativeI/order/scales/stop tags, velocity1e-10m/s, angular1e-9rad/s, objective1e-10J, dimensionless certificate1e-10, anchor/angle/report/limit/q1e-9, P/L1e-7 SI, COM1e-12m, kinematic1e-9, raw/normalized1e-12, Decimal80/1201e-25, scalar repeat1e-12. 새 j/J/K 비교1e-12의 각 impulse 단위, motor work1e-12J, freev/ω1e-10, freep/q1e-12를 추가한다. unresolved/protocol는 EXECUTION_FAILURE, valid physical/report mismatch는 NO-GO다.
actual adoption/provider blobs, parent archive/raw hashes, exact API/attempt/error/literal/reference와 전체 source graph를 고정한다. 이후 root만 한 build/strict types, 실제 emitted ledger, ONE source/repeat/genuinecompiled staged flow를 실행한다. 예상 cap refusal도 reached projected raw/report/reference와 입력 불변을 모두 보관한다. REPORT/CAP 의미 qualification을 World GO로 표시하지 않는다.
이 gate가 정확히 통과한 뒤에만 기존 #1179에서 원래 네 spheres/two separated hinges/Z0·Z1/dt1/120/gravity0/motor metadata로 World를 구현한다. 한 body 한 hinge, exact translated pair, chain 없음. 기존 연결쌍 collision 제외와 네 cross-group pair 검사, 원래 contact8 passes를 유지한다. contact pass 안의 old joint correction은 제거하고 contact 뒤 pair당 adopted projection/report substage 한 번으로 명시적으로 바꾼다.
World는 commands→motor once/joint→free integration once/global bodies→contacts8→projection/report once/pair→finite/caps/outer bounds→single commit이다. full advance API를 World에서 호출해 motor/free를 두 번 수행하지 않는다. World projection targets/report baseline은 실제 POST-CONTACT pair이며 FREE와 분리해 이름을 붙인다. accepted angle authority는 오직 마지막 accepted jointReport.angleRad다.
failure는 모든 body/contact/event/joint/counter/ledger/cache/cursor/time을 이전 accepted 값으로 유지하며 per-call commands를 버린다. nominal World의 cap refusal은 expected-report guard가 아니라 실제 World NO-GO다. original1200steps/10s anchors2mm/axes1degree/no-cross-contact/finite/repeat/genuinecompiled/독립 P-L·motor-work·cap/transaction gates를 그대로 고정한다. #1399 UI나 저장 진행을 기다리는 선행조건은 없다.
root에게 남은 결정: 이 제안의 네 선택을 채택할지 여부, exact attempt/diagnostics key table와 소유 파일 배정이다. 수치 law/cap/권위 선택을 실행 후로 미루지 않는다. 이 문서는 implementation·새 numerical GO·World/Viewer/public/release GO가 아니다.
기존 #1179 항목에서 소스 기반 모터/보고 시작 표를 정리했다. 원래 수용 보고 각도가 모터 제동의 권위를 가지며 실제 raw 각도는 별도로 관찰한다. 명령 → 원래 모터 한 번 → 자유 적분 → #1349 보정 한 번의 계약이며, B 몸체의 실제 속도 변화에서 알고리즘 임펄스를 기록한다. 입력 메모리·출력 보고·상한·오류·독립 참조 기준을 완전히 고정한 뒤 시작한다. 아직 새 모터/World 실행은 없다. #1384의 위치 8행 실패와는 독립 준비다.
기존 #1179의 힌지 월드 준비 항목에서 추적한다. 새 중복 이슈를 만들지 않는다. #1349 네이티브 0e296d1e75c837e767329634f6a2ac6f5832e54f는 지정된 분리 모델 93개 출력에서 GO다. 실제 World·모터·반력·10초 검증은 아직 없다. 원래 #1279의 실패와 외부 기록 의존성을 유지한다. #1264는 접촉 스택의 위치만 보정한 별도 실험이며 힌지 소비자로 다시 해석하지 않는다.
원래 HINGE2의 동일한 1 kg·반지름 0.1 m 구 네 개와 분리된 힌지 두 개를 사용한다. +Z 축·원래 앵커·한계·모터 메타데이터·중력 0·고정 스텝 1/120 s를 유지한다. 연결된 A/B 쌍 충돌 제외와 나머지 그룹 간 충돌 검사는 원래 의미를 유지한다. Physics의 새 격리된 예제 경로만 소유하며, 부모·공용 패키지·Integration·Viewer를 수정하는 권한은 이 준비 항목에 없다.
원래 #1279의 순서는 명령 → 모터 → 자유 자세·위치 적분 → 기존 접촉 계산 8회(각 회에 이전 관절 보정) → 검증·상한 → 원자적 수용이다. 새 제안은 접촉 계산 뒤 새 자세·속도 보정을 관절당 한 번 적용한다. 호출 횟수와 위치가 달라지므로 별도 모델 계약과 실제 검증이 필요하다. 아직 구현하지 않는다.
모터 일·반력 보고의 작은 시작 검증을 월드 소비자의 명시된 선행 단계로 준비한다. 명령·원래 모터·자유 적분·새 보정을 조합한 입력과 결과를 독립 계산으로 비교하며 World를 만들지 않는다. 새 속도에서 몸체 B의 알고리즘 보고는 J_B=m_B*Δv_B(N·s), K_B=I_B*Δω_B(N·m·s)다. 이는 현재 보고 필드의 의미에 대한 제안이며 물리 하중 보정을 증명하지 않는다. 이전처럼 8회 누적하는 방식과 한 번 계산하는 방식의 차이를 명시한다.
KKT 승수 전체를 모터 임펄스로 복사하지 않는다. P 행 승수는 m/s, L 행 승수는 1/s, 앵커 행은 N·s, 힌지 속도 행은 N·m·s다. 모델의 목적함수(J)와 모터 일(J), 위치 보정, 실제 속도 변화, 보고 상한을 구분한다. 모든 승수가 같은 반력 단위라는 주장은 허용하지 않는다.
원래 모터는 수용된 보고 각도로 끝점 제동을 결정한다. 목표 0.8과 실제 0.7999999999999999는 별도 값이다. 실제 각도를 숨기지 않고, 어떤 값·상태가 모터 제동의 권위를 갖는지 새 인터페이스에서 먼저 정한다. 각도 slop·실패 뒤 값 맞추기는 허용하지 않는다.
입력은 원래 설정·유한 raw13 몸체 값·커서·명령이다. 단위는 m/kg/s다. 입력 복사, 알려진 오류의 정확한 코드·메시지·우선순위와 알 수 없는 예외의 동일성을 고정한다. 무효·수치·보고 상한 오류는 몸체·시간·대기 명령·카운터·관절 진단을 이전 수용 상태로 유지해야 한다. 부분 결과를 공개하거나 임펄스 0으로 대체해 상한을 피하지 않는다.
관찰은 실제 최종 앵커·각도·COM·P·L·원시/정규화 기하, 모터 전후 에너지·모터 일, 알고리즘 보고와 상한을 포함한다. 고정된 선행 입력과 실제 1200 스텝/10초 HINGE2 흐름을 나눠 센다. 독립 입력에서 참조를 만들며 후보 출력으로 참조 초기값을 바꾸지 않는다. 최초 실패를 보관하고 같은 구간만 소스·반복·실제 컴파일 경로에서 비교한다. 비용은 실제 실행 시간과 정해진 연산 수이며 성능 동등성·하중 정확성·광범위 관절 네트워크를 주장하지 않는다.
- #1349의 정확한 실제 코드 통합과 원래 네이티브 증거를 확인한다.
- 원래 #1279 기록·프로필·현재 사용한 실제 소스의 해시를 확인한다.
- 단계 순서·횟수, 보고/모터/제동 권위, 단위·상한, 원자적 오류와 독립 참조·리터럴·수치 기준을 고정한다.
- 모터/보고 선행 검증이 실제로 통과하고 인터페이스가 준비되면 월드 구현과 첫 실행을 시작한다.
- 화면·파일·복구 #674/#1254는 별도 추적하며, 그 미실행만을 코드 대기 사유로 삼지 않는다.
이는 준비 문서다. 새 월드·모터 계산이나 원래 월드 재실행은 하지 않았다. Viewer·공개 엔진·발행은 별도다.
1349 is now locally adopted at527a4407207e32a801365f1b59c071469948aa19, immutable d6b552f9->0e296d1e. Its native93 detached pose/velocity/momentum outputs and original TS2345/REFERENCE_INPUT and historical1279/1309 physicalNO-GO remain. Exact external archive paths are not claimed embedded in currentRoot. No new replay/build/publicWorld qualification follows.
Separately1344 is adopted1a4278a8fc4a1e84cbf73591027f55e591678571, native2ef09ad2 retrospective signed rows. Owner-created1384 uses that actual code after fully freezing its live closure contract. Hinge/motor integration here remains a different planned consumer.
#1179 네이티브 결과: SOURCE·반복 SOURCE·실제 컴파일 Physics 의존성이 각각 1,200단계/10초를 통과했다. 실제 실행 a341f222, 최종 증거 f40123da0eedb19245688557f865e1beb09d47ef다. 에이전트 3개가 raw·참조·출처를 나눠 검사했다. 두 모터는 197단계에서 0.8 rad 한계에 도달했고, 실제 자세 변화도 확인했다. 최초 오류와 원래 #1279/#1399 NO-GO는 보존했다. 공개 API는 아직 원래 HINGE2 입력을 거부한다.
전달 자료는 정확한 기반 a59eaf877 → 최종 네이티브 f40123da의 9개 커밋·신규 소유 경로 133개다. 현재 Integration 3833ded7에는 아직 없다. 채택·현재 통합 검증·발행을 구분한다.
다음 기록 재생 Viewer는 기존 #1179에서 진행한다. 승인된 원래 기록만 표시하고 Physics 계산을 재실행하지 않는다. 첫 소비자·단위·입출력·소유 경로·실패 보존·실제 화면 기준을 계약에 적었다. 새 중복 이슈는 만들지 않았다. 전체 #1179/#660과 현재 통합 후속 #674/#1254는 OPEN이다.