P23-03: 生活の観察

This commit is contained in:
Agent Control Runner
2026-10-15 18:30:42 +09:00
parent 19fc3f50c7
commit 9a26f9ab8c
4 changed files with 2172 additions and 4 deletions
+100 -1
View File
@@ -157,7 +157,7 @@ class LifeOverlayTests(unittest.TestCase):
def test_core_crossed_by_actual_band_fails(self):
report = self.report()
report['actor_drawings'][0]['at'][1] = 60
with self.assertRaisesRegex(ValueError, 'traffic band covers actor core'):
with self.assertRaisesRegex(ValueError, 'floor actor core over traffic band'):
check.validate_life_overlay(report)
def test_forged_band_geometry_fails(self):
@@ -177,6 +177,105 @@ class LifeOverlayTests(unittest.TestCase):
check.validate_life_overlay(self.report())
class ProjectionBandTests(unittest.TestCase):
def setUp(self):
fixture = json.loads((check.ROOT / 'tests/fixtures/p23-03/repair28_frame180_projection.json').read_text())
self.report, self.snapshot = fixture['report'], fixture['snapshot']
def occupied(self):
for row in self.report['traffic']:
if row['cell'] in ([0, 1, 0], [1, 1, 0]):
self.assertEqual(row['traffic']['current_density'], 0)
row['traffic']['current_density'] = 1
def test_counterfactual_actual_frame180_density_one(self):
"""COUNTERFACTUAL density substitution; never occupied-band engine evidence."""
self.occupied()
for key in ('guest/p23-018', 'guest/p23-019'):
self.assertTrue(any(a['key'] == key for c in self.report['cabins'] for a in c['passengers']))
check.validate_life_overlay(self.report, snapshot=self.snapshot)
def test_cabin_passenger_union_fully_occludes_band(self):
self.occupied()
row = next(r for r in self.report['traffic'] if r['cell'] == [0, 1, 0])
x, y, w, h = row['band_rect']
# Each core covers only part; their touching intervals cover the union.
for i, actor in enumerate(self.report['cabins'][0]['passengers']):
actor.update(scale=2, flip=False, mode='idle', at=[x+i*12-12, y-2])
with self.assertRaisesRegex(ValueError, 'traffic band fully occluded:'):
check.validate_life_overlay(self.report, snapshot=self.snapshot)
def test_spoofed_cabin_rectangle_fails_raw_recomputation(self):
self.occupied()
self.report['cabins'][0]['rect'][1] += 1
with self.assertRaisesRegex(ValueError, 'cabin/rect'):
check.validate_life_overlay(self.report, snapshot=self.snapshot)
def test_flag_only_cabin_projection_without_raw_membership_fails(self):
self.occupied()
for cabin in self.report['cabins']:
for actor in cabin['passengers']:
actor['key'] = 'guest/spoof-' + actor['key']
actor['riding'] = True
with self.assertRaisesRegex(ValueError, 'floor actor core over traffic band'):
check.validate_life_overlay(self.report, snapshot=self.snapshot)
def test_no_raw_state_never_exempts_cabin_projection(self):
self.occupied()
with self.assertRaisesRegex(ValueError, 'floor actor core over traffic band'):
check.validate_life_overlay(self.report)
def test_floor_copy_of_raw_cabin_member_keeps_zero_intersection(self):
self.occupied()
self.report['actor_drawings'].append(copy.deepcopy(self.report['cabins'][0]['passengers'][0]))
with self.assertRaisesRegex(ValueError, 'floor actor core over traffic band'):
check.validate_life_overlay(self.report, snapshot=self.snapshot)
def test_blocked_band_uses_same_projection_and_legibility_rules(self):
row = next(r for r in self.report['traffic'] if r['cell'] == [0, 1, 0])
row['traffic']['temporary_block'] = True
check.validate_life_overlay(self.report, snapshot=self.snapshot)
x, y, w, h = row['band_rect']
for i, actor in enumerate(self.report['cabins'][0]['passengers']):
actor.update(scale=2, flip=False, mode='idle', at=[x+i*12-12, y-2])
with self.assertRaisesRegex(ValueError, 'traffic band fully occluded:'):
check.validate_life_overlay(self.report, snapshot=self.snapshot)
def test_flag_only_carried_projection_without_binding_fails(self):
self.occupied()
actor = copy.deepcopy(self.report['cabins'][0]['passengers'][0])
actor.update(key='staff/spoof', staff=True, riding=False, region='carried')
self.report['actor_drawings'].append(actor)
self.report['carried_patients'] = {'spoof': 'carrier'}
with self.assertRaisesRegex(ValueError, 'floor actor core over traffic band: staff/spoof'):
check.validate_life_overlay(self.report, snapshot=self.snapshot)
def test_carried_projection_requires_original_binding_tracks_and_fit(self):
fixture = AnchoredGeometryTests()
fixture.setUp()
fixture.person('staff/carrier', [0, 0, 0], 'AVAILABLE')
fixture.person('staff/patient', [0, 0, 0], 'INCAPACITATED')
fixture.runtime['staff']['tasks'] = [dict(task_type='rescue_transport', state='MOVING',
assigned_staff_id='carrier', target_entity_id='patient', rescue_facility_id='')]
fixture.report['carried_patients'] = {'patient': 'carrier'}
fixture.drawing('staff/carrier', [108, 214])
fixture.drawing('staff/patient', [108, 166], 'collapsed')
for key, value in LifeOverlayTests().report().items():
if key.startswith('overlay_') or key == 'observation_serial':
fixture.report[key] = value
# Synthetic band crosses the raised patient, with uncovered span.
fixture.report['traffic'] = [dict(cell=[0, 1, 0], rect=[78, 100.5, 60, 92],
band_rect=[85.2, 184, 45.6, 5], traffic=dict(current_density=1, temporary_block=False))]
check.validate_life_overlay(fixture.report, snapshot=fixture.snapshot)
for mutation in ('binding', 'track', 'position'):
report, snapshot = copy.deepcopy(fixture.report), copy.deepcopy(fixture.snapshot)
if mutation == 'binding': snapshot['systems']['runtime']['staff']['tasks'] = []
if mutation == 'track': report['actor_tracks']['staff/carrier']['cell'] = [1, 0, 0]
if mutation == 'position': report['actor_drawings'][1]['at'][1] += 1
with self.subTest(mutation=mutation), self.assertRaises(ValueError):
check.validate_life_overlay(report, snapshot=snapshot)
class SetupBudgetTests(unittest.TestCase):
def setUp(self):
self.source = (check.ROOT / 'tests/fixtures/p23-03/observation.gd').read_text()