mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-22 12:50:50 +02:00
Detect host-native browser tools before offering the isolated local Chromium fallback, add a common readiness fixture, harden managed browser startup, and verify standards installs expose one canonical QA skill.
173 lines
7.6 KiB
Markdown
173 lines
7.6 KiB
Markdown
<!-- GENERATED by scripts/gstack2/generate-skill-tree.ts; do not edit. -->
|
|
<!-- GSTACK2_PROVENANCE source=landing-report/SKILL.md.tmpl base=bb57306d98c97011b0919c6132705a15b1579781 blob=32a8cc1ab036b1ff8692f0400b68d8b56224a251 baseline_render_sha256=bfffdaf9d78e60374207ec8119b735e3e2d094f8a0dc1bb8c0abed5f085b4569 ported_render_sha256=ae5050b0558b5324f58ee9181dc83ac0189b63da70d94f86792c08e112765fe9 disposition=BUG_FIX -->
|
|
<!-- GSTACK2_ROUTING replacement=$ship --mode Prepare --module landing-report visibility=primary depth=standard mutation=report-only web=none -->
|
|
|
|
<!-- GSTACK2_LEGACY_BODY_START source=landing-report -->
|
|
## Host-neutral runtime bindings
|
|
|
|
These assignments select stable paths only; they do not install anything or grant consent:
|
|
|
|
```bash
|
|
GSTACK_HOME="${GSTACK_HOME:-$HOME/.gstack}"
|
|
GSTACK_ROOT="$GSTACK_HOME"
|
|
GSTACK_STATE_ROOT="$GSTACK_HOME"
|
|
GSTACK_BIN="$GSTACK_HOME/bin"
|
|
BUN_CMD="$GSTACK_BIN/bun"
|
|
B="$GSTACK_BIN/browse"
|
|
D="$GSTACK_BIN/gstack-design"
|
|
P="$GSTACK_BIN/make-pdf"
|
|
```
|
|
# $ship --mode Prepare --module landing-report — Version Queue Dashboard
|
|
|
|
|
|
|
|
---
|
|
|
|
## 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
|
|
`$GSTACK_BIN/gstack-next-version` utility `/ship` uses, but with nothing mutating.
|
|
Think of it as `gh pr list` for VERSION numbers.
|
|
|
|
---
|
|
|
|
## Step 1: Detect platform and base branch
|
|
|
|
Same detection as other gstack skills.
|
|
|
|
```bash
|
|
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"
|
|
```
|
|
|
|
---
|
|
|
|
## Step 2: Read current state
|
|
|
|
```bash
|
|
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"
|
|
```
|
|
|
|
---
|
|
|
|
## Step 3: Query the queue
|
|
|
|
Call the util three times — once for each bump level — so the user sees what
|
|
they'd claim for micro/patch/minor/major. Cheap (same gh call cached by bun).
|
|
|
|
```bash
|
|
for LEVEL in micro patch minor major; do
|
|
$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"
|
|
done
|
|
```
|
|
|
|
---
|
|
|
|
## 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.
|
|
```
|
|
|
|
---
|
|
|
|
## Step 5: Suggest next action
|
|
|
|
After rendering the table, suggest ONE of:
|
|
|
|
1. **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."
|
|
|
|
2. **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."
|
|
|
|
3. **If everything looks clean:**
|
|
"Queue is clean. Next /ship will claim a slot without conflict."
|
|
|
|
---
|
|
|
|
## 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.
|
|
<!-- GSTACK2_LEGACY_BODY_END source=landing-report -->
|
|
|
|
<!-- GSTACK2_BUG_FIX_START pr=679 anchor=GSTACK2_FIX_679_MATCH_USER_LANGUAGE -->
|
|
## Upstream judgment port: PR #679
|
|
|
|
[Match the user language](https://github.com/garrytan/gstack/pull/679)
|
|
|
|
### User-language rule
|
|
|
|
Write questions, progress updates, reports, and artifacts in the language used by the user. Source material, code identifiers, commands, and quotations may remain in their original language when translating them would reduce accuracy.
|
|
<!-- GSTACK2_BUG_FIX_END pr=679 -->
|