Repository navigation
docs: AGENTS.md with ponytail + the UNIX philosophy as design doctrine - #32
Merged
Merged
Conversation
WHAT: renames CLAUDE.md to AGENTS.md, symlinks CLAUDE.md back to it (the convention in herdr/ and the workspace root), and adds a Design doctrine section that makes ponytail and the UNIX philosophy the standard a change is judged against here. Also corrects the crate listing, which said five crates when there are ten. WHY: this project is a monitoring daemon, and the two philosophies answer its two recurring questions -- ponytail how much code should exist, UNIX what shape it takes. One file rather than two that drift. Four UNIX rules decide most arguments in a daemon like this one, so they are named rather than left implied. The Rule of Silence is first: a monitor that chatters trains its operator to ignore it, and an ignored monitor is worse than none because it also consumes the belief that something is watching. Composition means alerts are structured events another tool can read, not prose in a dashboard. Separation keeps thresholds in config, never compiled into a collector. Repair means a collector that cannot reach its source says so. The carve-outs are made concrete rather than generic. Anything that deletes is never brief and never autonomous. Detecting ABSENCE is first-class, because our own dgx1 incident had the kernel OOM-kill promtail and the signature was nvidia-smi returning N/A and a scrape gap -- a rule that fires above 90% never fires when the exporter is already dead. And a dispatcher that silently drops an alert manufactures the appearance of health. Carries one monitoring-specific corollary to the leave-a-check rule: a rule that cannot fire is worse than no rule, because it is a promise of coverage that will be believed. Names the one real tension between the two sources -- UNIX says build afresh rather than complicate old programs, ponytail says reuse what is in the codebase -- and resolves it: reuse a component, never widen something that does a different job until it covers yours.
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.
Summary
Makes ponytail and the UNIX philosophy the standard a change is judged against in this repo, rather than background reading.
CLAUDE.md→AGENTS.md, withCLAUDE.mdsymlinked back to it — the convention inherdr/and the workspace root. One file, not two that drift. All existing content is preserved.The two sources answer this project's two recurring questions: ponytail — how much code should exist; UNIX — what shape it takes.
What's in it
The ladder, with a worked example from this repo's own design work. "The monitor should clean up full disks" stops at rung 2:
~/bin/cleanup-stale-targets.shalready encodes the "is this safe to delete" judgement and has been exercised. The correct change is to invoke the existing reaper — one implementation of a destructive decision, never two.Four UNIX rules named, because they settle most arguments in a daemon like this:
Collector/AlertDispatcher+ TOML).Carve-outs made concrete, not generic:
promtail, and the signature wasnvidia-smireturningN/Aplus a scrape gap — a rule that fires above 90% never fires when the exporter is already dead.One monitoring-specific corollary to ponytail's leave-a-check rule: a rule that cannot fire is worse than no rule, because it is a promise of coverage that will be believed.
The one real tension, named and resolved. UNIX says "build afresh rather than complicate old programs by adding new features"; ponytail's rung 2 says "already in this codebase? reuse it." Resolution: reuse a component; never widen something that does a different job until it covers yours. Adding a tenth responsibility to
monitor-corebecause it is already there violates "one thing well" and produces more code than a new crate would.Also corrects the crate listing — it said five crates; there are ten. Each name is already a sentence about one responsibility, which is the evidence this is understood rather than aspirational.
Test plan
Documentation only, no code change. The pre-push hook's full
just check(fmt + clippy-D warnings+ workspace tests) ran green.CLAUDE.mdverified as a symlink resolving toAGENTS.md.🤖 Generated with Claude Code