Skip to content

v3.10.0 — conductor hardening (GH #6 + twelve found auditing it)

Latest

Choose a tag to compare

@bpmforge bpmforge released this 08 Sep 23:20

Conductor hardening: the six defects reported in #6 by an external maintainer, plus twelve found while auditing them.

The two worst were not in the report, and affected every prior release:

  1. A chatty model self-approved. The review and runtime gates were unanchored .test(body) regexes, and both prompts contain VERDICT: APPROVED / RUNTIME: PASS as instructions — so a model that restated its instructions was read as approving. Reproduced: a document ending VERDICT: CHANGES REQUESTED read as APPROVED.
  2. Post-approval code landed unreviewed. Round 3 runs as the coder agent with the worktree writable; an edit inside write_scope passed the scope re-check and was folded into the closed commit by an unguarded amend.

Reported and fixed: reviewer fixes could escape write_scope (the scope gate ran after git commit --amend, and git status --porcelain is empty on a committed tree); the run lock died ENOTDIR in a linked worktree; blocking findings now cross the attempt boundary as findings, not reviewer names; --max-processed separates the activity ceiling from --max-tickets' success target; bounded runtime repair (--runtime-fix-iterations, default 1) that re-earns every gate; POSIX process-group timeout containment that fails closed.

Also found: the scope gate's containment bypass — **/*, */**, */* and [a-z]*/** each authorised the whole repo, because "refuse a bare *" was a blacklist of four literal strings; renames checked on one side only; close() ran verify with no timeout and a 1MB buffer that refused green tickets while reporting "did not exit 0"; provider-limit exhaustion crashed the run; STOP ignored during a 60m backoff; deletions invisible to reviewer selection.

Test harness: validate-scope.match.test.sh had been cited as proof the matcher was "fixture-backed" since v3.8.0 and no harness ever ran it — while testing its own copy of the matcher. Six more orphaned suites found (45 tests, including the entire JIRA board driver's coverage). Pass 53 now discovers every *.test.mjs under scripts/ rather than listing them.

Conductor coverage 19 → 93 tests. Full suite 724 passed, 0 failed. Every new negative control verified red against its prior commit.

Closes #6.