P23-03: 生活の観察

This commit is contained in:
Agent Control Runner
2026-10-15 18:01:00 +09:00
parent 49445d4a4d
commit 19fc3f50c7
8 changed files with 1888 additions and 71 deletions
@@ -0,0 +1,443 @@
# P23-03 repair inspection
## Repair 26 — submitted for Root validation; no acceptance credit
This section supersedes the status below. Preserved the five premodified files,
both R13 fixtures, all 86 existing tests, and every historical section. Historical
49 and the twelve false R13 judgments are unchanged. Seven conditions, six
categories and 30/88 are unchanged. No Runtime, gameplay, save, economy, mana,
asset or UI-entry source was changed.
Implemented the remaining local work:
- Both independent packers now rebuild vertical components from fitted feet and
pose cores after every scale reduction. Scale ceilings decrease monotonically,
so termination has a finite measure and no iteration-limit exemption. Stable
components use the existing ordered forward/backward fitting and p=1 retained
member aggregation. A positive separates a previously intersecting component
at p=2; retaining the stale component would incorrectly reduce it to p=1.
- Whole-state fixtures cover queue lanes plus work staff, queue precedence and
order, the actual R13 cafeteria/access-cell geometry, carried and treated
patients, occupied rest facilities, queued staff, passenger/floor coexistence
on FRONT/BACK, and independently calculated no-fit aggregates. Negatives
include stale groups, pose/feet, carrier-relative positions, category/region/
transit spoofing, missing identities and displaced aggregation badges.
- Cabin candidates no longer silently truncate after two seat rows. Additional
identities reuse the existing two-row anchor pattern and participate in the
same independent fit/no-fit decision. The synthetic saturation configuration
retains every boarded identity in member lists; it changes no definition.
- OS and offline callers use the shared hash-bound drawing_context loader.
Tests cover valid context, absent fields/objects, malformed raw/rest context,
report binding and object hash mismatches. Frame tests include valid transit
and occupied-rest authority, missing/malformed rest authority, and conservative
rejection of overlap without raw context. No flags grant exemptions.
- GDScript component fixture now includes four occupants, scale-driven regroup,
and actual _fit_life_actors aggregation with nine drawn and ten retained IDs,
badge text and position. This fixture has NOT been executed by Godot.
Source/consumer audit:
- _build_life_observation calls fitting before publishing; _draw_life_overlay
consumes fitted floor/passenger rows and the aggregation badge at/text.
_draw_observed_actor consumes at/scale/mode/frame/flip. Logical cell, preferred
center and state remain separate. Existing click handling selects world
facilities/construction/stairs; there is no actor hit-test to relocate.
- passive_observation.draw_rectangles and Python drawing_rectangle_rows consume
fitted actor extents and actual aggregation badge coordinates. frame_rows
carries all member identities and drawn_keys into review metadata. Whole typed
diagnostic captures preserve the same report; compare_actor_geometry rebuilds
classification, bounds, fit and aggregation independently. compare_rest invokes
complete geometry for occupied resting facilities. compare_motion binds the
actual published report/history, not unfitted preferred positions.
- inspect_offline_mirror and inspect_os_requests both pass drawing_context's
hash-bound state/rest objects to frame_rows. inspect_stream separately runs
rest, cabin, motion and complete geometry checks. Missing objects raise and
cannot become a successful exemption. Unit tests exercise this shared loader;
no real OS/offline evidence was rerun or relabeled.
- strict_test_markers.load_contracts rejects duplicate suite rows. The existing
single P23 row already declares the exact two source print sites' template
`P23 life observation: <checks> checks, <failures> failures`. parse_raw obtains
counts only from actual logs; source_sha256_at_schema_audit is historical
metadata, not a current-source acceptance bypass. No marker-contract append
is required, no suite-policy row was added, and no marker was fabricated.
Root's source map must bind the final modified fixture and all changed files.
Local verification: 87, 91, 93, 95, 97, 98 and 99 tests passed as work progressed;
the final rerun passed **99 tests in 0.213s**, exit 0. The original expected R13 row11/29 rejection
is retained. Python compile checks for checker, tests and runner passed without
bytecode output. git diff --check passed. No tests were deleted or weakened.
Read-only discovery encountered inaccessible sibling worktrees and nonexistent
BUILD_OUTPUT_DIR shorthand; the actual allocated build directory supplied both
R13 direction files. A shell glob lookup had no match; no source was lost.
Root native/OS evidence, the 177-test full regression and independent Opus
all-condition review remain missing, as expected for worker submission.
Submission is not acceptance and earns no unit credit. No Godot, native/OS,
full regression, Runner, provider, git write or agent was run.
## Repair 25 continuation — current status: blocked, implementation incomplete
This section supersedes the status of the historical sections below. There is
no specification, permission, or floor-interpretation gap. The remaining blocker
is unfinished implementation and verification, not missing Root evidence alone.
All 809 pre-existing added lines were preserved and extended. No candidate is
claimed implemented or ready for acceptance. Seven conditions, six categories,
and 30/88 remain exact; historical 49 is preserved without relabeling.
Read before editing: AGENTS.md, Phase 0 API_AND_STATE_MAP, recorded concrete
direction, both authoritative R13 geometry/region directions, renderer,
checker/tests, diagnostic/passive collectors, Runtime initialize/spawn/save/load
entry points, enums, marker parser and existing contract. No new assets or
Runtime/gameplay/save/UI-entry changes.
Changes in this continuation:
- Drawing-row validation accepts the existing raw-state/rest-audit context and
invokes complete geometry classification and fitting. OS frames pass the
hash-bound stream objects; offline image review loads the matching writer
capture and checks its report binding before passing the same objects.
- Track validation checks the raw actor endpoint, source-valid adjacent origin,
finite nonfuture times and boolean pause. A drawing's region/in_transit flags
cannot grant an exemption. Without raw context the old conservative check
remains, and frame output explicitly says `absent: fail closed, no transit
exemptions`. Historical images have not been rerun or relabeled.
- Rest selection still independently validates routes, costs, locks and
eligibility. For actual occupied rest facilities its geometry now runs through
complete cross-kind fitting, including queue precedence and independently
reconstructed aggregation identities/no-fit, instead of requiring every
rest-slot identity to have an unshifted drawing row.
- Added the actual +m badge to Python and GDScript image-audit rectangle lists;
frame metadata retains all aggregate members and drawn keys. This additional
diagnostic row type does not change the six acceptance categories.
- Added full state-to-geometry positives for actual track interpolation,
staff/guest mixed packing on FRONT/BACK, fractional low-world-pixel scale and
saturated aggregation with all identities retained. Added track/time/pause,
forged-region/out-of-cell, aggregate identity loss and badge omission checks.
R13 row11/29 remains an expected FAIL. Existing tests were not removed.
Precise outstanding TODOs before an implemented submission:
1. Complete full state-to-geometry positives for queue lane + work staff,
passenger + floor, carried/resting/treated staff and cabin aggregation.
Exercise compare_rest with an actual occupied facility, legitimate no-fit
aggregate and queued staff; its new integration lacks those full fixtures.
2. Complete full semantic negatives for queue precedence/order and forcing the
receiving R13 guest back into its access cell. Existing primitive receiving
fixture tests and overlay negatives are retained but are not substitutes for
every required state-to-geometry case.
3. Audit and implement regrouping after scale changes in BOTH packers. They
currently form vertical groups before fitting; fitted feet/cores can change
vertical intersections. Do not claim the required regrouping positive passes.
Confirm carrier-relative pose/feet, cabin member coverage, and badge placement
through the required semantic cases before declaring the renderer finished.
4. Add full frame/offline/OS-context unit cases (including rest authority and
malformed/missing stream context). Standalone/full transit paths have tests;
production caller wiring was read but no OS/offline evidence run occurred.
5. Finish the GDScript UI fixture and source-authority integration audit. Existing
four-occupant UI preparation is retained and unexecuted. Marker contracts and
suite policies are unchanged; do not append a duplicate suite row or fabricate
an acceptance marker. If an authority append is necessary, only the single
strict contract-permitted entry is authorized.
Local checks actually executed:
- Checker unit command `PYTHONDONTWRITEBYTECODE=1 python3
tools/test_p23_life_observation_evidence.py`: 78 tests OK (0.104s), 80 OK
(0.112s), 83 OK (0.134s), 85 OK (0.112s), then **86 OK (0.124s)**.
No checker unit failure occurred in this continuation.
- No-bytecode `compile(Path(p).read_bytes(), p, "exec")` syntax check for
checker, checker tests and Root runner: all three OK, exit 0.
- Read-only `git diff --check`: exit 0, no output.
- One shell heredoc edit attempt failed before execution (`can't create temp
file for here document: operation not permitted`); applied the intended edit
with apply_patch afterward. One read-only search named a nonexistent
`tools/regression/suite_policy.py`; read the actual JSON policy and runner
directly. These were tool/read failures, not test passes.
No Godot/native/OS, full regression, Runner, provider, git write, integration or
other agent was run. Root's **new native/OS evidence**, the **177-test full
regression**, and the **independent Opus all-condition review** are still missing.
Those expected later proofs alone are not the reason for this blocked status.
## Repair 24 continuation — current status: blocked, implementation incomplete
The floor/anchored-region interpretation is RESOLVED. No clarification or
permission is requested. This status is an incomplete implementation, not an
external specification blocker and not a submitted candidate. Preserve this
worktree and every earlier uncommitted change. Historical sections below are
retained as history, not current interpretations.
Read the current renderer, RoomPresentation, the recorded concrete direction,
both R13 direction files, Phase 0 API map, Runtime initialization/spawn/formal
save/load sources, and cleaning pose dependencies. No domain inputs or assets
were changed. Seven conditions, six categories and 30/88 remain exact.
Implemented preparation in this continuation:
- Added per-actor cell/track, lane, facility, work-column and carried-patient
bounds, inset by world pixel; added original logical cell to drawing rows.
Staff queue placement now precedes the special staff anchors.
- Added a cross-kind vertical grouping and forward/backward interval packer,
integer scale trials and deterministic retained-member aggregation with a
readable +m badge. Cabin rows participate. Preferred centers and pose fields
remain separate from fitted drawing coordinates. This GDScript has NOT been
executed and is not established as native-correct.
- Added independent Python interval fitting and replaced original-scale
assertions with reconstructed centers, bounds, poses, fitted rows and
aggregation comparison. Queue and room reports are cross-checked before
geometry classification; boarded keys are rebuilt from EV reports.
- Added tests for the 56px four-mover case (all p=2), mixed actor kinds,
saturation with all identities retained, individual intervals, and R13's
receiving cafeteria guest outside its unchanged access cell. Added a full
synthetic state-to-geometry four-mover case and mutations for cell, state,
scale, position, missing/duplicate actors and unnecessary aggregation.
- Added the four-occupant GDScript component fixture. It is NOT native evidence.
Known remaining implementation work (must be resolved before submission):
1. The full geometry entry point passes independently derived transit keys to
pairwise checking, but standalone drawing-row/offline checks still use the
conservative default with no transit exemptions. Reconcile those paths
using authoritative inputs; never trust an in_transit/region flag.
2. Existing compare_rest still expects each visible slot in actor_drawings and
its original rest center. Reconcile legitimate aggregation and the new
staff queue precedence without bypassing the independent no-fit check.
3. Finish full classification tests for queue/work mixed groups, queue
precedence/order, spoofed category, forced access-cell receiving position,
carried/resting/treated staff, passengers and FRONT/BACK. Existing primitive
packing positives are not a substitute for these full semantic cases.
4. Audit pose/feet and regrouping after scale changes, low-world-pixel views,
carried patients and cabin aggregation; validate the actual GDScript and
report consumers through Root only after worker readiness. No new native
correctness or complete collision-removal claim is made here.
Checks actually executed in this continuation, all local:
- `PYTHONDONTWRITEBYTECODE=1 python3 tools/test_p23_life_observation_evidence.py`:
71 tests OK (0.093s), 76 tests OK (0.102s), then **78 tests OK (0.111s)**.
Existing R13 row11/29 remains an expected rejection. No unit test failure
occurred during this continuation; earlier failures remain recorded below.
- No-bytecode `compile(Path(p).read_bytes(), p, "exec")` for checker,
checker tests and Root runner: all three syntax checks OK, exit 0.
- One dependency lookup used the wrong cleaning-bridge directory and returned
an rg missing-file error; located and read the actual source under
scripts/environment. This was a read failure, not a passing test.
No Godot/native/OS, full regression, Runner, provider, git write or agent was
run. Root's **new native/OS evidence**, the **177-test full regression**, and
the **independent Opus all-condition review** are still missing. Historical
49 remains preserved and is not relabeled. No partial acceptance is claimed.
The inspection below is retained history. The repair 24 section above records
the current status; the former full-box impossibility argument is superseded.
Scope: the seven immutable acceptance conditions and existing allowed paths.
Validation: local Python syntax and checker unit tests only; no Godot execution.
Read the immutable acceptance spec, recorded concrete implementation direction,
existing Phase 0 API map, renderer, actor art, and independent checker.
The R13 provider stdout, command, and prompt SHA256 values match 01-actual.json.
The actual structured review contains 8 frames and 132 rows. Its summary's
168-row claim is not used to replace the structured rows. False judgments remain
false. The reader-request-0003 whole screenshot confirms overlapping actors and
obscured traffic presentation. Historical runtime evidence is unchanged.
Root native/OS evidence for a new candidate, the 177-test full regression, and
independent Opus all-condition review remain required and are not worker tests.
## Status: blocked; partial independent checker preparation only
The renderer repair and traffic geometry/layer audit are **not implemented**.
No claim of submission readiness or acceptance is made. No renderer, Runtime,
policy, immutable spec, source authority pin, or historical evidence was changed.
### Placement specification gap and concrete failing evidence
In the original `os-pair/A/reader-request-0003/request.json`, SHA256
`7dc3ee0bcc428e9d103726ee2448c767f1dd4107f9490833dc860c0b5140068c`,
the decoded report contains guests `os-p23-012` through `os-p23-015`, all
`MOVING`, logical cell `[1,1,0]`, with no service or queue request. Their
tracks' `from` and `cell` are both `[1,1,0]`. The current cell is 64x96 pixels
(`traffic` row 40's inset rect is `[709,390,60,92]`). Each actor's current
draw/report footprint is 48x54 pixels: the 16x18 PixelPeople grid at scale 3.
The four rectangles require area 10368, while the cell has area 6144.
Consequently offsets alone, preserving those sizes and containing all four
rectangles in that cell, cannot satisfy the requested nonoverlap invariant.
This is already present in the supplied evidence, not a hypothetical load.
Source references: `world_preview.gd::_cell_dimensions`, `_actor_drawing`,
`_tracked_actor_position`; checker `drawing_rectangle_rows` and
`compare_actor_geometry`; `pixel_people.gd`'s 16x18 drawing grid.
The direction specifies offsets inside room/cell art, containment consistent
with logical cell/state, retained motion, and no visual redesign. It does not
resolve what presentation change is permitted when existing footprints cannot
fit. Shrinking actors or expanding the permitted projection area could solve
this capacity issue, but neither is silently treated here as authorized by an
offset repair. This is a question about the admissible presentation, not a
claim that every possible rendering solution is impossible.
Minimal proposal for the owner: specify whether deterministic scale reduction
within the original logical cell is permitted (including the required readable
minimum and behavior when it still cannot fit), or define an allowed room/lane
projection for these non-queued moving actors. No Runtime capacity change,
actor omission, or acceptance waiver is proposed. Retain all seven conditions.
### Independent work preserved
Added `validate_actor_nonoverlap` to both the semantic geometry path and offline
drawing-row gate. It recomputes full footprints from raw `at`/`scale`, includes
cabin passengers, rejects duplicate identities and invalid numeric geometry,
and does not use eligibility labels or asserted booleans. Edge contact is
allowed; positive-area overlap is rejected with actor identities.
Five added unit tests cover edge contact, overlap despite forged verdicts and
off-screen labels, cabin/floor overlap, invalid footprints, and the actual R13
false row 11 against staff row 29. The small historical-negative fixture copies
only the needed raw drawing inputs and preserves `[11,false,false,false]` with
request/manifest hashes. Its inputs were checked against the original typed
report. The original review files and all their rows remain untouched.
The original manifest hash matches
`53aa8e2f12e5d0a089529457fcd55ee1ba0600e8dffff2225bb8b057d007fe1a`;
all crops in that manifest pass SHA verification. Opened the whole decoded image
and crops 11, 29, 40 directly; crops 11 and 29 show the same covered figure.
Still missing: collision-free renderer placement, draw-consumed band rectangle,
actual layer/geometry audits, and the requested additional cell/state, band,
layer, and stale-frame negatives. Passing these local tests does not resolve
those missing deliverables.
### Local checks actually run
Before edits:
`PYTHONDONTWRITEBYTECODE=1 python3 tools/test_p23_life_observation_evidence.py`
returned exit 0, `Ran 51 tests in 0.142s`, `OK`.
After edits the same command returned exit 0,
`Ran 56 tests in 0.093s`, `OK`.
Syntax command (no bytecode output):
```
python3 -c 'from pathlib import Path; files=["tools/check_p23_life_observation_evidence.py","tools/test_p23_life_observation_evidence.py","tools/run_p23_life_observation.py"]; [(compile(Path(p).read_bytes(),p,"exec"),print("syntax OK:",p)) for p in files]'
```
Exit 0; printed `syntax OK:` for each of those three files.
`git diff --check` returned exit 0 with no output (read-only check).
No Godot, native/OS, full regression, provider, Runner, git write, or agent
execution occurred. The initial shell heredoc attempt failed before execution
because the shell could not create its temporary file; subsequent inspection
used `python3 -c`.
## Recorded geometry direction continuation — blocked pending placement clarification
Read the complete `BUILD_OUTPUT_DIR/negative-image-review-r13/
OPUS_GEOMETRY_RESOLUTION_DIRECTION.json`, the owner run direction, the current
PixelPeople and WorldPreview sources, RoomPresentation slots, the existing
Phase 0 audit and the actual initialize/spawn/save/load API sources. The spec
still matches its contracted **stripped-text** SHA256. No spec, Runtime, save,
asset, UI entry, gameplay value, authority entry or suite policy was changed.
### Implemented independent preparation
- Replaced the full-box overlap invariant with identity cores. The table is
pinned to PixelPeople SHA256
`a171703083aa2d00f8be2b63e1daef9c41717c8fe59d8056878bc4b7df1e0b0c`.
Upright walking/carry-walking phases 2 and 6 shift the core up one grid unit.
Standard-room sleep phases 2, 3 and 4 extend its top from y=11 to y=10,
keeping the bottom at y=16, as required by the actual breathing marks.
Flips use the actual 16-grid mirror. Missing pose inputs now fail closed.
- Preserved the edge, forged-verdict, cabin, invalid-geometry and R13 tests.
Edge coordinates now use 6x12 core extents instead of the rejected 16x18
full-box extents; the deliberate overlap moves from [15,17] to [5,11].
Added a passing full-box-overlap/disjoint-core case and bob, breathing,
flip, missing-pose, duplicate, forged-transit and source-pin tests.
R13 row11/29 still fails: both recomputed cores are [669,520,18,36].
The fixture's newly required mode/frame/flip values were copied from the
original request and checked against it. False judgments remain false.
- Added the LifeOverlay Node2D between InactiveLayerRooms and LayerLens,
connected its draw signal, and queued its redraw from the parent draw.
The overlay draws traffic first, then cabin passengers and floor actors.
Existing inactive-art alpha remains 0.22. Actor rows and animation inputs
are unchanged. The report records observation/consumed serials, actual
child indices and the passes executed in the callback.
- Added the prescribed band rectangle at cell_bottom - 2*world_pixel,
with existing thickness clamp, colour thresholds and 0.90 opacity.
The blocked X is contained in the band pass. `compare_traffic` independently
recomputes both cell and band rectangles from typed state. Overlay checks
reject stale serial, reversed passes, child-order errors, a core covered
by the band, and forged band geometry. Source wiring/order is also checked,
so valid report flags do not excuse the tested reversed source callback.
FRONT/BACK local synthetic checks and GDScript serial/order assertions were
added. GDScript was **not executed**.
### Exact outstanding interpretation
Placement rule 1 gives service/rest/treatment anchors a facility region, while
rule 2 says a floor actor must *also* remain in its own logical cell. It is
unclear whether “floor actor” excludes these facility-anchored actors or means
every non-passenger. This is consequential in the actual R13 request, not only
in a fabricated layout:
- `guest-auto-00000044` receives `service_00000009` at cafeteria
`facility_00000003`. Its unchanged logical cell is [5,0,0]. The recorded
traffic inset [965,486,60,92] reconstructs cell [963,484,64,96].
The facility rect is [1027,388,256,192], and its four-pixel inset starts at
x=1031. There is no common x interval with the logical cell ending x=1027.
- `guest-auto-00000019` receives `service_00000002` at standard room
`facility_00000007`, rect [131,292,128,96]. Its logical access cell [-6,2,0]
reconstructs to [259,292,64,96]. The facility inset ends x=255; again there
is no common x interval. Its room pose is standard_room_sleep.
`r13_service_region_gap.json` preserves the needed original report fields,
with source request SHA256
`7dc3ee0bcc428e9d103726ee2448c767f1dd4107f9490833dc860c0b5140068c`.
Direct comparison verified every copied guest, traffic and room rectangle.
A diagnostic unit test demonstrates the empty intersection for both examples.
These extracted fields are not substituted for whole typed acceptance evidence.
This does **not** establish that the new specification is impossible: rule 7
allows aggregation when p=1 cannot fit. If floor means all non-passengers, these
otherwise roomy facilities must aggregate their service guests with zero drawn
members. If floor means unanchored actors, those guests can be packed and drawn
in their facility region. The initial commentary's “constraint conflict” is
therefore narrowed to this interpretation question. No cell restriction was
silently removed and no zero-drawn service aggregation was silently adopted.
An asynchronous question asks the owner to select the intended interpretation.
### Remaining implementation and evidence
Ordered placement, scale fitting, no-fit aggregation, queue-order preservation,
carrier-relative fitted placement, transit recomputation/exemptions and their
checker integration remain unimplemented. The checker remains conservative:
an asserted in_transit flag never bypasses overlap, but the required genuine
transit exception is not implemented. The existing geometry checker still
expects original actor positions/scales. The four-occupant GDScript fixture,
positive packing cases (staff/guest, passenger/floor, queue, saturation and
carried patient), and the new containment/aggregation/queue-order negatives
remain outstanding. The partial renderer changes are not a submitted candidate
and are not claimed to solve R13 actor collisions. All existing tests remain.
Still missing: Root **new native/OS evidence**, the **177-test full regression**,
and **independent Opus all-condition review** for the final candidate.
Historical 49 is preserved and is not relabeled or credited to these edits.
Seven immutable conditions and all6/30/88 remain exact, without partial credit.
### Checks actually run in this continuation
- `PYTHONDONTWRITEBYTECODE=1 python3 tools/test_p23_life_observation_evidence.py`:
first core run: 63 tests, 7 failures and 1 error because older synthetic
reports omitted pose fields. Updated those fixtures with explicit poses;
63 tests then passed (0.089s), followed by 64 (0.094s) after the bounds
diagnostic. First overlay run: 71 tests, 1 error because the older spatial
fixture lacked the new band rectangle. Updated that fixture with explicit
band geometry and consumed-frame fields. Final run: **71 tests, OK, 0.081s**.
- The existing no-bytecode `compile(Path(p).read_bytes(), p, "exec")` syntax
check passed for checker, checker tests and Root runner script (exit 0).
- Direct Python read-only comparisons verified both extracted R13 fixtures
against the original SHA-bound request and verified the immutable spec pin.
- A shell heredoc read attempt failed before execution with “can't create
temp file”; inspection continued with `python3 -c`.
No Godot, native/OS, full regression, Runner, nested provider, git write or
other-agent execution occurred. Only allowed files were edited. The worktree's
previous uncommitted work was retained and extended.