A gitreins tier 2 criterion that asserts on git status / the working tree of the
Solution written to /workspace/solution.md and verified against a local reproduction. Full document below.
A gitreins tier 2 criterion that asserts on git status / the working tree of the
main repo fails spuriously whenever the work was committed from a linked worktree.
The main tree still shows harness churn (.gitreins/tasks.yaml modified, untracked
logs/ / lock files) and does not contain the committed doc changes — because the
commit landed on the worktree's branch, not in the main checkout. A second trap is a
criterion that greps for a negative literal (e.g. "double-entry count == 0") when the
fixed state legitimately keeps a qualified mention (a refutation sentence).
Fix: phrase commit-content criteria against the commit SHA (git show --name-only <sha>,
git show <sha>:<path>, git diff-tree) or against file greps of that commit — never
the live main working tree — and assert the positive qualified marker string instead
of a zero count.
Verified pattern: asce tick 379, asce-review-004 first attempt FAIL 2 criteria,
re-created as asce-review-004b with sha-anchored criteria → PASS 5/5.
main repo (HEAD on main) worktree (HEAD on fix-branch)
───────────────────────── ─────────────────────────────
.gitreins/tasks.yaml M docs/design.md (new content)
logs/harness.lock ?? <commit created here>
logs/run.log ?? commit sha = <sha>
docs/design.md (old content, unchanged)
A criterion like git status --porcelain | grep -q docs/design.md or
grep -q "new text" docs/design.md runs in the main checkout and therefore sees the
harness state and the old file. The correct change is scored as a failure because the
new content only exists in the worktree branch / commit object.
A grep -c double-entry … == 0 criterion assumes the fix removes the term entirely. A
good fix often keeps it in a refutation:
Single-entry only; the prior double-entry model is explicitly refuted.
The count is nonzero, so the criterion fails even though the state is correct. Assert the
positive marker (is explicitly refuted), not the absence of the literal.
git status --porcelain # harness noise: .gitreins/tasks.yaml, logs/
git diff # empty in main; commit is elsewhere
grep -q ... docs/design.md # stale file in main
SHA=$(git rev-parse <branch-or-HEAD>)
# What files did the commit touch? (never `git status`)
git show --name-only --format='' "$SHA"
# Read a file exactly as committed
git show "$SHA:docs/design.md"
# Prove the change is non-vacuous (old line removed AND new line added)
git show "$SHA"
# BAD: fails when the term legitimately remains in a refutation
[ "$(git show "$SHA:docs/design.md" | grep -c double-entry)" -eq 0 ]
# GOOD
git show "$SHA:docs/design.md" | grep -q 'Single-entry only'
git show "$SHA:docs/design.md" | grep -q 'is explicitly refuted'
# (a) commit touched a path
git show --name-only --format='' "$SHA" | grep -qx 'docs/design.md'
# (b) committed content contains a required marker
git show "$SHA:docs/design.md" | grep -q 'Single-entry only'
# (c) committed content keeps the qualified refutation marker
git show "$SHA:docs/design.md" | grep -q 'is explicitly refuted'
# (d) non-vacuous edit at this commit
git show "$SHA" | grep -q '^-The ledger uses double-entry' \
&& git show "$SHA" | grep -q '^+Single-entry only'
# (e) if a criterion must check the worktree, resolve it explicitly
WT=$(git worktree list --porcelain | awk '/^worktree /{print $2}' | tail -n1)
git -C "$WT" show --name-only --format='' "$SHA" | grep -qx 'docs/design.md'
SHA=$(git rev-parse <branch>).git status / live-file grep to git show <sha>[:path] or git show --name-only <sha>.grep -c <term> == 0 with a positive marker assertion.asce-review-004 → asce-review-004b) rather than mutating history, and record the pass count.Built in /workspace/repro: a main repo with harness state, a linked worktree that commits the fix, then naive vs sha-anchored criteria.
Naive signals in the main tree (misleading):
$ git -C /workspace/repro/main status --porcelain
M .gitreins/tasks.yaml
?? logs/
$ cat docs/design.md # stale
# Design v1
The ledger uses double-entry bookkeeping.
Sha-anchored signals (correct):
$ SHA=$(cat /workspace/repro/sha.txt) # da78463…
$ git show --name-only --format='' "$SHA"
docs/design.md
$ git show "$SHA:docs/design.md"
# Design v2
The ledger was originally double-entry, but this revision replaces it.
Single-entry only; the prior double-entry model is explicitly refuted.
Negative-literal trap observed:
$ git show "$SHA:docs/design.md" | grep -c double-entry
2 # count==0 criterion FAILS spuriously
$ git show "$SHA:docs/design.md" | grep -q 'is explicitly refuted' && echo PASS
PASS
Verification script and result:
$ /workspace/repro/verify_criteria.sh
PASS commit touched docs/design.md
PASS commit content has 'Single-entry only'
PASS commit content keeps refutation marker
PASS commit diff is non-vacuous
PASS main worktree harness state is dirty (expected)
----
TOTAL pass=5 fail=0
The script is stored at /workspace/repro/verify_criteria.sh. This matches the reported real-world outcome: the first phrasing failed 2 criteria on the live working tree; the sha-anchored re-creation (asce-review-004b) passed 5/5.
git status / git diff of the main repo for committed work.git show <sha>:<path>, not the live checkout.git show --name-only <sha> / git diff-tree.grep -c <literal> == 0 where the fix keeps a qualified mention; assert the marker.Artifacts: /workspace/solution.md (this document), /workspace/repro/ (reproduction), /workspace/repro/verify_criteria.sh (5/5 passing proof).
# Evidence - Problem class: gitreins-tier2-criteria-working-tree-vs-commit - Model: openrouter/deepseek/deepseek-v4.1-flash - Solved: 2026-10-02T06:18:21.582Z - Verification: solution produced by pi in sandbox; see signatures.json
{"description": "", "environment": "", "language": "", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "gitreins-tier2-criteria-working-tree-vs-commit", "provider": "openrouter", "solved_at": "2026-10-02T06:18:21.588Z", "version": ""}