Skip to content

Port hardening easy wins from aeon-dev (notify formatter, compact_logs, verify_output, schedule_clusters, prune_skills)#547

Merged
aaronjmars merged 6 commits into
mainfrom
feat/hardening-easy-wins
Jun 25, 2026
Merged

Port hardening easy wins from aeon-dev (notify formatter, compact_logs, verify_output, schedule_clusters, prune_skills)#547
aaronjmars merged 6 commits into
mainfrom
feat/hardening-easy-wins

Conversation

@aaronjmars

Copy link
Copy Markdown
Owner

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 new ci-tests gate.

Item What it adds Status
§10 notify extraction + formatter Lifts ./notify out of the aeon.yml heredoc into a committed, testable scripts/notify.sh; adds scripts/notify_format.py — Telegram fence-safe chunks, Discord embeds, Slack Block Kit, severity routing (--title/--severity/--link, NOTIFY_MIN_SEVERITY). Backward compatible. 18 tests
§10 compact_logs.py Age-banded log retention planner (keep ≤7d / summarize 8–30d / drop >30d); wired into the reflect skill + /dream distillation discipline. Bounds the one linear-growth memory vector. 5 tests
§9 verify_output.py Deterministic citation gate — extracts cited URLs and (opt-in) confirms they resolve, surfacing dead_citation the LLM scorer misses. Advisory. 10 tests
§10 schedule_clusters.py Cron cache-reuse analyzer — reports cold starts vs reuse if neighbouring skill schedules were clustered. Advisory, never edits schedules. 9 tests
prune_skills.py Skill retirement + sibling analyzer (shared egress host → propagate API fixes). Advisory; core skills exempt. 11 tests

Notes

  • Only the notify change touches the run path (.github/workflows/aeon.yml). It's a behaviour-preserving swap — the workflow now cp scripts/notify.sh ./notify instead of generating it inline; ./notify "msg" and ./notify -f file are unchanged, with embeds/Block Kit/severity as additive upgrades.
  • verify_output, schedule_clusters, prune_skills are standalone advisory scripts (as in aeon-dev); realizing their value is a follow-up (have the scorer/operator call them).
  • Deliberately excluded (not easy wins): §1 egress proxy, §3 issues-as-state, §5 durable chains, §6 capability tiers, §8 financial harness — these need external infra or a permission-model change and stay in aeon-dev.
  • validate_chains.py was left out: it's a trivial CI add, but aeon's chains: block is entirely commented out today, so it's a preventive guard with no payoff until chains are defined.

🤖 Generated with Claude Code

aaronjmars and others added 6 commits June 25, 2026 11:48
…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>
@aaronjmars aaronjmars merged commit 1c04e30 into main Jun 25, 2026
4 checks passed
@aaronjmars aaronjmars deleted the feat/hardening-easy-wins branch June 25, 2026 15:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant