PR proof pack
Treat this workflow as a delivery and merge-readiness gate. A proof check asks
whether the existing PR still tells the truth. A proof refresh changes the PR
only when that check finds stale or missing evidence.
This skill never grants publication authority. The calling workflow must obtain
that authority before pushing a branch, editing a PR, or uploading evidence.
Local edits, local commits, review findings, and targeted tests stay local and
do not trigger this workflow.
Trigger branches
- Creating, publishing, reopening, converting, or marking a PR ready: check the
final proof and refresh it when stale.
- Publishing an authorized branch update: check proof against the final net
diff; refresh only claims or evidence affected by that update.
- Preparing a PR or stack for merge: require a current proof result even when
no refresh is needed.
- Creating or updating a stacked PR: scope proof to that layer's direct base,
state its stack position and adjacent dependencies, and check every affected
layer separately.
A commit, rebase, or local branch change is not reviewer-visible and does not
trigger proof work. A push triggers a freshness check, not an automatic rewrite.
Freshness rule
Classify proof as:
current: the existing title, concise opening context, behavior claims,
reproduction steps, and appropriately formatted practical evidence still
match the final pushed net diff;
stale: an important behavior, state, viewport, workflow, reproduction step,
evidence claim, or reader premise changed; a required workflow diagram or
practical proof is missing; or the evidence format makes the result harder
to understand than a simpler form;
blocked: freshness or required practical evidence cannot be verified.
Commit count, commit SHA, code churn, and a push by themselves do not make proof
stale. When proof is current, report the no-op decision and leave the PR
untouched.
For a bug fix with reproducible direct-base behavior, proof is stale when the
reviewer cannot compare the broken and fixed outcomes. A screenshot of textual
output is stale when the same result would be clearer as short copyable text.
For a UI change, proof is stale when it lacks actual product evidence for the
changed visual behavior. Static appearance, layout, or rendered-state changes
require actual screenshots, matched against the direct base when that baseline
is meaningful and reproducible. Motion, timing, gesture, or manual interaction
requires a concise recording. A change with both static and interactive claims
requires both forms. An explanatory technical diagram never satisfies practical
UI proof. When rendered diagram or export output is itself the changed product,
capture that actual output as visual proof of its own pixels; it still does not
prove that the system depicted by the diagram ran.
Hard gates for a refresh
- Practical evidence: Exercise the changed behavior working in practice.
Automated validation remains supporting information and never replaces the
observed before/after result when the baseline is meaningful and reproducible.
Without one, show the actual entry point and PR outcome.
- UI proof: For an appearance, layout, responsive, or rendered-state claim,
show actual product pixels. Use matched screenshots when the direct base is
meaningful and reproducible; otherwise state the constraint and show the
actual product entry point and outcome. Use a concise edited recording for
motion, timing, gesture, or manual interaction. Use both forms when both kinds
of claim changed. For labels, accessibility output, or textual state where
appearance is not the claim, use copyable text instead. If required capture
cannot be completed, classify the proof as
blocked.
- Workflow explanation: When the PR introduces or materially changes a
system or workflow, include one diagram that explains the end-to-end flow to
a cold reviewer. The diagram explains the change; it never replaces actual
product screenshots, recordings, or other observed practical evidence.
- Evidence fit: Use copyable text for textual inputs, outputs, traces,
requests, responses, and state. Use visual evidence only when text would lose
an important fact about appearance, layout, motion, interaction, rendering,
or playback.
- Provider-hosted attachments: Upload selected media through the provider's
supported path. On
github.com, use GitHub CLI's native --attach support.
On Bitbucket Cloud, use TWG's coupled PR-body and image update;
a separate TWG or Atlassian skill is optional, not required.
- Rendered proof: Check the rendered result headlessly by default. Use an
interactive browser only when client-side rendering, literal page appearance,
or playback must be inspected.
- Readable history: Review the title and commit subjects before publishing.
If any gate cannot be completed, stop. Tell the human which capability failed
and what they must restore.
Reviewer boundary
Assume the reviewer has not seen the agent thread, planning notes, decision log,
local branch history, or private chat. Every claim must be understandable from
the direct-base net diff, linked repo-visible context, or the PR body itself.
Workflow
Resolve the skill directory.
Resolve <skill-dir> to the directory containing this SKILL.md.
Done when every relative script and reference path resolves from that
directory.
Resolve the PR and direct base.
Use read-only provider metadata. On GitHub, inspect
gh pr view --json number,url,body,title,baseRefName,headRefName,headRefOid. For a stack,
load gh-stack, inspect gh stack view --json, and record the current
layer's position and adjacent dependencies. On Bitbucket Cloud, read
references/bitbucket.md, resolve the workspace,
repository, and PR ID explicitly, and use its read-only TWG inspection path.
Done when the exact PR, provider hostname, final head, direct base, and
existing proof are known.
Gather the current proof and net diff.
Run <skill-dir>/scripts/pr-net-diff --markdown, optionally with narrow file
paths. Base every claim on the direct-base-to-final-HEAD net diff, not the
latest commit or chat memory. Remove branch-only churn with no net diff from
consideration. When the PR spans multiple meaningful parts, keep the
generated +LOC and -LOC breakdown. Split implementation into clearer
product areas only when the paths support exact, non-overlapping totals.
For Bitbucket Cloud, pass the destination and source commit hashes resolved
in references/bitbucket.md as --base and
--head; do not let local checkout state choose either side of the diff.
Done when the final behavior and existing reviewer-visible claims can be
compared, and any claim that the PR is large has a direct-base breakdown
whose rows reconcile to the total.
Make the freshness decision.
Compare the final behavior, opening problem/fix context, reproduction steps,
important states, required workflow explanation, verification evidence,
title, and existing attachments. Check whether each evidence item uses the
required form for its claim, including actual screenshots for static UI and
a recording for motion or manual interaction. Do not count a technical
diagram as practical evidence. Apply the freshness rule above. If proof is
current, report why and stop without any PR mutation.
Done when the result is current, stale, or blocked, with the affected
claim or evidence named.
Pass the refresh preflight for stale proof.
For a github.com PR, confirm
gh auth status --active --hostname github.com and require gh 2.99.0 or
newer before a visual refresh. Identify whether
practical capture needs a browser or device and whether the finished body
requires client-side inspection, such as a Mermaid diagram. When
rendered-media verification will run, require curl 8.4 or newer so download
limits apply even when a server omits Content-Length; the repository
verifier preflights this and stops with an upgrade instruction. Do not make
an interactive browser a prerequisite for github.com upload or ordinary
rendered-body checks, and do not require attachment or browser capabilities
for text-only proof.
For Bitbucket Cloud, follow the preflight in
references/bitbucket.md. Treat live TWG help as
the final command contract. When a TWG or Atlassian skill is already
available, load it if it improves current provider or authentication
guidance. Keep it optional so this public skill still works with the CLI
alone. A visual refresh also requires an interactive browser for the
finished rendered-media check; a text-only refresh does not.
Done when provider authentication and repository access work and every
browser or device capability genuinely needed later in the refresh is
available, or the workflow has stopped with a concrete repair request.
Capture only the changed practical evidence.
Read references/proof-selection.md.
Reproduce the changed behavior and replace only evidence made stale by the
final net diff. Read references/screenshots.md
only when visual evidence is selected; for a recording, also read
references/video-editing.md. Preserve current
evidence that remains useful.
Done when every changed important behavior has concise reviewer-checkable
evidence, reproducible bugs have matched broken/fixed outcomes, static UI
changes have actual screenshots matched to every meaningful reproducible
baseline, motion or manual interactions have concise recordings, changes
with both kinds of UI claim have both forms,
every selected visual has passed model inspection for content and
presentation, each image has a deliberate rendered size, related visuals
are grouped when that makes comparison easier, and unchanged useful evidence
is left alone.
Explain a new or changed system or workflow.
When the final net diff introduces or materially changes a system or
workflow, load design-technical-diagrams and create exactly one diagram by
default. Treat the PR body as the destination and the direct-base net diff,
relevant repository context, and changed behavior as the brief. Define the
one system-flow question the diagram must answer before drawing it. Keep the
diagram outside practical proof: it cannot occupy a before/after evidence
slot or replace actual product screenshots or recordings.
Start from an event or person the reviewer recognizes. Show the real actors
and systems, their atomic actions in order, important decisions, the
artifacts or state passed between them, and the final outcome or feedback
path. Number the primary steps when order matters. Use icons as orientation
anchors and labels that define necessary project terms in place. Do not turn
file names, functions, implementation buckets, or several actions hidden in
one box into the explanation.
Export a static image sized for the PR body. Follow the diagram skill's
required whole-frame, destination-size, magnified-detail, and exported-file
visual passes. A successful render or clean geometry check is not enough.
Read references/mermaid.md if Mermaid is considered
for a small flow.
Skip this step when the PR does not introduce or materially change a system
or workflow.
Done when a cold reviewer can follow the new or changed workflow from
trigger to outcome without source-code context, the current rendered pixels
have passed every visual pass, and the diagram is clearly presented as an
explanation rather than runtime proof.
Draft the smallest accurate PR update.
Read references/plain-language.md and
references/body-shape.md. Keep current sections
that remain true. Draft only the title, body, caption, reproduction, or
evidence changes needed to restore accuracy. Load speak-fking-english
immediately before saving the complete draft, and tell it the draft is
reviewer-facing text. Unless the user explicitly invoked that skill for this
artifact, its compact natural-writing pass applies.
Done when the first two sentences explain what broke and why it matters, the
next two explain the fix and outcome, a multi-part or unusually large PR has
a compact change breakdown, the body reads clearly and naturally, the body
stays within the default size budget or justifies each exception, and the
draft is self-contained.
Confirm authority and upload provider-hosted attachments.
Reconfirm that the calling workflow authorizes the PR mutation. Follow
references/screenshots.md when a diagram or
visual evidence was selected. On github.com, reference every selected
local image or video in the complete draft, then update the body and upload
all files in one native command. Immediately before the write, re-read
headRefOid and body; compare both with the snapshot from step 2. If
either changed, restart the freshness decision instead of overwriting a
concurrent push or human edit.
gh pr edit <full-PR-URL-resolved-in-step-2> \
--body-file <draft-markdown-path> \
--attach <first-media-path> \
--attach <second-media-path>
Repeat --attach for every selected file. GitHub CLI rewrites each matching
local Markdown reference to its provider-hosted URL. Keep media in the main
PR body, never in a detached comment, and use a table when it makes a small
related group or comparison easier to scan. If upload fails, use the live
body as the retry draft, attach only files whose local references remain,
and do not re-upload successful files. Before returning blocked, remove
every broken local reference from the live body or restore the last fully
provider-hosted body. On Bitbucket Cloud, follow the single
twg bb pull-requests update operation in
references/bitbucket.md: pass the complete draft
with --description-file, each selected image with --image, and a paired
descriptive --image-name. TWG images are supported; video is not. Text
evidence needs no attachment.
Done when every selected diagram and visual is provider-hosted and every
text proof is present in the main body; an authority failure stopped before
mutation; or a partial upload failure left the live body with no broken local
references.
Inspect the finished PR headlessly by default.
Follow the rendered-verification path in
references/screenshots.md. On GitHub, inspect
the title and Markdown body, then run
<skill-dir>/scripts/github-verify-rendered-proof --pr <full-PR-URL-resolved-in-step-2> --head <final-head-SHA-resolved-in-step-2>.
The verifier reads body_html without printing signed asset URLs, checks
that the PR head stays on the expected final SHA, checks every rendered image
and video, and fetches each resolved asset without forwarding the gh token.
Require its status, content type, and non-empty byte checks for all assets,
plus exact byte size for evidence uploaded during this refresh. Use an interactive browser when the body includes client-rendered
content such as Mermaid or when the proof depends on literal page layout,
pixel appearance, percentage image sizing, table composition, or playback.
Remove stale proof rather than accumulating it.
On Bitbucket Cloud, follow the readback and verification contract in
references/bitbucket.md. Re-read the full PR with
TWG and confirm the expected head, title, body, and embeds. For a diagram or
image, inspect the rendered PR interactively and inspect the rendered pixels;
TWG readback alone does not prove that Bitbucket rendered the media.
Done when the rendered PR accurately describes the final pushed net diff,
with browser inspection completed for every case headless checks cannot
prove.
Hand the result back to the caller.
Return current, refreshed, or blocked, with the affected PRs. Before
readiness, human sign-off, or merge, remind the caller to apply the Review
gate and Sign-off gate from AGENTS.md to every PR. The Review gate must
cover the exact head; Sign-off persists for the PR across later heads.
Proof-pack does not count as review.
Done when the caller knows whether proof changed and which PRs still need
an exact-head review decision or human sign-off.
Done means
- Every workflow step meets its
Done when criterion.
- A
current result made no reviewer-visible mutation.
- A
refreshed result changed only stale claims and evidence.
- Every affected PR explains the break and fix quickly, then proves final
direct-base behavior in the simplest format that preserves the claim.
- Reviewer-facing text reads clearly and naturally, and matched proof is
labeled
Before: direct base and After: PR.
- A multi-part or unusually large PR shows exact direct-base
+LOC and -LOC
by reviewer-meaningful part, with every file counted once and totals reconciled.
- Textual behavior uses copyable text. Visual behavior uses provider-hosted
media verified headlessly or, where required, through an interactive browser.
- Static UI changes use actual product screenshots, matched to the direct base
when that baseline is meaningful and reproducible. Motion, timing, gesture,
and manual interaction use concise edited recordings. Changes with both
static and interactive claims include both.
- Every required workflow diagram is provider-hosted and its local export and
fetched rendered asset both passed visual inspection, but it is presented
only as explanation and never counted as practical evidence.
- Reproducible bug fixes show matched broken and fixed outcomes.
- A PR that introduces or materially changes a system or workflow includes one
visually inspected diagram that explains its trigger, ordered actions,
ownership, handoffs, and outcome without pretending to prove runtime behavior.
- The workflow did not infer publication authority from branch or PR state.
- The caller knows proof does not satisfy the exact-head review gate.
1---2name: pr-proof-pack3description: Create or check concise reviewer-visible PR context and practical proof when an authorized workflow publishes an update or prepares it for merge. Lead with what broke and how it is fixed, use actual product screenshots for static UI changes and recordings for motion or manual interaction, keep technical diagrams as separate system explanations, break down large changes by direct-base +LOC and -LOC, and prefer copyable text for textual behavior.4---56# PR proof pack78Treat this workflow as a delivery and merge-readiness gate. A proof check asks9whether the existing PR still tells the truth. A proof refresh changes the PR10only when that check finds stale or missing evidence.1112This skill never grants publication authority. The calling workflow must obtain13that authority before pushing a branch, editing a PR, or uploading evidence.14Local edits, local commits, review findings, and targeted tests stay local and15do not trigger this workflow.1617## Trigger branches1819- Creating, publishing, reopening, converting, or marking a PR ready: check the20 final proof and refresh it when stale.21- Publishing an authorized branch update: check proof against the final net22 diff; refresh only claims or evidence affected by that update.23- Preparing a PR or stack for merge: require a current proof result even when24 no refresh is needed.25- Creating or updating a stacked PR: scope proof to that layer's direct base,26 state its stack position and adjacent dependencies, and check every affected27 layer separately.2829A commit, rebase, or local branch change is not reviewer-visible and does not30trigger proof work. A push triggers a freshness check, not an automatic rewrite.3132## Freshness rule3334Classify proof as:3536- `current`: the existing title, concise opening context, behavior claims,37 reproduction steps, and appropriately formatted practical evidence still38 match the final pushed net diff;39- `stale`: an important behavior, state, viewport, workflow, reproduction step,40 evidence claim, or reader premise changed; a required workflow diagram or41 practical proof is missing; or the evidence format makes the result harder42 to understand than a simpler form;43- `blocked`: freshness or required practical evidence cannot be verified.4445Commit count, commit SHA, code churn, and a push by themselves do not make proof46stale. When proof is current, report the no-op decision and leave the PR47untouched.4849For a bug fix with reproducible direct-base behavior, proof is stale when the50reviewer cannot compare the broken and fixed outcomes. A screenshot of textual51output is stale when the same result would be clearer as short copyable text.5253For a UI change, proof is stale when it lacks actual product evidence for the54changed visual behavior. Static appearance, layout, or rendered-state changes55require actual screenshots, matched against the direct base when that baseline56is meaningful and reproducible. Motion, timing, gesture, or manual interaction57requires a concise recording. A change with both static and interactive claims58requires both forms. An explanatory technical diagram never satisfies practical59UI proof. When rendered diagram or export output is itself the changed product,60capture that actual output as visual proof of its own pixels; it still does not61prove that the system depicted by the diagram ran.6263## Hard gates for a refresh6465- **Practical evidence:** Exercise the changed behavior working in practice.66 Automated validation remains supporting information and never replaces the67 observed before/after result when the baseline is meaningful and reproducible.68 Without one, show the actual entry point and PR outcome.69- **UI proof:** For an appearance, layout, responsive, or rendered-state claim,70 show actual product pixels. Use matched screenshots when the direct base is71 meaningful and reproducible; otherwise state the constraint and show the72 actual product entry point and outcome. Use a concise edited recording for73 motion, timing, gesture, or manual interaction. Use both forms when both kinds74 of claim changed. For labels, accessibility output, or textual state where75 appearance is not the claim, use copyable text instead. If required capture76 cannot be completed, classify the proof as `blocked`.77- **Workflow explanation:** When the PR introduces or materially changes a78 system or workflow, include one diagram that explains the end-to-end flow to79 a cold reviewer. The diagram explains the change; it never replaces actual80 product screenshots, recordings, or other observed practical evidence.81- **Evidence fit:** Use copyable text for textual inputs, outputs, traces,82 requests, responses, and state. Use visual evidence only when text would lose83 an important fact about appearance, layout, motion, interaction, rendering,84 or playback.85- **Provider-hosted attachments:** Upload selected media through the provider's86 supported path. On `github.com`, use GitHub CLI's native `--attach` support.87 On Bitbucket Cloud, use TWG's coupled PR-body and image update;88 a separate TWG or Atlassian skill is optional, not required.89- **Rendered proof:** Check the rendered result headlessly by default. Use an90 interactive browser only when client-side rendering, literal page appearance,91 or playback must be inspected.92- **Readable history:** Review the title and commit subjects before publishing.9394If any gate cannot be completed, stop. Tell the human which capability failed95and what they must restore.9697## Reviewer boundary9899Assume the reviewer has not seen the agent thread, planning notes, decision log,100local branch history, or private chat. Every claim must be understandable from101the direct-base net diff, linked repo-visible context, or the PR body itself.102103## Workflow1041051. Resolve the skill directory.106107 Resolve `<skill-dir>` to the directory containing this `SKILL.md`.108109 Done when every relative script and reference path resolves from that110 directory.1111122. Resolve the PR and direct base.113114 Use read-only provider metadata. On GitHub, inspect115 `gh pr view --json number,url,body,title,baseRefName,headRefName,headRefOid`. For a stack,116 load `gh-stack`, inspect `gh stack view --json`, and record the current117 layer's position and adjacent dependencies. On Bitbucket Cloud, read118 [references/bitbucket.md](references/bitbucket.md), resolve the workspace,119 repository, and PR ID explicitly, and use its read-only TWG inspection path.120121 Done when the exact PR, provider hostname, final head, direct base, and122 existing proof are known.1231243. Gather the current proof and net diff.125126 Run `<skill-dir>/scripts/pr-net-diff --markdown`, optionally with narrow file127 paths. Base every claim on the direct-base-to-final-`HEAD` net diff, not the128 latest commit or chat memory. Remove branch-only churn with no net diff from129 consideration. When the PR spans multiple meaningful parts, keep the130 generated `+LOC` and `-LOC` breakdown. Split implementation into clearer131 product areas only when the paths support exact, non-overlapping totals.132 For Bitbucket Cloud, pass the destination and source commit hashes resolved133 in [references/bitbucket.md](references/bitbucket.md) as `--base` and134 `--head`; do not let local checkout state choose either side of the diff.135136 Done when the final behavior and existing reviewer-visible claims can be137 compared, and any claim that the PR is large has a direct-base breakdown138 whose rows reconcile to the total.1391404. Make the freshness decision.141142 Compare the final behavior, opening problem/fix context, reproduction steps,143 important states, required workflow explanation, verification evidence,144 title, and existing attachments. Check whether each evidence item uses the145 required form for its claim, including actual screenshots for static UI and146 a recording for motion or manual interaction. Do not count a technical147 diagram as practical evidence. Apply the freshness rule above. If proof is148 `current`, report why and stop without any PR mutation.149150 Done when the result is `current`, `stale`, or `blocked`, with the affected151 claim or evidence named.1521535. Pass the refresh preflight for stale proof.154155 For a `github.com` PR, confirm156 `gh auth status --active --hostname github.com` and require `gh` 2.99.0 or157 newer before a visual refresh. Identify whether158 practical capture needs a browser or device and whether the finished body159 requires client-side inspection, such as a Mermaid diagram. When160 rendered-media verification will run, require curl 8.4 or newer so download161 limits apply even when a server omits `Content-Length`; the repository162 verifier preflights this and stops with an upgrade instruction. Do not make163 an interactive browser a prerequisite for `github.com` upload or ordinary164 rendered-body checks, and do not require attachment or browser capabilities165 for text-only proof.166167 For Bitbucket Cloud, follow the preflight in168 [references/bitbucket.md](references/bitbucket.md). Treat live TWG help as169 the final command contract. When a TWG or Atlassian skill is already170 available, load it if it improves current provider or authentication171 guidance. Keep it optional so this public skill still works with the CLI172 alone. A visual refresh also requires an interactive browser for the173 finished rendered-media check; a text-only refresh does not.174175 Done when provider authentication and repository access work and every176 browser or device capability genuinely needed later in the refresh is177 available, or the workflow has stopped with a concrete repair request.1781796. Capture only the changed practical evidence.180181 Read [references/proof-selection.md](references/proof-selection.md).182 Reproduce the changed behavior and replace only evidence made stale by the183 final net diff. Read [references/screenshots.md](references/screenshots.md)184 only when visual evidence is selected; for a recording, also read185 [references/video-editing.md](references/video-editing.md). Preserve current186 evidence that remains useful.187188 Done when every changed important behavior has concise reviewer-checkable189 evidence, reproducible bugs have matched broken/fixed outcomes, static UI190 changes have actual screenshots matched to every meaningful reproducible191 baseline, motion or manual interactions have concise recordings, changes192 with both kinds of UI claim have both forms,193 every selected visual has passed model inspection for content and194 presentation, each image has a deliberate rendered size, related visuals195 are grouped when that makes comparison easier, and unchanged useful evidence196 is left alone.1971987. Explain a new or changed system or workflow.199200 When the final net diff introduces or materially changes a system or201 workflow, load `design-technical-diagrams` and create exactly one diagram by202 default. Treat the PR body as the destination and the direct-base net diff,203 relevant repository context, and changed behavior as the brief. Define the204 one system-flow question the diagram must answer before drawing it. Keep the205 diagram outside practical proof: it cannot occupy a before/after evidence206 slot or replace actual product screenshots or recordings.207208 Start from an event or person the reviewer recognizes. Show the real actors209 and systems, their atomic actions in order, important decisions, the210 artifacts or state passed between them, and the final outcome or feedback211 path. Number the primary steps when order matters. Use icons as orientation212 anchors and labels that define necessary project terms in place. Do not turn213 file names, functions, implementation buckets, or several actions hidden in214 one box into the explanation.215216 Export a static image sized for the PR body. Follow the diagram skill's217 required whole-frame, destination-size, magnified-detail, and exported-file218 visual passes. A successful render or clean geometry check is not enough.219 Read [references/mermaid.md](references/mermaid.md) if Mermaid is considered220 for a small flow.221 Skip this step when the PR does not introduce or materially change a system222 or workflow.223224 Done when a cold reviewer can follow the new or changed workflow from225 trigger to outcome without source-code context, the current rendered pixels226 have passed every visual pass, and the diagram is clearly presented as an227 explanation rather than runtime proof.2282298. Draft the smallest accurate PR update.230231 Read [references/plain-language.md](references/plain-language.md) and232 [references/body-shape.md](references/body-shape.md). Keep current sections233 that remain true. Draft only the title, body, caption, reproduction, or234 evidence changes needed to restore accuracy. Load `speak-fking-english`235 immediately before saving the complete draft, and tell it the draft is236 reviewer-facing text. Unless the user explicitly invoked that skill for this237 artifact, its compact natural-writing pass applies.238239 Done when the first two sentences explain what broke and why it matters, the240 next two explain the fix and outcome, a multi-part or unusually large PR has241 a compact change breakdown, the body reads clearly and naturally, the body242 stays within the default size budget or justifies each exception, and the243 draft is self-contained.2442459. Confirm authority and upload provider-hosted attachments.246247 Reconfirm that the calling workflow authorizes the PR mutation. Follow248 [references/screenshots.md](references/screenshots.md) when a diagram or249 visual evidence was selected. On `github.com`, reference every selected250 local image or video in the complete draft, then update the body and upload251 all files in one native command. Immediately before the write, re-read252 `headRefOid` and `body`; compare both with the snapshot from step 2. If253 either changed, restart the freshness decision instead of overwriting a254 concurrent push or human edit.255256 ```sh257 gh pr edit <full-PR-URL-resolved-in-step-2> \258 --body-file <draft-markdown-path> \259 --attach <first-media-path> \260 --attach <second-media-path>261 ```262263 Repeat `--attach` for every selected file. GitHub CLI rewrites each matching264 local Markdown reference to its provider-hosted URL. Keep media in the main265 PR body, never in a detached comment, and use a table when it makes a small266 related group or comparison easier to scan. If upload fails, use the live267 body as the retry draft, attach only files whose local references remain,268 and do not re-upload successful files. Before returning `blocked`, remove269 every broken local reference from the live body or restore the last fully270 provider-hosted body. On Bitbucket Cloud, follow the single271 `twg bb pull-requests update` operation in272 [references/bitbucket.md](references/bitbucket.md): pass the complete draft273 with `--description-file`, each selected image with `--image`, and a paired274 descriptive `--image-name`. TWG images are supported; video is not. Text275 evidence needs no attachment.276277 Done when every selected diagram and visual is provider-hosted and every278 text proof is present in the main body; an authority failure stopped before279 mutation; or a partial upload failure left the live body with no broken local280 references.28128210. Inspect the finished PR headlessly by default.283284 Follow the rendered-verification path in285 [references/screenshots.md](references/screenshots.md). On GitHub, inspect286 the title and Markdown body, then run287 `<skill-dir>/scripts/github-verify-rendered-proof --pr <full-PR-URL-resolved-in-step-2> --head <final-head-SHA-resolved-in-step-2>`.288 The verifier reads `body_html` without printing signed asset URLs, checks289 that the PR head stays on the expected final SHA, checks every rendered image290 and video, and fetches each resolved asset without forwarding the `gh` token.291 Require its status, content type, and non-empty byte checks for all assets,292 plus exact byte size for evidence uploaded during this refresh. Use an interactive browser when the body includes client-rendered293 content such as Mermaid or when the proof depends on literal page layout,294 pixel appearance, percentage image sizing, table composition, or playback.295 Remove stale proof rather than accumulating it.296297 On Bitbucket Cloud, follow the readback and verification contract in298 [references/bitbucket.md](references/bitbucket.md). Re-read the full PR with299 TWG and confirm the expected head, title, body, and embeds. For a diagram or300 image, inspect the rendered PR interactively and inspect the rendered pixels;301 TWG readback alone does not prove that Bitbucket rendered the media.302303 Done when the rendered PR accurately describes the final pushed net diff,304 with browser inspection completed for every case headless checks cannot305 prove.30630711. Hand the result back to the caller.308309 Return `current`, `refreshed`, or `blocked`, with the affected PRs. Before310 readiness, human sign-off, or merge, remind the caller to apply the Review311 gate and Sign-off gate from `AGENTS.md` to every PR. The Review gate must312 cover the exact head; Sign-off persists for the PR across later heads.313 Proof-pack does not count as review.314315 Done when the caller knows whether proof changed and which PRs still need316 an exact-head review decision or human sign-off.317318## Done means319320- Every workflow step meets its `Done when` criterion.321- A `current` result made no reviewer-visible mutation.322- A `refreshed` result changed only stale claims and evidence.323- Every affected PR explains the break and fix quickly, then proves final324 direct-base behavior in the simplest format that preserves the claim.325- Reviewer-facing text reads clearly and naturally, and matched proof is326 labeled `Before: direct base` and `After: PR`.327- A multi-part or unusually large PR shows exact direct-base `+LOC` and `-LOC`328 by reviewer-meaningful part, with every file counted once and totals reconciled.329- Textual behavior uses copyable text. Visual behavior uses provider-hosted330 media verified headlessly or, where required, through an interactive browser.331- Static UI changes use actual product screenshots, matched to the direct base332 when that baseline is meaningful and reproducible. Motion, timing, gesture,333 and manual interaction use concise edited recordings. Changes with both334 static and interactive claims include both.335- Every required workflow diagram is provider-hosted and its local export and336 fetched rendered asset both passed visual inspection, but it is presented337 only as explanation and never counted as practical evidence.338- Reproducible bug fixes show matched broken and fixed outcomes.339- A PR that introduces or materially changes a system or workflow includes one340 visually inspected diagram that explains its trigger, ordered actions,341 ownership, handoffs, and outcome without pretending to prove runtime behavior.342- The workflow did not infer publication authority from branch or PR state.343- The caller knows proof does not satisfy the exact-head review gate.