93 lines
5.7 KiB
Markdown
93 lines
5.7 KiB
Markdown
# Corrected map comparison — view-only admission
|
||
|
||
## Product surface brief
|
||
|
||
Operator job: inspect the recorded ring before and after reviewed correction,
|
||
with identical observations, colors, clipping and camera. Primary entity remains
|
||
the physical recording; correction is a separate derived representation.
|
||
|
||
Placement: Data → Sessions and recordings → selected source → Information.
|
||
Extend the admitted overview with a canonical `SegmentedControl` labelled
|
||
“Версия облака”: “Исходное / Исправленное”. This is domain content inside an
|
||
existing composition (class A), not a new workspace, LAB or product root.
|
||
Rejected: adding another catalog session (would impersonate a physical capture),
|
||
or a separate experiment viewer (duplicates camera/lifecycle controls).
|
||
The planner's source preview does not enable comparison and remains original.
|
||
|
||
States: no admitted pair → ordinary original overview; available pair → explicit
|
||
version choice; pending update → retain previous view with an updating label;
|
||
failure → retain previous view with visible error, never silently label original
|
||
geometry as corrected. Source changes invalidate access. The information panel
|
||
explicitly refers to original capture metrics in both modes.
|
||
|
||
## Identity, geometry and authority
|
||
|
||
`overview_comparison.py` publishes a content-addressed, bounded paired geometry
|
||
bundle outside the raw session catalog. Its manifest binds original session ID,
|
||
overview generation, raw artifact digests and reviewed map generation. An atomic
|
||
pointer selects an explicitly published pair; requests pin that pair, rather than
|
||
following subsequent publications. No HTTP filesystem path input or mutation API.
|
||
|
||
The offline producer verifies the admitted map, its packaging receipt, frozen
|
||
decoded-cache seal, original transport/clocks, frame/pose ownership and current
|
||
overview. It then samples identical point and pose indices in both geometries.
|
||
The preview policy is at most 180,000 points and 20,000 poses, uniformly across
|
||
the complete capture including endpoints. These are viewer resource budgets,
|
||
not route-distance, acquisition, correction or localization limits. Full
|
||
resolution corrected and original files remain unchanged. The preview is not a
|
||
ground-truth accuracy measurement or a new live reference.
|
||
|
||
## Rerun lifetime
|
||
|
||
One original RRD supplies stable application/recording identity. Updates replace
|
||
only `/world/cloud`, `/world/route` and `/world/endpoints` through the existing
|
||
channel. No new recording, viewer mount, blueprint or camera journal update on
|
||
version or clip change. Explicit Top/3D commands may change the camera; both
|
||
representations use common bounds. Height controls start unclipped, with maximum
|
||
at least 80 m. Paired observation colors are computed once conceptually from
|
||
original heights, so a color shift cannot masquerade as geometry correction.
|
||
|
||
No Rerun fork customization, solver modification, source-session mutation,
|
||
reference promotion, vehicle authority, or frontend root change is introduced.
|
||
|
||
## Acceptance
|
||
|
||
- Python: 78 focused tests passed across overview/comparison, candidate admission,
|
||
packaging, reference preparation, planner, correction and registration. The
|
||
17 overview/comparison tests were rerun after formatting and passed. Coverage
|
||
includes exact source/generation binding, hash corruption, symlinks, path
|
||
traversal, missing version (409 rather than raw fallback), shared RRD identity,
|
||
route/endpoints replacement, unchanged colors, reversible clipping, and no
|
||
camera blueprint on representation changes.
|
||
- Frontend: architecture gate, full typecheck, all 884 unit tests and production
|
||
build passed. After the final footer-only adjustment, architecture + both
|
||
overview test files (9 tests), typecheck and production build passed again.
|
||
- Ruff and `git diff --check` passed. Existing Vite large-chunk and Starlette
|
||
httpx deprecation warnings remain; no dependency change was made for them.
|
||
- The real recorded ring was admitted as a view-only pair: 180,000 identical
|
||
point indices, all 5,182 poses, original 579.797271 m and corrected 579.982703 m.
|
||
Full-resolution original and corrected clouds remain intact. Private manifest
|
||
and generation identities live under runtime evidence, not the session catalog.
|
||
- Canonical API accepted the pair after restart. IAB visually displayed original
|
||
and corrected versions, Top/3D, and height clipping at 5 m then full 80 m.
|
||
A manually rotated view remained stable on toggling. Normal/expanded workspace
|
||
modes preserved version and clipping; Escape closed the information view.
|
||
- Final-build viewport geometry was identical before/after comparison switching:
|
||
308.828125 × 311.78125 CSS pixels at the same coordinates on the narrow IAB.
|
||
The footer uses common copy to avoid changing viewer height with the version.
|
||
Desktop 1440 × 1000 QA override was reset. The corrected real case remains
|
||
open in the canonical IAB; no alternative server or extra viewer was started.
|
||
- Resource gate: memory free percentage 40–49%; builds, tests, materialization
|
||
and browser work ran sequentially. Docker Desktop was not started.
|
||
- Ops reporting remains pending: direct `tasker_get_agent_instructions` and
|
||
`tasker_list_projects` both timed out after 60 seconds. No card ID was guessed,
|
||
no duplicate card or substitute API write was used. This report preserves the
|
||
implementation/acceptance record for the existing card when Ops is reachable.
|
||
|
||
## Decision and remaining boundary
|
||
|
||
The candidate can now be inspected in the product. That does not admit it for
|
||
live localization or autonomous movement. No new scan is necessary just to
|
||
compare the two representations. A corrected-reference replay and independent
|
||
repeat capture remain separate acceptance stages, not proved by this viewer.
|