mirror of
https://github.com/garrytan/gstack.git
synced 2026-06-18 07:40:09 +02:00
feat(land): enqueue-and-return default + first-time trunk.io onboarding
On a merge queue, /land now enqueues the PR and returns by default, so you can
/land a stack of ready PRs and walk away while the queue lands them. --watch
opts into the blocking poll (and is what /land-and-deploy uses, since it deploys
the result). No-queue repos still merge synchronously.
Also: /land explains in plain English what a merge queue is and what it'll do
before submitting (teacher mode on first encounter), and when no queue is
configured it offers to set trunk.io up and hand-holds the whole flow. The
onboarding lives in one shared {{MERGE_QUEUE_SETUP}} resolver included by both
/land and /setup-deploy (DRY).
Atomic .tmpl + gen:skill-docs regen. The postfail-ordering test is updated in
the same commit because 4.3 was renamed (Wait -> enqueue/watch); it now matches
the section number so the rename stays bisect-clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -292,12 +292,12 @@ export const E2E_TOUCHFILES: Record<string, string[]> = {
|
||||
// bin/gstack-merge (lib/merge.ts), so those are dependencies of every
|
||||
// land-and-deploy E2E — a change to the land skill or the merge helper must
|
||||
// re-run the composition path.
|
||||
'land-and-deploy-workflow': ['land-and-deploy/**', 'land/**', 'bin/gstack-merge', 'lib/merge.ts', 'scripts/gen-skill-docs.ts'],
|
||||
'land-and-deploy-first-run': ['land-and-deploy/**', 'land/**', 'bin/gstack-merge', 'lib/merge.ts', 'scripts/gen-skill-docs.ts', 'bin/gstack-slug'],
|
||||
'land-and-deploy-workflow': ['land-and-deploy/**', 'land/**', 'bin/gstack-merge', 'lib/merge.ts', 'scripts/resolvers/merge-queue-setup.ts', 'scripts/gen-skill-docs.ts'],
|
||||
'land-and-deploy-first-run': ['land-and-deploy/**', 'land/**', 'bin/gstack-merge', 'lib/merge.ts', 'scripts/resolvers/merge-queue-setup.ts', 'scripts/gen-skill-docs.ts', 'bin/gstack-slug'],
|
||||
'land-and-deploy-review-gate': ['land-and-deploy/**', 'land/**', 'bin/gstack-review-read'],
|
||||
'canary-workflow': ['canary/**', 'browse/src/**'],
|
||||
'benchmark-workflow': ['benchmark/**', 'browse/src/**'],
|
||||
'setup-deploy-workflow': ['setup-deploy/**', 'bin/gstack-merge', 'lib/merge.ts', 'scripts/gen-skill-docs.ts'],
|
||||
'setup-deploy-workflow': ['setup-deploy/**', 'bin/gstack-merge', 'lib/merge.ts', 'scripts/resolvers/merge-queue-setup.ts', 'scripts/gen-skill-docs.ts'],
|
||||
|
||||
// Sidebar agent
|
||||
'sidebar-navigate': ['browse/src/server.ts', 'browse/src/sidebar-agent.ts', 'browse/src/sidebar-utils.ts', 'extension/**'],
|
||||
|
||||
@@ -39,13 +39,15 @@ describe("PR #1620 post-failure PR-state check in /land template", () => {
|
||||
expect(readTmpl()).toMatch(/### 4\.2a: Post-failure PR-state check/);
|
||||
});
|
||||
|
||||
test("post-failure check comes before the wait step", () => {
|
||||
test("post-failure check comes before the landing step (4.3)", () => {
|
||||
const body = readTmpl();
|
||||
const postfail = body.indexOf("### 4.2a: Post-failure PR-state check");
|
||||
const wait = body.indexOf("### 4.3: Wait for it to land");
|
||||
// 4.3 is the landing step (enqueue-and-return by default, or --watch). Match
|
||||
// the section number, not its title, so D4's rename doesn't break the order check.
|
||||
const landing = body.indexOf("### 4.3:");
|
||||
expect(postfail).toBeGreaterThan(-1);
|
||||
expect(wait).toBeGreaterThan(-1);
|
||||
expect(postfail).toBeLessThan(wait);
|
||||
expect(landing).toBeGreaterThan(-1);
|
||||
expect(postfail).toBeLessThan(landing);
|
||||
});
|
||||
|
||||
test("Universal invariant + upstream gh bug references", () => {
|
||||
|
||||
Reference in New Issue
Block a user