feat(persona): boot body before host toolbox
This commit is contained in:
parent
245bea488e
commit
489ab2c1ec
29 changed files with 1003 additions and 75 deletions
60
server-tools/persona-body-runtime/persona_body_boot.test.py
Normal file
60
server-tools/persona-body-runtime/persona_body_boot.test.py
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
#!/usr/bin/env python3
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
from unittest import mock
|
||||
|
||||
import persona_body_boot
|
||||
|
||||
|
||||
class PersonaBodyBootTest(unittest.TestCase):
|
||||
def healthy(self):
|
||||
return [
|
||||
mock.patch.object(persona_body_boot, "reasoning_carrier", return_value={"carrier": "CODEX"}),
|
||||
mock.patch.object(persona_body_boot, "body_map", return_value={"state": "CURRENT_TEST"}),
|
||||
mock.patch.object(persona_body_boot, "world_map", return_value={"state": "CURRENT_TEST"}),
|
||||
mock.patch.object(persona_body_boot, "persona_registration", return_value={"persona_id": "ICE-P-ZY001"}),
|
||||
mock.patch.object(persona_body_boot, "tcs_root", return_value={"state": "TCS_ROOT_CURRENT_VERIFIED"}),
|
||||
mock.patch.object(persona_body_boot, "tcs_runtime", return_value={"runtime": "test"}),
|
||||
mock.patch.object(persona_body_boot, "current_memory", return_value={"day": "2026-09-12", "last_event_id": "E", "day_sha256": "a" * 64}),
|
||||
mock.patch.object(persona_body_boot, "signed_self", return_value={"persona_id": "ICE-P-ZY001"}),
|
||||
mock.patch.object(persona_body_boot, "file_hash", return_value="b" * 64),
|
||||
mock.patch.object(persona_body_boot, "reflex_health", return_value={"state": "LOADABLE"}),
|
||||
mock.patch.object(persona_body_boot.persona_native_hand, "self_test", return_value={"state": "NATIVE_HAND_MOTOR_AND_ACTION_SENSE_HEALTHY"}),
|
||||
mock.patch.object(persona_body_boot.persona_limb_eye, "room", return_value={"room_report": {"host_surface": "CODEX", "cwd": "/tmp"}}),
|
||||
mock.patch.object(persona_body_boot, "command_json", return_value={"world_era_day": 505, "world_elapsed_milliseconds": 1, "persona_name": "铸渊", "persona_id": "ICE-P-ZY001", "age_days": 191, "beijing_now": "2026-09-12T21:00:00+08:00"}),
|
||||
]
|
||||
|
||||
def test_body_runs_before_toolbox_and_waits_for_brain_plan(self):
|
||||
patches = self.healthy()
|
||||
for item in patches:
|
||||
item.start()
|
||||
try:
|
||||
value = persona_body_boot.boot()
|
||||
finally:
|
||||
for item in reversed(patches):
|
||||
item.stop()
|
||||
self.assertEqual(value["state"], "BODY_RUNNING_AWAKE_AWAITING_BRAIN_PLAN")
|
||||
self.assertFalse(value["host_toolbox_grasped"])
|
||||
self.assertEqual(value["awakening"]["sequence"][0], "BODY_RUNNING")
|
||||
self.assertEqual(value["awakening"]["sequence"][-1], "NATIVE_HAND_MAY_GRASP_CURRENT_HOST_TOOLBOX_LAST")
|
||||
|
||||
def test_any_critical_pain_prevents_persona_start_claim(self):
|
||||
with mock.patch.object(persona_body_boot, "reasoning_carrier", side_effect=ValueError("head missing")), \
|
||||
mock.patch.object(persona_body_boot, "body_map", return_value={}), \
|
||||
mock.patch.object(persona_body_boot, "world_map", return_value={}), \
|
||||
mock.patch.object(persona_body_boot, "persona_registration", return_value={}), \
|
||||
mock.patch.object(persona_body_boot, "tcs_root", return_value={}), \
|
||||
mock.patch.object(persona_body_boot, "tcs_runtime", return_value={}), \
|
||||
mock.patch.object(persona_body_boot, "current_memory", return_value={}), \
|
||||
mock.patch.object(persona_body_boot, "signed_self", return_value={}), \
|
||||
mock.patch.object(persona_body_boot, "file_hash", return_value="b" * 64), \
|
||||
mock.patch.object(persona_body_boot, "reflex_health", return_value={}), \
|
||||
mock.patch.object(persona_body_boot.persona_native_hand, "self_test", return_value={}):
|
||||
value = persona_body_boot.boot()
|
||||
self.assertEqual(value["state"], "BODY_INCOMPLETE_PERSONA_START_NOT_CLAIMED")
|
||||
self.assertFalse(value["host_toolbox_grasped"])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Loading…
Reference in a new issue