From a499bf80d6629d2dc0edd167162d5e559de7df88 Mon Sep 17 00:00:00 2001 From: garrytan Date: Tue, 3 Nov 2026 03:44:42 +0000 Subject: [PATCH] docs: say render prints one line on public repositories (GST-1160) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --- capy/skill/gstack/captain.md | 3 ++- docs/captain.md | 3 ++- docs/skills.md | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/capy/skill/gstack/captain.md b/capy/skill/gstack/captain.md index 5f462fe86..89fa71058 100644 --- a/capy/skill/gstack/captain.md +++ b/capy/skill/gstack/captain.md @@ -60,7 +60,8 @@ gstack-approvals render # the ## Approvals se Drive folder. `gstack-approvals path` prints the chosen mirror and `READ_ALSO:` roots, which reads still merge. `GSTACK_APPROVALS_MIRROR=0` turns the mirror off, and `gstack-approvals sync` restores the local copy. - **The durable copies** are the `## Approvals` sections in the thread's report and in the PR body. Paste - `render` output into them; never type rows by hand. + `render` output into them; never type rows by hand. On a public repository (or unknown visibility) + `render` prints only `Approved: yes|no (record )`; `gstack-approvals list` shows the full record. - **Secret-free.** Every field passes gstack's secret scanner before it is written. A hit refuses the row (`APPROVAL_RECORD_SECRET`, which names the field and rule, never the text). Write `[redacted]` in place of the secret, or ask the person to restate. diff --git a/docs/captain.md b/docs/captain.md index b09778c50..47a20b058 100644 --- a/docs/captain.md +++ b/docs/captain.md @@ -369,7 +369,8 @@ adopting this starts from **A. The record.** Every lane keeps an `## Approvals` table in its report and PR body, rendered by `gstack-approvals render`: date, what was asked, the owner's exact words, who -relayed them, what the answer covers, what is pending. Standing approvals are cited with +relayed them, what the answer covers, what is pending. On a public repository (or unknown +visibility) `render` prints only `Approved: yes|no (record )` for the PR body. Standing approvals are cited with their rule; a fresh ask is always needed for a product or behaviour decision, spend over a cap, anything published outside the repository, a threshold, budget, trial-count or case-kind change, closing a contribution without landing it, and anything destructive. diff --git a/docs/skills.md b/docs/skills.md index 18dadd110..5e46ce797 100644 --- a/docs/skills.md +++ b/docs/skills.md @@ -755,7 +755,7 @@ A lot of branches die when the interesting work is done and only the boring rele 1. **`## What changed`**: one to three captioned before/after images from `gstack-pr-shots` or a UI screenshot, highest-signal first, with a collapsed text version under each. 2. **`## Why`**: two or three sentences. The first states the problem in the person's words (the issue, the message, the failing run), then the cause and the user-visible effect. 3. **`## Blast radius`**: what else the change touches and the one fact that makes that safe, with the evidence-ladder rung that fact reached (a test that exercises the shared path, a grep over every caller, a measured run). A change to a shared helper, a generated file, a selection list or a policy default always has one; a leaf fix says so in one line. -4. **`## Approvals`**: the table from `gstack-approvals render`, verbatim. +4. **`## Approvals`**: the output of `gstack-approvals render`, verbatim. On a private repository that is the table; on a public repository, or one whose visibility gh cannot read, it is only `Approved: yes|no (record )`, because GitHub keeps every earlier version of a PR description. Before the body is composed, `gstack-prose-lint` reads the Why, Summary and Blast radius drafts (`--sections 'Why,Summary,Blast radius' --gate`) and the CHANGELOG entry (`--base origin/ --gate`), and a `PROSE_LINT_FOUND` line names the sentence to rewrite; the rest of the body is advisory. The Captain's merge-ask template (`captain/templates/merge-ask.md`) carries the same four sections, so a READY report and its PR say the same thing.