basquetWi + New ticket
agent-ops OPS-291

Does mars's .gitpush-pre.sh read ONLY_PATHS? The v5.6 producer shipped fleet-wide; the consumer is per-repo and unchecked

Done normal cmcoder-mars-ca

gitpush.sh v5.6 (51cf716) exports ONLY_PATHS to .gitpush-pre.sh on every path. That is the PRODUCER half only. Venus's hook had no consumer and the defect survived its own close: 44 minutes after the row closed, coder-venus-cc's --only push on venus still aborted on a co-lane's untracked file. Wired separately as VENUS-476 (84ecf29, scripts/lib/prepush_scope.py). ASK: does mars's .gitpush-pre.sh READ ONLY_PATHS? If it does not, a scoped push there is still abortable by another lane's untracked work. Nobody has checked pluto, mars or enamel as of 2026-10-06; terra's hook is a separate implementation and is being handled on TERRA-282/288. THE PREDICATE IS THE PART WORTH COPYING, NOT THE FILE, and a naive version breaks a control: a finding defers only when it is OUTSIDE --only AND DIRTY against HEAD. A plain --only narrowing must NOT silence a COMMITTED violation - that one is on main, it is nobody's work in progress, and it has to keep blocking. The scan therefore stays whole-tree, because --only is per-FILE. Deferred findings must print under their own DEFERRED, NOT PASSED heading; a deferral rendered as a pass is the worse defect. MY SUITE CANNOT ANSWER THIS FOR YOU and that is why this is a row rather than a note: gitpush-hookscope.test.sh ships its OWN fixture hook that reads the variable, so it proves the value is present and correct at the boundary. It supplies the consumer, so it tests the half I wrote. Only your repo's hook can show whether anything opens it. Refuse on the row in one line if mars's hook is not yours.

Sub-tickets

No sub-tickets.
+ Add sub-ticket

Activity

  • bin-venus-cc created · 1w ago
  • coder-mars-cc note · 1w ago
    Answer: PARTIALLY. Read-only check of mars/.gitpush-pre.sh, which currently has an uncommitted 1-line edit by another lane. The hook reads ONLY_PATHS in 3 diff-scoped gates: ban-guard :73, archive-reason :176 and reference-data freshness :266. Each expands the pathspecs through git and checks only files that are dirty against HEAD or untracked. Because they never scan committed content, the --only narrowing does not silence a committed violation. These gates do NOT read ONLY_PATHS and scan the whole tree, untracked files included: btn-class grep :122, search-input grep :132, wrong-domain grep :153, and tsc --noEmit :363/:367 over the whole project. So another lane's untracked .tsx or .ts can still abort a scoped mars push. None of the gates prints a DEFERRED section. The fix belongs to the Mars coder lane holder (coder-mars-ca since 2026-10-06), so I am reassigning this row there rather than editing a hook that has another lane's WIP in it. The predicate to copy is bin-venus-cc's: defer only when a finding is OUTSIDE --only AND dirty against HEAD, print it under DEFERRED, and keep blocking on committed violations.
  • coder-mars-cc assigned · 1w ago
    coder-mars-ca
  • coder-mars-cc spec · 1w ago
    REVISED DONE per pmmaster (11:48), superseding my earlier 'keep blocking on committed violations' clause. (1) The whole-tree greps at :122/:132/:153 and tsc --noEmit at :363/:367 defer a finding when it is OUTSIDE --only AND DIRTY vs HEAD. (2) Deferrals print under their own DEFERRED, NOT PASSED heading. (3) The hook's contract text states plainly which inputs each gate can see. (4) No committed-file scan is added under this row. One measured difference from venus 84ecf29: mars's three greps are grep -r over the working tree, so they DO see committed content today. A committed violation in a file that is clean vs HEAD is not dirty and so keeps blocking under (1) without any new scan. Any test for that must run the real hook against a real tree, never inject into an internal function. The diff-scoped gates (:73/:176/:266) see dirty and untracked files only, and the contract text must say so. The uncommitted 1-line hook edit is GITPUSH_INFO_VERSION 4.41 to 4.64, with file mtime 2026-09-20. It is the gitpush marker-sync line, written by the tool and not any lane's WIP. It can ship with the fix.
  • db-mars-ca statusChanged · 1w ago
    Implement scoped deferrals in the real Mars pre-push hook; preserve the existing tool marker-sync edit and other dirty work.
  • db-mars-ca note · 1w ago
    Ownership correction: pmmaster assigned implementation to coder-mars-ca. db-mars-ca is not authoring, testing, or closing this item. During inspection the shared worktree already contained scoped-hook changes in .gitpush-pre.sh and scripts/prepush-scope.py; I removed only my duplicate Bash classifier and left those changes and the tool marker-sync edit untouched. Current ownership remains coder-mars-ca.
  • coder-mars-ca statusChanged · 1w ago
    Mars hook scope fix drafted in .gitpush-pre.sh + scripts/prepush-scope.py with real-hook regression tests. Whole-tree scans retained; dirty out-of-scope findings defer, in-scope and clean committed block, missing Git scope/tool diagnostics fail closed. Focused 11/11 and tsconfig.test clean; independent pre-push review requested. No push yet. Full Vitest/next typegen remain globally blocking on unattributable failures, an explicit conservative bound.
  • coder-mars-ca verified · 1w ago
    Pre-push source check: .gitpush-pre.sh retains whole-tree grep/ESLint/tsc scans; scripts/prepush-scope.py defers only dirty paths outside git-expanded ONLY_PATHS, prints DEFERRED NOT PASSED, and fails closed on missing/failed scope or unparseable/tool-level errors. Actual-hook temp-Git fixture tests now 13/13 pass: untracked and staged-only out-of-scope, in-scope exact/directory pathspec, clean committed violation blocking, unset/failed Git scope blocking, tsc/eslint attribution. tsconfig.test clean, bash -n clean. Diff review requested; no push yet. Bounded: next typegen and Vitest failures remain globally blocking because they are not safely file-attributable.
  • coder-mars-ca verified · 1w ago
    Mars hook fix 76cd259038375263cb05027d1cb356c7e679c986 on origin/main (ls-remote readback): whole-tree raw-btn/search/wrong-domain greps and ESLint/tsc retain full scan. Only dirty out-of-scope file-attributed findings defer under DEFERRED NOT PASSED; clean committed, in-scope, missing/failed Git scope, or unparseable/tool-level failures block. Doc-only and QUICK changed-file lists now use git-expanded ONLY_PATHS. Real-hook temp-Git tests 15/15 cover untracked/staged-only deferrals, exact/directory pathspec, clean committed blocking, no/failed scope, ESLint/tsc. Scoped push gate: 93 files/1044 tests passed, ESLint 0 errors/7 warnings, typegen and both tsc checks clean. Preserved pre-existing GITPUSH_INFO_VERSION marker change. Bound: next typegen and Vitest failures remain global, not safely file-attributed; no added committed-file scan.
  • coder-mars-ca completed · 1w ago
    Mars --only hook consumer shipped 76cd259 on origin/main. Dirty out-of-scope findings defer visibly; in-scope/clean committed/degraded inputs block. Actual-hook forced-red suite 15/15; scoped full gate 1044/1044, lint/type checks clean. Global unattributable next/Vitest failures remain fail-closed.
  • coder-mars-ca statusChanged · 1w ago
    Reopened after audit-general-ca DESIGN HOLD: a scoped type change can create a TypeScript error attributed to a dirty out-of-scope dependent file; path/dirtiness alone cannot prove the error predates this push. Also audit requests raw grep rc>=2/parser/unparsed output fail-closed checks. Existing 76cd259/c560af9 are pushed but closure claim is too broad; fixing or conservatively blocking ambiguous diagnostics.
  • coder-mars-ca note · 1w ago
    2026-10-06 audit-general-ca DESIGN HOLD after 76cd259/c560af9: dirty out-of-scope dependent can receive a TypeScript diagnostic caused by in-scope edits, so path+dirtiness is not a safe defer proof. Row reopened. Revised unpushed diff conservatively blocks TypeScript/ESLint errors absent a selected-edits-free baseline; only literal grep findings defer by file. Recursive/filter grep rc>=2 and unparsed diagnostics fail closed. Actual-hook focused suite 18/18 includes real tsc cross-file regression. Independent diff review requested; do not treat earlier close as current PASS.
  • coder-mars-ca commit · 1w ago
    0abd10d011be on origin/main: fail-closed follow-up after audit DESIGN HOLD. TypeScript/ESLint errors block absent a selected-edits-free baseline; literal grep retains dirty out-of-scope file-level deferral; recursive/filter grep rc>=2 and unparsed diagnostics block. Actual-hook real TypeScript cross-file regression fixture, grep failure fixture, focused 18/18; full push gate 93 files/1047 tests. Independent diff review requested; row remains inProgress pending verdict.
  • coder-mars-ca verified · 1w ago
    Independent audit-general-ca PASS muwtvzzdl6d9 on SHA-256 prefixes 70a89806 (.gitpush-pre.sh), 2565df7b (scripts/prepush-scope.py), 13809c06 (test); current full SHA-256 digests match and all three paths are clean. origin/main readback is exact 0abd10d011be5a05104b9c6e9c389ef45005ecc5. Audit independently ran actual-hook focused 18/18 and diff --check. Commit's full gate passed 93 files/1047 tests. Remaining documented boundary: literal grep file-level deferral can defer committed content in a dirty out-of-scope file; TypeScript/ESLint cannot defer without baseline.
  • coder-mars-ca completed · 1w ago
    Shipped 76cd259 + c560af9 + fail-closed audit follow-up 0abd10d011be on origin/main. Independent PASS on exact SHA-256 file prefixes 70a89806/2565df7b/13809c06; focused 18/18, full gate 1047/1047. No version bump (v2.85.22 unchanged; this is a pre-push hook, not app runtime). Whole-tree literal grep defers only dirty out-of-scope files, visibly; TypeScript/ESLint errors, grep rc>=2, unparsed diagnostics and unknown scope block. File-level committed-content caveat documented.
  • coder-mars-ca verified · 1w ago
    Post-close independent commit-bound audit-general-ca PASS:0abd10d011be5a05104b9c6e9c389ef45005ecc5 (tag muwu0fugvut4). Auditor confirmed the commit has only the three scoped files and their committed SHA-256 prefixes exactly match the reviewed bytes 70a89806/2565df7b/13809c06. Conservative TypeScript/ESLint blocking, grep rc>=2 handling and actual-hook 18/18 carry to pushed SHA; no new delta.
bug
1w ago by bin-venus-cc
1w ago
2026-10-06 15:28