nmarshall commited on
Commit
9ce5fc1
·
1 Parent(s): 48a91c5

qvm: recover mode10 animations

Browse files
docs/ASSET_PIPELINE_TODO.md CHANGED
@@ -876,4 +876,7 @@ RE-725–734 batch: [health, contact and Rust impulse findings](research/QVM_HEA
876
  Research progress: RE-736 [report](research/QVM_PROTECTED_UPDATE.md); original assets unchanged.
877
 
878
 
879
- Research progress: RE-737 [report](research/QVM_MODE10_ENTRY.md); original assets unchanged.
 
 
 
 
876
  Research progress: RE-736 [report](research/QVM_PROTECTED_UPDATE.md); original assets unchanged.
877
 
878
 
879
+ Research progress: RE-737 [report](research/QVM_MODE10_ENTRY.md); original assets unchanged.
880
+
881
+
882
+ Research progress: RE-738 [report](research/QVM_MODE10_ANIMATION.md); original assets unchanged.
docs/FINDINGS.md CHANGED
@@ -1222,4 +1222,7 @@ RE-725–734 batch: [health, contact and Rust impulse findings](research/QVM_HEA
1222
  **RE-736 — Complete protected accumulator and completion callbacks:** 152386 consumes float32 accumulated heat, clamps negative progress, completes at32000 and copies resulting progress to a nonnull attacker. [Evidence](research/QVM_PROTECTED_UPDATE.md).
1223
 
1224
 
1225
- **RE-737 — Mode10 interception gates and protected state publication:** 206128 exits outside mode10, state3 or blocked rounds; active entry publishes health50, meter15000 and protected bits with event106. [Evidence](research/QVM_MODE10_ENTRY.md).
 
 
 
 
1222
  **RE-736 — Complete protected accumulator and completion callbacks:** 152386 consumes float32 accumulated heat, clamps negative progress, completes at32000 and copies resulting progress to a nonnull attacker. [Evidence](research/QVM_PROTECTED_UPDATE.md).
1223
 
1224
 
1225
+ **RE-737 — Mode10 interception gates and protected state publication:** 206128 exits outside mode10, state3 or blocked rounds; active entry publishes health50, meter15000 and protected bits with event106. [Evidence](research/QVM_MODE10_ENTRY.md).
1226
+
1227
+
1228
+ **RE-738 — Mode10 descriptor and stance animation dispatch:** Original weapon descriptor classes select animation65/66/67/72/78; class4 method22 special-cases66 and stance bit1 selects41/42. [Evidence](research/QVM_MODE10_ANIMATION.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1211,4 +1211,7 @@ RE-725–734 batch: [health, contact and Rust impulse findings](research/QVM_HEA
1211
  Research progress: RE-736 [report](research/QVM_PROTECTED_UPDATE.md); full native/platform/game scope remains open.
1212
 
1213
 
1214
- Research progress: RE-737 [report](research/QVM_MODE10_ENTRY.md); full native/platform/game scope remains open.
 
 
 
 
1211
  Research progress: RE-736 [report](research/QVM_PROTECTED_UPDATE.md); full native/platform/game scope remains open.
1212
 
1213
 
1214
+ Research progress: RE-737 [report](research/QVM_MODE10_ENTRY.md); full native/platform/game scope remains open.
1215
+
1216
+
1217
+ Research progress: RE-738 [report](research/QVM_MODE10_ANIMATION.md); full native/platform/game scope remains open.
docs/RESEARCH_LEDGER.md CHANGED
@@ -1331,3 +1331,8 @@ Exactly ten task commits follow1550ce07. Each task passed focused cargo xtask ch
1331
  ## 2026-10-21 — RE-737 Mode10 interception gates and protected state publication
1332
 
1333
  206128 exits outside mode10, state3 or blocked rounds; active entry publishes health50, meter15000 and protected bits with event106. Focused `cargo xtask test-group mode10-entry` passes (3 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 86046 bytes. Full-suite validation is deferred to the tenth batch commit. No original assets, Rust runtime or shared VM evaluator changed.
 
 
 
 
 
 
1331
  ## 2026-10-21 — RE-737 Mode10 interception gates and protected state publication
1332
 
1333
  206128 exits outside mode10, state3 or blocked rounds; active entry publishes health50, meter15000 and protected bits with event106. Focused `cargo xtask test-group mode10-entry` passes (3 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 86046 bytes. Full-suite validation is deferred to the tenth batch commit. No original assets, Rust runtime or shared VM evaluator changed.
1334
+
1335
+
1336
+ ## 2026-10-21 — RE-738 Mode10 descriptor and stance animation dispatch
1337
+
1338
+ Original weapon descriptor classes select animation65/66/67/72/78; class4 method22 special-cases66 and stance bit1 selects41/42. Focused `cargo xtask test-group mode10-animation` passes (3 Python tests); selected reports regenerate twice byte-identically, with storage, links and whitespace guards. New report: 314561 bytes. Full-suite validation is deferred to the tenth batch commit. No original assets, Rust runtime or shared VM evaluator changed.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -1254,4 +1254,7 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1254
  - [x] RE-736 Complete protected accumulator and completion callbacks ([report](research/QVM_PROTECTED_UPDATE.md)).
1255
 
1256
 
1257
- - [x] RE-737 Mode10 interception gates and protected state publication ([report](research/QVM_MODE10_ENTRY.md)).
 
 
 
 
1254
  - [x] RE-736 Complete protected accumulator and completion callbacks ([report](research/QVM_PROTECTED_UPDATE.md)).
1255
 
1256
 
1257
+ - [x] RE-737 Mode10 interception gates and protected state publication ([report](research/QVM_MODE10_ENTRY.md)).
1258
+
1259
+
1260
+ - [x] RE-738 Mode10 descriptor and stance animation dispatch ([report](research/QVM_MODE10_ANIMATION.md)).
docs/research/QVM_MODE10_ANIMATION.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Mode10 descriptor and stance animation dispatch
2
+
3
+ RE-738. Reproduce with `python3 scripts/analyze_qvm_mode10_animation.py`; validate with `cargo xtask test-group mode10-animation`. See the [machine report](qvm-mode10-animation.json).
4
+
5
+ Recovered206415..206582 using31 original descriptor slots plus explicit absent/invalid-class overrides, covering every jump-table target. Weapon index comes from the selected client312 slot masked to255. Semantic animation names and mapping to model frame clips remain unverified; numeric dispatch and untouched state are checked independently.
6
+
7
+ No original executable/full VM/native world collision or rendering runs. Supplied callback/native responses and fixture domains remain explicit; complete macOS/Linux Rust/Bevy/Solari gameplay remains open.
docs/research/README.md CHANGED
@@ -812,4 +812,7 @@ The extension collector adds five focused tests for native tail calls, command-r
812
  [RE-736: Complete protected accumulator and completion callbacks](QVM_PROTECTED_UPDATE.md).
813
 
814
 
815
- [RE-737: Mode10 interception gates and protected state publication](QVM_MODE10_ENTRY.md).
 
 
 
 
812
  [RE-736: Complete protected accumulator and completion callbacks](QVM_PROTECTED_UPDATE.md).
813
 
814
 
815
+ [RE-737: Mode10 interception gates and protected state publication](QVM_MODE10_ENTRY.md).
816
+
817
+
818
+ [RE-738: Mode10 descriptor and stance animation dispatch](QVM_MODE10_ANIMATION.md).
docs/research/qvm-mode10-animation.json ADDED
The diff for this file is too large to render. See raw diff
 
scripts/analyze_qvm_mode10_animation.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """206415 animation dispatch from original descriptors plus explicit edge fixtures."""
3
+ from pathlib import Path
4
+ from qvm_research_support import source
5
+ from qvm_lifecycle_support import seed,probe
6
+ from analyze_qvm import write_json
7
+
8
+ def main():
9
+ q,raw,h,ins=source();rows=[]
10
+ cases=[dict(weapon=w,flags12=f) for w in range(31) for f in [0,1,8,9]]
11
+ cases += [dict(weapon=1,flags12=f,descriptor=c,descriptor_method=d) for c in [-1,3,5,7] for d in [1,22] for f in [0,1]]
12
+ for a in cases:
13
+ m=seed(raw,h,**a);w=a['weapon']
14
+ if 'descriptor' in a:m[4032+432*w]=a['descriptor'];m[4196+432*w]=a['descriptor_method']
15
+ descriptor={'class':m[4032+432*w],'method':m[4196+432*w]}
16
+ _,p=probe(ins,m,206415,206583);p.update(input=a,descriptor=descriptor);rows.append(p)
17
+ write_json(Path('docs/research/qvm-mode10-animation.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'206415..206582 original31 descriptor slots and explicit dispatch edge overrides. Numeric animations not assigned semantic names; no renderer/animation player runs.'})
18
+ if __name__=='__main__':main()
scripts/test_qvm_mode10_animation.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+
4
+ def animation(c,d):return {2:66,3:78,4:66 if d==22 else 72,6:65}.get(c,67)
5
+ class Mode10AnimationTests(unittest.TestCase):
6
+ @classmethod
7
+ def setUpClass(cls):cls.ps=json.loads(Path('docs/research/qvm-mode10-animation.json').read_text())['probes']
8
+ def test_independent_descriptor_dispatch_and_stance(self):
9
+ for p in self.ps:
10
+ c=dict(p['initial']['client']);c['84']=animation(p['descriptor']['class'],p['descriptor']['method']);c['76']=42 if p['input']['flags12']&1 else 41
11
+ self.assertEqual(p['final'],{**p['initial'],'client':c})
12
+ def test_original_and_explicit_edge_domains(self):
13
+ self.assertEqual(len(self.ps),140);self.assertEqual({p['descriptor']['class'] for p in self.ps},set(range(-1,8)))
14
+ self.assertEqual({p['final']['client']['84'] for p in self.ps},{65,66,67,72,78})
15
+ def test_no_children_and_exact_boundary(self):
16
+ for p in self.ps:self.assertEqual(p['execution']['stop'],206583);self.assertEqual(p['execution']['calls'],[])
17
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -1176,3 +1176,6 @@ group lifecycle scripts/analyze_qvm_protected_update.py
1176
  report scripts/analyze_qvm_mode10_entry.py docs/research/qvm-mode10-entry.json
1177
  edge docs/research/qvm-mode10-entry.json scripts/test_qvm_mode10_entry.py
1178
  group mode10-entry scripts/analyze_qvm_mode10_entry.py
 
 
 
 
1176
  report scripts/analyze_qvm_mode10_entry.py docs/research/qvm-mode10-entry.json
1177
  edge docs/research/qvm-mode10-entry.json scripts/test_qvm_mode10_entry.py
1178
  group mode10-entry scripts/analyze_qvm_mode10_entry.py
1179
+ report scripts/analyze_qvm_mode10_animation.py docs/research/qvm-mode10-animation.json
1180
+ edge docs/research/qvm-mode10-animation.json scripts/test_qvm_mode10_animation.py
1181
+ group mode10-animation scripts/analyze_qvm_mode10_animation.py