Files
felhom.eu/documentation/audits/update-night-2026-09-21/apps/docmost/verdict.json
T
admin da20722e76
gates / gates (push) Successful in 27s
Update night 2026-09-21: Phase 0 and Phase 1 evidence, the drill method, and two instrument fixes
INTERIM CHECKPOINT — evidence off the machine at the end of the phase that produced it (R-320),
not at the end of the session. Phases 2-5 follow in a later commit.

Phase 0, all three mechanisms proven with their controls:
- the fleet floor to 0.261.0 with its declared MinAgent — both demo boxes in 13 s, the hub
  logging `managed floor SERVED ... from declared (golden 0.258.0)`.
- a PRIVATE DRILL CATALOG (admin/app-catalog-drill), so that broken, dummy, cross-repo and
  engine-major edges can be measured without the live catalog ever carrying one. Positive
  control quoted, and two negative controls: the live catalog's main and both real boxes'
  caches unchanged.
- a throwaway image store on the scratch guest, which is what makes an UNATTENDED HOLD
  measurable at all: an edge that PASSES the within-a-major test and still fails.
  CompareImageRefs was proven to order host:port/ references by RUNNING it (4 positive cases
  + 1 negative control), not by reading it.

Phase 1: real within-a-major upstream edges walked on guest 9202 through the product's own
guarded Update, each app seeded and read back through its OWN front door (R-156), with a
per-edge verdict record in 09's shape. `inconclusive` is never collapsed into `failed`.

TWO INSTRUMENT FIXES, both in this repo's own evidence code:
- 00-api-recipe.md said the app page is /app/<n>; it is /apps/<n>, and every call it described
  404s. Corrected, with the session-expiry note that cost the same time.
- unattended-caller.py's follow() read update_phase/updating off the API ENVELOPE, so both were
  always None and EVERY followed update ran to its 900 s timeout and was then recorded
  `timeout` and never-press-again. Fixed before B1 relied on it. R-623.

No controller, agent or hub code was written. The live catalog carries no broken reference.

Gates: repo_gates.py --fast — all 15 OK, exit 0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-09-21 21:17:46 +02:00

57 lines
1.9 KiB
JSON

{
"harness_version": 1,
"app": "docmost",
"venue": "guest 9202 demo-hp-scratch, controller 0.261.0",
"class": "db-postgres",
"from": {
"docmost": "docmost/docmost:0.95.0",
"docmost-postgres": "postgres:16-alpine",
"docmost-redis": "redis:7-alpine"
},
"to": {
"docmost": "docmost/docmost:0.96.0",
"docmost-postgres": "postgres:16-alpine",
"docmost-redis": "redis:7-alpine"
},
"verdict": "proven",
"seed_read_before": true,
"seed_read_after": true,
"healthy_after": true,
"migration_observed": "docmost | {\"level\":\"info\",\"time\":\"2026-09-21T18:25:13.099Z\",\"pid\":45,\"hostname\":\"0dc77b73c358\",\"context\":\"DatabaseMigrationService\",\"msg\":\"Migration \\\"20260824T211732-page-title-trgm-index\\\" executed successfully\"}",
"abort": "not-attempted",
"abort_detail": null,
"duration_s": 103.6,
"measured_at": "2026-09-21T18:21:18.018992+00:00",
"evidence": "apps/docmost/",
"notes": [],
"observables_after": {
"pinned_images": {
"docmost": "docmost/docmost:0.96.0",
"docmost-postgres": "postgres:16-alpine",
"docmost-redis": "redis:7-alpine"
},
"installed_images": {
"docmost": "docmost/docmost:0.96.0",
"docmost-postgres": "postgres:16-alpine",
"docmost-redis": "redis:7-alpine"
},
"catalog_images": {
"docmost": "docmost/docmost:0.96.0",
"docmost-postgres": "postgres:16-alpine",
"docmost-redis": "redis:7-alpine"
},
"live_compose_image_lines": [
"image: docmost/docmost:0.96.0",
"image: postgres:16-alpine",
"image: redis:7-alpine"
],
"docker_inspect": [
"docmost docmost/docmost:0.96.0 running=true restarts=0",
"docmost-postgres postgres:16-alpine running=true restarts=0",
"docmost-redis redis:7-alpine running=true restarts=0"
]
},
"final_phase": "done",
"hold_reason": null,
"update_error": null
}