# LAB E23 — inline temporal stability at 1×

Date: 2026-07-24

Final accepted run: **LAB E23.2**

Status: **accepted for bounded shadow real-time qualification**

Control authority: **disabled**

## Executive result

LAB E23 answers one narrow but important question: can the temporal stabilization used to reduce 2D, semantic, and 3D jitter execute inside the warm perception worker while a recorded sensor stream is paced at real time?

The answer is **yes for this 60-second urban RAVNOVES00 slice on the RTX 4090 worker**.

- The source replay ran at `1.0×`, without look-ahead: 59.994 s of source time in 60.241 s of wall time.
- The stabilizer ran inline after fusion and before world/result publication.
- Its P95 overhead was 1.721 ms for 2D/3D and 12.307 ms for a semantic frame.
- Detector throughput was 9.894 FPS for an approximately 10 FPS camera stream.
- Semantic throughput was 2.009 FPS by design: one semantic inference for every five camera frames.
- World-state age P95 was 185.375 ms.
- All runtime, bounded-state, memory, authority, and final quality checks passed.
- The result was published as a new immutable saved session, not written over an earlier LAB.

This is not yet permission to drive a vehicle. It is a shadow diagnostic qualification on a recorded stream. The physical K1 live ingress, hardware-clock synchronization, forest-domain models, and navigation/safety acceptance remain separate gates.

## Runs and disposition

### LAB E23.1

- Worker result: `e15-shadow-inference-37381767fb06928951aa173c3e2b43a81b8e492916e4ac8622d7d78d7a475f8e`
- Profile SHA-256: `a22de018626e11a2c4d18d87d6b682846921f72c6cd9f290f20db9a71218e1e3`
- Runtime envelope: passed.
- Final raw-versus-inline quality audit: failed.
- Failure: 3D cuboid center-step P95 reduction was 17.10%, below the required 20%.
- Publication: rejected; no saved LAB instance was created.

This distinction is intentional. Passing timing and memory gates does not allow a run to be called successful when the requested quality effect was not demonstrated.

### LAB E23.2

- Worker result: `e15-shadow-inference-32a95297664241f7102b31e064ab0c168bbd97d4f5cc152892fd378d58617ffb`
- Profile SHA-256: `86238c369aa2ec0f5de50a2c676faf9b11884e1355f8cccf416125b5f73fd38e`
- Published result: `e10-integrated-perception-f3cefd9464c8b0ed19bb0c8949c1d890b55bf57353850ba155c4dc8d7d90c371`
- Saved session: `lab-e23-2-86238c36`
- Display label: `LAB E23.2 · Inline temporal 1× · synchronized 60s · 86238c36`
- Runtime envelope: passed.
- Final raw-versus-inline quality audit: passed.
- Browser playback and all visual layers: verified.

The only configuration adjustment after E23.1 was bounded and measured. A deterministic sweep over the raw E23.1 fusion artifact evaluated several 3D center coefficients; `0.32` was selected to clear the quality gate while avoiding an unnecessarily slow response to real rig motion. E23.2 was then rerun from the source at 1×. The sweep result itself was not treated as acceptance evidence.

## Experiment boundary

### What this run proves

1. The full temporal stage can execute inside the persistent warm worker.
2. The stage uses only current and bounded past state; there is no future-frame look-ahead.
3. The camera, detector, semantic, LiDAR fusion, 2D tracking, 3D cuboids, and world-state publication can operate together inside the measured 1× envelope.
4. State and telemetry collections stay explicitly bounded.
5. Inline output materially reduces the selected jitter metrics.
6. The exact accepted result can be replayed in Mission Core as a live 60-second session with synchronized camera, 2D, segmentation, point cloud, and 3D cuboids.

### What this run does not prove

1. It does not prove a physical K1 live connection is stable for an extended mission.
2. It does not prove cross-device hardware timestamp accuracy. The replay is paced by recorded host-arrival time.
3. It does not validate COCO/Cityscapes models for forest obstacles or safety decisions.
4. It does not grant command, navigation, collision-avoidance, or safety authority.
5. It does not establish performance on the final onboard computer unless that computer is the measured RTX 4090 worker.
6. It does not establish ten-hour memory stability; this run is 60 seconds.

## Input data

| Item | Value |
|---|---|
| Source session | `20260720T065719Z_viewer_live` |
| Source mode | recorded source paced near-live |
| Speed | `1.0×` |
| Look-ahead | disabled |
| Selected source span | 59.994249 s |
| Wall time | 60.240711 s |
| Camera | `sensor.camera.right` |
| Calibration slot | `camera_1` |
| Resolution | 800 × 600 |
| Camera frames | 601 |
| LiDAR events | 585 |
| Pose events | 600 |
| Camera index SHA-256 | `e029815a60ad9fbfedb6169142c7449df2b119a51d1ce001f08806e04eb0be14` |
| Raw MQTT SHA-256 | `70da0edad5cbf0e89b6e2355c0aac294f8c36a67249cd33b8918353fd88c83af` |
| Calibration SHA-256 | `05f3ad9b38b3a4fc95388a8ec83da83c745e217709e51787b3d5aad0969f6fa9` |
| Valid-FOV pixels | 270,606 / 480,000 |
| Valid-FOV mask SHA-256 | `a40cee06b7c6f69b6a09a11563dcfd237f3de833b1ccd31459e66692e528ba63` |

Payload loading was streaming and bounded to one event per modality at the source adapter. No complete video, LiDAR stream, or MQTT capture was accumulated in RAM.

## Software and model identity

Pipeline: `warm-worker-inline-bounded-temporal-2d-3d-semantic/v1`

| Component | Identity |
|---|---|
| Worker package | `e15-worker-package-dbf55ccb75664b778a2e0f5d34284af10ec0971945bbbee67b27bc264b765b51` |
| Worker package manifest SHA-256 | `d3089e241286b871ff4e9db569df10222bf2feb07500e10eb641ecce88ace868` |
| Projection pack | `e15-live-projection-713fa7344805b7a592d12e949a6db38116e5370f768bde1cf9144fab5f93f0ae` |
| Detector | YOLOX-S, COCO-80, ONNX |
| Detector model SHA-256 | `c5c2d13e59ae883e6af3b45daea64af4833a4951c92d116ec270d9ddbe998063` |
| Semantic model | `tue-mps/cityscapes_semantic_eomt_large_1024` |
| Semantic revision | `8d6b6d1a3f7b50d441afd7d247c2ed10db186e8f` |
| Semantic weights SHA-256 | `c265da9a74f58f5c3f4826d23ca4ca78beac0b106cca5842beca61580de5b782` |
| Semantic precision | FP16 autocast |
| Python | 3.12.3 |
| PyTorch | 2.13.0+cu130 |
| Transformers | 4.57.6 |
| NumPy | 1.26.4 |
| SciPy | 1.16.3 |
| Triton image | `nvcr.io/nvidia/tritonserver:26.06-py3@sha256:58df7489c3f2276f9591d500a012dee03e23d35543ce3c390b4c001e6bf90794` |

Profile identities:

- detector: `819bdfb0da521d187ec9ce3d3039a0ff75daa0ab473fb3d8e5fa92db9c1ddca1`
- live: `8b7f267ee947932bdd52d1ef4b241adc8c9b4c4d5a8a3cd6c1e7f6e066983699`
- 3D/fusion E14: `a010e32070459b123423f3d4f57aa1d839f73ed05f3df8580d12693406a1b218`
- semantic: `ea583966bc3409f5cf563cbf4fad05e366907e67187082eb692aff53d9f5d875`
- inline temporal E23.2: `86238c369aa2ec0f5de50a2c676faf9b11884e1355f8cccf416125b5f73fd38e`

## Processing topology

The warm worker processed independent bounded branches:

1. Camera decode and valid-FOV application.
2. Detector branch at the camera rate, with a latest-wins queue of capacity 2.
3. Semantic branch every fifth camera frame, with a latest-wins queue of capacity 1.
4. Bounded LiDAR and pose synchronizer, capacity 32 per modality and 3-second retention.
5. Camera/LiDAR projection and object association.
6. Raw 2D/3D fusion artifact emission for qualification only.
7. Inline temporal stabilization of 2D tracks and 3D cuboids.
8. Inline streaming semantic hysteresis with one previous output mask.
9. Stabilized fusion/world-state publication to the diagnostic result queue.

Detector and semantic inference therefore ran concurrently. They were not executed as one long sequential offline job. The temporal stage sat directly in the publication path and its measured latency is included in the result.

## Bounded-state contract

| Bound | Configured | Observed |
|---|---:|---:|
| 2D/3D track states | 128 | 19 peak |
| Track idle lifetime | 1.25 s | bounded by eviction |
| Semantic history | 1 mask | 1 mask |
| Runtime diagnostic samples | 4096 | 61 used |
| Detector queue | 2 | depth 2 peak |
| Semantic queue | 1 | depth 1 peak |
| Synchronizer per modality | 32 | depth 32 peak |

This is the key architectural difference from accumulating an entire mission in Rerun or in the AI worker. Runtime memory is bounded by live state, queue capacity, model state, and fixed diagnostic rings—not by mission duration.

## Throughput and freshness

| Metric | Result |
|---|---:|
| Detector effective rate | 9.8939 FPS |
| Detector camera frames published / consumed | 601 / 596 |
| Detector latest-wins replacements | 5 (0.83%) |
| Semantic effective rate | 2.0087 FPS |
| Semantic frames published / consumed | 121 / 121 |
| Semantic queue drops | 0 |
| Semantic fresh coverage | 98.8255% |
| Fused frames | 544 |
| Fused fraction | 91.2752% |
| Raw accepted cuboids | 867 |
| Stabilized/held cuboids | 1323 |

The five detector replacements are represented as explicit empty frames in the visual projection: 12, 240, 433, 496, and 499. They are not silently copied from an older inference.

## Latency

| Stage | Mean | P95 | Max |
|---|---:|---:|---:|
| Detector | 36.330 ms | 55.757 ms | 171.674 ms |
| Semantic full processing | 205.385 ms | 247.682 ms | 481.552 ms |
| Semantic completion age | 216.966 ms | 265.524 ms | 535.985 ms |
| Projection | 0.756 ms | 1.187 ms | 17.499 ms |
| Association | 4.383 ms | 12.736 ms | 25.382 ms |
| Inline temporal 2D/3D | 0.911 ms | 1.721 ms | 11.348 ms |
| Inline temporal semantic | 3.616 ms | 12.307 ms | 31.396 ms |
| World-state construction | 1.063 ms | 2.022 ms | 12.583 ms |
| World-state age | 72.670 ms | 185.375 ms | 366.839 ms |

Semantic inference is deliberately slower than the camera interval and is reused between sampled frames under a freshness TTL. It is not claimed to run at 10 FPS.

## Resource use

Measured worker: NVIDIA GeForce RTX 4090.

| Metric | Result |
|---|---:|
| Mean process CPU | 141.75% (~1.42 logical cores) |
| Mean process RSS | 1547.11 MiB |
| RSS growth over run | 12.14 MiB |
| Maximum worker threads | 134 |
| CUDA peak allocated | 2107.93 MiB |
| CUDA peak reserved | 2840.00 MiB |
| Mean device GPU memory used | 13,544.25 MiB |
| Mean GPU utilization | 60.18% |
| GPU utilization P95 | 82% |
| Mean GPU power | 192.93 W |
| Maximum GPU temperature | 45 °C |
| D: free before | 407,605,469,184 bytes |
| D: free after | 407,577,206,784 bytes |
| Enforced D: free floor | 386,547,056,640 bytes (360 GiB) |

The device-wide GPU-memory figure includes the persistent Triton/model-serving footprint and must not be interpreted as the incremental cost of the temporal filter. The temporal filter itself added bounded CPU/NumPy state and the process RSS grew by only 12.14 MiB during the run.

No experiment payload was intentionally placed on C:. Worker packages, runner roots, and result artifacts remained on D:.

## Quality result

Raw and stabilized values were computed from artifacts produced during the same E23.2 worker run. The stabilized result was not recomputed offline for acceptance.

| Metric | Raw P95 | Inline P95 | Reduction |
|---|---:|---:|---:|
| 2D normalized acceleration | 0.525774 | 0.395351 | 24.81% |
| 2D normalized size step | 0.267858 | 0.138933 | 48.13% |
| 3D center step | 0.893014 m | 0.591626 m | 33.75% |
| 3D half-size step | 0.060727 m | 0.016893 m | 72.18% |
| 3D yaw step | 18.0226° | 4.9804° | 72.37% |
| Unsupported semantic change | — | — | 78.05% reduction |

Required minimums were 20% for 2D acceleration, 3D center, and 3D yaw, and 10% for unsupported semantic change. All passed.

The result also reduced 2D tracks of at most two frames from 39 to 4 and reduced 3D cuboid gap count from 179 to 69. These are diagnostic continuity metrics, not object-truth accuracy metrics.

## Publication and visual verification

The accepted projection contains:

- 601 synchronized visual frames;
- 121 exact stabilized semantic masks;
- 1323 accepted visual cuboids;
- the source point cloud and trajectory;
- five explicit detector-replacement frames;
- no copied raw sensor payloads.

Semantic pixels were reconstructed from the immutable reference only after every one of the 121 inline mask SHA-256 values matched. The published session was then verified in the running Mission Core interface on port 8000:

1. the saved-session card appeared as `LAB E23.2`;
2. preparation transitioned from the lower-right status pill to ready;
3. the camera and point-cloud timeline advanced;
4. 2D boxes, segmentation, and 3D cuboids could be enabled together;
5. all three layers changed with playback;
6. the source session and earlier LAB instances remained present.

The UI cleanup delivered with this experiment removes the redundant `СЦЕНА 3D · RERUN` label and moves AI preparation state from the toolbar into the lower-right navigation/status stack.

## Acceptance decision

LAB E23.2 is accepted as evidence that bounded temporal stabilization can be part of the near-real-time perception publication path on the measured RTX 4090 worker.

It remains diagnostic-only:

- `commands_enabled = false`
- `navigation_or_safety_accepted = false`

## Next gate

The next experiment should stop refining the recorded view in isolation and move one boundary closer to the vehicle:

1. use the same hashed worker package and E23.2 profile against physical K1 live ingress;
2. retain raw and stabilized diagnostic artifacts for a bounded comparison window;
3. run at least a 10-minute soak before any longer mission test;
4. measure live packet loss, camera/LiDAR clock skew, world-state age, queue replacements, RSS slope, GPU temperature, and disk growth;
5. keep commands and navigation authority disabled;
6. if the 10-minute gate passes, extend to a 60-minute soak without changing the configuration.

Model-domain replacement and safety validation are separate workstreams. They should not be mixed into the first physical live-ingress qualification because that would make timing, synchronization, and model-quality failures impossible to distinguish.
