Repository navigation
Conversation
…'s REJECT-now ruling) — the T1's 5 rounds: the parse surface guarded (F1), the supported-set message (F2), the EFFECTIVE-output exemption with the Abs-canonicalized pin-path compare (D1/D2/F-A, the -o-empty and tab-completion bypasses closed), the registry-failure fallthrough (D3), the exemption + spelling tests (D4/F-1)
gadievron
requested review from
dgeyshis,
shahar-davidson and
sounil
as code owners
September 26, 2026 15:40
gadievron
force-pushed
the
fix/667-scan-l-reject
branch
from
September 27, 2026 16:21
0a696d5 to
96691b5
Compare
…nd, the subprocess form driving the REAL runScan with a jailed HOME + a python-pinned active project + the flag Set() to mark the explicit form: the supported off-pin (go) gets #667, the unsupported (cobol) gets #691, the pin dir stays clean. The E1 class killed: the guard's WIRING is now tested, not just its helper.
gadievron
force-pushed
the
fix/667-scan-l-reject
branch
from
September 27, 2026 16:30
96691b5 to
a0a96ce
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
openant scan -l <other>(andparse -l <other>) on a language-pinned project previously wrote the other language's scan into the pinned language's directory in place (#667). Per the maintainer's REJECT-now ruling, this PR rejects the explicit off-pin request at the CLI boundary, before any artifact/meta write or Python invocation.The amendment (the wiring pin)
The original guard was tested at the helper level (TestRejectOffPinLanguage drives
rejectOffPinLanguagedirectly). The wiring — the actual cobra call inrunScan/runParse— was not: the E1/E2 class (a PR whose suite passes with the fix's production wiring removed).This amendment adds two subprocess wiring tests:
TestOffPinWiringRejectsEndToEnd— drives the realrunScanwith a jailed HOME + a python-pinned active project + the flagSet()to mark the explicit form. The supported off-pin (go) gets the scan -l auto on a language-pinned project replaces the pinned scan dir's artifacts in place (dataset.json, results.json) while meta keeps the pinned language — recoverable by re-scan; the #274 cosmetic-wart ruling's correctness counter-evidence #667 rejection; the unsupported (cobol) gets the init -l accepts any string: the traversal persists to project.json and escapes the artifacts dir; a typo (-l Python) prints success then fails every later scan #691 message; the pin dir stays clean (nodataset.json). Scope, honestly: the assertion proves the cobra wiring fires — it accepts either rejection message, so the per-case routing (go→ scan -l auto on a language-pinned project replaces the pinned scan dir's artifacts in place (dataset.json, results.json) while meta keeps the pinned language — recoverable by re-scan; the #274 cosmetic-wart ruling's correctness counter-evidence #667,cobol→ init -l accepts any string: the traversal persists to project.json and escapes the artifacts dir; a typo (-l Python) prints success then fails every later scan #691) is the named residual below, not what this test pins.TestOffPinParseWiringRejectsEndToEnd— the same forrunParse.Both tests fail when the guard's call site is removed (the wiring mutants, executed) — the E1 class is killed for both surfaces.
The C4 evidence (the M9-1 wiring clause)
Every prod hunk carries a prod-mutant receipt: the guard neutered (3 tests fail), the exemption inverted (3), the supported-set membership inverted (2), the scan wiring removed (1 — the wiring test), the parse wiring removed (1), the parse defaults wrong (1). Every mutant kills — the tests constrain the behavior.
The declared notes
Symlink bypass in the output-pin guard (DECLARED RESIDUAL, executed on this head): the guard's
filepath.Abscomparison does not resolve symlinks, so a symlinked-opath pointing at the pin directory takes the exemption — the bypass was demonstrated by execution, not by inspection. Two honest notes from the refutation round: (a) the earlier "resolved via$PWDalways" severity argument was false (Getwdhonors$PWD; there is no demonstrated accidental-resolution path), so this is a deliberate-symlink attacker-side residual, not an accidental one; (b) the in-tree fix is not a naivefilepath.EvalSymlinksswap — it errors on not-yet-created output dirs and would introduce false rejections; the in-tree model (internal/server/server.go:1935-1939) resolves both sides before comparing, and a deny-on-error fallback needs its own test. Symlinks stay declared out of scope for this PR; the guard-tightening is future work with that test attached.The parse call-site's wiring is now pinned; the helper-level discrimination tests (the -o "" shape, the spelling cases) remain in the original suite.
The second commit is re-authored to the noreply identity; the first still carries a machine-local author address — declared, metadata-only (M9-5-exempt). Before confirming a squash merge, read the squash-message box and remove any machine-local
Co-authored-bytrailer.Fixes #667. Cross-linked: #691 (init's missing validation — its message steers there).
Merge notes (added 2026-10-06)
Co-authored-by:line ending in a.localaddress. One commit on this branch was authored from that address, and the same thing has already written that hostname permanently intomasterthree times (2026-09-21).masterand scan -l auto on a language-pinned project replaces the pinned scan dir's artifacts in place (dataset.json, results.json) while meta keeps the pinned language — recoverable by re-scan; the #274 cosmetic-wart ruling's correctness counter-evidence #667 actually closed. An agent runs this on request.