Outcome
Read the latest recorded probe result for each monitored host, with counts, latency and consecutive-failure health.
Before you start
- This read exposes recorded probe health without identity or lifecycle records; verify the exact published service and schema.
Discover identifiers and the current contract
topolo whoami --json
topolo apps --json
topolo actions get app_topolo_status.status.get --detail --json
Parameters
This action accepts an empty JSON object. Do not add guessed organization or workspace selectors.
Prepare and execute
Write your schema-valid input to payload.json. Replace every synthetic fixture identifier with a discovered authorized ID. Validate first; mutation approval is required independently of the transport confirmation flag.
topolo actions validate app_topolo_status.status.get --data @payload.json --json
topolo actions call app_topolo_status.status.get --data @payload.json --json
For MCP, discover the exact action with topolo_get_action, validate with topolo_validate_action, and use topolo_read_action for the unchanged read.
Worked requests and responses
These are captured local responses with synthetic identifiers. They establish handler behavior under the limits below; they are not live execution receipts.
No recorded probes
HTTP 200
Input
{}
Response
{
"generated_at": "2026-10-05T00:00:00.000Z",
"total": 0,
"up": 0,
"down": 0,
"services": []
}
One healthy recorded probe
HTTP 200
Input
{}
Response
{
"generated_at": "2026-10-05T00:00:00.000Z",
"total": 1,
"up": 1,
"down": 0,
"services": [
{
"host": "status-probe.example.test",
"name": "Fixture API",
"group": "fixture",
"status": "up",
"health": "healthy",
"http": 200,
"duration_ms": 0,
"last_checked": "2026-10-05T00:00:00.000Z",
"consecutive_fails": 0
}
]
}
Probe-only public response after private lifecycle writes
HTTP 200
Input
{}
Response
{
"generated_at": "2026-10-05T00:00:00.000Z",
"total": 1,
"up": 1,
"down": 0,
"services": [
{
"host": "status-probe.example.test",
"name": "Fixture API",
"group": "fixture",
"status": "up",
"health": "healthy",
"http": 200,
"duration_ms": 0,
"last_checked": "2026-10-05T00:00:00.000Z",
"consecutive_fails": 0
}
]
}
Interpret the response
- generated_at is serialization time; services[].last_checked is stored probe time. A newer generated_at alone does not prove a fresh poll.
- http is the last recorded HTTP status, duration_ms may be null and health is based on consecutive_fails. Empty services is no recorded data.
- The public response is cached for 15 seconds and contains no incident or maintenance rows.
Effects
- Reads stored probe results without triggering a new check. The response may be cached for 15 seconds.
- The response contains no incident or maintenance records. An empty services array means no recorded probes, not proof that every application is healthy.
Verify
- Compare generated_at, services[].last_checked and services[].host to the intended monitored surface; inspect total, up and down together.
- Health is classified from consecutive failures: healthy at zero, degraded at one or two, unhealthy from three through eleven, dead at twelve or more. HTTP status and health are separate fields.
Recover
Retry the unchanged read after a dependency outage. No rollback is needed; do not start polling merely to turn an empty or stale result into a passing check.
Refused and interrupted requests
Direct identity failures can return HTTP 401 with an English error string; catalog/runtime refusals can use their own structured error envelope. Preserve status and request evidence rather than inventing a shared target error code. Stop on HTTP 403. For HTTP 500 or a lost response after a write, read back retained state before retrying. A stored mutation and its notification attempt are not one atomic transaction.
HTTP 500
Input
{}
Response
Internal Server Error
Retry the unchanged read after a dependency outage. No rollback is needed; do not start polling merely to turn an empty or stale result into a passing check.
Evidence and limits
Real local dependencies
- Status fetch dispatcher, direct authorization branch, lifecycle/read handlers, database adapter SQL and migration-created SQLite tables/triggers
- Public probe JSON and widget builder
- Status polling workflow with a synthetic network response
Simulated or unproven dependencies
- Authenticated identity, permissions, service-token verification and worker-runtime wrapper
- Clock and remote probe HTTP response
- Notification delivery remains unconfigured; durable pending outbox rows do not establish delivered notifications
- SQLite D1 adapter and batch wrapper are local; Cloudflare persistence and live concurrency are not proven
The separate real worker-runtime tests prove allowed and denied read dispatch with synthetic identity validation, including refusal of forged action headers. Environment deployment, native publication and live read-back require separate ordered proof.