diff --git a/configs/wt-gate/wt-gate-scratch.conf b/configs/wt-gate/wt-gate-scratch.conf new file mode 100644 index 0000000..0de1315 --- /dev/null +++ b/configs/wt-gate/wt-gate-scratch.conf @@ -0,0 +1,4 @@ +# lkraven user tmpfiles: the Worldtree memory gate keeps each batch's harness scratch (scripts/wt-memory-gate-batch +# --keep-data, worldtree-dev 2026-10-17); retention 14 days, cleaned by the user systemd-tmpfiles-clean.timer. +# Install: cp to ~/.config/user-tmpfiles.d/ and `systemctl --user enable --now systemd-tmpfiles-clean.timer`. +d %h/.local/state/wt-memory-gate-batch/scratch 0700 - - 14d diff --git a/scripts/wt-memory-gate-batch b/scripts/wt-memory-gate-batch index cec62fc..4d27bb5 100755 --- a/scripts/wt-memory-gate-batch +++ b/scripts/wt-memory-gate-batch @@ -55,6 +55,7 @@ WT_DEMO_API_CT="${WT_DEMO_API_CT:-worldtree-worldtree-api-1}" WT_LEGACY_MODE="${WT_LEGACY_MODE:-off}" WT_BATCH_LABEL="${WT_BATCH_LABEL:-window-off}" STATE_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/wt-memory-gate-batch" +SCRATCH_BASE="$STATE_DIR/scratch" # kept harness scratch, one dir per batch; outside every git checkout LOCK_FILE="$STATE_DIR/lock" OUT_DIR="$WT_TREE/docs/eval/memory_acceptance_runs" @@ -112,8 +113,14 @@ legacy_args=() if git -C "$WT_TREE" grep -q -e '"--legacy-mode"' "$deployed" -- core/memory_acceptance 2>/dev/null; then legacy_args=(--legacy-mode "$WT_LEGACY_MODE") fi +# --keep-data (worldtree-dev 2026-10-17, thread 01M555JEFQKK2G3WK155P1X9T1): keep the in-process instance's scratch +# (its memory writer/reader logs, records store, SQLite) so a miss can be traced after the batch. It only skips the +# harness's rmtree at stop: the number is the same harness. The scratch lands under $SCRATCH_BASE// via +# TMPDIR (the harness mkdtemp's it; there is no --scratch-root flag), OUTSIDE every git checkout, because worldtree-dev +# commits the run dirs and a SQLite must never ride into the repo. Retention 14 days: lkraven's user tmpfiles rule +# (configs/wt-gate/wt-gate-scratch.conf -> ~/.config/user-tmpfiles.d/), not an rm in this script. cmd=(python -m core.memory_acceptance.live --runs 3 --gate - "${legacy_args[@]}" --label "$WT_BATCH_LABEL" --out "$OUT_DIR") + "${legacy_args[@]}" --label "$WT_BATCH_LABEL" --out "$OUT_DIR" --keep-data) echo "wt-memory-gate-batch $(now)" echo " demo image $image" @@ -139,8 +146,12 @@ if [[ "$run_tree" == "$WT_GATE_TREE" ]]; then fi # ── 4. run ────────────────────────────────────────────────────────────────── -log="$STATE_DIR/$(date -u +%Y%m%dT%H%M%SZ).log" # stderr (progress, errors) +bid="$(date -u +%Y%m%dT%H%M%SZ)" # this batch's id: names the log and the scratch parent +log="$STATE_DIR/$bid.log" # stderr (progress, errors) out="${log%.log}.stdout" # stdout; its last line is the run dir +scratch_parent="$SCRATCH_BASE/$bid" +[[ ! -e "$scratch_parent" ]] || refuse "scratch parent $scratch_parent already exists (the harness needs an empty scratch per batch)" +mkdir -p -m 0700 "$scratch_parent" || refuse "could not create $scratch_parent" echo " log $log" set +e ( @@ -157,6 +168,7 @@ set +e # Remove this only on worldtree-dev's word, and then say so in the run notes. unset ALBOK_SERVICE ALBOK_TOKEN export WORLDTREE_ROOT="$run_tree" + export TMPDIR="$scratch_parent" # the harness's mkdtemp(prefix="wt-tracer-") lands here, and --keep-data keeps it # The editable install maps packages/ to the main tree; put the tree under # test first (identical content is guaranteed by step 2, this keeps it explicit). export PYTHONPATH="$run_tree/packages/worldtree-memory/src${PYTHONPATH:+:$PYTHONPATH}" @@ -174,11 +186,13 @@ if [[ "$rc" -ne 0 || ! -f "$run_dir/trace1.md" ]]; then fi stamp="$(basename "$run_dir")" +kept="$(find "$scratch_parent" -mindepth 1 -maxdepth 1 -type d -name 'wt-tracer-*' -print -quit)" verdict_line="$(grep -m1 -E '^Aggregate label: .*verdict: \*\*(PASS|FAIL)\*\*' "$run_dir/trace1.md" || true)" verdict="$(sed -nE 's/.*verdict: \*\*(PASS|FAIL)\*\*.*/\1/p' <<<"$verdict_line")" echo " run stamp $stamp" echo " verdict ${verdict:-NONE}" echo " line ${verdict_line:-}" +echo " kept scratch ${kept:-} (memory/writer, memory/reader; kept 14 days)" case "$verdict" in PASS) echo "→ report to worldtree-dev today with run stamp $stamp (PASS builds the n)."; exit 0 ;; FAIL) echo "→ report to worldtree-dev TODAY with run stamp $stamp. Do not retry." >&2; exit 1 ;;