Skip to content

v1.91.267.0 docs(captain): observable questions are not the person's to answer (GSTA-124 follow-up) - #3503

Merged
capy-ai[bot] merged 5 commits into
mainfrom
gsta-124-captain-md-observable
Oct 27, 2026
Merged

capy-ai[bot] merged 5 commits into
mainfrom
gsta-124-captain-md-observable

Conversation

@garrytan

@garrytan garrytan commented Oct 26, 2026 •

Copy link
Copy Markdown
Owner
{
  "schema_version": 1,
  "pr": 3503,
  "head": "6e7b3c298f84358b474c90ba32bc3ef45b4e5792",
  "version": "1.91.258.0",
  "base": "main",
  "gate": {
    "tests": {
      "pass": 34,
      "fail": 0,
      "skip": 0
    }
  },
  "session_kind": "unattended",
  "pregate": "requires-remote cleared @007198c400f6 (1 checks, current for 6e7b3c298f84)",
  "requires_remote": [
    "free-tests.yml/macos-named-regressions: https://github.com/garrytan/gstack/actions/runs/40420942438",
    "windows-free-tests.yml/windows-free-shard: https://github.com/garrytan/gstack/actions/runs/40420942408",
    "pregate.json/remote_gate: remote-gate tree=007198c400f6 tests=9265"
  ],
  "issues": {
    "fixes": [],
    "refs": [
      3493
    ],
    "flakes": []
  },
  "review_loop": {
    "passes": 3,
    "blocking_found": 0,
    "deferred": 0,
    "noted": 0,
    "fixed": 1,
    "scope": "frozen"
  }
}

What changed

One bullet in capy/skill/gstack/captain.md section 1 ("How approvals work, per thread"), after "Always a fresh ask":

Observable questions are not the person's to answer. A question a command, a render or a measurement can settle locally, read-only and for free ("is the new path faster", "does the test endpoint take this payload", "does the test still fail") is settled by the thread: it runs the thing and reports the result. A call that changes state, reaches a live system or spends money is still an ask. Only a product or preference call goes up, with the observation already made. A Captain that receives an observable question sends it back with the check that answers it instead of relaying it.

Before: captain.md listed what always needs a fresh ask but said nothing about questions a thread can answer itself, so "is it faster?" could be relayed up as an ask. After: the thread runs the check and reports it; a Captain bounces an observable question back with the check that answers it. Plus the CHANGELOG entry under ## [Unreleased]. Docs only: no template, no generated output, no code.

Why

Follow-up to #3493 (pstack absorb item 4, GSTA-124), which carries the same rule in plan-tune/SKILL.md.tmpl and docs/proactive.md. This is the Captain-side reading. gstack holds the how; the Drive copy of captain.md needs the owner's recopy after this lands rather than a hand edit.

Approvals

Ask Date Words By Scope
Combined tstack/pstack plan (plans/absorb-tstack.md, plans/absorb-pstack.md) at full scope 2026-10-26 "Do it, send" Garry Tan (relayed by GStack Minder, GSTA-36) pstack item 4; this follow-up was requested by GStack Minder under that approval

Summary

  • Observable-questions bullet in captain.md section 1, scoped to local, read-only, free observations.
  • CHANGELOG entry.

Test Coverage

Docs only; no test added, none expected. Tests ran: tests 34 (test/capy-skill-wrapper.test.ts, test/captain-skill.test.ts, test/changelog-merge-damage.test.ts). Tests ran: typecheck count unavailable.

Pre-Landing Review

Small diff (12 lines): specialists skipped, core checklist read. Pass 1 found one INFORMATIONAL item (the bullet lacked the local/read-only/free qualifier its sibling rule in #3493 carries, and the endpoint example read as a live call), fixed in a2e53c7. Pass 2 (range eb9e25c..a2e53c7) clean. Pass 3 (range a2e53c7..6e7b3c2, one CHANGELOG sentence from the documentation audit) clean. Pre-Landing Review: 1 issue — 1 auto-fixed, 0 asked, 0 deferred, 0 noted
REVIEW_LOOP: passes=3 blocking_found=0 deferred=0 noted=0 fixed=1 scope=frozen
Gate edits: none detected (0 listed, 0 read; patterns: RH-1,RH-3,RH-4,RH-12,RH-13,RH-14,RH-15,RH-16; unlisted idioms: none)
Outside review: Codex unavailable (CLI not installed on this machine); missing outside coverage. Native adversarial passes completed on the pass-2 range (4 INFORMATIONAL notes below) and the pass-3 range (NO FINDINGS).

Review notes

Below the blocking floor (advisory, informational, test-gap or wording items); recorded here and not fixed in this PR.

  • INFORMATIONAL capy/skill/gstack/captain.md:30 "reaches a live system" where v1.91.265.0 docs: absorb four pstack principles into ETHOS.md, the observable-questions rule and candidate-side eval blinding (GSTA-124) #3493's sibling rule says "live or third-party system"; the "test endpoint takes this payload" example is a submission rather than a read.
  • INFORMATIONAL capy/skill/gstack/captain.md:32 "Only a product or preference call goes up" reads literally against the "Always a fresh ask" list above it and docs/captain.md's new-scope/conflict/access escalations; the sibling rule defines the phrase with a parenthetical.
  • INFORMATIONAL capy/skill/gstack/captain.md:32 "spends money is still an ask" can be read as overriding a cited standing approval (SPEND).
  • INFORMATIONAL CHANGELOG.md:9 the "syncs from main" claim; corrected by the documentation audit in 6e7b3c2.

Exploratory QA

No executable surface changed (one Markdown bullet and a CHANGELOG line); the smoke probes were the three test files above at the final tree (34 pass) and a read of the rendered bullet in place. No findings.

Design Review

No frontend files changed — design review skipped.

Eval Results

No prompt-related files changed — evals skipped (captain.md is a Capy-side guide, not a SKILL.md template; no paid case reads it). The PR's E2E Evals lane planned nothing paid.

Greptile Review

No Greptile comments.

Plan Completion

Captain's brief (GSTA-36, 2026-10-26): add the bullet after "Always a fresh ask", trimmed to its neighbours' length, keeping the "sends it back with the check that answers it" sentence; trial-merge against #3487 and #3496; capy-skill tests. 1 of 1 DONE. Trial merges: #3487 and #3496 conflict in CHANGELOG.md only (additive at the stamp); captain.md merges cleanly with #3496's pin 413bce8.

Verification Results

No Step 8.1 obligations; required probes: 3 test files PASS at 6e7b3c2.

Issues

Refs #3493

TODOS

No TODO items completed in this PR.

Documentation

Status: current. No documentation edits were needed; the Step 6 consistency pass found items for the parent, all recorded as decisions (nothing blocks).

Scope. Spawned ship-owned audit (gsta124b-docs-20261026T233307Z), mode edit, Steps 1, 1.5, 2–4 and 6. Base 7dc2f23, head a2e53c7 at audit time; the one later commit (6e7b3c2) changes a CHANGELOG sentence the audit itself asked for. Read in full: CHANGELOG.md (entry), capy/skill/gstack/captain.md, docs/captain.md, docs/proactive.md, capy/skill/gstack/SKILL.md, the "Working under a Captain" section of docs/capy-install.md and the capy-asks text in bin/gstack-skill-start.

Result. The new section 1 bullet is consistent with docs/captain.md (the controller already decides what needs no access, credentials, spend or cited approval; the bullet keeps spend and live-system calls as asks). It agrees with the observable-questions text in docs/proactive.md and plan-tune/SKILL.md.tmpl, which exist only on open PR #3493; this PR adds no link to them and does not depend on #3493 landing first. The bullet is deliberately stricter (local, read-only, free). The audit's one decision for the parent, that "The Drive copy of captain.md syncs from main" is unsupported (capy/skill/gstack/SKILL.md and docs/capy-install.md describe the owner recopying the folder), was applied in 6e7b3c2.

Documentation health:
CHANGELOG.md Current (entry matches the diff; wording corrected per the audit)
capy/skill/gstack/captain.md Current (the new bullet matches the described behavior)
docs/captain.md Current (no contradiction; no edit)
docs/proactive.md Current at this base (the sibling rule lives on #3493)
capy/skill/gstack/SKILL.md Current; does not repeat the new rule (debt)
docs/capy-install.md Current

Coverage debt (reported, not filled): the rule is documented only in captain.md; the lane-side "Working under a Captain" section of capy/skill/gstack/SKILL.md, the capy-asks short form in bin/gstack-skill-start and docs/captain.md (Lane discipline) do not repeat it. No diagrams touched.

Test plan

  • bun test test/capy-skill-wrapper.test.ts test/captain-skill.test.ts test/changelog-merge-damage.test.ts: 34 pass, 0 fail (gstack-evidence label tests, 6e7b3c2).
  • bun run typecheck: clean (gstack-evidence label typecheck, 6e7b3c2).
  • Full free suite on Ubicloud (gstack-pregate --stage tests --remote --spend-cap 2 --timeout 2700 --allow-repo-commands, standard-8): PREGATE_REMOTE tree=007198c400f6 tests=9265 failed=0 spent=$0.03; macOS (run 40420942438) and Windows (run 40420942408) lanes cleared from PR CI at 6e7b3c2; gstack-pregate verify: ok.

🤖 Generated with Claude Code

garrytan and others added 2 commits October 26, 2026 23:29
Captain-side reading of the rule shipped in plan-tune/SKILL.md.tmpl and
docs/proactive.md (#3493, pstack item 4): a question a command, render or
measurement can settle is settled by the thread; a Captain that receives one
sends it back with the check that answers it. gstack holds the how; the Drive
copy of captain.md syncs from main.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@trunk-io

trunk-io Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

😎 This pull request was merged.

garrytan and others added 3 commits October 26, 2026 23:31
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
….267.0

FILES: CHANGELOG.md VERSION agents-digest/gstack-AGENTS.md package.json
MERGE_CONDITION: sha=6e7b3c298f84358b474c90ba32bc3ef45b4e5792
next: NEW_VERSION=1.91.267.0; commit and push only the stamp diff above (FILES), with no edit of your own: the train's verify accepts the CHANGELOG only as the base's plus this PR's entry re-headed; merge with the expected head 6e7b3c2 and recompute on a stale queue.
GSTACK_RESULT: skill=restamp status=complete run=/workspace/gstack/.gstack/tmp/restamp-journal.json

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@github-actions github-actions Bot changed the title docs(captain): observable questions are not the person's to answer (GSTA-124 follow-up) v1.91.267.0 docs(captain): observable questions are not the person's to answer (GSTA-124 follow-up) Oct 27, 2026
@capy-ai
capy-ai Bot merged commit d9b0d60 into main Oct 27, 2026
62 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant