feat(perception): add bounded reference graph

This commit is contained in:
DCCONSTRUCTIONS
2026-08-05 13:57:27 +03:00
parent ae1e41f7fe
commit 029b486c67
11 changed files with 1979 additions and 18 deletions
@@ -2,7 +2,7 @@
Date: 2026-08-05
Status: planned; implementation not started
Status: in progress; M4.0M4.2 implemented
Audit base: `1b3e0b3` on `feat/simulation-polygon-s1`
@@ -632,8 +632,9 @@ M4.0 is closed by the executable baseline
RAVNOVES00 and the exact source-fusion, E32, E33, E34, E35 and E46J result
documents, KB4 calibration, valid-FOV, YOLOX model/config/profile identities and
the observed E15 Worker 006 rollback process. `k1link.perception.baseline`
validates the profile and resolves all six immutable evidence documents by file
SHA-256, schema, result and identity. The reusable/historical split is frozen in
validates the profile, the camera summary/index, the source-pack manifest/artifact
and all six immutable evidence documents by file SHA-256, schema, result and
identity. The reusable/historical split is frozen in
`config/perception/m4-reuse-inventory-v1.json` and enforced by an import-boundary
test.
@@ -650,11 +651,33 @@ M4.1 is closed by `k1link.perception.contracts`, `providers` and `adapters`:
ownership, range without current qualified points, held-as-current,
missing-LiDAR-as-free and physical/command authority in replay.
Validation at this increment: 17 focused M4 tests, 60 related geometry/temporal/
telemetry tests and the complete Python suite (`1205 passed, 1 skipped`). Scoped
Ruff and strict mypy pass for `src/k1link/perception`. Repository-wide Ruff and
mypy remain red only in pre-existing legacy experiment/web modules; those errors
were not hidden or expanded into this product boundary.
### 2026-08-05 — M4.2
M4.2 is closed by `k1link.perception.graph` and `recorded_source`:
- `ReferencePerceptionGraphV1` composes source, detector, geometry, temporal,
motion and threat providers behind one source-neutral entry point;
- detector, geometry, temporal and threat queues are all capacity-bound and use
explicit latest-wins supersession under overload;
- each admitted sequence closes once as delivered, superseded, stale, rejected,
failed or unavailable; a missing terminal is converted to an observable graph
failure instead of disappearing;
- provider output is cross-validated against the source frame, exact proposal/
point/component ownership and the no-current-LiDAR/no-metric-occupancy rule;
- run and stage lifecycle reuse the admitted pipeline telemetry emitter;
- restart, cancellation and shutdown are deterministic and leave no graph
threads alive;
- `RecordedRavnoves00Source` reads timing and modality availability directly from
the immutable source LiDAR pack, not from an E/L result wrapper, verifies its
SHA-256, and exposes identical packets at 1.0× or uncapped pace;
- the live adapter is defined only as the same packet-entry protocol and retains
zero physical acceptance in M4.
Validation at this increment: 26 focused M4 tests, 69 focused-and-related source/
geometry/temporal/degradation/telemetry tests and the complete Python suite
(`1214 passed, 1 skipped`). Scoped Ruff and strict mypy pass for
`src/k1link/perception`. The canonical GUI remained on `127.0.0.1:8000`; no
duplicate development server or Worker 006 mutation was introduced.
## Implementation order