[skip-logmind] chore(notify): port off Python import + idempotent fallback (§8.3) - #140
Conversation
PR #137 deleted the Python source tree including `logmind.core.changelog`, and moved top-level `CHANGELOG.md` to `docs/changelog-python.md`. The `notify-agent-skills.yml` workflow relied on both — the next tag push would hard-fail. This change: 1. Vendors `.github/scripts/parse_changelog.py` (~100 LOC, zero non-stdlib deps) reproducing only `extract_sections_between` from the deleted module. Resolves CHANGELOG file from `docs/changelog-python.md` with a fallback to top-level `CHANGELOG.md` for older checkouts (re-runs on pre-#137 tags). 2. Updates the workflow to call the vendored script instead of importing logmind; drops the `pip install logmind==<TAG>` step (and the PyPI-propagation retry dance) since logmind is no longer Python. Anthropic SDK install remains — propose_skill_update.py still needs it. 3. Updates the CHANGELOG URLs in the PR body, TODO context file, and fallback issue body to point at `docs/changelog-python.md`. 4. Adds idempotency to the fallback-issue job. The v1.0.0 release wave (rc1 -> rc2 -> rc3 -> v1.0.0) produced 12 stale fallback issues on thrillmade/agent-skills. New rules: - Same-skill check (any age): if any open from-logmind issue references skills/logmind/SKILL.md, append a comment instead of opening a new one. - Daily-cap (rolling 24h): if any open from-logmind issue with the canonical fallback title was opened in the last 24h, comment instead of opening. - Both checks degrade gracefully -- gh API errors fall through to opening a fresh issue rather than swallowing the signal. Long-term follow-up: replace the vendored script with a `logmind changelog --since <tag>` Go subcommand (queued).
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
|
Claude finished @thrillmot's task in 7m 32s —— View job PR Review: chore(notify) port off Python import + idempotent fallback
🐛 Clud Bug reviewThis round: 0 critical · 0 minor · 0 resolved from prior · 0 still open Found: 0 🔴 / 0 🟡 / 1 🟣 Per-skill scan
Pre-existing findings🟣 [critical-issues-only]: Reasoning
The rest of the diff is clean: the Skills referenced: [critical-issues-only, evidence-based-review, respect-existing-conventions] |
🐛 Clud Bug reviewThis round: 0 critical · 0 minor · 0 resolved from prior · 0 still open Found: 0 🔴 / 0 🟡 / 1 🟣 Per-skill scan
Pre-existing findings🟣 [critical-issues-only]: Reasoning
Skills referenced: [critical-issues-only, evidence-based-review, respect-existing-conventions] |
…y-port-off-python
|
Claude encountered an error after 4m 27s —— View job PR Review: chore(notify) port off Python import + idempotent fallback
|
Per clud-bug-review on PR #140 — `set -euo pipefail` plus a bare `gh issue comment` meant a transient API failure on the idempotency branch would silently drop the signal entirely (no comment, no fresh issue). Wrap the comment in a conditional that falls through to the fresh-issue path on failure. Daily-cap (idempotency rule 2) still bounds duplicate-open churn. [skip-logmind]
|
Claude finished @thrillmot's task in 4m 26s —— View job PR Review: chore(notify) port off Python import + idempotent fallback
The fix from the prior critical finding is correctly implemented. Commit The pre-existing No new findings in this pass. |
🐛 Clud Bug reviewThis round: 0 critical · 0 minor · 0 resolved from prior · 0 still open Found: 0 🔴 / 0 🟡 / 0 🟣 Per-skill scan
Skills referenced: [critical-issues-only, evidence-based-review, respect-existing-conventions] |
…y-port-off-python
|
Claude finished @thrillmot's task in 2m 9s —— View job PR Review: chore(notify) port off Python import + idempotent fallback
No changes to the two PR files since the prior passing review (commit |
🐛 Clud Bug reviewThis round: 0 critical · 0 minor · 0 resolved from prior · 0 still open Found: 0 🔴 / 0 🟡 / 0 🟣 Per-skill scan
Skills referenced: [critical-issues-only, evidence-based-review, respect-existing-conventions] |

Per master plan §8.3. Two-deliverables-in-one: port
.github/workflows/notify-agent-skills.ymloff the now-deadlogmind.core.changelogPython module (PR #137 deleted it) AND add idempotency to thefallback-issuejob so a flapping API can't accumulate dozens of duplicate issues onthrillmade/agent-skills(the v1.0.0 release wave generated 12 such fallback issues — already closed in parallel).Changes:
.github/workflows/notify-agent-skills.yml:logmind.core.changelog(gone after chore: remove Python source post-cutover (#149) #137 merge).scripts/parse_changelog.py(~120 LOC) that readsdocs/changelog-python.md(new path after chore: remove Python source post-cutover (#149) #137) with fallback to top-levelCHANGELOG.mdfor backward compat. Same extract-sections semantics as the old Python module.created:>${CUTOFF}issue search + same-skill check (openfrom-logmindissues withskills/logmind/SKILL.md in:body). If a recent or open fallback for the same skill exists, comment on it rather than opening a new one..github/scripts/parse_changelog.py:logmind changelog --since <tag>Go subcommand in next release, replace this script +python3call with single binary invocation.docs/changelog-python.md:--since v0.6.13 --up-to v0.6.14→ 3,535 chars--since "" --up-to v0.5.10→ 58,357 chars (first-release case)--since v0.7.0 --up-to v0.6.0→ 0 chars (caller-ahead edge)Parallel deliverable — 12 stale fallback issues closed on
thrillmade/agent-skills:#98 #99 #100 #101 #102 #103 #104 #105 #106 #107 #108 #109 (v1.0.0 release wave: rc1 → rc2 → rc3 → v1.0.0).
Verification:
URGENT: must land before next logmind tag release; without this, the next tag fires
notify-agent-skills.ymlwhich then breaks on the missing Python module and re-opens the fallback issue noise pattern.