# catalog_gates.py metube - re-run after the R-788 exerciser - 2026-10-02T07:17:56Z, bench LXC 9401 on demo-hp (debian-13, swap 0, nvme-scratch), catalog-wt de0a9bd + uncommitted working tree (16 path(s), REFRESHED copy with check-volume-persistence.py APP_EXERCISE R-788, copied with its .git), sibling felhom.eu 68c2290 (git archive) at ../felhom.eu
# sibling copy ALSO carries tar copies of DooPlex UNCOMMITTED documentation/audits/family-gate-2026-10-02/ and documentation/audits/licences-2026-10-02/ (real B/catalog-gates-grimmory.txt; B/catalog-gates-metube.txt = the run-1 output, copied from catalog-gates-metube-run1.txt so the onboarding citation resolves)
# the previous output of this file is kept as catalog-gates-metube-run1.txt
 M CHANGELOG.md
 M CONTEXT.md
 M FIRST-ADMIN.md
 M README.md
 M REUSE.md
 M scripts/box_walk.py
 M scripts/catalog_gates.py
 M scripts/check-volume-persistence.py
 M scripts/copy_freeze/hu.json
 M scripts/test_gate_decoys.py
 M scripts/upgrade_fixtures_box.py
?? onboarding/grimmory.md
?? onboarding/metube.md
?? scripts/check-family-gate.py
?? templates/grimmory/
?? templates/metube/
catalog_gates — apps: metube

==============================================================================
== gate: image-pins   (check-image-pins.py)
==============================================================================
image-pin gate OK — 58 templates, 0 unpinned images

==============================================================================
== gate: image-resolvable   (check-image-resolvable.py metube)
==============================================================================
resolving 1 unique image pin(s)…
image-resolvability gate OK — 1 unique pins, all resolve

==============================================================================
== gate: volume-persistence   (check-volume-persistence.py metube)
==============================================================================
self-testing the prober (both directions)…
  prober flags the R-156 signature and clears a correct template — trustworthy
metube               UNDETERMINED  NOTHING this app wrote landed in ANY folder the template preserves: all 2 mount(s) across 1 container(s) are empty, yet entries were created in ['/'].

UNDETERMINED — NOT a pass. The question was not answered for these:
  metube: NOTHING this app wrote landed in ANY folder the template preserves: all 2 mount(s) across 1 container(s) are empty, yet entries were created in ['/']. Needs adjudication.; metube: this container's mou

0 clean · 0 broken · 1 undetermined (of 1 in scope)
INCOMPLETE — no broken template among those decided, but 1 were never decided. This is not a clean bill of health.

==============================================================================
== gate: engine-major   (check-engine-major.py)
==============================================================================
engine-major gate — range origin/main..HEAD: 0 compose file(s) changed, 0 engine pin(s) compared
engine-major gate OK — no forbidden engine major, and no engine major bundled with another image move (rule: CLAUDE.md, amended by R-469 2026-09-21)

==============================================================================
== gate: catalog-since   (check-catalog-since.py)
==============================================================================
catalog-since gate — range origin/main..HEAD: 0 compose file(s) changed, 0 image move(s) dated
catalog-since gate OK — every image move in the range carries a catalog_since on or after its commit day

==============================================================================
== gate: copy-i18n   (check-copy-i18n.py metube)
==============================================================================
copy-i18n: matcher controls OK (positive „Jelentkezz be…" convicts, negative „Encrypted notes…" does not)
copy-i18n: retrieval-promise vocabulary matches the sibling clone
copy-i18n: 58 apps · 1155 Hungarian copy strings frozen · 1154 with English
copy-i18n: translated so far — actualbudget 15/15, adventurelog 18/18, audiobookshelf 21/21, bentopdf 14/14, bookstack 21/21, calcom 22/22, calibre-web 27/27, claper 20/20, code-server 20/20, crafty-controller 24/24, dawarich 21/21, docmost 19/19, emby 22/22, ghost 16/16, gitea 17/17, glance 15/15, gokapi 19/19, grafana 19/19, gramps-web 17/17, grimmory 24/24, home-assistant 18/18, homebox 17/17, homepage 15/15, immich 24/24, jellyfin 22/22, karakeep 19/19, kimai 20/20, komga 21/21, mealie 19/19, metube 19/19, n8n 17/17, navidrome 21/21, nextcloud 28/28, onlyoffice 24/24, opengist 16/16, outline 21/21, paperless-ngx 33/33, papra 14/15, plant-it 16/16, plex 25/25, privatebin 14/14, radarr 22/22, radicale 19/19, rallly 17/17, recipe-importer 19/19, romm 41/41, seerr 18/18, sonarr 22/22, sparkyfitness 21/21, tandoor 18/18, termix 12/12, uptime-kuma 16/16, vaultwarden 23/23, vikunja 18/18, wanderer 20/20, wger 20/20, wishlist 16/16, zipline 18/18
copy-i18n: OK

==============================================================================
== gate: probe-matches-compose   (check-probe-matches-compose.py metube)
==============================================================================
probe-matches-compose: 1 app(s), mode: full

probe-matches-compose: OK — every probe dials the port (and, where it can fail, the path) that the app's own compose healthcheck dials

==============================================================================
== gate: probe-measured   (check-probe-measured.py metube)
==============================================================================
probe-measured: OK — 0 probes, each with a measured before/after

==============================================================================
== gate: test-record   (check-test-record.py metube)
==============================================================================
test-record gate — 1 template(s) read, 1 carry a ladder, 0 convicted

==============================================================================
== gate: test-record-move   (check-test-record-move.py)
==============================================================================
test-record-move gate — range origin/main..HEAD: 0 compose file(s) changed

==============================================================================
== gate: onboarding   (check-onboarding.py)
==============================================================================
onboarding gate — 61 checklist ids; 58 template dirs: 53 exempt (published before 2026-10-01), 5 new; 2 exempt app(s) with a record (shape-checked): sparkyfitness, wger
onboarding gate OK

==============================================================================
== gate: family-gate   (check-family-gate.py)
==============================================================================
family-gate: newest baked golden 0.287.0 >= 0.287.0
family-gate gate OK: 2 family-gated template(s) ['grimmory', 'metube']

==============================================================================
== summary
==============================================================================
  image-pins           OK            (exit 0)
  image-resolvable     OK            (exit 0)
  volume-persistence   INCONCLUSIVE  (exit 2)
  engine-major         OK            (exit 0)
  catalog-since        OK            (exit 0)
  copy-i18n            OK            (exit 0)
  probe-matches-compose OK            (exit 0)
  probe-measured       OK            (exit 0)
  test-record          OK            (exit 0)
  test-record-move     OK            (exit 0)
  onboarding           OK            (exit 0)
  family-gate          OK            (exit 0)
UNDETERMINED (never a pass): volume-persistence
catalog_gates exit code = 2
0
