Skip to content

Release 2.1.55 (2026-11-02)

Documentation

  • require paad-delegate for every review round and remove the fallback path (#885)
  • docs(paad-doctrine): require paad-delegate for every review round and remove the fallback path

A round that cannot dispatch paad:paad-delegate no longer falls back to a general-purpose reviewer: mode 1 stops and mode 2 pauses, naming the fix (start the session with the fleet's paad checkout loaded via vrg-vm session). The fallback prompts, the stray-write sweep and TMPDIR check, the paad/security/ preparation and collection, SECURITY-CHECK-FAILED and the Path: record are removed from the doctrine, the paad policy, and the issue-implement and epic-create skills. The checks around every round (doctrine 1.9 and 1.10) stay.

  • docs(paad-doctrine): list every pre- and post-review check, and keep the material when the delegate reports a write

The issue-implement and epic-create round steps now name the clean-status check, the branch and HEAD record, the fetch, and the paad/ directory check after the review. Doctrine 2.4 stops at once for a file left in paad/security/ or paad/code-reviews/, and mode 2 gains the rule mode 1 has for a delegate that reports a write: the paths go to the human, the material is kept, and dismiss does not apply.

  • docs(paad-doctrine): keep and record the material when the delegate writes or leaves a file in paad/, in both modes

Mode 1's stop-at-once exits for a reported write and a file left in paad/ now say which files the scratch copy keeps and post a round comment with their hashes, and the cleanup rule keeps them. Mode 2 treats a file left in paad/ like a reported write, with dismiss not applying, and issue-implement carries that rule. The case-insensitive keyword list gains the agentic-review report labels, the delegate section's after-review note names the paad/ check, and the policy limits unattended-only to the doctrine's review rounds.

  • docs(paad-doctrine): settle how the stop-at-once exits combine, and record an interactive round

The doctrine's stop-at-once exits take precedence over the broken-round re-run, each one met applies and is named, and the worktree is reverted with reported paths and paad/ files left in place; dismiss applies only when it applies to every cause. A round run interactively at the human's choice records a deviation line instead of the delegate's counts, and the policy names that exception. The mode 2 pause list gives every pre-dispatch cause, and epic-create says the kept result is security material.

  • check the counts line against the findings and decode the notice's entities (#887)
  • docs(paad-doctrine): check the counts line against the findings and decode the completion notice's entities

agentic-review's counts line must now agree with the findings outside the security section, by severity and by scope; a mismatch fails mode 2's output check. The result taken from the harness's completion notice has its &, < and > entities decoded before it is checked, cut or written. issue-implement and epic-create summarise both rules.

Ref vergil-project/vergil-claude-plugin#883

  • docs(paad-doctrine): check each Scope value and the shape of Defaults applied

Mode 2 now requires each finding's Scope: value to be exactly one of the three, before the counts line is compared, so a malformed value fails as itself. Defaults applied: is accepted as 'none' or as the bare label followed by one or more '- ' lines; a bare label with no lines, or other text after the label, fails.

Ref vergil-project/vergil-claude-plugin#883

  • docs(paad-doctrine): settle dismiss on a Scope check and how result text is recorded

A failed Scope: value check takes only another-round, since the findings comment needs each finding's scope bucket. The round records' formatting of result text and their count of Defaults applied: lines are made explicit.

Ref vergil-project/vergil-claude-plugin#883

  • docs(paad-doctrine): fence result text in round records and widen the Scope dismiss bar

Text copied from a delegate result into a public round record goes only in a top-level fenced code block longer than its longest backtick run; the mode 2 findings example follows it. dismiss is barred after a missing or invalid Scope: field, and issue-implement's summary says so.

Ref vergil-project/vergil-claude-plugin#883

  • list and count the security discard lines in the delegate result (#888)
  • docs(paad-doctrine): list and count the security discard lines in the delegate result

The delegate result template now shows one '- ' line per discard under 'Security discards: ', as the fork's delegate contract does. The security section's check requires 'Security:' and 'Security discards:' to appear once each, and '' to equal the number of '- ' lines between 'Security discards:' and the end marker, with no other line there, mirroring the 'Discards: ' check.

Ref vergil-project/vergil-claude-plugin#886

  • docs(paad-doctrine): state exactly how the security section's labels and discard lines are checked

Each label is matched at the start of a line with nothing stripped, so free-text discard lines that quote a label do not count as a second occurrence. The rule against other lines now covers only the lines between 'Security discards:' and the end marker, not the whole section, and the comparison with the 'Discards: ' check, whose wording differs, is dropped.

Ref vergil-project/vergil-claude-plugin#886

  • docs(paad-doctrine): require the ordinary discard lines to start with '- ', as the security ones do

The 'Discards: ' output check now requires exactly lines, each starting with '- ', matching the check on 'Security discards: '.

Ref vergil-project/vergil-claude-plugin#886

  • docs(paad-policy): record fleet commit 58db477 as the validated delegate build

Section 10's validated-version line now records fleet commit 58db477, validated in vergil-project/.github#843 with a reduced set of runs by the human's ruling. The announce stays v2.0.2-preview, and the first validation at abf879f in vergil-project/.github#733 is kept as history.

Ref vergil-project/vergil-claude-plugin#886

  • docs(paad-doctrine): bound the discard lines, define an empty security section and mark the reduced validation as a one-off

The ordinary discard lines run up to the next field, and any other line there fails. An empty security section is the markers with 'Security: 0' and 'Security discards: 0' between them and nothing else. paad-policy section 10 states that 58db477's reduced validation set is the human's one-off ruling for a wording-only contract change, recorded on vergil-project/.github#843, with the gate text unchanged.

Ref vergil-project/vergil-claude-plugin#886

CI Evidence: All gates passed — full audit bundle available. Download →