Read one reply thread

Select one currently qualified exact-root discussion with independent Python and shared Lace rules. No signing key, conversation host, or joinery imports are needed.

Run

With the sibling Lace Python environment prepared, run from the joinery directory:

uv run --project ../lace/python --no-sync python ingredients/thread/thread_reader.py \
  /path/to/export/records --definitions /path/to/export/definitions \
  --issuer "$ISSUER" --scope work --reader "$READER" --root "$ROOT_HASH"

Choose the issuer, scope, public V.…H3 reader, and full root hash explicitly. A public identifier is not proof of key control or permission elsewhere. Optional repeated --signer "$AUTHOR" flags narrow interest within the currently accepted writers; they cannot override a withdrawal.

The completed, unchanged capture supplies canonical <hash>.lace records. Each filename and record is validated; non-.lace metadata is ignored. --definitions supplies approved exact UTF-8 sources:

The repository’s src/ can supply approved definitions. No source is fetched; newline or BOM bytes are not repaired. Qualified selection owns grant currentness, conflict handling, and reader/writer qualification.

One unchanged private memory Lace supplies one complete selection. The compiler and evaluator, not Python, decide qualification. Broad local capture clauses are not network policy. Missing evidence cannot establish global freshness.

Refresh by running on another completed capture. Withdrawals do not alter retained bytes or prior output. Malformed inputs and incomplete operations fail without partial JSON. Reading a reply or patch does not apply it or grant execution authority.

Check

Build joinery or use bundled bin/joinery, then run:

timeout 55s uv run --project ../lace/python --no-sync python tests/thread.py

Checks cover qualified recursion and unavailable/withdrawn intermediate branch cuts, exact source boundaries, tiny limits, and relocated Python/native handoff.