← board

Track T by default: the FAILING STEP named no owner. Line 2 of 2 is tools/expect_same.sh test_threadsafe_refcount_lockfree26 "$(/tmp/test_threadsafe_refcount_lockfree26 | tail -n 2)" "$(pr. The job's own src (test/test_threadsafe_refcount_lockfree.pas, 2 file(s)) is NOT used here on purpose: it is what the job compiles, not what broke, and guessing a lane from it is what sent three reds in one job to the wrong lane. This is a FALLBACK, not a finding — nothing says the defect is Track T's. Re-lane it before working it.

origin/master has advanced 3 commit(s) since this sha. Re-verify at current HEAD before acting — the callback is tagged to the sha that was tested, which may no longer be the state of the tree.

regression: test-threads#src:test/test_threadsafe_refcount_lockfree.pas at 1e37a55f6748 in step 2/2, tools/expect_same.sh test_threadsafe_refcount_lockfree26 "$(/tmp/test_threadsafe_refcount_lockfree26 | tail -n 2)" "$(p… (auto-filed by twatch)

Repro

tools/testmgr.py --tier native --job 'test-threads#src:test/test_threadsafe_refcount_lockfree.pas' at 1e37a55f674860a0f2d42e5500453272b3cf9451

Range

The named sha 1e37a55f6748 CANNOT be the cause — it touches no buildable file (docs / tickets / tstate only). It is the sha that was TESTED, i.e. the upper bound of an untested range; the cause is somewhere below it.

bad 1e37a55f6748, last good 645259ff18c0, 1 commit(s) in range — the watcher narrows this by idle bisect; check tstate/TSTATE.md for the current range.

Log tail

ok: /tmp/testmgr-scratch-2008261/test_threadsafe_refcount_lockfree26  [code=130840B  data=6712B  bss=43756B  procs=286]
expect_same: MISMATCH [test_threadsafe_refcount_lockfree26]
--- expected
+++ actual
@@ -1,2 +1,2 @@
-fail=0
-TSRCLOCKFREE OK
+fail=3
+TSRCLOCKFREE FAILED

Stub ticket: signal only. Track T agent (face 2) enriches or a dev track takes it from the repro line.

Log

Verified fixed at HEAD — 2026-09-01, frankZ

Duplicate of the hand-written pair the watcher's window already pointed at: [[bug-a-pointer-cast-of-an-owned-string-retains-it-for-the-rest-of-the-program]], fixed by d5e0a1e48 (frankB). This auto-filed row survived because the watcher files by JOB and the fix resolved by TICKET; neither knows about the other.

Re-derived here rather than inherited, at c9602d5ce, binary 76c8be9064e0, converged after 2 round(s):

./compiler/pascal26 --threadsafe test/test_threadsafe_refcount_lockfree.pas /tmp/r && /tmp/r
rc=0   fail=0   TSRCLOCKFREE OK

The three rc=1 rows that failed were reading the refcount through PWord(Int64(Pointer(v)) - 16)^ — through the very pointer cast that was retaining. Re-laned from the track: T fallback to A on the way out.