Repository navigation
Closed
Labels
P2: mediumMinor bug, missing validation, metric inaccuracyMinor bug, missing validation, metric inaccuracyarchitectureSystemic design improvements that eliminate classes of bugsSystemic design improvements that eliminate classes of bugscomponent:diagnosticsDiagnostics endpoints, dashboard, health, probes, and trace explorerDiagnostics endpoints, dashboard, health, probes, and trace explorerenhancementNew feature or requestNew feature or requestproductionRequired for production readinessRequired for production readinesswork-unitScheduling ticket for one agent runScheduling ticket for one agent run
Description
work-unit: control plane — shared status model and admin status surface
Purpose
Introduce the shared typed status model that the control plane will speak and use it to build the canonical rich admin status surface.
This is the first substrate execution slice under #1306: typed shared status objects, snapshot assembly, and /admin/v1/status payload shape. It is not a generic diagnostics catch-all.
Repo footprint
crates/logfwd-types/src/diagnostics.rsor adjacent status modulescrates/logfwd-io/src/diagnostics.rs- diagnostics serialization / endpoint tests
- contract/doc touch-ups only if payload names must stay aligned with
#1303
In scope
| # | Type | Why included |
|---|---|---|
| #1306 | architecture | owns the shared status substrate and rich status surface |
| #1303 | architecture | payload semantics and vocabulary must match the control-plane contract |
| #1445 | meta | downstream dashboard/API cleanup depends on this typed status surface existing first |
Related metas / phases
- process/pipeline probe truth:
#1413 - input lifecycle status wiring:
#1415 - output lifecycle status wiring:
#1416 - temporary cleanup-wave coordination only:
#1450
Non-goals
- no
/liveor/readyphase-behavior ownership (that stays in#1413) - no pipeline transition extraction (that stays in
#1440) - no input/output lifecycle wiring beyond what is needed to populate snapshot shape
Done when
- typed shared status objects exist for process, pipeline, and component snapshots
-
/admin/v1/statusis built from those shared types rather than ad hoc payload assembly - serialization and endpoint tests lock the payload structure in place
- the implementation no longer depends on the older split represented by closed
#1437
Metadata
Metadata
Assignees
Labels
P2: mediumMinor bug, missing validation, metric inaccuracyMinor bug, missing validation, metric inaccuracyarchitectureSystemic design improvements that eliminate classes of bugsSystemic design improvements that eliminate classes of bugscomponent:diagnosticsDiagnostics endpoints, dashboard, health, probes, and trace explorerDiagnostics endpoints, dashboard, health, probes, and trace explorerenhancementNew feature or requestNew feature or requestproductionRequired for production readinessRequired for production readinesswork-unitScheduling ticket for one agent runScheduling ticket for one agent run
Activity
github-actions commentedon Apr 6, 2026
tl;dr: Outcome A (Ready for implementation) — the codebase currently has no shared status snapshot types and no
/admin/v1/status; this can be implemented mechanically by introducing shared status models inlogfwd-typesand wiring a typed admin status endpoint inlogfwd-io.Recommendation
Implement this issue now as a focused substrate slice:
state,reason, transition timestamp fields,readiness_impact) tologfwd-types./admin/v1/statusin diagnostics server and build payloads from shared types (not ad hocformat!)./healthand/readyfor compatibility, but derive readiness status from the same snapshot model.Findings (evidence)
crates/logfwd-types/src/lib.rs:10-24exportspipeline,diagnostics, etc., but no status module.crates/logfwd-types/src/diagnostics.rs:10definespub struct ComponentStats(counters only), no shared status/state model.crates/logfwd-io/src/diagnostics.rs:484-493router exposes/health,/ready,/api/*; no/admin/v1/status.crates/logfwd-io/src/diagnostics.rs:532-537serve_healthbuilds ad hoc JSON:{"status":"ok",...}.crates/logfwd-io/src/diagnostics.rs:553-567serve_readyreturns only{"status":"ready|not_ready"}.crates/logfwd-io/src/diagnostics.rs:913-1036serve_pipelinesbuilds large JSON viaformat!/string interpolation (not shared typed snapshots).crates/logfwd-io/src/diagnostics.rs:1634-1666ready endpoint tests assertbody.contains(...)instead of schema.crates/logfwd/src/main.rs:932-940(DiagnosticsServer::new,add_pipeline,start)./health+/readyonly:book/src/config/reference.md:453-454book/src/deployment/monitoring.md:14-15book/src/troubleshooting.md:197-198Verification
I validated current readiness behavior with existing tests (confirms current API shape before planning changes):
Detailed Action Plan (mechanical)
Add shared status types in
logfwd-typescrates/logfwd-types/Cargo.tomlserdedependency for derives.crates/logfwd-types/src/status.rs(new)StatusState(lifecycle/status enum)ReadinessImpactStatusSnapshot { state, reason, state_since_unix_ns, reason_since_unix_ns, readiness_impact }ComponentStatusSnapshotPipelineStatusSnapshotProcessStatusSnapshotAdminStatusSnapshotSerialize/Deserialize; use stable field names matching IO_CONTRACTS.md — living contract for I/O and control-plane semantics #1303/meta: I/O control-plane substrate — lifecycle, health, readiness, and status #1306 vocabulary.crates/logfwd-types/src/lib.rspub mod status;.Wire canonical admin endpoint from shared model
crates/logfwd-io/src/diagnostics.rshandle_request(:484-493) with"/admin/v1/status".serve_admin_status(&self, request: tiny_http::Request) -> Result<...>.self.pipelines+PipelineMetricsserde_json::to_stringfrom shared structs (avoid ad hoc status JSON assembly for this surface)./readyresponse behavior (200/503) for compatibility, but derive its decision and status string from the same snapshot source.Lock payload shape with tests
crates/logfwd-types/src/status.rs(or adjacent test module)crates/logfwd-io/src/diagnostics.rstests moduletest_admin_status_endpoint_returns_structured_payload./readystatus and/admin/v1/statusreadiness-derived state do not contradict.:1634-1666) to include structural assertions viaserde_json::Value.Documentation touch-up for endpoint surface
book/src/config/reference.mdbook/src/deployment/monitoring.mdbook/src/troubleshooting.md/admin/v1/statusas canonical structured status surface; clarify/healthand/readyare probe endpoints.Verification command sequence for implementation PR
cargo test -p logfwd-typescargo test -p logfwd-io diagnostics::tests::cargo fmt --allcargo clippy --all-targets -- -D warningsRelated Items
/live,/ready,/admin/v1/status)crates/logfwd-types/src/diagnostics.rs:10ComponentStats)crates/logfwd-io/src/diagnostics.rs:484-493/admin/v1/status)crates/logfwd/src/main.rs:932-940Open PRs in this exact area were not reliably enumerable in this environment due integrity-gated search responses; no directly conflicting approved result was found during this triage.
Note
🔒 Integrity filtering filtered 4 items
Integrity filtering activated and filtered the following items during workflow execution.
This happens when a tool call accesses a resource that does not meet the required integrity or secrecy level of the workflow.
issue_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)issue_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)issue_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)What is this? | From workflow: Issue Triage
Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.
[-]work-unit: logfwd-types + diagnostics — shared status snapshots and admin surface[/-][+]work-unit: control plane — shared status model and admin status surface[/+]strawgate commentedon Apr 7, 2026
Resolved by PRs #1454, #1509. Verified: typed ComponentHealth, ComponentStats, per-pipeline snapshots.