# RUN-057 — no machine-local location left in this tree: the private source folder leaves every default, fourteen gates log their bundle by name, and FELRA's artifacts carry variables where they carried absolute paths

**Arm:** 數學戰士「墜衡」 / AMRAL Research Lab
**Subject:** this tree's own files, scanned for machine-local locations on Neo.K's instruction (2026-10-25) that every private detail goes, in private trees as in public ones
**Tools:** the fourteen gates `src60`–`src73`, `build_source_manifest.py`, the 34 tools and drills that read the private source folder, `build_results.py`, `validate_results_profiles.py`, `audit_drill_anchors.py`
**Logs:** `src60-au2d13.json` through `src73-au2d26.json`, `source-manifest.v1.json`, `results.v1.json`, `results-profiles.json`

**Result.** No measured value changes. Three kinds of location have left the tree; what each file now records in their place is a name or a variable.

1. **Fourteen gate logs** (src60–src73) recorded the absolute path at which the bundle had been unpacked. Each gate now records the bundle's directory name, as src59 has since RUN-056.
2. **Thirty-five tools** defaulted to the private source folder's absolute path. `HZ_SOURCE_DIR`, already the override in most of them, is now the only way in.
3. **FELRA's artifacts** carried the absolute paths of the checker and the obligation. The machine-local prefixes are now variables.

---

## 1. The bundle, by name (src60–src73)

Each gate wrote `"bundle": str(bundle)`, the full path of wherever its bundle was unpacked. That was a session's scratch directory, which is neither the bundle nor anything a reader can open. Each gate now writes `bundle.name`.

All fourteen were re-run on bundles freshly unpacked from their zips, one directory per zip, named after it. Every output equals its archived log in every field except `bundle`. The new logs are those outputs, byte for byte, in the archived files' own line endings.

The drills set `bundle` aside when they compare a planted run with the baseline, so no drill outcome can move. The anchor audit reproduces its archived log exactly.

## 2. The private source folder, by variable (35 files)

Eighteen drills and recheck tools built the source folder's absolute path into the code. Sixteen more read `HZ_SOURCE_DIR` but fell back on the same path, and `build_source_manifest.py` used it as its default.

All thirty-five now read `HZ_SOURCE_DIR` and nothing else. Unset, the variable falls back to the sentinel `HZ_SOURCE_DIR-unset`, so a run stops at a missing file whose name says what to set. This was tested on src05, src07 and src21.

**Spot re-runs with the variable set.** Each output equals its archived log:

- src05;
- src07, given the 2^32 measurement it was run with;
- src13;
- src21.

src06 needs the local engine build, which this checkout does not have. It was not re-run.

`source-manifest.v1.json` now records the folder by its name, `Collatz_OT_Series_Paper`. Regenerated, it differs from the archived manifest in that one field.

## 3. FELRA's artifacts, by variable (7 files)

FELRA writes three absolute paths into each analysis's `analysis_report.md` and `metrics.json`:

- the checker's command;
- the checker's executable path;
- the obligation's path.

In the seven artifacts that carried machine-local prefixes, those prefixes are now `${ELAN_HOME}`, `${LEAN_PROJECT}`, `${Z3_HOME}` and `${TREE}`. The first three are the variables `project.yaml` already uses. `${TREE}` stands for this arm's directory.

The `sha256` beside each path is untouched and still names the file. No file in the tree references these artifacts by hash.

## 4. The prose

- `LEAN-QUEUE.md` named the Lean development by its local path and recorded this machine's free disk space. It now names the Lean tree, `collatz-lean`, and says when compute stopped being a limit.
- `felra/README.md` and `felra/project.yaml` named local paths. They now name the variables and the tree.

## 5. Derived files

- `results.v1.json`, rebuilt: the date and the hash of `build_source_manifest.py` change, nothing else.
- `results-profiles.json` was last written before 6c2d33b. Regenerated, it now lists the two figures 6c2d33b added: detections by a crash and by a time-out.

## What this run does not change

The commits before this one still hold these paths, including a2c25aa, which the thirteen crystallization papers pin. Rewriting history would change every pin after the first affected commit. That decision is Neo.K's, not this arm's.
