docs(lab): freeze M4.8 viewer and regression canon

This commit is contained in:
DCCONSTRUCTIONS
2026-08-24 22:38:54 +03:00
parent 4fa1669ab7
commit eb416ff80a
4 changed files with 293 additions and 15 deletions
+23
View File
@@ -185,6 +185,29 @@ The evidence slot has two admitted renderers:
- `diagnostic-model` — a specialized visual result such as the LAB E28 L2.6 - `diagnostic-model` — a specialized visual result such as the LAB E28 L2.6
surface/timeline/review viewer. surface/timeline/review viewer.
Recorded camera clips used for review are a frozen sub-contract of the admitted
viewer, `missioncore.laboratory-recorded-clip-viewer/v1`, implemented by
`LaboratoryRecordedClipPlayer`. It owns the generation-bound fMP4 manifest,
bounded MediaSource buffering, source-time playback clock, clip looping and the
canonical timeline. A LAB may provide typed overlays and an alternative spatial
scene, but it may not implement its own frame timer, per-frame JPEG playback,
media cache, port, Rerun blueprint or loading grammar. Exact JPEG remains a
paused-frame/fallback evidence endpoint, never the continuous playback transport.
Forward frame progression may roll an already-buffered segment target; a
backward seek or clip loop must perform an explicit decoder seek and remain
decoder-ready without exposing a per-frame loader.
When recorded camera and frame-indexed spatial evidence are both required for
one review question, the shared player presents them simultaneously on the same
media clock. The camera remains the clock owner; a bounded experiment-neutral
spatial cache prefetches exact source sequences, including across the loop
boundary. Mode switching changes presentation only. It must not pause the clock,
hide the companion camera, create another transport, or flash a full-stage
loader between spatial frames. Connected M4.8 workflows project CAMERA, 3D and
PLAN through the same left-side vertical glass rail of canonical circular
actions; the report, assisted correction and formal review flows do not invent
separate mode-control geometry.
An admitted diagnostic viewer may own the result interaction internally when An admitted diagnostic viewer may own the result interaction internally when
the evidence itself is the review/result instrument, as in E28 and E30. This is the evidence itself is the review/result instrument, as in E28 and E30. This is
not permission to omit the result from a new ordinary LAB report. New bounded not permission to omit the result from a new ordinary LAB report. New bounded
@@ -173,6 +173,37 @@ The viewer frame must:
- remain keyboard-addressable and restore the previous surface on Escape; - remain keyboard-addressable and restore the previous surface on Escape;
- avoid hard-coded product colors and application-local focus/hover states. - avoid hard-coded product colors and application-local focus/hover states.
Connected recorded review uses stacked viewer chrome: source/case navigation
occupies a dedicated header above the visual viewport; playback controls and
the timeline occupy a dedicated transport panel below it. CAMERA/3D/PLAN use
one reusable vertical `GlassSurface` rail on the left of the viewport. Its
three actions are canonical 46 px circular `IconButton` controls: an outline
camera glyph, the `3D` text glyph and an outline plan glyph. The rail may float
over the viewport but must not resize it; every other control region remains
outside the camera/spatial interaction area. These regions form one seamless
viewer surface without per-region outlines or gaps. When spatial
and camera evidence are shown together, the shared vertical divider is
pointer- and keyboard-resizable, preserves one mounted camera transport, and
may only reveal its visual affordance while hovered, focused, or dragged.
CAMERA visibility remains independent. 3D/PLAN remain mutually exclusive
spatial modes whose selected mode can be disabled while CAMERA stays visible.
The UI must preserve at least one visible evidence channel and must not encode
CAMERA, 3D and PLAN as one exclusive group.
For recorded clip review, continuous camera playback must use the shared
`missioncore.laboratory-recorded-clip-viewer/v1` transport: one immutable
manifest admission followed by bounded generation-bound fMP4 fragments on the
source media clock. A visible loader on every source frame, a LAB-owned timer,
or a LAB-owned video/Rerun configuration is a contract regression. Spatial modes
whose evidence cannot be delivered at source pace remain explicit frame-step
modes; they must not stall or relabel the camera clock as realtime. When spatial
evidence is admitted at source pace, it follows the same source sequence through
a bounded look-ahead cache. CAMERA + 3D/PLAN remain simultaneously visible, and
no intermediate spatial miss may replace or stop the camera surface.
The shared player may retain a rolling target only for the same or a later
segment. Rewind and clip-loop transitions must seek backward explicitly while
keeping the admitted generation and decoder owner mounted.
### 3D and 2D policy ### 3D and 2D policy
Choose the default representation from the operator question: Choose the default representation from the operator question:
@@ -187,6 +218,10 @@ When both questions matter, expose 2D and 3D as modes of the same viewer. They
must use the same selected case and immutable source indices. Do not create a must use the same selected case and immutable source indices. Do not create a
second LAB page or duplicate the evidence state. second LAB page or duplicate the evidence state.
For M4.8, **3D/PLAN always includes the synchronized RIGHT-camera companion**.
The point cloud must advance with the recorded media clock; a paused 3D snapshot
with disabled playback is not admissible evidence for connected-object review.
For E30, **camera + projected LiDAR is the default** because the first review For E30, **camera + projected LiDAR is the default** because the first review
question is whether a camera claim, its bbox and the projected points refer to question is whether a camera claim, its bbox and the projected points refer to
the same visible object. A black pixel-plane scatter without the exact camera the same visible object. A black pixel-plane scatter without the exact camera
@@ -175,6 +175,36 @@ receives a concise typed projection.
DOM or CSS classes. The product UI test discovers every `ENNResult.tsx` DOM or CSS classes. The product UI test discovers every `ENNResult.tsx`
automatically and rejects such a fork. automatically and rejects such a fork.
`components/laboratory/LaboratoryRecordedClipPlayer.tsx` exclusively owns the
versioned `missioncore.laboratory-recorded-clip-viewer/v1` camera transport and
clock. Feature renderers may add typed overlays or a synchronized spatial scene
through its slots. Source-paced spatial evidence follows exact media sequences
through a bounded reusable look-ahead cache; frame-step remains an explicit
capability only when the source cannot keep pace. Experiment-named players must not fetch a JPEG
per playback frame, instantiate MediaSource, schedule frame timers, or declare a
new Rerun receiver/blueprint. Forward buffered progression and backward
loop/seek are separate shared-player transitions; a backward target cannot be
treated as an ordinary rolling-buffer advance.
The shared player owns the admitted `primary` camera and `companion` camera +
spatial presentations. A feature mode may not disable playback, unmount the
camera, or create a second viewer configuration merely to show 3D/PLAN.
`LaboratoryEvidenceViewer` owns the reusable `stacked` chrome layout: one header,
one visual stage and one transport/timeline rail joined into a seamless surface.
`LaboratoryRecordedClipPlayer` reuses the canonical `SplitPane` for resizable
spatial + companion-camera evidence while keeping the recorded camera owner
mounted across CAMERA/3D/PLAN transitions. Feature code supplies typed actions
and modes; it does not declare a feature-local splitter. M4.8 reuses one
`M48EvidenceModeRail` projection in the report, candidate-assisted correction,
independent review and adjudication surfaces. The rail is the admitted
viewport overlay: a canonical `GlassSurface` containing three default-size
`IconButton` controls and no local control geometry. CAMERA/3D/PLAN therefore
do not return to the stacked header or fork per workflow:
CAMERA visibility is independent from the nullable 3D/PLAN spatial mode, and
their state transition cannot hide both channels. Candidate seed data belongs
to the correction contract only; it cannot enter the blind source decoder or
upgrade assisted evidence to independent truth.
Legacy/integrated diagnostic viewers may keep a result interaction inside the Legacy/integrated diagnostic viewers may keep a result interaction inside the
evidence slot only where that viewer is already the admitted result instrument. evidence slot only where that viewer is already the admitted result instrument.
This exception does not apply automatically to a new LAB. This exception does not apply automatically to a new LAB.
@@ -2,9 +2,10 @@
Date: 2026-08-05 Date: 2026-08-05
Status: in progress; M4.0M4.6 accepted, the M4.7 canonical graph and Worker Status: in progress; M4.0M4.6 and the M4.7 canonical lossless Worker 006
006 shadow artifact are implemented locally, and Worker preflight/full shadow shadow are accepted, M4.8 prediction-frozen review-pack preparation is complete,
acceptance plus durable cutover remain open and the independent reviews/adjudication, M4.8 scoring, M4.9 release candidate
and durable Worker cutover remain open
Audit base: `1b3e0b3` on `feat/simulation-polygon-s1` Audit base: `1b3e0b3` on `feat/simulation-polygon-s1`
@@ -500,10 +501,11 @@ Physical mounted threat acceptance remains outside Milestone 4.
### M4.7 — cut Worker 006 over to the canonical graph ### M4.7 — cut Worker 006 over to the canonical graph
Status: implementation complete locally on 2026-08-23; Worker 006 preflight, Status: the isolated Worker 006 preflight and full lossless shadow were accepted
full lossless shadow evidence and durable process replacement are not yet on 2026-08-23 with all `4,489` frames delivered, zero parity mismatches and queue
accepted. The current E15 worker and Triton identities remain the rollback high-water mark `2`. Durable process replacement is not implemented or accepted.
predecessor. No K1, Zarya or connection-stack change is part of this phase. The current E15 worker and Triton identities remain the rollback predecessor. No
K1, Zarya or connection-stack change is part of this phase.
Deliverables: Deliverables:
@@ -533,8 +535,9 @@ adds a separate object-centric review contract; it does not require class labels
Dataset construction: Dataset construction:
- freeze 2030 connected clips of 510 seconds across route/time blocks; - freeze 2030 connected clips of 510 seconds across route/time blocks;
- include occupied object, background false-positive, partial occlusion, fisheye - derive the private balancing hypotheses only from already frozen prediction
edge, small obstacle, moving crossing, static obstacle and no-object strata; rows (associated/unassociated, moving/static/threat, small, fisheye-edge and
sparse-scene signals); never use unrevealed truth to select the release set;
- label obstacle presence/extent, current geometry association, freshness, - label obstacle presence/extent, current geometry association, freshness,
moving/static/unknown and virtual-corridor threat/unknown; moving/static/unknown and virtual-corridor threat/unknown;
- freeze graph predictions before review labels are joined; - freeze graph predictions before review labels are joined;
@@ -1194,12 +1197,199 @@ accepting the run. This makes Worker 006 usable without touching the stabilized
K1/Zarya connection path. K1/Zarya connection path.
Local contract, graph, result-sealing, artifact and historical-rollback tests Local contract, graph, result-sealing, artifact and historical-rollback tests
pass. This is implementation evidence only. It does not claim that Worker 006 pass. Worker result
has the pinned local-surface input, that preflight has passed, that the 4,489 `m47-reference-graph-5f6a851cd655c7cf07c3025dacadbc188018b0afa97eda3a08802266e12da87d`
frame graph shadow matches the accepted M4.5R/M4.6 ledgers, or that the durable sealed the full shadow with `4,489/4,489` admitted and delivered frames, zero
E15 command has been replaced. Those are the next M4.7 acceptance actions, in failed/stale/superseded/rejected/unavailable outcomes and zero mismatches in all
that order. K1, Zarya, the stable connection path and physical-live authority seven parity dimensions. LAB result
remain untouched. `m47-reference-graph-lab-49678f0a7c628c7e991af0964fa57d005baa027d2d1eea19f38bbfe27ed39ce5`
therefore opens the independent object-centric quality gate. This does not claim
that the durable E15 command has been replaced: the accepted runner is explicitly
one-shot shadow-only, and the required persistent service, telemetry-continuity
and automatic rollback contract do not yet exist. K1, Zarya, the stable
connection path and physical-live authority remain untouched.
### 2026-08-24 — M4.8 independent review pack frozen
The first provenance-complete M4.8 pack is
`m48-object-quality-pack-680c091cd81cce802931dbb8987db6f26dc568c5d7395166cda2e9e5a4c78e27`.
It binds the accepted M4.7 LAB manifest, exact M4.6 threat ledger and exact
single-sample camera-fragment hashes for all `4,489` source frames, plus the
adapter, selection, camera index, graph, threat and geometry manifests/ledgers by
SHA-256. The selected review surface contains `24` non-overlapping connected
clips of approximately six seconds each (`12` development and `12` validation;
`1,464` selected frames) across six split-local route blocks and eight
split-local time blocks. All eight private balancing hypotheses are derived
mechanically from the frozen prediction rows and are present in validation; the
reviewer projection contains neither those hypotheses nor frozen boxes, IDs,
scores, model identity or semantic-class tasks.
The pack state is intentionally
`prepared-predictions-frozen-labels-unavailable`. It is not an accepted quality
result. Two distinct capability-bound reviewers must complete the class-free
tracklet review, both submissions must freeze, and a separate adjudication must
seal before the frozen predictions can be joined. Only then may the deterministic
per-frame ledger, critical-first failure atlas and M4.8 thresholds produce an
ACCEPT or REJECT. Release gates use validation only; development and combined
metrics remain diagnostic. No aggregate metric may waive a false-free claim, critical
miss, hidden terminal outcome or critical `threat``not-threat` error.
### 2026-08-24 — M4.8 laboratory architecture hardening
M4.8 is represented by one catalog work,
`m48-object-centric-quality`, whose evidence lifecycle advances from the
prepared review pack to the terminal quality result instead of publishing two
competing LAB cards. Review and adjudication use one shared focus-owning
laboratory workspace frame, while opening either full-screen capability unmounts
the background work output. Consequently only one camera decoder, spatial
renderer and playback clock can own the selected evidence at a time.
The M4.8 surface reuses the shared recorded camera and metric spatial viewers;
it defines no Rerun blueprint, receiver, window identifier or per-LAB viewer
configuration. Spatial legends are derived from admitted data and enabled
layers, so source-only review does not advertise unavailable threat, rolling or
local-surface semantics. Recorded-camera decode lanes and source manifests are
bounded by independent LRU caches. These changes do not alter the stabilized K1
connection, control or physical-live path.
The earlier M4.8 camera surface nevertheless still advanced playback through an
experiment-local timer and decoded one HTTP JPEG per frame. On the 10 FPS source,
each request also reopened and validated the full neutral pack, producing
approximately 0.170.42 s frame latency and a visible loader between frames.
That path is removed from continuous playback. M4.8 now consumes the frozen
`missioncore.laboratory-recorded-clip-viewer/v1`: the backend validates the
content-addressed pack and all selected camera fragment hashes once, binds the
canonical recorded-media generation, and the browser admits one compact
manifest before fetching bounded fMP4 fragments ahead of the source clock.
Switching clips, review/adjudication surfaces, or CAMERA/3D/PLAN modes does not
create another media configuration or another port. The exact JPEG endpoint is
retained only for a paused-frame/failure fallback and no longer participates in
normal playback.
The camera-fragment identity remains byte-exact. The replay graph stores integer
nanoseconds while the fMP4 boundary is represented through its media timescale;
the binding therefore admits at most `1,000 ns` of representation drift and
rejects any larger timeline change. Live acceptance on the canonical backend
confirmed a warm source projection in `1216 ms`, the manifest in `13 ms`, and
21 init/fragment reads at `6.13 ms` mean, `10.94 ms` p95 and `23.02 ms` maximum.
The first post-process durable-package restoration is one explicit initial
admission and is not repeated per frame.
Acceptance also exposed and closed a shared loop defect: a backward clip target
had been misclassified as forward rolling-buffer progress. The shared player now
keeps rolling only for the same or a later segment and performs a decoder seek
for rewind/loop. A live six-second clip crossed `5.832 → 6.062 → 0.177 s` with
`readyState=4`, continuous playing state and no frame loader.
This viewer version is held as an architecture invariant. New LABs reuse
`LaboratoryRecordedClipPlayer`; they may supply domain overlays and a typed
alternative scene, but cannot own frame timers, MediaSource, per-frame playback
fetches, Rerun receivers or loading grammar. CAMERA is continuous and driven by
the recorded media clock. M4.8 `3D` and `PLAN` use the shared companion
presentation: the spatial scene and RIGHT camera remain visible together, play
from one media clock, and switching representation does not pause or remount the
decoder. Exact spatial frames are prefetched by a bounded 14-frame look-ahead
window, retained in a 24-frame client cache, and served through a 256-frame
backend LRU; the cache also looks through the clip-loop boundary.
Live acceptance on `m48-clip-02` confirmed camera progression
`11.991 → 14.841 s` and spatial progression `121 → 149` over the same interval.
Across 12 consecutive observations the 3D sequence changed 12 times with zero
loader observations. A separate loop check crossed `17.904 → 12.010 s`, advanced
16 distinct spatial sequences and again exposed no intermediate loader. This is
recorded source-paced evidence, not physical-live or navigation authority.
The selected evidence is not uniformly body-frame qualified: `1,202/1,464`
review frames expose the bounded current LiDAR increment, while `262` are
camera-only because no qualified body frame exists. The first selected clip is
camera-only for all `61` frames; the remaining clips have partial spatial
coverage. The review UI presents those frames as explicit unavailable evidence,
uses one admitted channel, creates no empty spatial canvas and never interprets
the absence as free space.
The frozen evaluation now runs through the canonical laboratory runner and
emits a content-addressed run receipt alongside the quality result. This is
execution provenance, not gate acceptance: the current pack remains at `0/2`
frozen independent reviews, with no adjudication, truth seal or evaluated M4.8
result.
### 2026-08-24 — M4.8 Worker 006 assisted correction LAB
The operator-facing final check no longer starts from an empty annotation
surface. A separate capability-bound correction session projects the immutable
Worker 006 prediction rows into editable class-free boxes before the first clip
opens. The current pack contributes `5,236` boxes across all `1,464` frames and
all `24` clips. The operator selects, moves, resizes or deletes an existing box,
draws a missing box, and then explicitly marks each clip reviewed.
This workflow reuses the same `LaboratoryRecordedClipPlayer`, camera/3D/PLAN
controls, split pane, timeline and spatial cache as the blind workflow. It adds
no viewer, Rerun blueprint, port, media transport or experiment-local playback
clock. Because the accepted M4.7 output has no provider tracklet identity, each
frozen detection is projected honestly as a one-frame editable object; the LAB
does not fabricate temporal identity between adjacent detections.
The correction artifact stores the frozen prediction-row SHA-256, original
Worker identity, complete corrected clip set and a deterministic human delta:
confirmed candidates, unchanged candidates, modified candidates, deleted false
positives and added misses. Its assistance mode is
`frozen-candidate-seeded`; candidate predictions are explicitly visible, model
scores and semantic classes remain absent, and `independent_truth_eligible` is
always false. Freezing this artifact therefore supplies regression evidence for
Worker 006 without pretending that candidate-assisted review satisfies the
two-reviewer independent release gate above.
The correction UI persists the clip-level `reviewed` transition immediately;
there is no second global Save action after the operator changes that checker.
Object geometry/state edits retain their bounded explicit Save action. Success
and error statuses use the canonical independently timed toast lifecycle and
roll a failed clip-status transition back to the last server revision while
preserving any pre-existing dirty object edits.
Small static objects are not split into semantic one-off rules for bins,
bollards, pipes or road hemispheres. M4.8 already records two orthogonal state
dimensions: `threat` is the immediate threat decision, while
`critical_corridor_obstacle` means that the object constrains passage and must
receive avoidance/clearance treatment even when `threat=not-threat`. The LAB UI
therefore exposes the latter as the separate **Проезд → Объезд или запас**
option. A camera rectangle is review evidence only: it cannot become
an oversized 3D collider. Future planner clearance must derive from admitted
LiDAR/local-occupancy geometry, its uncertainty envelope and the configured
vehicle footprint. This distinction is part of the durable M4.8 contract and
must not appear or disappear with detector-class tuning.
### 2026-08-24 — M4.8R1 small-static passage regression baseline
The first correction-derived regression is a new experiment inside the existing
M4.8 human LAB, not a replacement for the assisted-correction run. It keeps the
`m48-class-free-object-quality/v1` pipeline fixed, uses experiment
`m48-small-static-passage-regression/v1`, and publishes append-only run label
`M4.8R1`. The source correction session and frozen Worker 006 pack are read-only
inputs; no correction revision, pack artifact or earlier LAB result is mutated.
Canonical run
`m48-small-static-passage-regression-3e3a2001f87fd3adcb736de52a65e42515044d83faa3515f892705b40915c084`
snapshots revision 29 of the assisted correction. It contains `14`
operator-added exact-frame anchors across `8` reviewed clips, including `12`
anchors marked **Объезд или запас**. Against the frozen `5,236` Worker 006 boxes,
the exact-frame class-free comparator found `0/14` matches at IoU `>= 0.50`.
This deliberately fails the diagnostic `0.90` assisted-anchor recall target and
establishes a concrete miss baseline for the next perception experiment.
The result is not independent truth: the operator saw the Worker 006 candidates,
and the selection is intentionally biased toward objects that required manual
addition. It therefore cannot produce unbiased precision/recall or satisfy the
two-reviewer M4.8 release gate. A camera rectangle is also not a metric collider;
clearance and passability remain functions of admitted LiDAR/local occupancy,
uncertainty and the configured vehicle footprint. Physical live, navigation,
commands, actuation and collision-safety authority remain false.
The regression reuses the held M4.8 recorded viewer and its CAMERA/3D/PLAN,
single media clock, timeline and bounded spatial cache. Each assisted anchor and
the frozen Worker objects are shown only on their exact source frame; the UI does
not drift a manually drawn rectangle across subsequent frames or fabricate a
track. A later Worker candidate must publish another immutable M4.8R run against
the frozen seed, leaving this baseline available for before/after comparison.
## Implementation order ## Implementation order