Diagnostics
Pre-flight. Run this half an hour before the meeting, not five minutes before. Everything on this page should read the way the table says before you start clicking.
Backend
Raw /healthz
{
"checks": {
"database": {
"active_policy_version": "v3-unl-real-perframe",
"animals": 51,
"status": "up",
"templates": 88
},
"embedding": {
"http_status": 200,
"status": "up",
"url": "internal service \u0027embedding\u0027 on port 8081"
},
"storage": {
"path": "/repo/data",
"status": "up"
}
},
"enrolment_fusion": "off",
"status": "ok",
"version": "0.1.0"
}
Container-only service addresses in this body are described in prose rather than printed as URLs — the API reports the embedding service by its compose hostname, which resolves nowhere outside the container network.
Addresses
Two different things, and confusing them is what put dead links in front of a phone camera. The server-to-server address is a Docker hostname; the browser-facing one must be something a browser, and a QR scanner, can actually resolve.
api · port 8080
· http
container-only — not reachable from a browser
In production behind herdmark.co.za, set PUBLIC_API_URL to the
public API origin (for example https://api.herdmark.co.za) and
PUBLIC_BASE_URL to the console origin. Without them the console derives the
API address from the host the browser used, which is right for a laptop demo and for a
phone on the same network, and is never a Docker hostname.
Capture gallery
no_match supply for step 4
"In the register" is read live, by matching the gallery's animal identifier and then its label against the register's tag numbers — not from the manifest, which cannot know what was held out and would be wrong about it after a rehearsal on step 2 anyway.
| Burst | Kind | In the register | Expected outcome | Frames | Animal reference |
|---|---|---|---|---|---|
| d302b41c-533d-5f06-b11d-1aa506d13e5c | Second group of frames of the same animal | yes | varies same-session frames — measured across all three bands | 2 | 82db8118 |
| 7361dd50-9a17-5823-b7f2-5c7250399749 | Second group of frames of the same animal | yes | varies same-session frames — measured across all three bands | 2 | 79024f29 |
| d8d77c1e-171b-5e95-895d-7533d4d2ff79 | Second group of frames of the same animal | yes | varies same-session frames — measured across all three bands | 2 | eeafbb9c |
| 5a3eea6a-2146-5fdf-bf6a-be1279585f7a | Second group of frames of the same animal | yes | varies same-session frames — measured across all three bands | 2 | 12a94478 |
| 5036ea7c-360b-57bf-82ea-b19bc7196ef9 | Second group of frames of the same animal | yes | varies same-session frames — measured across all three bands | 2 | 8ddf7bac |
| 35812d4f-9545-55c2-a5af-04e3d3cab3fd | Second group of frames of the same animal | yes | varies same-session frames — measured across all three bands | 2 | f79979cc |
| 133d2cf0-9a04-55fb-9ee6-50715c875fb2 | Second group of frames of the same animal | yes | varies same-session frames — measured across all three bands | 2 | ae33f6f9 |
| dc5c8eda-901b-5054-910d-7bd0ad355bb4 | Second group of frames of the same animal | yes | varies same-session frames — measured across all three bands | 2 | 77a1998e |
| 48e5268b-b195-522a-9281-96c66e66c9f1 | Second group of frames of the same animal | yes | varies same-session frames — measured across all three bands | 2 | b0cccd56 |
| 74bf7523-cd7e-5412-9741-791a828e6bb5 | Second group of frames of the same animal | yes | varies same-session frames — measured across all three bands | 2 | 3e2e89b8 |
| a2b1b46f-6f65-523b-a12b-93105a0a90db | Second group of frames of the same animal | yes | varies same-session frames — measured across all three bands | 2 | b4ed4982 |
| f4d362f2-bfb4-536b-a22f-f8b6f60f18f8 | Second group of frames of the same animal | held out | no_match | 2 | 26d8d544 |
| cb15dab4-364c-5469-8332-bcfc7c10a063 | Original enrollment capture | yes | match | 12 | 82db8118 |
| fdcd991b-455e-5204-a587-3a0f130ab469 | Original enrollment capture | yes | match | 12 | 79024f29 |
| 0b22f1b1-d175-584e-a423-3fb037ba7777 | Original enrollment capture | yes | match | 12 | eeafbb9c |
| 9e641372-13ce-5529-9d59-55bc5ecfb420 | Original enrollment capture | yes | match | 12 | 12a94478 |
| f18a9759-dea4-5d1b-9ccb-10adb1673051 | Original enrollment capture | yes | match | 12 | 8ddf7bac |
| 56474289-36a9-53b3-86a1-2a0f2c10e974 | Original enrollment capture | yes | match | 12 | f79979cc |
| f64fd825-1080-502d-8f71-926e8aa67bfe | Original enrollment capture | yes | match | 12 | ae33f6f9 |
| b463bee5-7288-58e8-a2ba-433184e4ae85 | Original enrollment capture | yes | match | 12 | 77a1998e |
| 458c7587-3943-578f-b3ba-990c2b3741a3 | Original enrollment capture | yes | match | 12 | b0cccd56 |
| 69ec8452-65a7-5558-a4cf-1e3b7ae70d1f | Original enrollment capture | yes | match | 12 | 3e2e89b8 |
| 6b49ef5b-d816-56f1-a373-1306d2c34bfe | Original enrollment capture | yes | match | 12 | b4ed4982 |
| 1978d960-7458-5a7f-9f7e-636d9270f3ee | Original enrollment capture | held out | no_match | 12 | 26d8d544 |
Reference data discovered
These endpoints are not pinned by the contract, so they are best-effort. If they are empty the
enrollment form falls back to free-text identifier fields, and you can pin the demo records
with DEMO_OWNER_PARTY_ID, DEMO_HOLDING_ID,
DEMO_OPERATOR_ID, DEMO_LIEN_ANIMAL_ID, DEMO_CERT_ID and
DEMO_TRANSFER_TO_PARTY_ID.