docs(observatory): record selector rules and local UI acceptance

This commit is contained in:
DCCONSTRUCTIONS
2026-09-03 10:16:12 +03:00
parent e436fb56d4
commit 44afadb021
3 changed files with 115 additions and 2 deletions
+25 -1
View File
@@ -16,6 +16,9 @@ Docker-профилей, затем переносим выбранный про
версий остаются в «Лабораторных доказательствах». Если рассчитаны все текущие версий остаются в «Лабораторных доказательствах». Если рассчитаны все текущие
совместимые профили, выбор пуст/недоступен, кнопки «Рассчитать» нет, «Обновить» совместимые профили, выбор пуст/недоступен, кнопки «Рассчитать» нет, «Обновить»
остаётся. Старое имя LAB не доказывает совпадение версии конфигурации. остаётся. Старое имя LAB не доказывает совпадение версии конфигурации.
Уточнение владельца 2026-09-03: никаких кнопок/плашек «Расчёт завершён»,
«Результат опубликован» и аналогичных подтверждений. Готовность видна по
результату с маркером профиля внизу; в выборе остаются только нерассчитанные.
### Этап 1 — Идентичность расчёта и переиспользование результата (в работе) ### Этап 1 — Идентичность расчёта и переиспользование результата (в работе)
@@ -86,7 +89,7 @@ succeeded/not-required не принят за новый результат. В
сохранены. Worker/model jobs не создавались. Browser: каталог, выбор, Refresh, сохранены. Worker/model jobs не создавались. Browser: каталог, выбор, Refresh,
normal/expanded и Escape проверены, console warnings/errors0. normal/expanded и Escape проверены, console warnings/errors0.
Этап1 пользовательски ещё не закрыт: текущий селектор смешивает архивные entries На момент активации cache этап1 пользовательски ещё не был закрыт: селектор смешивал архивные entries
и portable definitions, а source/setup-only выбор последней job показывает и portable definitions, а source/setup-only выбор последней job показывает
старое «Расчёт завершён» рядом с новым «Рассчитать». Это не текущий cache hit. старое «Расчёт завершён» рядом с новым «Рассчитать». Это не текущий cache hit.
Следующий шаг на стыке этапов12: exact-definition queue/status binding, Следующий шаг на стыке этапов12: exact-definition queue/status binding,
@@ -95,6 +98,27 @@ normal/expanded и Escape проверены, console warnings/errors0.
Подробности/rollback в том же отчёте выше; повторять сборку без изменения кода Подробности/rollback в том же отчёте выше; повторять сборку без изменения кода
или снова освобождать память не требуется. или снова освобождать память не требуется.
**Четвёртый инкремент, 2026-09-03: правило выбора исправлено.** Селектор получает
только portable definitions, оставляет совместимые без проверенного exact cache
hit; архивные LAB и рассчитанные версии остаются в доказательствах ниже.
Кнопки/плашки завершения и дублирующее «Записанный разбор» убраны. Все загруженные
результаты показаны без прежнего лимита6. «Рассчитать» отсутствует при пустом
выборе и во время уже принятого расчёта; до успешной проверки запуска кнопка
неактивна. Во время работы есть только индикатор ожидания, без вымышленных
процентов. Ошибки и retry публикации сохранены вне строки выбора.
Queue GET фильтрует точную definition SHA до LIMIT; при смене source/setup/SHA
предыдущие jobs/errors не показываются даже до React effects. Публикация
обновляет оба каталога; удаление projection также обновляет выбор.
720 frontend tests,52 focused queue/API tests, architecture4/4, typecheck,
Ruff/mypy и production build PASS. Подробная финальная runtime/UI-проверка —
в [отчёте](../experiments/perception/OBSERVATORY_PUBLISHED_CACHE_2026-09-03.md).
Визуальная проверка также выявила сжатие селекторов в узком обычном окне:
существующая адаптивная раскладка теперь зависит от ширины окна Observatory,
а не всего viewport. Старые terminal logs не выдаются за ошибку нового выбора.
Полный новый LAB-run, реальные счётчики прогресса и positive cache/view на
операторских данных остаются следующим acceptance этапа2, а не объявляются
закрытыми этой правкой интерфейса.
- Сверить каталог, очередь, публикацию и просмотр для текущих M4.9T5 и LAB V1. - Сверить каталог, очередь, публикацию и просмотр для текущих M4.9T5 и LAB V1.
- Связать готовность с точной исходной записью и immutable RunDefinition, - Связать готовность с точной исходной записью и immutable RunDefinition,
включающей image/model/config/adapter/result-contract identities. включающей image/model/config/adapter/result-contract identities.
@@ -121,6 +121,28 @@ binding and separating archives from executable choices remain required;
the activated backend cache does not prove those UI changes complete. the activated backend cache does not prove those UI changes complete.
See [verification and activation status](../../experiments/perception/OBSERVATORY_PUBLISHED_CACHE_2026-09-03.md). See [verification and activation status](../../experiments/perception/OBSERVATORY_PUBLISHED_CACHE_2026-09-03.md).
## Selector contract clarification — 2026-09-03
The owner explicitly excludes completion buttons and status badges. A completed
current profile is represented by its reviewable, profile-marked evidence below,
not by a “calculation complete” control. The selector now contains compatible
portable definitions with no verified exact published cache hit. An archived LAB
or old definition never hides a new version. An empty selector has no Calculate.
An in-flight computation has only an activity indicator; failed publication
keeps a separate recovery action and never starts inference again.
Removed the six-card presentation cap; the existing catalog window limit remains
explicit. Queue reads now filter definition SHA before pagination. Hook snapshots
are fenced by source/setup/definition so previous jobs cannot flash in the next
selection. New synthetic tests exercise none/all/partially cached choices,
unavailable executors, legacy/new-version separation and pre-effect selection
changes. Sequential validation:720 frontend tests,52 queue/API tests, architecture,
typecheck, Ruff/mypy and production build PASS. Full recorded-run/product
acceptance and measured progress counters remain stage2.
Historical terminal logs do not become a new selection's error. The existing
responsive selector layout follows workspace width, including restored narrow
windows, rather than only the browser viewport.
## Boundaries ## Boundaries
No Synology deployment, hardware actuation, motor integration, new capture, No Synology deployment, hardware actuation, motor integration, new capture,
@@ -137,7 +137,7 @@ Sequential validation under `mission-core-product-ui`:
Private snapshots/logs and previous frontend: `.runtime/docker-vm-recovery-z1636o/`. Private snapshots/logs and previous frontend: `.runtime/docker-vm-recovery-z1636o/`.
No raw recording content was collected into this diagnostic evidence. No raw recording content was collected into this diagnostic evidence.
## Remaining product acceptance ## Product acceptance remaining at initial cache activation
The cache increment is active, but the complete workflow is not accepted. The cache increment is active, but the complete workflow is not accepted.
Browser QA reproduced the next-stage UI mismatch: archived entries and portable Browser QA reproduced the next-stage UI mismatch: archived entries and portable
@@ -151,3 +151,70 @@ progress, complete recorded calculation and sequential M4.9T5/LAB V1 acceptance.
Stage1 user-facing reconciliation and the full stage2 workflow remain open. Stage1 user-facing reconciliation and the full stage2 workflow remain open.
Do not repeat the memory recovery or claim/v3 repair, or treat the old realtime Do not repeat the memory recovery or claim/v3 repair, or treat the old realtime
FAIL as a new gate. No per-LAB UI branch or automatic inference on Refresh. FAIL as a new gate. No per-LAB UI branch or automatic inference on Refresh.
## Selector correction and acceptance — 2026-09-03
The owner clarified that a finished calculation is represented only by its
profile-marked evidence below, never by a completion button/status. Implemented
in the shared Observatory surface using existing Design Guideline components:
- Only compatible, uncalculated portable definitions are offered. The verified
catalog cache decision remains authoritative; names, archived definitions,
failed or unpublished jobs cannot hide a current profile. No Calculate when
the selection is empty. During an accepted computation only an activity
indicator appears; no invented percentage. Before admission the button is
disabled. Failed publication retains recovery without new inference.
- Removed completion badges, the duplicate recorded-review badge and the
six-result presentation cap. All results in the loaded catalog are shown.
The existing catalog-window bound remains explicit; this is not complete
pagination for500 recordings.
- Queue reads filter source/setup/definition before LIMIT. UI snapshots are
fenced by the same selection key before React effects, so previous jobs and
request errors cannot flash against a new selection. Historical terminal logs
are not displayed as new operator failures; observed/current failures remain
actionable.
- Publication refreshes both catalogs; projection deletion refreshes selection.
Browser QA found selector compression in a restored narrow window; moved the
existing responsive layout from viewport width to workspace container width.
No new component, per-LAB page, model configuration or Worker deployment.
Sequential checks: architecture4/4, full typecheck, frontend720/720,
focused queue/API52/52, Ruff and mypy PASS. A synthetic test proves definition
filtering happens before pagination; API accepts a valid digest and rejects a
malformed one with422. Tests cover zero/all/partly cached choices, old versions,
incompatible/archived entries, missing projections and stale first-render data.
Final production build14.56s, peak RSS2108293120bytes; unchanged large-chunk
warnings. Pressure remained1 and swap fell2666.19→2618.19MiB. No concurrent heavy
tests/builds/browser runs; Docker limits/containers and operator apps untouched.
Active canonical8000: backend PID69976, health200/reconciler ready, frontend
`/assets/index-BHcT8phv.js`, CSS `/assets/index-pPpyKjkx.css`,
index SHA256 `97da43251ef0d0635eb078ee1a102fa820f1716bb9ec5879dffb284aa3628ea6`.
No alternate backend8765/preview4173. The existing LaunchAgent restarted only
the canonical backend for the API change; final frontend-only corrections did
not restart it again. Original frontend backup:
`.runtime/observatory-selector-fQUwPT/frontend-dist-previous`.
For rollback, restore that build and the matching pre-change code on the same
8000 endpoint. Do not replace or truncate the queue DB.
In-app browser acceptance:
- 004TREE offers exactly the two current portable profiles, not four mixed
archive/current entries. Both select correctly; Calculate becomes available
after preflight. Completion labels and historical error alerts are absent.
- 01 has an empty disabled selector and no Calculate because its capture
attestation is missing. This is incompatibility, not a fake cache hit.
- 00 renders all14 loaded evidence entries. 004TREE retains both old entries
and its existing admitted LAB V1 review action; no archive projection was
deleted or falsely promoted into a current verified result.
- Refresh, dropdown Escape, normal/expanded windows and readable selector text
verified. Final browser console warnings/errors0; completion labels0,
alerts0. No Calculate, publication retry, delete, rename or replay was invoked.
All six queue-table row hashes are identical before/after this correction and
browser checks:11 jobs,50000 legacy receipts,1 reconciliation,0 live leases,
v3 grants and preemptions. No inference or publication jobs were created.
Current real data still contains no exact successful/published cache hit;
all-cached/partial-cache behavior is synthetic-test evidence, not a new completed
LAB run. The remaining stage2 work is measured progress, full sequential
M4.9T5/LAB V1 calculation, publication, and cached viewing after restart.