docs(observatory): record cache proof and pending activation
This commit is contained in:
@@ -54,6 +54,26 @@ compute packages/registries сохранены. Старые agents stopped/rest
|
|||||||
Следующий шаг: verified published-cache projection. Этап1 по-прежнему открыт;
|
Следующий шаг: verified published-cache projection. Этап1 по-прежнему открыт;
|
||||||
готовый cache/selector/progress и полный расчёт записей ещё не доказаны.
|
готовый cache/selector/progress и полный расчёт записей ещё не доказаны.
|
||||||
|
|
||||||
|
**Третий инкремент, 2026-09-03: verified cache реализован в коде.** Каталог и
|
||||||
|
preflight принимают только successful/published job с точным source snapshot,
|
||||||
|
RunDefinition, Session provenance и целым пакетом артефактов. Фронтенд читает
|
||||||
|
проверенную привязку вместо прежнего запрета непустых `existing_results`.
|
||||||
|
Готовый результат доступен без dispatch/подготовки raw source; повреждённый
|
||||||
|
не скрывает возможность нового расчёта. Повторный submit и гонка с публикацией
|
||||||
|
защищены внутри queue INSERT transaction; холодная проверка больших файлов
|
||||||
|
требует Refresh и не выполняется под write lock. История не удаляется.
|
||||||
|
|
||||||
|
120 focused backend tests,23 frontend/architecture tests, Ruff, mypy пяти
|
||||||
|
source files и focused TypeScript check PASS. Полная production build и browser
|
||||||
|
QA **пока не выполнены**: Mac memory-pressure=2 при swap~7.6–7.8GiB, чужие постоянные
|
||||||
|
сервисы не остановлены. Canonical8000/PID57796 оставлен на прежнем согласованном
|
||||||
|
backend/frontend release, health200; новый cache ещё не активирован. Worker,
|
||||||
|
модели и живые очереди не изменялись. Полный LAB-run не запускался.
|
||||||
|
[Проверки и следующий шаг](../experiments/perception/OBSERVATORY_PUBLISHED_CACHE_2026-09-03.md).
|
||||||
|
Этап1 остаётся открытым до сборки/активации согласованного release и проверки
|
||||||
|
каталога; затем этап2 — селектор, прогресс и полный цикл на записях. Не повторять
|
||||||
|
уже закрытый ремонт claim/v3 и не возвращаться к сетевым latency canary.
|
||||||
|
|
||||||
- Сверить каталог, очередь, публикацию и просмотр для текущих 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.
|
||||||
|
|||||||
@@ -81,6 +81,39 @@ All pre-existing queue row hashes are unchanged. This repairs dispatch polling,
|
|||||||
not published-cache verification or full recorded-workflow acceptance.
|
not published-cache verification or full recorded-workflow acceptance.
|
||||||
See the [repair evidence and rollback boundary](../../experiments/perception/OBSERVATORY_RECORDED_CLAIM_REPAIR_2026-09-02.md).
|
See the [repair evidence and rollback boundary](../../experiments/perception/OBSERVATORY_RECORDED_CLAIM_REPAIR_2026-09-02.md).
|
||||||
|
|
||||||
|
## Third increment: exact published-result cache (2026-09-03)
|
||||||
|
|
||||||
|
Implemented in source; activation of the matching backend/frontend release is
|
||||||
|
pending the local resource gate. This does not claim a completed recorded run.
|
||||||
|
|
||||||
|
The portable catalog now joins successful **published** queue receipts to the
|
||||||
|
current per-source catalog snapshot, immutable definition, Session publication
|
||||||
|
binding, calculation profile, package contract, central manifest and every
|
||||||
|
artifact. No matching by LAB name, operator label, or the newest 100-job page.
|
||||||
|
The queue receives two indexes, with no deletion or rewriting of history.
|
||||||
|
The existing computation identity remains the only computation key.
|
||||||
|
|
||||||
|
An exact usable result projects `existing / open-existing`, its result ID and
|
||||||
|
path-free source/definition/package identities. It disables new submission but
|
||||||
|
does not require Worker dispatch or raw-source preparation for cached review.
|
||||||
|
Missing/corrupt artifacts do not count as coverage; the older evidence remains.
|
||||||
|
The newest verified exact candidate is returned; other versions are not hidden
|
||||||
|
from the evidence catalog or mistaken for the current calculation.
|
||||||
|
|
||||||
|
Large immutable result objects are hashed in 1 MiB chunks on first use or file
|
||||||
|
metadata change. A bounded 4096-entry memo rechecks dev/inode/size/mtime/ctime;
|
||||||
|
normal refresh does not reread unchanged large objects. This is result-integrity
|
||||||
|
IO, not source upload, source decoding, model inference, or an FPS measurement.
|
||||||
|
The queue INSERT fence rechecks the published candidate atomically. It never
|
||||||
|
streams large files while holding the write lock: cold/concurrent/changed
|
||||||
|
verification returns HTTP409 requesting Refresh. Exact idempotency retries still
|
||||||
|
return the original job. Verified corruption permits a new request.
|
||||||
|
|
||||||
|
The frontend's existing portable decoder now accepts only bound, internally
|
||||||
|
consistent cached results. No per-LAB page, renderer or selector implementation
|
||||||
|
was introduced. Full selector/progress/product acceptance remains stage 2.
|
||||||
|
See [verification and activation status](../../experiments/perception/OBSERVATORY_PUBLISHED_CACHE_2026-09-03.md).
|
||||||
|
|
||||||
## Boundaries
|
## Boundaries
|
||||||
|
|
||||||
No Synology deployment, hardware actuation, motor integration, new capture,
|
No Synology deployment, hardware actuation, motor integration, new capture,
|
||||||
|
|||||||
@@ -0,0 +1,92 @@
|
|||||||
|
# Observatory published-cache increment — 2026-09-03
|
||||||
|
|
||||||
|
## Status and scope
|
||||||
|
|
||||||
|
Implemented and contract-tested; **not activated on canonical8000 yet**.
|
||||||
|
Implementation commit: `1e4ddc2` on `codex/m5-1-observatory` (no push).
|
||||||
|
This is stage1 source/provenance/cache work, not model or recorded-run evidence.
|
||||||
|
No Worker containers, model profiles, raw recordings, result history, capture,
|
||||||
|
network settings or physical controls were changed. No Synology deployment.
|
||||||
|
|
||||||
|
## Contract
|
||||||
|
|
||||||
|
- Exact key: admitted source snapshot + immutable RunDefinition (including
|
||||||
|
executor image/release, models, adapter, resource and result contracts).
|
||||||
|
- Candidate: successful queue job with durable `publication_state=published`.
|
||||||
|
Legacy `succeeded/not-required`, pending or failed publication is not a hit.
|
||||||
|
- Verify full job/source/definition/profile provenance, Session binding, sealed
|
||||||
|
package and CAS manifest identity, exact artifact inventory and file hashes.
|
||||||
|
- Return the newest usable exact result with `existing / open-existing`,
|
||||||
|
`submission_allowed=false` and path-free evidence identities. Different source,
|
||||||
|
changed snapshot or profile version remains a distinct computation.
|
||||||
|
- Existing catalog/preflight/viewer contracts are reused. No per-LAB UI branch.
|
||||||
|
Full selector filtering and progress are deliberately the next product stage.
|
||||||
|
- Cached preflight does not prepare raw data or call a Worker; read-only result
|
||||||
|
review is independent of current source compatibility/dispatch availability.
|
||||||
|
Source snapshot comparison reads the catalog, not all source media.
|
||||||
|
- Corrupt/missing/symlinked result objects do not suppress a fresh calculation.
|
||||||
|
History is retained. Cached review is not a navigation/safety acceptance.
|
||||||
|
|
||||||
|
## IO and concurrency
|
||||||
|
|
||||||
|
First use or changed metadata streams result objects in 1MiB chunks. Content
|
||||||
|
checks use a bounded4096-entry fingerprint memo; each lookup rechecks file
|
||||||
|
device/inode/size/mtime_ns/ctime_ns. Contracts/manifests remain independently
|
||||||
|
parsed and checked. Warm refresh does not reread unchanged large result objects.
|
||||||
|
Cold verification can cost result-store IO and is not advertised as constant-time.
|
||||||
|
|
||||||
|
Two additive queue indexes support exact published-source and computation lookup.
|
||||||
|
Publication/INSERT races are fenced in the existing transaction. Its verifier
|
||||||
|
does not re-enter the queue DB or hash large files under the write lock. A cold,
|
||||||
|
concurrent or changed verification requests Refresh with HTTP409, never silently
|
||||||
|
creates another job. Confirmed corruption permits retry with a new key; the
|
||||||
|
original idempotency key always refers to the original job.
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- 120 focused backend tests PASS: portable publisher/cache, setup API/projector,
|
||||||
|
queue binding, recorded queue, Worker API, publication retry/reconciliation.
|
||||||
|
- 23 focused frontend tests PASS: portable catalog/decoder and application
|
||||||
|
architecture, sequential Node runner with192MiB heap cap. Peak RSS~108MiB.
|
||||||
|
- Focused strict TypeScript check of the portable decoder/fetch contract PASS,
|
||||||
|
192MiB heap cap; peak process RSS~366MiB including compiler/native memory.
|
||||||
|
- Ruff on all changed Python files PASS; mypy five changed core/API modules PASS.
|
||||||
|
- Tests use synthetic filesystem/SQLite packages, not historical LAB outputs as
|
||||||
|
an inference substitute. They cover complete publish→cache→view, missing and
|
||||||
|
same-size corruption with restored mtime, symlink substitution, changed central
|
||||||
|
manifest/provenance/source/version, publication race, idempotent retry and no
|
||||||
|
source preparation/model submission when an exact result is available.
|
||||||
|
- First fixture run correctly rejected legacy `succeed()` as no publication
|
||||||
|
outbox. Fixture now exercises `complete_for_publication()` followed by actual
|
||||||
|
publisher and durable `mark_published()`; the production gate was not relaxed.
|
||||||
|
- Existing FastAPI/httpx test deprecation warning remains; dependencies unchanged.
|
||||||
|
- Legacy SQLite migration is covered: indexes are created after publication
|
||||||
|
columns are added, preserving the pre-existing job and idempotency identity.
|
||||||
|
|
||||||
|
Reproduce backend tests with `.venv/bin/pytest -o addopts='' -q` and these files:
|
||||||
|
`tests/test_observatory_portable_result_publisher.py`,
|
||||||
|
`tests/test_observatory_portable_setup_api.py`,
|
||||||
|
`tests/test_observatory_portable_setup_projection.py`,
|
||||||
|
`tests/test_observatory_portable_queue_binding.py`,
|
||||||
|
`tests/test_observatory_recorded_jobs.py`, `tests/test_observatory_worker_api.py`,
|
||||||
|
`tests/test_observatory_publication_retry_api.py`,
|
||||||
|
`tests/test_observatory_publication_reconciler.py`.
|
||||||
|
|
||||||
|
Frontend, from `apps/control-station`:
|
||||||
|
`NODE_OPTIONS=--max-old-space-size=192 node --test --test-concurrency=1 test/observatoryLaboratorySetups.test.mjs test/applicationArchitecture.test.mjs`.
|
||||||
|
|
||||||
|
## Activation still required
|
||||||
|
|
||||||
|
Mac pressure rose from1 to2 during the turn, swap~7.6–7.8GiB; no temporary heavy job
|
||||||
|
remains. Existing operator Docker services were inspected, not stopped. The
|
||||||
|
resource gate in `mission-core-product-ui` defers full build and browser QA.
|
||||||
|
Canonical8000 remains PID57796 on the previous matched release, `/api/health`
|
||||||
|
HTTP200. No listeners on8765/4173; unrelated launcher5173 is not this project.
|
||||||
|
Do not claim that the new cache is already live in the operator interface.
|
||||||
|
|
||||||
|
After memory pressure normalizes: sequential production typecheck/tests/build,
|
||||||
|
activate the matching backend/frontend on canonical8000, verify health/catalog
|
||||||
|
and browser decoder behavior without creating inference jobs, then update this
|
||||||
|
status. Do not start a second backend or replay process. Stage2 then implements
|
||||||
|
the selector/progress/full recorded calculation and sequential M4.9T5/LAB V1
|
||||||
|
acceptance. Neither this report nor a cached viewer FPS proves onboard realtime.
|
||||||
Reference in New Issue
Block a user