test/test.sh asserts lines like '{"path":"a b.md","state":"held","holder":"hh",...' by substring. Every line is also validated against the schema, which is the real contract, so the substring checks over-specify key order. A tiny jq-free field extractor (python3 -c is already a dependency of the tests) asserting on parsed fields would make the suite robust to output reordering while keeping the schema validation as the structural guard. Also: 700 lines of script-global state; a failing case can leak a cwd or env var into the next.
test/test.shasserts lines like '{"path":"a b.md","state":"held","holder":"hh",...' by substring. Every line is also validated against the schema, which is the real contract, so the substring checks over-specify key order. A tinyjq-free field extractor (python3 -c is already a dependency of the tests) asserting on parsed fields would make the suite robust to output reordering while keeping the schema validation as the structural guard. Also: 700 lines of script-global state; a failing case can leak a cwd or env var into the next.