DiscordChatExporter/docs/plans/2026-06-04-050-feat-compose-tty-live-logs-plan.md
Copilot 14796e9c09 fix(host): stop forcing compose -T so operator logs stream live
podman-compose and docker compose allocate a pseudo-TTY by default;
always passing -T block-buffered export progress. Omit -T for operator
runs and set DCE_COMPOSE_TTY=0 only for cron log append. Adds compose
TTY smokes and cron job env assertion.
2026-06-03 06:23:12 -05:00

44 lines
1.6 KiB
Markdown

---
title: "feat: Allocate compose TTY for live operator scrape logs"
type: feat
status: complete
date: 2026-06-04
origin: /lfg — plan 048 host tee still shows frozen validation logs; yes_general temp grows but podman run -T block-buffers CLI progress
---
# feat: Allocate compose TTY for live operator scrape logs
## Problem
Plan 048 streams host-side compose output via `tee`, but `compose_run_args` always passes `-T` (no pseudo-TTY). Containerized DiscordChatExporter progress lines stay block-buffered when piped, so operator validation logs remain silent for hours during large exports.
## Requirements
| ID | Requirement |
|----|-------------|
| R1 | `compose_run_args` omits `-T` when `DCE_COMPOSE_TTY` is unset or non-zero; passes `-T` only when `DCE_COMPOSE_TTY=0` |
| R2 | `setup-cron.sh` cron job sets `DCE_COMPOSE_TTY=0` (non-interactive log append) |
| R3 | Host smoke asserts default omits `-T` and `DCE_COMPOSE_TTY=0` passes `-T` |
| R4 | Cron smoke asserts installed job includes `DCE_COMPOSE_TTY=0` |
| R5 | `run-all-smokes.sh` passes |
## Implementation
- `scripts/run-discord-scrape-host.sh``compose_tty_flag()` + use in all compose branches; document env in usage
- `scripts/setup-cron.sh` — prefix cron job with `DCE_COMPOSE_TTY=0`
- `scripts/tests/run-discord-scrape-host-smoke.sh` — compose arg capture for `-t`/`-T`
- `scripts/tests/setup-cron-smoke.sh` — grep crontab for `DCE_COMPOSE_TTY=0`
## Verification
```bash
./scripts/tests/run-discord-scrape-host-smoke.sh
./scripts/tests/setup-cron-smoke.sh
DCE_MIN_FREE_MB=0 ./scripts/run-all-smokes.sh
```
## Out of scope
- yes_general catch-up completion
- Container memory limits