landing-report
The facts
Its description
Read-only queue dashboard for workspace-aware ship. (gstack) Triggers: landing report; version queue; ship queue; what version comes next; show open PR versions
The description the agent reads to decide when to use it. Phrases the author says should start it.
When it starts
The agent only sees the name and the one-line description (a read-only queue dashboard for workspace-aware ship), so it gets picked when someone wants to see which version numbers are already claimed by open PRs or sibling worktrees, or what version their next /ship would take. Nothing in the name or description suggests it is loaded by another skill; it is triggered by a person asking about the version queue.
Things a person might say (the model's guesses)
- “what version will my next /ship claim?”
- “show me the landing report”
- “which versions are the open PRs claiming right now?”
A model's summary of when it is used.
Tools it may use, or may not
allowed-tools: Bash, Read
Tools it may use while it runs without asking you first.
Runs scripts
bin/gstack-skill-start, scripts/question-registry.ts, bin/gstack-question-preference, bin/gstack-question-log, bin/gstack-skill-end (first 5 of 8 lines)
Scripts the text names. Found by matching words, so treat them as pointers.
Stops for a person
3 lines stop to ask a person
Lines that stop and wait for a person before going on. Found by matching words, so treat them as pointers.
Licence
MIT, from LICENSE
The terms its author shares it under, which let it be shown here.
Other files in this skill (1) Close
The text
Most marks come from matching words in the file, so treat them as pointers.
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly --> <!-- Regenerate: bun run gen:skill-docs -->
/landing-report — Version Queue Dashboard
Raw lines 1 to 20Boilerplate, lines 21 to 77. The same text appears in 45 other files here. Close
Telemetry (run last)
After workflow completion, log telemetry with ONE command. OUTCOME is success/error/abort/unknown; SESSION_ID and TEL_START are the values the preamble's skill-start output echoed. It also drains the artifacts-sync queue (the former skill-end sync step — do not run gstack-brain-sync separately).
PLAN MODE EXCEPTION — ALWAYS RUN: This writes telemetry to $GSTACK_STATE_ROOT/analytics/, matching preamble analytics writes.
~/.claude/skills/gstack/bin/gstack-skill-end --skill "landing-report" --outcome OUTCOME \
--session-id "SESSION_ID" --tel-start "TEL_START" --used-browse USED_BROWSE \
--error-message "ERROR_MESSAGE" --failed-step "FAILED_STEP" 2>/dev/null || trueReplace OUTCOME and USED_BROWSE (yes/no) before running; substitute SESSION_ID/TEL_START from the skill-start echoes. ERROR_MESSAGE/FAILED_STEP are "" unless outcome is error. If the command is missing (stale install), skip telemetry — it never blocks the workflow.
Raw lines 78 to 100
Why this skill exists
When you're running 5-10 parallel Conductor workspaces, it helps to see — at a glance — which version numbers are claimed, by whom, and what slot your next /ship would land in. This skill is a read-only call into the same bin/gstack-next-version utility /ship uses, but with nothing mutating. Think of it as gh pr list for VERSION numbers.
Raw lines 101 to 110
Step 1: Detect platform and base branch
Use the current PR's base branch, else the repository's default branch, else main.
BASE_BRANCH=$(gh pr view --json baseRefName -q .baseRefName 2>/dev/null || \
gh repo view --json defaultBranchRef -q .defaultBranchRef.name 2>/dev/null || \
echo main)
echo "Base branch: $BASE_BRANCH"Raw lines 111 to 123
Step 2: Read current state
CURRENT_VERSION=$(cat VERSION 2>/dev/null | tr -d '[:space:]' || echo "0.0.0.0")
git fetch origin "$BASE_BRANCH" --quiet 2>/dev/null || true
BASE_VERSION=$(git show "origin/$BASE_BRANCH:VERSION" 2>/dev/null | tr -d '[:space:]' || echo "$CURRENT_VERSION")
echo "origin/$BASE_BRANCH VERSION: $BASE_VERSION"
echo "branch HEAD VERSION: $CURRENT_VERSION"Raw lines 124 to 135
Step 3: Query the queue
Call the util once per bump level (micro, patch, minor, major) so the user sees what each level would claim.
for LEVEL in micro patch minor major; do
bun --no-env-file --config=/dev/null run ~/.claude/skills/gstack/bin/gstack-next-version \
--base "$BASE_BRANCH" \
--bump "$LEVEL" \
--current-version "$BASE_VERSION" \
> "/tmp/landing-$LEVEL.json" 2>/dev/null || echo '{"offline":true}' > "/tmp/landing-$LEVEL.json"
doneRaw lines 136 to 152
Step 4: Render the dashboard
Build a single table output. Use the patch-level JSON as canonical for queue + siblings (they're identical across bump levels; only .version differs).
Use jq to extract:
.host— github | gitlab | unknown.offline— did the query fail?.claimed— array of {pr, branch, version, url}.siblings— all sibling worktrees found.active_siblings— subset that's likely about to ship
Render in this exact format:
╔══════════════════════════════════════════════════════════════════╗
║ GSTACK LANDING REPORT ║
╠══════════════════════════════════════════════════════════════════╣
║ Repo: <owner/repo> ║
║ Base: <base> @ v<base-version> ║
║ Host: <github|gitlab|unknown> ║
║ Status: <ONLINE|OFFLINE: queue-awareness unavailable> ║
╚══════════════════════════════════════════════════════════════════╝
Open PRs claiming versions on <base>:
#1152 alpha-branch → v1.7.0.0
#1153 beta-branch → v1.7.0.0 ⚠ collision with #1152
#1151 gamma-branch → v1.6.5.0
Sibling Conductor worktrees (<workspace_root>):
path branch VERSION last commit PR
──────────────────────────────────────────────────────────────────────────────────
../tokyo-v2 feat/dashboard v1.7.1.0 3h ago none ★ active
../melbourne feat/review v1.6.0.0 12d ago none
../osaka feat/payments v1.8.0.0 5h ago #1155
★ active = has VERSION ahead of base AND last commit < 24h AND no open PR.
These are the ones likely to ship soon.
If you ran /ship right now, you'd claim:
micro bump: v1.6.3.1 (queue-advance: none)
patch bump: v1.7.1.0 (bumped past claimed 1.7.0.0)
minor bump: v1.8.0.0 (bumped past claimed 1.7.0.0)
major bump: v2.0.0.0 (no major collisions)For offline / unknown-host output, print a shorter block:
╔══════════════════════════════════════════════════════════════════╗
║ GSTACK LANDING REPORT ║
╠══════════════════════════════════════════════════════════════════╣
║ Status: OFFLINE — queue-awareness unavailable ║
║ Reason: <offline reason from warnings> ║
╚══════════════════════════════════════════════════════════════════╝
Fallback: local VERSION bumps still work, but collisions cannot be detected.Raw lines 153 to 214
Step 5: Suggest next action
After rendering the table, suggest ONE of:
- If there are collisions in the queue (two open PRs claim the same version): "⚠ Two open PRs collide on v<X>. Whoever merges second will either overwrite the first's CHANGELOG entry or land a duplicate. Consider asking one author to rerun /ship to pick up the next free slot."
- If an active sibling outranks the user's branch version: "Sibling worktree <path> has v<X> committed <N>h ago and hasn't PR'd yet. If that work ships first, your branch will need to rebump at land time."
- If everything looks clean: "Queue is clean. Next /ship will claim a slot without conflict."
If the sibling table shows worktrees whose last commit is weeks old, offer bin/gstack-worktree-audit (read-only: size, merge state, tracked edits, remote, PR, last chat and a suggested bucket per worktree; it removes nothing).
Raw lines 215 to 234
Plan Mode
PLAN MODE EXCEPTION — ALWAYS RUN. This skill is entirely read-only: no file writes, no git mutations, no network state changes. Safe to run in plan mode.
Raw lines 235 to 238From garrytan/gstack at 3f79d81, 2026-11-01. Skills read by DeepSeek V4.1 Flash on 2026-11-04. Summary and techniques by Claude Opus 5.5 on 2026-11-06.