Repoint Luci scheduled REPORT generators to cloud (PKA-Outputs/reports) [non-breaking]
## Goal Repoint Luci scheduled scripts that write REPORTS to `~/workspace/reports` so they write to the cloud outputs tree instead. MC now serves reports CLOUD-FIRST with `~/wor...
StateDoneNext ActionClosedOwnerLuciRuntimeClosedAge4d ago
Ticket is done; runtime is closed.·profile claude_opus_1m_medium
Description
MC-4892
## Goal
Repoint Luci scheduled scripts that write REPORTS to `~/workspace/reports` so they write to the cloud outputs tree instead. MC now serves reports CLOUD-FIRST with `~/workspace/reports` fallback (MC-4867 done), so this is NON-BREAKING — once a generator writes to cloud, MC serves the cloud copy.
## Scope (audit + repoint)
Audit `~/workspace/scripts/*.py` scheduled tasks for actual REPORT (html/md card) writes to `~/workspace/reports`. CONFIRMED writers: `investment_weekly_digest.py`, `sender_intelligence.py`. ALSO CHECK (may write logs not report-cards — only repoint genuine Reports-tab artifacts): `agent_watch.py`, `luci_operator_tuner.py`, `skill_audit.py`, `tailscale_watch.py`. Repoint each report write target to the cloud reports dir via `python3 ~/workspace/PKA/pka_paths.py outputs-dir reports --ensure` (bash) or `import pka_paths; pka_paths.outputs_dir("reports", ensure=True)` (python).
## EXCLUDE (do NOT touch)
- `ceo_dashboard_build.py` — its Drive upload feeds the Safair ReportingData → Mac CEO-dashboard flow; leave it ALONE.
- Anything writing LOGS/state (not Reports-tab artifacts) to workspace/reports.
## Constraints
- Non-breaking; surgical — change ONLY the report write destination, not content/logic. Each generator is independent.
- These are scripts (not MC app.py / control plane). If any change DOES touch mission-control/app.py, mark review-required; Lucienne guarded-deploys. Plain script edits commit normally.
## Verification (before review-required)
- For each repointed generator: a dry/test run writes its report into the cloud reports dir; MC `/reports` lists + serves it (200). List exactly which scripts you repointed and which you left (with reason).
## Terminal-state report REQUIRED: STATUS, 1-line, commit SHA(s), the per-script repoint table + verification, follow-ups. Don't deploy MC.
Activity
done
INTERACTIVE
Luci is working...
Details —
Done
· Medium
· Luci
▼
SState
Done
Closed
PPeople
TTiming / Details▼
api (human)
Mission Control
4d ago
4d ago
Advanced / Operator evidence
RRouting owner
ROperator console
Ticket is done; runtime is closed.MC is visibility-only. Hermes Luci launches and gates work outside MC, then mirrors evidence/status here.
WWorkflow
Start Dev Review + QA ▾
Select phases to include:
Agents
Review Gates
Decision
WAT routing: choose an agent, review gate, or decision. Buttons use the live runtime when one is attached.
[visibility-only] Controller routed this Luci-owned ticket to Hermes Kanban board `mc-internal` card `t_3cecf4fd`. Worker: `codexbuilder`. Evidence: card is running in the isolated worktree named for MC-4892; MC runtime/pickup was not used. MC remains the durable status ledger while Kanban performs implementation.
luci-board-manager4d ago
[visibility-only] Controller recovered internal Kanban card `t_3cecf4fd` after an audit-only false stop. The same card was unblocked with explicit write-enabled implementation instructions and redispatched through Hermes Kanban `mc-internal`; verified run `205` is `running` as `codexbuilder` with PID `3459777` in isolated cwd `/home/lucienne/workspace/state/kanban-worktrees/MC-4892-cloud-reports`. MC remains waiting on `kanban_active:t_3cecf4fd`; MC runtime/pickup was not used.
luci-board-manager4d ago
[visibility-only] Controller gate passed for internal Kanban card `t_3cecf4fd` / run `205`. Verified commit `02a22d73fc7c9536d1f06a4f9dd210027eed3eb0` is pushed to `origin/master` and deployed the four selected scheduled-report scripts into the live workspace checkout: `scripts/investment_weekly_digest.py`, `scripts/luci_operator_tuner.py`, `scripts/sender_intelligence.py`, `scripts/skill_audit.py`. Evidence: `python3 -m py_compile` passed in isolated and live checkouts; import smoke in both checkouts resolves all report writers to `/home/lucienne/gdrive/PKA-Outputs/reports`; `sender_intelligence.py --json` returned valid JSON; live selected files match `origin/master`. The investment digest dry-run still fails on missing `yt_dlp`, which is pre-existing on `origin/master` and not introduced by this change. MC runtime/pickup/send/harvest was not used.