Port hardening easy wins from aeon-dev (notify formatter, compact_logs, verify_output, schedule_clusters, prune_skills)#547
Merged
Conversation
…nel formatter Port hardening §10 from aeon-dev. The ./notify command was an inline heredoc in aeon.yml; lift it to a committed, version-controlled, testable scripts/notify.sh (workflow now cp's it into ./notify). Adds scripts/notify_format.py: per-channel rendering (Telegram fence-safe 3900-char chunks, Discord embeds, Slack Block Kit), severity routing (--title/--severity/--link, NOTIFY_MIN_SEVERITY gate). Backward compatible: ./notify "msg" and ./notify -f file unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Port compact_logs.py from aeon-dev — an age-banded retention planner (keep ≤7d / summarize 8–30d / drop >30d) so the context reflect loads each run stays bounded as logs grow (~2MB/yr, the only linear-growth memory vector). Wire it into the reflect skill plus the /dream distillation discipline (compress · de-contradict · verify before promoting). stdlib-only, 5 unit tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ning §9) Port verify_output.py from aeon-dev. Extracts cited URLs from a skill's output and (opt-in --check) confirms they resolve, surfacing a dead_citation flag the LLM scorer can't catch. A deterministic ground-truth check that runs before the model grader. stdlib-only, advisory (exit 0), 10 unit tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…dening §10) Port schedule_clusters.py from aeon-dev. Groups enabled skills' daily cron fire-times into prompt-cache windows and reports cold starts vs reuse if neighbours were clustered. Advisory only — never edits schedules. stdlib+PyYAML, 9 tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Port prune_skills.py from aeon-dev. Pure helpers: retirement_candidates() flags enabled-but-never-run / chronically-low-scoring / dormant skills (core skills exempt); find_siblings() returns skills sharing an egress host so an API fix can propagate. Advisory; CLI assembles records from aeon.yml + cron-state + skill-health. 11 tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Runs the 6 committed test suites (notify_format, notify, compact_logs, verify_output, schedule_clusters, prune_skills) on PRs touching scripts/ or aeon.yml — same gate shape as the other ci-*.yml. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ports the five low-risk, high-value items from
aeon-dev's hardening roadmap that are self-contained, independently tested, and don't drag in the keystone infrastructure (egress proxy / issues-as-state). Each lands as its own commit so any can be reverted in isolation. All 6 test suites pass locally and run in the newci-testsgate../notifyout of theaeon.ymlheredoc into a committed, testablescripts/notify.sh; addsscripts/notify_format.py— Telegram fence-safe chunks, Discord embeds, Slack Block Kit, severity routing (--title/--severity/--link,NOTIFY_MIN_SEVERITY). Backward compatible.compact_logs.pyreflectskill +/dreamdistillation discipline. Bounds the one linear-growth memory vector.verify_output.pydead_citationthe LLM scorer misses. Advisory.schedule_clusters.pyprune_skills.pyNotes
.github/workflows/aeon.yml). It's a behaviour-preserving swap — the workflow nowcp scripts/notify.sh ./notifyinstead of generating it inline;./notify "msg"and./notify -f fileare unchanged, with embeds/Block Kit/severity as additive upgrades.verify_output,schedule_clusters,prune_skillsare standalone advisory scripts (as inaeon-dev); realizing their value is a follow-up (have the scorer/operator call them).aeon-dev.validate_chains.pywas left out: it's a trivial CI add, butaeon'schains:block is entirely commented out today, so it's a preventive guard with no payoff until chains are defined.🤖 Generated with Claude Code