Skill Tracer
Skills › gstack › ship › capy-pr.md

capy-pr.md

45 lines · ship/sections/capy-pr.md at 3f79d81

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1<!-- AUTO-GENERATED from capy-pr.md.tmpl — do not edit directly -->
2<!-- Regenerate: bun run gen:skill-docs -->

<!-- AUTO-GENERATED from capy-pr.md.tmpl — do not edit directly --> <!-- Regenerate: bun run gen:skill-docs -->

Raw lines 1 to 2
3## Step 19-C: Capy PR body (What changed, Why, Blast radius, Approvals)
4
5Read only when Step 19 printed `CAPY_PR: on`. Under Capy a person decides the merge from the PR and
6the READY report, through a Captain, so the body shows what changed in pictures, why, and who
7approved what. Guide: `captain.md` beside the Capy `gstack` skill's SKILL.md.
8
9**Order.** The `gstack-ship-receipt` block stays first when Step 19 writes one. Then `## What changed`,
10`## Why`, `## Blast radius` and `## Approvals`, then the standard sections below. Keep `## Summary` to
11commit themes; do not repeat the captions.
131. **Pick the evidence:** one to three before/after pairs, highest-signal first. The first is the
14 key image.
15 - UI change: screenshot the changed screen at the base and on this branch with the browse
16 flow, or your host's browser, at the same size.
17 - Skill or prompt change: `~/.claude/skills/gstack/bin/gstack-pr-shots --path <template or SKILL.md> --heading "<changed section>" --caption "<what changed and why>"`.
18 - CLI change: save the output of a command this ship already runs, at the base and on this
19 branch, to files inside the repository (`.gstack/tmp/before.txt`, `.gstack/tmp/after.txt`), then
20 `~/.claude/skills/gstack/bin/gstack-pr-shots --before <file> --after <file> --kind terminal --caption "<…>"`.
21 Never run a command with side effects just to make a picture.
22 - No visible surface: picture the source section or test output that best shows the change.
23 `gstack-pr-shots` refuses inputs that match the secret scanner (`PR_SHOTS_INPUT_REFUSED`). Remove
24 the secret from the capture; never work around the refusal.
252. **Read `SHOT_PNG:`.** A path: use it. `unavailable (…)`: screenshot the printed `shot.html` with your
26 own browser at 880 px wide and use that PNG. `failed (…)`: use the text version only.
273. **Upload.** Only for a public repository (`gh repo view --json visibility -q .visibility` prints
28 `PUBLIC`). A private repository gets the text version, unless the person approved images for it
29 (record that with `gstack-approvals add`). Upload each PNG with Capy's PR asset tool
30 (`tools.pr.uploadAsset`). Embed exactly the URL it returns, with the caption as alt text:
31 `![<caption>](<url>)` (a returned bare video URL stays on its own line). If an upload fails,
32 retry once, and only for a transient error. Otherwise use the text version and write
33 `image upload failed: <reason>` under the caption. Never block publication on an image.
344. **Under every image:** a one-line caption saying what changed and why, then the contents of the
35 printed `text.md` (a collapsed text before/after, for readers who cannot see the image and for search).
365. **`## Why`:** two or three sentences. The first states the problem in the person's words (the issue,
37 the failed run, or their request, quoted); the rest say what changes for them. No inventory: BAD "Adds
38 a lint and a CI step." GOOD "'The review loop is too overzealous.' Pass 2 now reads only pass 1's range."
396. **`## Blast radius`:** the body template's item, written once, here: what else the change touches and
40 the one fact that makes that safe, with the evidence-ladder rung it reached (the `/investigate` skill's Blast radius section, when present).
417. **`## Approvals`:** the output of `~/.claude/skills/gstack/bin/gstack-approvals render`, verbatim. It
42 escapes its cells, and the receipt never reads it as an approval citation. On
43 `APPROVAL_RECORD_UNAVAILABLE` keep its text and say so in the READY report. Never type rows by hand.
448. **READY report:** attach the key image's PNG to the report you send (Capy's message
45 attachments) and give its uploaded URL, so the Captain can show it inline.

Step 19-C: Capy PR body (What changed, Why, Blast radius, Approvals)

Read only when Step 19 printed CAPY_PR: on. Under Capy a person decides the merge from the PR and the READY report, through a Captain, so the body shows what changed in pictures, why, and who approved what. Guide: captain.md beside the Capy gstack skill's SKILL.md.

Order. The gstack-ship-receipt block stays first when Step 19 writes one. Then ## What changed, ## Why, ## Blast radius and ## Approvals, then the standard sections below. Keep ## Summary to commit themes; do not repeat the captions.

  1. Pick the evidence: one to three before/after pairs, highest-signal first. The first is the key image.
  2. UI change: screenshot the changed screen at the base and on this branch with the browse flow, or your host's browser, at the same size.
  3. Skill or prompt change: ~/.claude/skills/gstack/bin/gstack-pr-shots --path <template or SKILL.md> --heading "<changed section>" --caption "<what changed and why>".
  4. CLI change: save the output of a command this ship already runs, at the base and on this branch, to files inside the repository (.gstack/tmp/before.txt, .gstack/tmp/after.txt), then ~/.claude/skills/gstack/bin/gstack-pr-shots --before <file> --after <file> --kind terminal --caption "<…>". Never run a command with side effects just to make a picture.
  5. No visible surface: picture the source section or test output that best shows the change. gstack-pr-shots refuses inputs that match the secret scanner (PR_SHOTS_INPUT_REFUSED). Remove the secret from the capture; never work around the refusal.
  6. **Read SHOT_PNG:.** A path: use it. unavailable (…): screenshot the printed shot.html with your own browser at 880 px wide and use that PNG. failed (…): use the text version only.
  7. Upload. Only for a public repository (gh repo view --json visibility -q .visibility prints PUBLIC). A private repository gets the text version, unless the person approved images for it (record that with gstack-approvals add). Upload each PNG with Capy's PR asset tool (tools.pr.uploadAsset). Embed exactly the URL it returns, with the caption as alt text: ![<caption>](<url>) (a returned bare video URL stays on its own line). If an upload fails, retry once, and only for a transient error. Otherwise use the text version and write image upload failed: <reason> under the caption. Never block publication on an image.
  8. Under every image: a one-line caption saying what changed and why, then the contents of the printed text.md (a collapsed text before/after, for readers who cannot see the image and for search).
  9. **## Why:** two or three sentences. The first states the problem in the person's words (the issue, the failed run, or their request, quoted); the rest say what changes for them. No inventory: BAD "Adds a lint and a CI step." GOOD "'The review loop is too overzealous.' Pass 2 now reads only pass 1's range."
  10. **## Blast radius:** the body template's item, written once, here: what else the change touches and the one fact that makes that safe, with the evidence-ladder rung it reached (the /investigate skill's Blast radius section, when present).
  11. **## Approvals:** the output of ~/.claude/skills/gstack/bin/gstack-approvals render, verbatim. It escapes its cells, and the receipt never reads it as an approval citation. On APPROVAL_RECORD_UNAVAILABLE keep its text and say so in the READY report. Never type rows by hand.
  12. READY report: attach the key image's PNG to the report you send (Capy's message attachments) and give its uploaded URL, so the Captain can show it inline.
Raw lines 3 to 45
Names a skill gstack :7
Runs code bin/gstack-pr-shots :17
Involves a person unless the person approve :28
Names a skill investigate :40
Runs code bin/gstack-approvals :41