fix(push): avoid substitution parsing in job polling - #52
Conversation
|
Second-pass review at a9da811: scoped workaround accepted for merge consideration. Both environments passed run 34247500440, full=false, parser + worker-registration + push suites. Pipeline probes now reject every status except expected no-match 1, and require HUP handler marker and exit 129. Actual job helper active/missing/reaped-child tests passed. Full diff remains two files; base main unchanged at 6e24bcb. No grep -q early-close, no PID substring match, no signal masking or weakened production cleanup assertions. Known process/snapshot failing reproducers retained opt-in with original red runs cited. Residual limits: finite timing coverage, extra grep process per poll, no proof of Bash internal root cause; this does NOT resolve the separate batch lifecycle anomaly in #51. Prior #49 workaround was falsified and must not be represented as complete. Recommend explicit user-confirmed Squash merge of #52, then ordinary merge into #51 and #47 with fresh required CI. Do not merge #47/#51 automatically. No production operations or test credentials. |
Evidence
Run 34245125939 Ubuntu failed snapshot mode round 5 (0.02s) with trap EOF and exit 2. This disproves the prior #49 command-substitution workaround as a complete solution. Debian passed; original batch failure remains separately investigated in #51.
Candidate
Use jobs -pr piped to grep -Fx with stdout redirected, no process/command substitution. Do not use grep -q: full stream consumption avoids SIGPIPE false negatives under pipefail. Validate numeric nonzero PID. No signal masking or relaxed lifecycle barriers.
Validation
Parser gate now exercises pipeline; retain failed process and snapshot controls under explicit legacy flag with historical red evidence. Existing actual job helper, registration/HUP matrix and push suites remain. CI pending, not a root-cause-complete claim. Two files, base main 6e24bcb. No production services executed, no real credentials supplied, no #41 changes.
Risks / rollback
Pipeline spawns grep per poll; CI must verify job-table semantics and timing. A finite green run cannot exclude rare interpreter failures. Revert this PR for rollback. Draft, no merge without explicit confirmation; #47 remains blocked.