Luci · Caveman mode on. Code change → dev-loop first per har
Luci
Caveman mode on. Code change → dev-loop first per hard rule.
Luci
Tier 2. Investigate ccgram repo + installed location.
Luci
Repo has fork remote. Installed path check empty — find real installed location.
Luci
Fix already committed in repo (d6ba229). Check installed dir contents + whether running ccgram uses repo or uv tool.
Luci
Editable install → running code IS repo source `~/workspace/ccgram/src`. Fix d6ba229 already committed. Verify it's correct + present in working tree.
Luci
Fix committed on branch with tests. Verify working-tree source content + clean status + that editable install loads repo.
Luci
Editable .pth loads repo src → running ccgram uses fixed source. Read fix region + run test.
Luci
Helper `_effective_reply_to()` correct. Verify `_start_streaming` uses it + run tests.
Luci
Both send paths fixed. Test collection failed — check why.
Luci
System python can't see ccgram (installed in py3.14 uv env). Run with PYTHONPATH=src.
Luci
40 passed (incl MC-3921 cases). Confirm branch upstream/push target for durability.
Luci
Fix on fork (conrelma) across branches incl luci-main. Durable. Check if any reinstall script does a non-editable `uv tool install` that would clobber it.
Luci
Check the ccgram-update-check task — if it auto-upgrades from upstream/PyPI it would clobber the fork fix. That's the real durability risk.
Luci
Update-check is notify-only (no auto-upgrade). Real clobber risk = the `/upgrade` handler. Check what it installs.
Luci
`/upgrade` = `uv tool upgrade` → rebuilds from editable fork source (keeps fix). Notify-only update check. Fix durable. Last check: is the *running* ccgram process new enough to have loaded d6ba229 (May 21)?
Luci
Running process (started May 22) loaded fix (committed May 21). **Fix is live, durable, tested.**
Summary:
- **Bug fix already landed** — commit `d6ba229` (May 21) adds `_effective_reply_to()`: when `thread_id` set, `reply_to None`, `thread_id != 1` → `reply_to_message_id = thread_id`. Wired into **both** send paths (`_send_kwargs` legacy/edits + `_start_streaming` sendMessageDraft). `telegram_draft.py:337-348`.
- **Tests green** — 40 passed incl MC-3921 cases (`tests/ccgram/test_telegram_draft.py`).
- **Durability solved better than the ticket asked** — install is **editable** from `~/workspace/ccgram` (`direct_url.json: editable=true`), so running ccgram loads repo source directly. Fix committed + pushed to fork (conrelma/ccgram) on `luci-main` + feat branches. The monkey-patch-on-installed-file concern is obsolete.
- **No automated path clobbers it**: `ccgram-update-check` is notify-only (Elmar gates upgrades); `/upgrade` = `uv tool upgrade` which rebuilds from the editable fork source. Only a manual `uv tool install --force ccgram` from PyPI would drop it — not part of any automated path.
- **Live** — ccgram.service started May 22, after the May 21 commit → fixed code loaded.
No new code needed; ticket was a stale backlog item whose fix shipped May 21 but never got closed. Optional-only remainder = upstream PR to third-party `alexei-led/ccgram` (external, not required for durability, not doing unilaterally).
Reporting done.