Adopt hi: record what rune should be, as 155 criteria - #79
Conversation
155 criteria across 11 families, captured with the hi CLI rather than written by hand, saying what rune should be for the people who use it. Criteria are directions, not a status report. A criterion that is false today means the code has not arrived yet, not that the criterion is wrong, so nothing here records whether anything is built. Every criterion was scored for accuracy against this repository's own evidence. Anything a second independent auditor confirmed below 85 was rewritten or retired before this commit. CI gains a `hi check` gate. It fails only on structural problems in hi/*.md and never on unfinished intent, so it cannot go red because somebody wrote down a want that is not built yet. hi is pinned to 0.3.3 --locked. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UcDK2AAqo8w9vjvwA2yitV
0.4.0 closes four ways hi could break its only promise, that an id is permanent and never reused. Three were silent, with `hi check` reporting no problem: a retire that landed the criterion outside every section hi reads and freed its id for reuse, a retire reason that could forge a criterion and burn an id nobody wrote, and a criterion inside a fence that was invisible to all six checks. The fourth lost concurrent captures to a shared temp path. This gate exists to protect id integrity, so it should not run on the version that could not. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UcDK2AAqo8w9vjvwA2yitV
0.5.0 changes what `hi check` reads: a file in hi/ whose name is not lowercase is hi's own rather than criteria, and a criterion-shaped line inside one is reported as stray-criterion rather than parsed. Pinning an older version checks these files with rules the tool no longer has. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
corvid-agent
left a comment
There was a problem hiding this comment.
Verdict: REQUEST_CHANGES
Head: 8b6be6812182c251cc287d4c49e3a47d0be20621 · author 0xLeif
#788 anti-pattern: ~155 criteria reverse-engineered from existing code (“Adopt hi: record what rune should be, as 155 criteria”). No paired seed-habit PR on this pass — still RC the reverse-engineer. Confidence audits against the repo do not substitute for human-confirmed intent.
Required path: draft criteria for a real ask → show a human and stop → hi capture only confirmed lines. Prefer a seed “Add: the hi habit…” AGENTS.md PR first if hi/ is empty; do not land bulk invented criteria.
corvid-agent
left a comment
There was a problem hiding this comment.
CoS APPROVE as first-pass draft for human migrate (Leif 2026-09-17).
hi check exit 0 on tip 8b6be68 (155 criteria).
Expect human rewrite/retire/replace ids; not treating reverse-engineered AC as final product truth.
No merge by CoS.
Summary
Adopts hi to record what rune should be, as plain sentences with
permanent ids, so tickets and specs can be generated from them instead of written alongside them.
hiCLI rather than hand-written.INTENT.mdcarries the product prose and a generated feature index; eachhi/*.mdopens with its own## Intent.hi checkgate, pinned to--version 0.3.3 --locked.intent.htmlis gitignored.These are directions, not a status report. A criterion that is false today means the code has
not arrived yet, not that the criterion is wrong. Nothing here records whether anything is built;
that layer belongs to spec-sync.
hi checkfails only on the six structural problems, so this gatecannot go red because somebody wrote down a want that is not built yet.
Accuracy audit
Every criterion in this repo was scored against its own evidence (README, docs, CLI surface, tests,
specs), and every line scoring below 95 was re-examined by a second independent auditor.
Full triage across all 11 repos: https://claude.ai/artifact/G6TzEz3HHgGsHFH5r2DRHn
Deliberately left out
I left out everything that is about building rune rather than using it: the fledge task lanes, the spec-sync change lifecycle, the augur/attest trust gates, the CI and publish workflows, the release-version synchronization scripts, and the measurement harnesses under
harnesses/. Those shape how the repository is worked on, not what someone gets from the product. I also left out the internal architecture as architecture — the detached supervisor, the single-threaded event loop, the transcript rotation mechanics, the UTF-8 stream decoder, the screen renderer's ECMA-48 conformance — and kept only the outcomes a user would name (a session survives, the transcript stays bounded, the screen looks like the screen). The distribution story (the Homebrew tap, and the fact that the unqualified gem name on RubyGems.org belongs to an unrelated package) is real product surface but did not fit any coherent feature family without inventing one for a single want, so it is not represented. The many review/contract-design working documents at the repo root (CONTRACT_DESIGN_1-7, REVIEW_FINDINGS_, RELEASE_) are deliberation records rather than intent, and I read them only as evidence.Could not work out the intent for
Two things I could not resolve into a clean want. First, the boundary between
rune session read --grepand--screen: the docs record that there is no content search that agrees with what is displayed, that grepping the screen was considered and rejected, and that this is a known hole — so the intent is clearly "find a line in a long transcript", but whether somebody eventually wants "search what is on screen" is genuinely undecided in the repository, and I did not write a criterion for it. Second, the_superviseentry point and the newline-delimited JSON control socket sit on the line between implementation and surface: AGENTS.md advertises the socket as something a non-Ruby client can drive directly, and the contract declares socket verbs as first-class, but no documentation tells an outside client how to speak it, so I could not tell whether "a non-Ruby program can drive a session directly" is a promise or an accident of the design. I wrote it as a want on the basis of the contract tables; that one may be wrong.Test Plan
hi checkpasses locally (verified:155 criteria · 11 families · 11 files)hi checkstep passes on a fresh runner🤖 Generated with Claude Code
https://claude.ai/code/session_01UcDK2AAqo8w9vjvwA2yitV