Skip to content

Release 2.1.286 (2026-11-06)

Chores

  • uv lock --upgrade

Documentation

  • note the freeze gate in the vrg-commit entry (#3934)
  • re-point the paad-policy §10 link to its renamed anchor (#3936) paad-policy §10 is now titled "paad from the fork", so its anchor is #10-paad-from-the-fork.

  • human replies protocol guide and the build/tmp convention (#3948)

Features

  • shared library for authenticated human replies (#3937)
  • vrg-ruling request, read and respond (#3938)
  • relay drafted replies through a reserved ref (#3945)
  • feat(rulings): relay drafted replies through a reserved ref

Add lib/rulings/draft_ref.py and vrg-ruling draft: the agent builds the human's reply from a reply items file, screens it as plain text, refuses unless every push URL of origin is the issue's repo and the request still awaits a reply, then pushes a single-file commit built with git plumbing to refs/vergil/ruling-draft// and prints the vrg-ruling-reply command. fetch_draft reads it back over REST for the human tool. respond now deletes any leftover draft ref, by the issue's repo; an absent ref is not an error.

Ref vergil-project/vergil-tooling#3925

  • feat(rulings): add --json to vrg-ruling read

On a valid reply, read --json prints {request, reply, body} with integer comment IDs; every other outcome leaves stdout empty. Output without --json is unchanged. Scope addition requested by epic vergil-project/.github#881.

  • fix(rulings): suppress the semgrep SHA-1 rule on the git blob ID check

A git blob ID is SHA-1 by definition, so fetch_draft must hash with SHA-1 to check a blob's content against its ID. The check is integrity, not security.

  • fix(rulings): put the semgrep suppression directly above the SHA-1 call

Semgrep honours nosemgrep only on the flagged line or the line just before it; the reason line now comes first.

  • vrg-ruling-reply: post the human's reply as the human (#3946)