gsd-pi 2.48.0-dev.2e7390c → 2.48.0-dev.ced2eca
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/resources/extensions/gsd/auto-dispatch.js +17 -2
- package/dist/resources/extensions/gsd/auto-post-unit.js +17 -3
- package/dist/resources/extensions/gsd/auto-worktree.js +5 -2
- package/dist/resources/extensions/gsd/commands/handlers/auto.js +43 -3
- package/dist/resources/extensions/gsd/git-service.js +11 -10
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +223 -56
- package/dist/resources/extensions/gsd/prompts/run-uat.md +4 -4
- package/dist/resources/extensions/gsd/worktree-command.js +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +12 -12
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +12 -12
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +2 -2
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/worktree-cli.js +1 -1
- package/package.json +1 -1
- package/src/resources/extensions/github-sync/tests/commit-linking.test.ts +8 -4
- package/src/resources/extensions/gsd/auto-dispatch.ts +18 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +18 -3
- package/src/resources/extensions/gsd/auto-worktree.ts +4 -2
- package/src/resources/extensions/gsd/commands/handlers/auto.ts +46 -3
- package/src/resources/extensions/gsd/git-service.ts +12 -11
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +223 -56
- package/src/resources/extensions/gsd/prompts/run-uat.md +4 -4
- package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/auto-stash-merge.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +14 -12
- package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/git-service.test.ts +19 -9
- package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/parallel-merge.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/run-uat.test.ts +68 -0
- package/src/resources/extensions/gsd/worktree-command.ts +1 -1
- /package/dist/web/standalone/.next/static/{uTZ196cPUij3KcIDCweR6 → PTL5V00OW8q4-092tUQKx}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{uTZ196cPUij3KcIDCweR6 → PTL5V00OW8q4-092tUQKx}/_ssgManifest.js +0 -0
|
@@ -343,6 +343,74 @@ test('(m) non-artifact UAT skip', async () => {
|
|
|
343
343
|
}
|
|
344
344
|
});
|
|
345
345
|
|
|
346
|
+
test('(o) verdict gate: PARTIAL is acceptable for mixed/human-experience/live-runtime UAT types', () => {
|
|
347
|
+
// This test verifies the contract that extractUatType correctly identifies
|
|
348
|
+
// the modes where PARTIAL should not block progression.
|
|
349
|
+
// The verdict gate in auto-dispatch.ts uses this to build acceptableVerdicts.
|
|
350
|
+
const mixedType = extractUatType(makeUatContent('mixed'));
|
|
351
|
+
const humanExpType = extractUatType(makeUatContent('human-experience'));
|
|
352
|
+
const liveRuntimeType = extractUatType(makeUatContent('live-runtime'));
|
|
353
|
+
const artifactType = extractUatType(makeUatContent('artifact-driven'));
|
|
354
|
+
const browserType = extractUatType(makeUatContent('browser-executable'));
|
|
355
|
+
const runtimeExecType = extractUatType(makeUatContent('runtime-executable'));
|
|
356
|
+
|
|
357
|
+
// These modes should allow PARTIAL (non-fully-automatable)
|
|
358
|
+
const partialAcceptableModes = ['mixed', 'human-experience', 'live-runtime'];
|
|
359
|
+
assert.ok(
|
|
360
|
+
partialAcceptableModes.includes(mixedType!),
|
|
361
|
+
`mixed → "${mixedType}" is in partialAcceptableModes`,
|
|
362
|
+
);
|
|
363
|
+
assert.ok(
|
|
364
|
+
partialAcceptableModes.includes(humanExpType!),
|
|
365
|
+
`human-experience → "${humanExpType}" is in partialAcceptableModes`,
|
|
366
|
+
);
|
|
367
|
+
assert.ok(
|
|
368
|
+
partialAcceptableModes.includes(liveRuntimeType!),
|
|
369
|
+
`live-runtime → "${liveRuntimeType}" is in partialAcceptableModes`,
|
|
370
|
+
);
|
|
371
|
+
|
|
372
|
+
// These modes should NOT allow PARTIAL (fully automatable)
|
|
373
|
+
assert.ok(
|
|
374
|
+
!partialAcceptableModes.includes(artifactType!),
|
|
375
|
+
`artifact-driven → "${artifactType}" is NOT in partialAcceptableModes`,
|
|
376
|
+
);
|
|
377
|
+
assert.ok(
|
|
378
|
+
!partialAcceptableModes.includes(browserType!),
|
|
379
|
+
`browser-executable → "${browserType}" is NOT in partialAcceptableModes`,
|
|
380
|
+
);
|
|
381
|
+
assert.ok(
|
|
382
|
+
!partialAcceptableModes.includes(runtimeExecType!),
|
|
383
|
+
`runtime-executable → "${runtimeExecType}" is NOT in partialAcceptableModes`,
|
|
384
|
+
);
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
test('(p) run-uat prompt allows PASS when human-only checks remain as NEEDS-HUMAN', () => {
|
|
388
|
+
const promptResult = loadPromptFromWorktree('run-uat', {
|
|
389
|
+
workingDirectory: '/tmp/test-project',
|
|
390
|
+
milestoneId: 'M001',
|
|
391
|
+
sliceId: 'S01',
|
|
392
|
+
uatPath: '.gsd/milestones/M001/slices/S01/S01-UAT.md',
|
|
393
|
+
uatResultPath: '.gsd/milestones/M001/slices/S01/S01-UAT-RESULT.md',
|
|
394
|
+
uatType: 'mixed',
|
|
395
|
+
inlinedContext: '<!-- no context -->',
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
// PASS verdict should be usable when automatable checks pass (even with NEEDS-HUMAN remaining)
|
|
399
|
+
assert.ok(
|
|
400
|
+
/PASS.*automatable checks passed/i.test(promptResult),
|
|
401
|
+
'prompt defines PASS as valid when all automatable checks passed',
|
|
402
|
+
);
|
|
403
|
+
assert.ok(
|
|
404
|
+
/PARTIAL.*automatable checks.*(skipped|inconclusive)/i.test(promptResult),
|
|
405
|
+
'prompt reserves PARTIAL for when automatable checks themselves are inconclusive',
|
|
406
|
+
);
|
|
407
|
+
// human-experience mode should NOT force PARTIAL when automatable checks pass
|
|
408
|
+
assert.ok(
|
|
409
|
+
!promptResult.includes('use an overall verdict of `PARTIAL`'),
|
|
410
|
+
'prompt does not force PARTIAL verdict for human-experience mode',
|
|
411
|
+
);
|
|
412
|
+
});
|
|
413
|
+
|
|
346
414
|
test('(n) stale replay guard', async () => {
|
|
347
415
|
const base = createFixtureBase();
|
|
348
416
|
try {
|
|
@@ -661,7 +661,7 @@ async function handleMerge(
|
|
|
661
661
|
// --- Deterministic merge path (preferred) ---
|
|
662
662
|
// Try a direct squash-merge first. Only fall back to LLM on conflict.
|
|
663
663
|
const commitType = inferCommitType(name);
|
|
664
|
-
const commitMessage = `${commitType}
|
|
664
|
+
const commitMessage = `${commitType}: merge worktree ${name}\n\nGSD-Worktree: ${name}`;
|
|
665
665
|
|
|
666
666
|
// Reconcile worktree DB into main DB before squash merge
|
|
667
667
|
const wtDbPath = join(worktreePath(basePath, name), ".gsd", "gsd.db");
|
|
File without changes
|
|
File without changes
|