Parent issue: #3747
Split from plan review of #3747 (estimated ~250 lines).
PR stack: this issue's branch should target nikw9944/doublezero-3794 (the previous sub-issue's branch).
- Creates
internal/tailer/tailer.go (shared poll-based tailer with
open + offset + recreate/truncate detection + partial-line buffering).
- Creates
internal/loggingtail/eos.go (show logging last <window> poller
with parse + dedupe + NDJSON output).
- Creates
internal/loggingtail/agent.go (uses tailer.Tailer against
<working-dir>/orchestrator.agent.log; emits typed events).
- Creates
internal/runlog/reader.go (uses tailer.Tailer against
<working-dir>/orchestrator-runlog.json; owns pending-submit maps and
bounded duration rings; exposes ProvisionDurations(window) and
DeprovisionDurations(window)).
- Updates README with EOS-log / agent-log / runlog sections.
Parent issue: #3747
Split from plan review of #3747 (estimated ~250 lines).
PR stack: this issue's branch should target
nikw9944/doublezero-3794(the previous sub-issue's branch).internal/tailer/tailer.go(shared poll-based tailer withopen + offset + recreate/truncate detection + partial-line buffering).
internal/loggingtail/eos.go(show logging last <window>pollerwith parse + dedupe + NDJSON output).
internal/loggingtail/agent.go(usestailer.Taileragainst<working-dir>/orchestrator.agent.log; emits typed events).internal/runlog/reader.go(usestailer.Taileragainst<working-dir>/orchestrator-runlog.json; owns pending-submit maps andbounded duration rings; exposes
ProvisionDurations(window)andDeprovisionDurations(window)).