coldpass

joh/when-changed

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Works

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/joh--when-changed.svg).

coding

Works

The recorded run passed on 1 setup.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
Linuxyes

Linux / Haiku 5.5: yes · Oct 27, 2026 · dca07377c510 · claude-code / 2.1.310 (Claude Code)
Recorded operation: <guest-path> -s <guest-path> echo triggered-by-when-changed

Does what it says
1 of 1 claims checked out
  • The -s option runs the command immediately at start: Real input produced the expected result: triggered-by-when-changed

    Source: -s Run command immediately at start

    Input: when-changed -s on an existing file with echo triggered-by-when-changed, bounded by timeout 5

    Expected: command output printed at startup before the watcher is stopped

    Command: timeout 5 <guest-path> -s <guest-path> echo triggered-by-when-changed

    Observed: triggered-by-when-changed

MCP
No
Local or hosted
local
Local: runs on your machine
Needs keys or browser
None seen
Maintained
Abandoned
abandoned: last commit 937 days ago; 0 commits and 0 merged PRs in 90 days; 16 open issues, 3 open PRs; 32 of 49 recent threads got a maintainer reply, median first reply 76.9h; no releases

Last commit Apr 2, 2024

Setup time
4 min 23 s
4 min 23 s to a working result
Issue
none found in recorded check
Cycles
1 of 1 ran as expected
  • A watch cycle runs the command when triggered: Triggered one cycle by hand (start trigger via -s (fake/run-once: no file edit needed); file-change trigger verified by hand in <guest-path>; normal trigger: event loop: observer watches the file; start-run triggers run_command once): triggered-by-when-changed

    Source: whenchanged/whenchanged.py

    Input: -s on <guest-path> with echo triggered-by-when-changed

    Expected: command output printed once at startup while watcher keeps running

    Command: <guest-path> -s <guest-path> echo triggered-by-when-changed

    Observed: triggered-by-when-changed

Evidence
README behavior checked
Agent interfaces
CLI
CLI

Observed interfaces were exercised by the checker. Documentation alone does not confirm compatibility.

Tested with
Claude Code / Haiku 5.5
  • Linux: Claude Code / Haiku 5.5 · agent 2.1.310 (Claude Code) · Checked operation passed · Oct 27, 2026 on dca07377c510

Each entry describes its recorded operation and source revision.

Safety
No unexpected network or file activity found in these checks

No problems traced to this repository code in these checks; a short run cannot prove safety.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

Full event, path and process lists for each observed setup:

Run details

Haiku 5.5

Native agent · Checked operation passed

Checked operation <guest-path> -s <guest-path> echo triggered-by-when-changed

Agent-reported scope: Install when-changed and watch a file so a command runs when it changes (README Usage, -s start run)

Run details
run
joh--when-changed-claude-haiku-5-5-1793086894574214843
date
Oct 27, 2026
time to working
262.7s
product hosting / execution
Local command in the guest
recorded operation scope
product operation
model
claude-haiku-5-5
agent / version
claude-code / 2.1.310 (Claude Code)
platform
linux
reported cost
$0.016875
Recorded source
https://github.com/joh/when-changed
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "dca07377c5102b97ad17923f196a664b00b238df", "url": "https://github.com/joh/when-changed"}
Test version
readme-7b45bc806d9264dc108ae6e1f61f5d665e5494413f227ffc7946c638ea53ee2e
revision
dca07377c5102b97ad17923f196a664b00b238df
Whose fault: not assigned · resolved

Safety: No problems traced to this repository code in these checks.

No problems traced to this repository code in these checks.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • The -s option runs the command immediately at start: Real input produced the expected result: triggered-by-when-changed

    Source: -s Run command immediately at start

    Input: when-changed -s on an existing file with echo triggered-by-when-changed, bounded by timeout 5

    Expected: command output printed at startup before the watcher is stopped

    Command: timeout 5 <guest-path> -s <guest-path> echo triggered-by-when-changed

    Observed: triggered-by-when-changed

Examples

  • Usage example: watch a file and run a command when it changes: Repo has no test suite or finite example; the documented usage is a long-running watcher. Covered by claims/probe (-s start run) and a manual file-modified test in <guest-path> (command ran with WHEN_CHANGED_EVENT=file_modified). README example pdflatex CV.tex not available in guest.

    Source: README.md Usage

    Expected: documented command completes successfully

    Observed: Repo has no test suite or finite example; the documented usage is a long-running watcher. Covered by claims/probe (-s start run) and a manual file-modified test in <guest-path> (command ran with WHEN_CHANGED_EVENT=file_modified). README example pdflatex CV.tex not available in guest.

Cycles

  • A watch cycle runs the command when triggered: Triggered one cycle by hand (start trigger via -s (fake/run-once: no file edit needed); file-change trigger verified by hand in <guest-path>; normal trigger: event loop: observer watches the file; start-run triggers run_command once): triggered-by-when-changed

    Source: whenchanged/whenchanged.py

    Input: -s on <guest-path> with echo triggered-by-when-changed

    Expected: command output printed once at startup while watcher keeps running

    Command: <guest-path> -s <guest-path> echo triggered-by-when-changed

    Observed: triggered-by-when-changed

Local or hosted: local

What the agent did

Install when-changed and watch a file so a command runs when it changes (README Usage, -s start run)

cd <guest-path> && pwd && ls -la && id -u && cat README.md 2>/dev/null | head -c 6000; python3 --version
cd <guest-path> && cat setup.py requirements.txt when-changed .gitignore; ls -la whenchanged .coldpass; git -C . status 2>&1 | head -2; python3 -m venv --help >/dev/null 2>&1 && echo venv_ok
cd <guest-path> && sed -n 1,200p whenchanged/whenchanged.py
cd <guest-path> && sed -n 200,260p whenchanged/whenchanged.py; echo ---; curl -sS -m 10 -o /dev/null -w '%{http_code}\n' https://pypi.org/simple/watchdog/ 2>&1; sudo -n true && echo sudo_ok
mkdir -p <guest-path> && python3 -m venv <guest-path> && <guest-path> install -q --upgrade pip 2>&1 | tail -3; <guest-path> install <guest-path> 2>&1 | tail -5; ls <guest-path> | grep when
mkdir -p <guest-path> && echo hi > <guest-path> && cd <guest-path> && (timeout 6 <guest-path> -s -v a.txt sh -c 'echo ran-$WHEN_CHANGED_EVENT-$WHEN_CHANGED_FILE' > <guest-path> 2>&1 &) ; sleep 2; echo changed >> a.txt; sleep 3; cat <guest-path>; echo rc=$?
cd <guest-path> && (timeout 4 <guest-path> -s <guest-path> echo triggered-by-when-changed > <guest-path> 2>&1 &); sleep 2; cat <guest-path>; sleep 3; pgrep -fa when-changed || echo no_stray_process
mkdir -p <guest-path> && cd <guest-path> && cat > probe.json <<'EOF'
{"kind":"cli","argv":["<guest-path>","-s","<guest-path>","echo","triggered-by-when-changed"],"cwd":"<guest-path>","stays_running":true,"expected_text":"triggered-by-when-changed"}
EOF
cat > claims.json <<'EOF'
[{"kind":"claim","claim":"The -s option runs the command immediately at start","source":"-s Run command immediately at start","input":"when-changed -s on an existing file with echo triggered-by-when-changed","expected":"command output printed at startup","probe_kind":"cli","argv":["<guest-path>","-s","<guest-path>","echo","triggered-by-when-changed"],"stays_running":true,"expected_text":"triggered-by-when-changed","cwd":"<guest-path>"}]
EOF
python3 -I -m json.tool probe.json >/dev/null && python3 -I -m json.tool claims.json >/dev/null && echo json_ok
cd <guest-path> && cat > cycles.json <<'EOF'
{"detected":true,"checks":[{"claim":"A watch cycle runs the command when triggered","source":"whenchanged/whenchanged.py","quote":"if self.run_at_start:","schedule":"event loop: observer watches the file; start-run triggers run_command once","method":"start trigger via -s (fake/run-once: no file edit needed); file-change trigger verified by hand in <guest-path>","input":"-s on <guest-path> with echo triggered-by-when-changed","expected":"command output printed once at startup while watcher keeps running","kind":"cli","argv":["<guest-path>","-s","<guest-path>","echo","triggered-by-when-changed"],"stays_running":true,"cwd":"<guest-path>","expected_text":"triggered-by-when-changed"}]}
EOF
cat > examples.json <<'EOF'
[{"kind":"example","claim":"Usage example: watch a file and run a command when it changes","source":"README.md Usage","reason":"Repo has no test suite or finite example; the documented usage is a long-running watcher. Covered by claims/probe (-s start run) and a manual file-modified test in <guest-path> (command ran with WHEN_CHANGED_EVENT=file_modified). README example pdflatex CV.tex not available in guest."}]
EOF
python3 -I -m json.tool cycles.json >/dev/null && python3 -I -m json.tool examples.json >/dev/null && echo ok; cd <guest-path> && ls -la; ls -la whenchanged
cd <guest-path> && rm -rf build when_changed.egg-info && cat > .coldpass/report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Install when-changed and watch a file so a command runs when it changes (README Usage, -s start run)","operation_scope":"Linux guest, Python 3.12.3 venv at <guest-path>, watchdog 6.0.0, local file only; no browser or credentials needed","steps":["python3 -m venv <guest-path>","<guest-path> install <guest-path> (README uses pip install of GitHub master zip; pinned snapshot installed locally instead)","<guest-path> -s <guest-path> echo triggered-by-when-changed","Manual: append to <guest-path> while `when-changed -v a.txt sh -c ...` runs; command ran with WHEN_CHANGED_EVENT=file_modified and WHEN_CHANGED_FILE set"],"deviations":["README install line uses GitHub master zip; installed from pinned local snapshot instead","No repo tests or finite examples exist, so examples.json records a reason","Manual file-change test used sh -c wrapper; that wrapper is not part of the saved probe","pip build artifacts (build/, egg-info) removed from the workspace"],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":null}
EOF
python3 -I -m json.tool .coldpass/report.json >/dev/null && echo report_ok; ls <guest-path> 2>&1; ls /inputs 2>&1
cd <guest-path> && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | tail -c 4000; echo "rc=${PIPESTATUS[0]}"
cd <guest-path> && grep -n "stays_running\|stays-running\|reason\|deferred" check.py | head -60
cd <guest-path> && sed -n 920,960p check.py; echo ----; grep -n "def run_claim\|def check_claim\|def run_probe\|def run_spec\|def run_until_text\|120" check.py | head -30
cd <guest-path> && sed -n 960,990p check.py
cd <guest-path> && cat > claims.json <<'EOF'
[{"kind":"claim","claim":"The -s option runs the command immediately at start","source":"-s Run command immediately at start","input":"when-changed -s on an existing file with echo triggered-by-when-changed, bounded by timeout 5","expected":"command output printed at startup before the watcher is stopped","probe_kind":"cli","argv":["timeout","5","<guest-path>","-s","<guest-path>","echo","triggered-by-when-changed"],"expected_returncode":124,"expected_text":"triggered-by-when-changed","cwd":"<guest-path>"}]
EOF
python3 -I -m json.tool claims.json >/dev/null && echo ok && cd <guest-path> && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | head -c 3000
cd <guest-path> && python3 -I - <<'EOF'
import json
p='.coldpass/report.json'
r=json.load(open(p))
r['deviations'].append("Claim check wraps the same when-changed -s run in `timeout 5` (exit 124) because the claim runner waits for CLI exit and cannot stop a watcher; the stays_running probe and cycle check run the bare watcher")
r['deviations'].append("Examples: no finite test or example exists; examples.json records a reason, verdict blocked")
json.dump(r,open(p,'w'),indent=1)
print('ok')
EOF
pgrep -f "bin/when-changed" | grep -v $$ >/dev/null && echo "watcher still running" || echo "no watcher running"; ls -A; ls -A .coldpass; <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | grep -o '"valid": [a-z]*\|"status": "[A-Z]*"' | head -3
ps -eo pid,args | grep -E '[/]venv/bin/when-changed' | grep -v 'grep' | head -5; echo "done"