Skip to content

Adopt hi: record what let should be, as 156 criteria - #9

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 let should be, as plain sentences with
permanent ids, so tickets and specs can be generated from them instead of written alongside them.

  • 156 criteria across 10 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 96.7
Criteria scored 156
Flagged below 95 28
Confirmed below 85 2

Full triage across all 11 repos: https://claude.ai/artifact/G6TzEz3HHgGsHFH5r2DRHn

Corrected before this PR

  • GUARD-1 — rewritten. Was: Chat transcripts are never read out, whatever I ask for.

    Now: Finding, showing or opening a chat transcript gives me its size and age, never its contents.
  • WIRE-2 — rewritten. Was: Run by a person at a terminal, the same answers read plainly without a JSON parser.

    Now: A person reading the terminal gets the answer without piping it through a JSON parser.

Deliberately left out

I left out the development and release machinery, which is about building let rather than using it: the fledge lanes and tasks, spec-sync module contracts, augur risk scoring, attest provenance, the Trust CI workflow, biome/tsconfig/bun lockfile conventions, and the "do not use em-dashes" style rules. I left out the internal architecture as architecture — adapter registries, ScanContext, card factories, id-hash formulas, merge overlay field priority, the path-prefix attribution table — keeping only the person-visible consequences (one entry per checkout, stable identity, credited to the right agent). I left out the design document's unbuilt roadmap (loops, handoffs, learnings, draft-skill generation, SQLite memory schema and migrations, a tools registry, MCP write tools, the index cache, a watcher daemon) because criteria should describe wants for this product, and these are speculative enough that I could not tell which are still wanted. I also skipped the .worktrees/fleet-web checkout, which is a duplicate working copy of the repository rather than product surface, and the npm/GitHub publish gating, which is a release decision rather than a behaviour anyone experiences.

Could not work out the intent for

Superskills are unclear: let super can list, read and generate an example recipe of shell commands, but nothing runs one, and the design hints at step graphs with skill references and validation — I could not tell whether the intent is an executable runtime or deliberately just a readable card, so I wrote it as "write down a recipe and list it later". The corvid host appears in the host list, the attribution table and the worktree bases, but no adapter surfaces anything for it, so I could not tell whether corvid-agent is meant to be a first-class host or a placeholder. Project-scope notes require a git repository, which reads more like an implementation constraint than a want, so I did not encode it. The Fleet dashboard's local process probe is the least settled part: it inspects a bounded descendant process tree and infers operation labels from command lines, and I could not tell how far that inference is supposed to go before it becomes guessing. Finally, let history and let web overlap in purpose (both answer "what has been happening across my machine") and I kept them as separate feature areas, but they may be intended as one idea with two faces.

Test Plan

  • hi check passes locally (verified: 156 criteria · 10 families · 10 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:00
156 criteria across 10 families, captured with the hi CLI rather than written by
hand, saying what let 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: c2487d7fa7975e09b57f31ceaa99973c64fd3566 · author 0xLeif

#788 anti-pattern: ~156 criteria reverse-engineered from existing code (“Adopt hi: record what let should be, as 156 criteria”). Permanent ids on unconfirmed sentences; missing wants stay invisible.

Required path: draft → confirm-with-humans → capture only confirmed lines. Prefer the paired seed habit PR (let#10). Please close or rewrite without bulk reverse-engineered 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 c2487d7 (156 criteria).

Expect human rewrite/retire/replace ids; not treating reverse-engineered AC as final product truth.
No merge by CoS.

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