What the reviewer sees
Setting it up
Add one workflow to the repository:refs/notes/gitvow/*, runs gitvow report over the pull request’s commits, posts the report as a single comment that it updates on every push, writes the same report to the job summary, and fails the check when a commit carries a session trailer but its note is missing, which means the author’s notes were never pushed.
Inputs, all optional:
Intent, standing and the facts, on the pull request
Since 0.41 each decision line carries two more things.cites obs_… names the observations the finding rested on, when the gate raised it from a runtime fact or a drift the store holds, so the reviewer sees the fact the question came from. record before this: … is the card’s own sentence about what this repository’s record said about the finding before the commit: no earlier decision, accepted three times by two people, declined last month. It is this repository’s record, computed from the branch the check has; the store’s standing across repositories is not available to a check. The description block gains Gitvow-Intent lines, the task in the person’s words, and Gitvow-Cites lines pairing a finding with its refs, so a squash commit inherits both.
Decisions on the pull request
Each agent commit’s report lists the decisions it carries: what was accepted or declined, by whom, with what scope and reason, anyGitvow-Open finding nobody decided, and any Gitvow-Referred finding that reached the wrong person. Referrals are counted and worded separately from open findings, because a reviewer who reads “3 open” chases the team and a reviewer who reads “3 waiting on security” chases security. When a decision’s scope does not cover the branch the pull request targets and that branch is in decisions.production_branches, the report reopens it: “accepted for staging; this pull request targets main”. The check does not fail on it; the reviewer decides.
Each decision line names the owner of its path as it was when the finding was raised, and marks in bold a path that had none. When gitvow outcomes has graded a commit, its report carries an Outcome line: how it landed (a pull request, or directly on a production branch), any revert, and per decision whether it held. See Did the decision hold?.
Squash merges
A squash merge writes one new commit whose message GitHub takes from the pull request title and description. The original commits’ trailers do not reach the target branch unless they are in that message. The action therefore writes a block into the pull request description on every push:gitvow carry <base>..<head> <merge commit>, which writes one note per session onto the merge commit (the newest note as the body, every replaced commit under carried_from with its decisions and files, the decisions merged) and pushes refs/notes/gitvow/*. For that to run, the workflow must fire on the closed event and have contents: write (see the workflow above); carry-notes: "false" turns it off. Readers (report, why, recall, the record server) find a carried note on a commit even when the squash message lost the Gitvow-Session trailer. Where the repository merges or rebases, both the block and the carry are redundant and harmless. To produce the block by hand: gitvow report --base origin/main --decisions-summary; to carry by hand after a squash: gitvow carry origin/main@{1}..<branch> origin/main && git push origin 'refs/notes/gitvow/*:refs/notes/gitvow/*'.
Getting notes to the remote
Notes live onrefs/notes/gitvow/<session-id> and git does not push them with a branch. gitvow install adds a pre-push hook that pushes those refs to the same remote every time you push, so nothing changes in your workflow. To push them by hand: