Fleet-server plane-log reads: bounded, redacted, read-only
Context
The System diagnostics view (sibling, filed together) needs per-plane logs. No raw-log surface exists on any plane — peer-verified 2026-08-13: an MC production diagnosis ran entirely on log-proxies (REM state, self-heal events, healthcheck counts, tenant-sync states). The fleet-server is the instance's client-facing control plane (S1 #16735 compose service) and runs where the container runtime lives — the one honest home for log reads.
The Problem
Logs are the highest-privilege observability surface: they carry tokens, PATs, request bodies, and identity material. An unbounded or unredacted log verb converts a UX wish into a credential-exfiltration channel. The verb must be born with its bounds — retrofitting redaction onto a shipped log surface is the known losing order.
The Architectural Reality
ai/services/fleet (60 files; FleetTenantService / FleetControlBridge siblings) — the owning folder (structure-map cited this sweep).
- Redaction precedent: PR #17319 — redact BEFORE bound, with the suite proving the order in both directions; the memories-wire
detail sanitization is the pattern to lift.
- Exposure precedent: D#14501's R3-safe control-plane surface; #16856's observe-vs-mutate declaration discipline.
- Topology: the local instance's planes are compose services (
ai/deploy/docker-compose.local-agent-os.yml: chroma, kb-server, mc-server, orchestrator, fleet-server, ingress); a remote instance's own fleet-server serves the same verb — the capability is instance-relative by construction (D#16720: FM connects, FM never runs the plane).
The Fix
One read-only fleet-server verb: bounded tail (line/byte caps + since-cursor pagination) per named plane service. Redaction runs BEFORE bounding (the PR #17319 order) with the credential-pattern scan; authenticated bridge only (S2 #16736 admission); observe-only declared.
Contract Ledger
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
new fleet verb planeLogTail (name at impl.) |
this ticket + #16168 parent |
bounded, cursored, redacted tail per named plane service |
unknown service → named refusal |
verb JSDoc + fleet service docs |
unit suite proves redaction-before-bound both directions |
| plane-service inventory |
instance topology (compose services) |
verb enumerates what the topology names |
non-container plane → honest unavailability |
same |
topology-shape fixture |
| auth ingress |
S2 #16736 admission |
authenticated bridge only; no anonymous route |
refusal |
same |
negative-path spec |
Acceptance Criteria
Out of Scope
Log persistence/search · streaming follow-mode (first cut = cursored pulls) · the System view rendering (sibling) · restart/remediation actuation.
Decision Record
Decision Record impact: none — aligned-with D#14501's exposure-surface precedent and D#16720's client topology.
Related
#16168 (parent) · System-view + instance-switcher siblings (filed together) · PR #17319 (redaction order) · D#14501 · #16856 · D#16720 · #17288 · #16735 (S1) · #16736 (S2).
Live latest-open sweep: latest 20 re-checked 2026-08-18T08:15Z, no equivalent; A2A herd window clean (one unrelated engine claim #17327).
Origin Session ID: ca3c67ac-a3d6-4e93-98e0-c5f7f65011ee
Retrieval Hint: query_raw_memories("fleet server plane log tail bounded redacted read only docker")
Fleet-server plane-log reads: bounded, redacted, read-only
Context
The System diagnostics view (sibling, filed together) needs per-plane logs. No raw-log surface exists on any plane — peer-verified 2026-08-13: an MC production diagnosis ran entirely on log-proxies (REM state, self-heal events, healthcheck counts, tenant-sync states). The fleet-server is the instance's client-facing control plane (S1 #16735 compose service) and runs where the container runtime lives — the one honest home for log reads.
The Problem
Logs are the highest-privilege observability surface: they carry tokens, PATs, request bodies, and identity material. An unbounded or unredacted log verb converts a UX wish into a credential-exfiltration channel. The verb must be born with its bounds — retrofitting redaction onto a shipped log surface is the known losing order.
The Architectural Reality
ai/services/fleet(60 files;FleetTenantService/FleetControlBridgesiblings) — the owning folder (structure-map cited this sweep).detailsanitization is the pattern to lift.ai/deploy/docker-compose.local-agent-os.yml: chroma, kb-server, mc-server, orchestrator, fleet-server, ingress); a remote instance's own fleet-server serves the same verb — the capability is instance-relative by construction (D#16720: FM connects, FM never runs the plane).The Fix
One read-only fleet-server verb: bounded tail (line/byte caps + since-cursor pagination) per named plane service. Redaction runs BEFORE bounding (the PR #17319 order) with the credential-pattern scan; authenticated bridge only (S2 #16736 admission); observe-only declared.
Contract Ledger
planeLogTail(name at impl.)Acceptance Criteria
closeAllConnectionsteardown — the known trap).Out of Scope
Log persistence/search · streaming follow-mode (first cut = cursored pulls) · the System view rendering (sibling) · restart/remediation actuation.
Decision Record
Decision Record impact: none — aligned-with D#14501's exposure-surface precedent and D#16720's client topology.
Related
#16168 (parent) · System-view + instance-switcher siblings (filed together) · PR #17319 (redaction order) · D#14501 · #16856 · D#16720 · #17288 · #16735 (S1) · #16736 (S2).
Live latest-open sweep: latest 20 re-checked 2026-08-18T08:15Z, no equivalent; A2A herd window clean (one unrelated engine claim #17327).
Origin Session ID: ca3c67ac-a3d6-4e93-98e0-c5f7f65011ee
Retrieval Hint:
query_raw_memories("fleet server plane log tail bounded redacted read only docker")