agent-file-tools 0.50.0

Agent File Tools — tree-sitter powered code analysis for AI agents
Documentation
# Hashline oracle corpus

This directory is the slice-1 parity boundary for the hashline surface.  The
semantic oracle is `oh-my-pi/packages/hashline` at revision
`45e12e5bb758198a920c6070e7e64cb33b21beac`.  The full revision is repeated in
`manifest.json` and `oracle_revision.txt`; it must not be replaced by a branch
name or a moving dependency.

## Reproducible generation

Regeneration uses only Python 3's standard library.  It does not import AFT,
load a Cargo workspace, access Bun, or read a network checkout:

```text
python3 crates/aft/src/hashline/oracle/regenerate.py
python3 crates/aft/src/hashline/oracle/regenerate.py --check
```

The second command compares every generated byte with the committed files.
The manifest records each output's SHA-256 and the fixture count.  JSONL rows
use sorted keys and one newline per row; this keeps diffs reviewable and makes
byte-for-byte reproduction observable.

## Corpus contract

`fixtures.jsonl` contains the pinned operation corpus.  It has both accepted
and rejected rows for `PUT`, `CUT`, `REM`, and `MV`, plus LF, CRLF, mixed
terminators, BOM, empty files, missing final newlines, BOF, EOF, `$`, gaps,
one-line files, empty-file boundaries, all four repair layers, register
shapes, and mutation-checked negative controls.  Every row records the oracle
revision and exact initial bytes as base64.

The only registered deviation categories are exactly:

1. `block-resolver-span` — native BlockResolver spans may differ for JSX.
2. `strict-exact-byte-verification` — AFT rejects addressed raw-byte drift
   even when normalized oracle text would remain accepted.

The manifest's deviation-control rows are required to fail if either
registered deviation silently disappears.  No third category is permitted.

## xxHash32 parity

`xxhash32_seed_zero.json` contains seed-zero vectors and
`tag_normalization.json` contains raw/normalized tag vectors.  The three
literal anchors in the generator and the Rust unit tests (`empty`, `a`, and
`abc`) are independent cross-language checks.  `xxhash32_vectors.rs` lets the
Rust tests validate every committed digest without a JSON or AFT dependency.
The tag implementation strips only `[ \\t\\r]+` immediately before LF and at
EOF, then renders the low sixteen bits as uppercase hexadecimal.