Amboras evidence

Raw, unedited output of the verification scripts, regenerated on every deploy and nightly. Last run: 2026-09-05T17:05:52+00:00. The checks that need the host (gates, probe, DDL, secret sweep, listeners, units) are here because a browser cannot run them; the storefronts themselves are public.

# Amboras evidence
generated: 2026-09-05T17:05:52+00:00
host: edward   booted: 2026-08-16 23:20:22
commit: 9ff69fead8fb5696d361d127f26131863d112ab1  (2026-09-05T16:45:11+00:00 Prompt 6: one photo, many pictures)
working tree: 28 uncommitted change(s); origin/main: 9ff69fe

## bin/gates.sh (the seven build-brief gates + Wave 2 checks)
== Gate 1 infra
  PASS  psql connects
  PASS  redis PING=PONG
  PASS  pg+redis loopback only
== Gate 2 medusa
  PASS  admin UI /app HTTP 200
  PASS  store API product: Medusa Shorts
== Gate 3 spec-service
  PASS  create tenant gate-probe HTTP 409 (201 new / 409 exists: one probe tenant, never one per run)
  PASS  v13 round-trips canonically identical
  PASS  v14 live (live=14), v13 unchanged
== Gate 4 renderer
  PASS  a: <title>Northwind Goods — Everyday things, made well / b: <title>VOLTLINE — Training apparel differ
  PASS  all six block types render on a
  PASS  real Medusa products on a (4 cards)
== Gate 5 agent
  PASS  newest successful agent build: orbit-books (5 products)
  PASS  storefront renders 5 products (any variant), palette vars=3, images=5
== Gate 6 exposure
  PASS  public console asks for auth (HTTP 401)
  PASS  public storefront orbit-books HTTP 200
  PASS  medusa admin NOT reachable off-box (got '000')
== Gate 7 persistence
  PASS  4 units enabled=4 active=4, linger=yes
  PASS  compose restart policy unless-stopped x2
== Wave 2 (layout variants · testimonial integrity · revision)
  PASS  legacy social_proof renders the sample-content marker on a (block=1 text=2)
  PASS  ethiopia and orbit-books home skeletons differ
        ethiopia:    hero/split > product_grid/ledger > pull_quote/banner > rich_text/note
        orbit-books: offer_bar/strip > hero/full_bleed > product_grid/ledger > pull_quote/banner > faq/plain
  PASS  no invented attributions on the two agent stores
  PASS  reviews endpoint answers HTTP 200
  PASS  newest revision: ethiopia v3 -> v4, base still readable (HTTP 200)
        (variant exhaustiveness is a build-time property: run bin/probe-variant-exhaustiveness.sh)
== Prompt 6 (one photo, many pictures)
  PASS  upload route on a store host -> HTTP 404
  PASS  upload over 10 MB -> HTTP 413
  PASS  upload of a PDF -> HTTP 415
  FAIL  console store page offers Add photo per product (0)  (0)
  PASS  newest photos job: gate5-1433 gate5-1433-hand-thrown-stoneware-mug -> 2 picture(s), 0 credits, failures: lifestyle,banner
        catalogue  local  object region 158872 px  mean |diff| = 0.0000/255  OK
        detail     crop of source  434281 px  mean |diff| = 0.0000/255  OK
        checked 2 picture(s); worst 0.0000/255; credits_used 10; api_calls (last run) 2; failures 2
  PASS  object pixels unchanged in every produced picture (< 2/255)
  PASS  re-run on the same photo: credits_used=0, files unchanged (197aa9a06b30), api_calls=2 (retries only for pictures that do not exist yet)
== Prompt 7 (category research brief)
        research egress allowlist: http://100.95.159.55:7779  https://r.jina.ai  https://s.jina.ai
        refused  https://example.com/  (refusing to fetch https)
        refused  https://www.abebooks.com/  (refusing to fetch https)
        refused  http://100.111.71.48:4101/tenants  (refusing to fetch http)
        PASS  every non-allowlisted origin refused before any I/O
  PASS  research fetch wrapper refuses every non-allowlisted origin before I/O
  FAIL  newest completed research job  (none)
  FAIL  newest brief-grounded build: none v used brief v; spec note: ""  (no build with a brief)

GATES: 30 passed, 3 failed
exit=1

## bin/probe-variant-exhaustiveness.sh (an unimplemented layout variant must fail the renderer build)
PASS  unimplemented variant fails the renderer typecheck:
src/components/blocks/Hero.tsx(57,26): error TS2345: Argument of type '"unimplemented_probe"' is not assignable to parameter of type 'never'.
exit=0

## platform.tenant_live (live set: join table with weights, not a single pointer)
               Table "platform.tenant_live"
  Column   |     Type     | Collation | Nullable | Default 
-----------+--------------+-----------+----------+---------
 tenant_id | uuid         |           | not null | 
 spec_id   | uuid         |           | not null | 
 weight    | numeric(6,4) |           | not null | 1.0000
Indexes:
    "tenant_live_tenant_id_spec_id_pk" PRIMARY KEY, btree (tenant_id, spec_id)
Foreign-key constraints:
    "tenant_live_spec_id_store_specs_id_fk" FOREIGN KEY (spec_id) REFERENCES platform.store_specs(id)
    "tenant_live_tenant_id_tenants_id_fk" FOREIGN KEY (tenant_id) REFERENCES platform.tenants(id)

rows:
a  v2  weight=1.0000
b  v1  weight=1.0000
ethiopia  v4  weight=1.0000
gate-21433  v2  weight=1.0000
gate-23566  v2  weight=1.0000
gate-23591  v2  weight=1.0000
gate5-1433  v1  weight=1.0000
gate-probe  v14  weight=1.0000
noimg  v1  weight=1.0000
orbit-books  v4  weight=1.0000
smoke  v1  weight=1.0000

## platform.store_specs (append-only: the service has no UPDATE/DELETE path for versions)
                           Table "platform.store_specs"
   Column   |           Type           | Collation | Nullable |      Default      
------------+--------------------------+-----------+----------+-------------------
 id         | uuid                     |           | not null | gen_random_uuid()
 tenant_id  | uuid                     |           | not null | 
 version    | integer                  |           | not null | 
 spec       | jsonb                    |           | not null | 
 created_by | text                     |           | not null | 
 note       | text                     |           |          | 
 created_at | timestamp with time zone |           | not null | now()
Indexes:
    "store_specs_pkey" PRIMARY KEY, btree (id)
    "store_specs_tenant_version_uq" UNIQUE CONSTRAINT, btree (tenant_id, version)
Foreign-key constraints:
    "store_specs_tenant_id_tenants_id_fk" FOREIGN KEY (tenant_id) REFERENCES platform.tenants(id)
Referenced by:
    TABLE "platform.tenant_live" CONSTRAINT "tenant_live_spec_id_store_specs_id_fk" FOREIGN KEY (spec_id) REFERENCES platform.store_specs(id)

grep for update/delete on store_specs in the service layer:
  none

## version ledger, agent-built stores
ethiopia:
  v4  live=true  2026-09-05T15:49:11.188Z  agent-worker  agent revision; 0 product(s) added, 2 page(s)
  v3  live=false  2026-09-05T15:45:33.653Z  agent-worker  agent publish; 4 product(s), 2 page(s)
  v2  live=false  2026-09-05T15:16:52.025Z  agent-worker  images: 4 products, 2 hero
  v1  live=false  2026-09-05T02:11:53.383Z  agent-worker  agent publish; 4 product(s), 2 page(s)
orbit-books:
  v4  live=true  2026-09-05T16:10:45.311Z  agent-worker  agent publish; 5 product(s), 2 page(s)
  v3  live=false  2026-09-05T15:47:25.434Z  agent-worker  agent publish; 5 product(s), 1 page(s)
  v2  live=false  2026-09-05T15:17:13.044Z  agent-worker  images: 5 products, 2 hero
  v1  live=false  2026-09-05T03:00:32.341Z  agent-worker  agent publish; 5 product(s), 2 page(s)

## Zod rejection (spec-service must answer 422 to an invalid document, nothing stored)
HTTP 422; versions before=4 after=4; detail: ✖ Too small: expected array to have >=1 items   → at pages ✖ a page with slug "home" is required (it renders at /) 

## cross-tenant cart isolation (a cart on ethiopia's sales channel, presented to orbit-books via the same cookie)
cart cart_01M1S8HK943A2BX7W531FRHKF7 (channel sc_01M1QN9XB69Y9RRXTW342NXKQS): ethiopia /cart HTTP 200; orbit-books /cart HTTP 404; orbit-books /checkout HTTP 404  (expected 200 / 404 / 404)

## research egress (Prompt 7): allowlist + refusal proof; the VPS relay forwards only to r.jina.ai
research egress allowlist: http://100.95.159.55:7779  https://r.jina.ai  https://s.jina.ai
refused  https://example.com/  (refusing to fetch https)
refused  https://www.abebooks.com/  (refusing to fetch https)
refused  http://100.111.71.48:4101/tenants  (refusing to fetch http)
PASS  every non-allowlisted origin refused before any I/O
exit=0
relay listener on the VPS: 0
unknown (1 = up)

## research briefs, agent-built stores
ethiopia:
orbit-books:

## secret sweep by VALUE across the whole git history (counts, never values)
  ANTHROPIC_API_KEY (len 108): 0 occurrence(s) in history
  RECRAFT_API_KEY (len 64): 0 occurrence(s) in history
  POSTGRES_PASSWORD (len 48): 0 occurrence(s) in history
  MEDUSA_PUBLISHABLE_KEY (len 67): 0 occurrence(s) in history
  JWT_SECRET (len 64): 0 occurrence(s) in history
  COOKIE_SECRET (len 64): 0 occurrence(s) in history
  MEDUSA_ADMIN_PASSWORD (len 20): 0 occurrence(s) in history
  CONSOLE_BASIC_AUTH_PASSWORD (len 16): 0 occurrence(s) in history
  tracked .env files: 0

## listeners (only the renderer may be non-loopback)
State  Recv-Q Send-Q               Local Address:Port  Peer Address:PortProcess
LISTEN 0      4096                     127.0.0.1:15432      0.0.0.0:*          
LISTEN 0      4096                     127.0.0.1:16379      0.0.0.0:*          
LISTEN 0      511                      127.0.0.1:4101       0.0.0.0:*          
LISTEN 0      511                      127.0.0.1:4100       0.0.0.0:*          
LISTEN 0      511                  100.111.71.48:4102       0.0.0.0:*          

## units + linger
  amboras-commerce: enabled=enabled active=active
  amboras-spec-service: enabled=enabled active=active
  amboras-renderer: enabled=enabled active=active
  amboras-agent-worker: enabled=enabled active=active
  timers: amboras-backup.timer amboras-evidence.timer 
  linger: yes

## public exposure
  console https://amboras.phillyshell.cloud/ -> HTTP 401 (401 = basic auth)
  medusa admin :4100 from another tailnet host -> HTTP '000' (000 = connection refused, expected)

Previous runs