You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
π€ Agent-authored (autonomous babysit lane). Found by codex review on #1625 (P2), verified and filed rather than fixed there β that PR was two rounds past its fix cap and its last two fix rounds had each introduced a fresh defect, so the disciplined move was to stop patching and record this properly.
Problem
_engine_gate_relevant's unparsable branch derives marker tokens as maximal runs of path-legal characters (_MARKER_TOKEN_SPLIT = [^A-Za-z0-9._\-/\\:]+) and then requires the "provably a DIFFERENT file" escape to see an absolute path. Those two rules fight each other: any character outside the keep class splits an absolute consumer path into fragments, and the fragment carrying the filename is no longer absolute, so the escape cannot fire and the guard gates a consumer's own tool.
This is the same bug class as #1611 β the guard denying unrelated work β in a narrower population.
Reproduction
A consumer's own hygiene.py under an absolute parent path, in an operator-carrying command: python3 <abs>/hygiene.py --help && echo done.
Note the last row: codex reported this for punctuation like +, @, =, but it is broader. That path contains no punctuation of its own β it over-gates because the enclosing Windows temp path is C:\Users\KYLESE~1\..., and ~ is outside the keep class. Short-name path segments are ordinary on Windows, so the affected population is wider than "unusual characters in a path".
Severity is bounded: this is over-gating, the fail-closed direction. It cannot cause the guard to miss an engine invocation. The cost is a consumer being denied work on their own unrelated file.
Why the obvious fix is not obvious
Widening the keep class walks straight back into the failure that started #1625's review chain. The first cut there split on shell metacharacters, and codex's first P1 showed that an assignment (engine=hygiene.py) glues with =, which is not a metacharacter β a real fail-open. Enumerating "safe" path punctuation re-opens exactly that door, because every character added to the keep class is a character that can also glue the marker to a neighbour.
The tension is structural: detection wants aggressive splitting, resolution wants whole paths, and one token list is currently serving both.
Suggested direction
Separate the two, rather than trying to find one delimiter set that satisfies both:
Detect the marker with the existing fine-grained tokens β unchanged, so no fail-open reopens.
Resolve the "provably a different file" question against the coarse whitespace/quote-delimited token that contains the fine token, which preserves the whole path.
I traced this against the shapes #1625's review chain established, and it appears to hold β cd <scripts>;./hygiene.py scan still gates (the coarse token <scripts>;./hygiene.py does not resolve), cd <scripts> && ./hygiene.py apply still gates (the coarse token is relative), and /tmp/consumer+tools/hygiene.py defers again. Treat that as a hypothesis, not a result β I did not implement or test it, and the last two changes in this area each looked equally sound before their differential run said otherwise.
Acceptance criteria
A consumer's own absolute hygiene.py defers in an operator-carrying command regardless of punctuation, ~ short-name segments, or spaces in its parent path.
π€ Agent-authored (autonomous babysit lane). Found by codex review on #1625 (P2), verified and filed rather than fixed there β that PR was two rounds past its fix cap and its last two fix rounds had each introduced a fresh defect, so the disciplined move was to stop patching and record this properly.
Problem
_engine_gate_relevant's unparsable branch derives marker tokens as maximal runs of path-legal characters (_MARKER_TOKEN_SPLIT = [^A-Za-z0-9._\-/\\:]+) and then requires the "provably a DIFFERENT file" escape to see an absolute path. Those two rules fight each other: any character outside the keep class splits an absolute consumer path into fragments, and the fragment carrying the filename is no longer absolute, so the escape cannot fire and the guard gates a consumer's own tool.This is the same bug class as #1611 β the guard denying unrelated work β in a narrower population.
Reproduction
A consumer's own
hygiene.pyunder an absolute parent path, in an operator-carrying command:python3 <abs>/hygiene.py --help && echo done.b90084bcconsumer+toolsconsumer@toolsconsumer tools(space)plain_toolsunder a Windows 8.3 temp pathNote the last row: codex reported this for punctuation like
+,@,=, but it is broader. That path contains no punctuation of its own β it over-gates because the enclosing Windows temp path isC:\Users\KYLESE~1\..., and~is outside the keep class. Short-name path segments are ordinary on Windows, so the affected population is wider than "unusual characters in a path".Severity is bounded: this is over-gating, the fail-closed direction. It cannot cause the guard to miss an engine invocation. The cost is a consumer being denied work on their own unrelated file.
Why the obvious fix is not obvious
Widening the keep class walks straight back into the failure that started #1625's review chain. The first cut there split on shell metacharacters, and codex's first P1 showed that an assignment (
engine=hygiene.py) glues with=, which is not a metacharacter β a real fail-open. Enumerating "safe" path punctuation re-opens exactly that door, because every character added to the keep class is a character that can also glue the marker to a neighbour.The tension is structural: detection wants aggressive splitting, resolution wants whole paths, and one token list is currently serving both.
Suggested direction
Separate the two, rather than trying to find one delimiter set that satisfies both:
Sketch, not prescriptive:
I traced this against the shapes #1625's review chain established, and it appears to hold β
cd <scripts>;./hygiene.py scanstill gates (the coarse token<scripts>;./hygiene.pydoes not resolve),cd <scripts> && ./hygiene.py applystill gates (the coarse token is relative), and/tmp/consumer+tools/hygiene.pydefers again. Treat that as a hypothesis, not a result β I did not implement or test it, and the last two changes in this area each looked equally sound before their differential run said otherwise.Acceptance criteria
hygiene.pydefers in an operator-carrying command regardless of punctuation,~short-name segments, or spaces in its parent path.engine=hygiene.py && python3 "$engine" apply), line-continuation, and post-cdrelative shapes must still gate.#1625has the probe scripts' shape in its thread evidence if useful.