P23-03: 生活の観察
This commit is contained in:
@@ -310,6 +310,9 @@ def paired_crop_noise(before, after, rect):
|
||||
|
||||
def drawing_rectangle_rows(report):
|
||||
"""Derive identities and local positions; do not read audit verdicts."""
|
||||
if any('anchor' in b for key in ('badges', 'landing_badges', 'actor_aggregations')
|
||||
for b in report.get(key, [])):
|
||||
validate_observation_labels(report)
|
||||
expected = []
|
||||
tower = 'scripts/ui/pixel_tower_art.gd'
|
||||
people = 'scripts/ui/pixel_people.gd'
|
||||
@@ -549,13 +552,16 @@ def write_frame_review(directory, frame, provenance):
|
||||
return manifest, digest
|
||||
|
||||
|
||||
def reviewed_pixel_categories(manifest, digest, verdict_path):
|
||||
def reviewed_pixel_categories(manifest, digest, verdict_path, *, require_judgments=False):
|
||||
"""The worker never writes verdicts; absent independent review earns nothing."""
|
||||
if not Path(verdict_path).is_file():
|
||||
return set()
|
||||
verdict = json.loads(Path(verdict_path).read_bytes())
|
||||
require(verdict['manifest_sha256'] == digest, 'review manifest SHA mismatch')
|
||||
require(verdict['reviewer'] == 'independent-opus-direct-image', 'independent image reviewer required')
|
||||
if require_judgments:
|
||||
require(isinstance(verdict.get('judgments'), list), 'explicit indexed judgments required')
|
||||
verdict = dict(verdict, rows=verdict['judgments'])
|
||||
eligible = [r for r in manifest['rows'] if r['eligibility'] != 'outside']
|
||||
require([v['row_index'] for v in verdict['rows']] == [r['row_index'] for r in eligible],
|
||||
'review row coverage')
|
||||
@@ -651,7 +657,7 @@ def inspect_offline_mirror(directory):
|
||||
receipt_sha256=sha(folder/'cua-receipt.json')))
|
||||
review_dir = ROOT/'docs/plans/original-completion-2026-10-02/execution/p23-03/offline-r07-review'/name
|
||||
manifest, digest = write_frame_review(review_dir, frame, provenance)
|
||||
credited = reviewed_pixel_categories(manifest, digest, review_dir/'independent-verdict.json')
|
||||
credited = reviewed_pixel_categories(manifest, digest, review_dir/'independent-verdict.json', require_judgments=True)
|
||||
present = {r['category'] for r in frame['rows'] if r['eligibility'] != 'outside'}
|
||||
overlays = [dict(cell=r['cell'], rect=r['rect']) for r in report['traffic']
|
||||
if (r['traffic']['current_density'] > 0 or r['traffic']['temporary_block'])
|
||||
@@ -803,6 +809,61 @@ def badge_rectangle(at, text):
|
||||
return list(at) + [len(text) * 10 + 6, 14]
|
||||
|
||||
|
||||
def observation_label_layout(report):
|
||||
"""Independent ordered rectangle placement; never consume reported at/reasons."""
|
||||
placed, result = [], []
|
||||
for i, cabin in enumerate(report['cabins']):
|
||||
placed.extend([(f'cabin/{i}/rect', cabin['rect']),
|
||||
(f'cabin/{i}/badge', badge_rectangle(cabin['badge_at'], cabin['badge']))])
|
||||
for kind, collection in [('business', 'badges'), ('supply', 'badges'),
|
||||
('landing', 'landing_badges'), ('aggregation', 'actor_aggregations')]:
|
||||
for i, row in enumerate(report.get(collection, [])):
|
||||
if collection == 'badges' and row['kind'] != kind:
|
||||
continue
|
||||
anchor = list(row.get('anchor', row['at']))
|
||||
at, reasons = anchor[:], []
|
||||
while True:
|
||||
conflict = next(((identity, rect) for identity, rect in placed
|
||||
if intersects(badge_rectangle(at, row['text']), rect)), None)
|
||||
if conflict is None:
|
||||
break
|
||||
identity, rect = conflict
|
||||
reasons.append(identity)
|
||||
at[0] = rect[0] + rect[2]
|
||||
result.append((collection, i, dict(anchor=anchor, at=at, displaced_by=reasons)))
|
||||
placed.append((f'{kind}/{i}', badge_rectangle(at, row['text'])))
|
||||
return result
|
||||
|
||||
|
||||
def observation_anchor_report(report):
|
||||
"""Projection for existing raw-state semantic recomputation, not evidence."""
|
||||
import copy
|
||||
raw = copy.deepcopy(report)
|
||||
for collection in ('badges', 'landing_badges', 'actor_aggregations'):
|
||||
for row in raw.get(collection, []):
|
||||
if 'anchor' in row:
|
||||
row['at'] = row.pop('anchor')
|
||||
row.pop('displaced_by', None)
|
||||
return raw
|
||||
|
||||
|
||||
def validate_observation_labels(report):
|
||||
require(all(key in report for key in ('cabins', 'badges', 'landing_badges', 'actor_aggregations')),
|
||||
'missing observation label collections')
|
||||
rectangles = [badge_rectangle(c['badge_at'], c['badge']) for c in report['cabins']]
|
||||
rectangles += [badge_rectangle(b['at'], b['text'])
|
||||
for key in ('badges', 'landing_badges', 'actor_aggregations')
|
||||
for b in report.get(key, [])]
|
||||
for i, rect in enumerate(rectangles):
|
||||
require(not any(intersects(rect, other) for other in rectangles[:i]),
|
||||
'observation label intersection')
|
||||
for collection, index, wanted in observation_label_layout(report):
|
||||
row = report[collection][index]
|
||||
for key, value in wanted.items():
|
||||
require(key in row, 'missing label ' + key)
|
||||
close(row[key], value, 'observation label/' + key)
|
||||
|
||||
|
||||
def intersects(a, b):
|
||||
cut = rect_intersection(a, b)
|
||||
return cut[2] > 0 and cut[3] > 0
|
||||
@@ -965,6 +1026,9 @@ def validate_life_overlay(report, root=ROOT, snapshot=None):
|
||||
|
||||
|
||||
def compare_queues(snapshot, report):
|
||||
if any('anchor' in b for b in report.get('landing_badges', [])):
|
||||
validate_observation_labels(report)
|
||||
report = observation_anchor_report(report)
|
||||
runtime = snapshot['systems']['runtime']
|
||||
transform = Transform(runtime, report)
|
||||
facilities = codec.indexed(runtime['facilities']['instances'], 'instance_id')
|
||||
@@ -1222,6 +1286,9 @@ def compare_goods(snapshot, report, root=ROOT):
|
||||
|
||||
|
||||
def compare_badges(state, report):
|
||||
if any('anchor' in b for b in report.get('badges', [])):
|
||||
validate_observation_labels(report)
|
||||
report = observation_anchor_report(report)
|
||||
runtime = state['systems']['runtime']
|
||||
transform = Transform(runtime, report)
|
||||
expected = []
|
||||
@@ -1490,6 +1557,9 @@ def landing_actor_region(state, report, transform, cell, region, transit):
|
||||
|
||||
|
||||
def compare_actor_geometry(state, report):
|
||||
if any('anchor' in b for b in report.get('actor_aggregations', [])):
|
||||
validate_observation_labels(report)
|
||||
report = observation_anchor_report(report)
|
||||
runtime = state['systems']['runtime']
|
||||
compare_queues(state, report)
|
||||
compare_room_services(state, report)
|
||||
@@ -1800,6 +1870,7 @@ def inspect_stream(directory, root=ROOT):
|
||||
report = read_object(directory, row['report'])
|
||||
fields = compare_actor_rows(state, report, root)
|
||||
require(report['elevators'] == elevator_report(state), 'typed elevator report mismatch')
|
||||
validate_observation_labels(report)
|
||||
compare_room_services(state, report, root)
|
||||
compare_rest(state, report, read_object(directory, row['rest_audit']), root)
|
||||
compare_queues(state, report)
|
||||
@@ -2240,7 +2311,7 @@ def inspect_os_requests(directory, layout, role, pid, root=ROOT):
|
||||
require(frame['mechanical_pass'], 'frame mechanical checks: ' + str(frame['errors'])
|
||||
+ str([r['failures'] for r in frame['rows'] if not r['mechanical_pass']]))
|
||||
pixel_categories.update(reviewed_pixel_categories(
|
||||
manifest, manifest_sha, review_dir/'independent-verdict.json'))
|
||||
manifest, manifest_sha, review_dir/'independent-verdict.json', require_judgments=True))
|
||||
records.append(dict(request=request, ack=ack, observed=observed, cua=cua, request_sha256=digest))
|
||||
require(len(seen) == len(bindings), 'unattributed screenshot bindings')
|
||||
return records, pixel_categories
|
||||
|
||||
Reference in New Issue
Block a user