Skip to content

Adopt hi: record what rune should be, as 155 criteria - #79

Merged
0xLeif merged 3 commits into
mainfrom
feat/adopt-hi
Sep 19, 2026
Merged

0xLeif merged 3 commits into
mainfrom
feat/adopt-hi

Conversation

@0xLeif

@0xLeif 0xLeif commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

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.

  • 155 criteria across 11 families, every one captured with the hi CLI rather than hand-written.
  • INTENT.md carries the product prose and a generated feature index; each hi/*.md opens with its own ## Intent.
  • CI gains a hi check gate, pinned to --version 0.3.3 --locked.
  • intent.html is 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 check fails only on the six structural problems, so this gate
cannot 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.

Mean confidence 97.8
Criteria scored 155
Flagged below 95 17
Confirmed below 85 0

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 --grep and --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 _supervise entry 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 check passes locally (verified: 155 criteria · 11 families · 11 files)
  • CI hi check step passes on a fresh runner
  • Existing gates unaffected
  • Review the criteria themselves: they are the point, and they are a person's words

🤖 Generated with Claude Code

https://claude.ai/code/session_01UcDK2AAqo8w9vjvwA2yitV

0xLeif and others added 3 commits September 16, 2026 16:01
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 corvid-agent left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 corvid-agent left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@0xLeif
0xLeif merged commit f870280 into main Sep 19, 2026
12 checks passed
@0xLeif
0xLeif deleted the feat/adopt-hi branch September 19, 2026 15:16
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.

2 participants