hibi check --write writes into the top of a suspect document. It exists because a reader, human or agent, reads the raw file and trusts it. A flag that lives only in CI output is invisible to that reader.
Stamping is opt-in: a banner is written only under
check --write. Only an enforced claim can put a document into the suspect set. Without --write, check is read-only.What a banner looks like
HIBI:BEGIN v1 <nonce>andHIBI:END v1 <nonce>are the sentinels. They are line-anchored and version-tagged.<nonce>is generated once per repository byhibi initand stored in.claims/config.json; a document that merely quotes the banner format uses a different nonce and is never matched.- The headline is
STALE DOCUMENT — N suspect claim(s) — re-verify before trusting.whereNcounts the body lines. A document whose only notice is its lifecycle getsDOCUMENT STATUS — N notice(s) — re-verify before trusting. - Body lines are one per suspect proposition, sorted by id, in the form
[status] (id) text.statusis side-tagged (code:changed,doc:orphaned,code:moved,behavior:refuted,expired) or a lifecycle value (superseded,archived).textis the live documented sentence.
bannerAction: insert, replace, remove, or noop. Clearing a banner restores the exact pre-banner bytes.
A banner written by an older hibi, whose END line carried a checksum, is still recognized once so that it gets replaced.
Placement and comment style
The banner goes at the top of the file. If the file opens with a--- frontmatter fence, it goes immediately after the fence.
Instruction files
CLAUDE.md, AGENTS.md, .cursorrules, and .github/copilot-instructions.md are loaded into an agent’s context on every turn. For those files the body collapses to one line:
StoreConfig.instructionFiles (a list of globs in .claims/config.json). The per-claim detail comes from hibi check --doc <path>.
Pristine documents
Some documents must never be written: a vendored spec, a third-party README. List globs inStoreConfig.pristine; check --write skips any document that matches. The globs are evaluated at stamp time. Verdicts for a pristine document still appear in the JSON and the exit code.
What the engine writes
The engine owns the region between the sentinels and nothing else. It never edits prose. Older versions also wrote a status key into Markdown frontmatter; that is no longer written, andcheck --write removes a leftover one.
Where to go next
Lifecycle
The
superseded and archived lines that can appear in a banner body.CI and agents
Wiring
check --write and check --doc into CI, hooks, and agent sessions.
