feat(gsd): add browser-executable and runtime-executable UAT types (#1620)

New UAT types skip human pause, enabling automated browser and script
verification by the engine.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
TÂCHES 2026-03-20 10:41:57 -06:00 committed by GitHub
parent d500576191
commit 29bdd929ce
3 changed files with 6 additions and 2 deletions

View file

@ -155,7 +155,7 @@ const DISPATCH_RULES: DispatchRule[] = [
uatContent ?? "",
basePath,
),
pauseAfterDispatch: uatType !== "artifact-driven",
pauseAfterDispatch: uatType !== "artifact-driven" && uatType !== "browser-executable" && uatType !== "runtime-executable",
};
},
},

View file

@ -775,7 +775,7 @@ export function parseTaskPlanIO(content: string): { inputFiles: string[]; output
* The four UAT classification types recognised by GSD auto-mode.
* `undefined` is returned (not this union) when no type can be determined.
*/
export type UatType = 'artifact-driven' | 'live-runtime' | 'human-experience' | 'mixed';
export type UatType = 'artifact-driven' | 'live-runtime' | 'human-experience' | 'mixed' | 'browser-executable' | 'runtime-executable';
/**
* Extract the UAT type from a UAT file's raw content.
@ -799,6 +799,8 @@ export function extractUatType(content: string): UatType | undefined {
const rawValue = modeBullet.slice('UAT mode:'.length).trim().toLowerCase();
if (rawValue.startsWith('artifact-driven')) return 'artifact-driven';
if (rawValue.startsWith('browser-executable')) return 'browser-executable';
if (rawValue.startsWith('runtime-executable')) return 'runtime-executable';
if (rawValue.startsWith('live-runtime')) return 'live-runtime';
if (rawValue.startsWith('human-experience')) return 'human-experience';
if (rawValue.startsWith('mixed')) return 'mixed';

View file

@ -25,6 +25,8 @@ You are the UAT runner. Execute every check defined in `{{uatPath}}` as deeply a
### Automation rules by mode
- `artifact-driven` — verify with shell commands, scripts, file reads, and artifact structure checks.
- `browser-executable` — use browser tools to navigate to the target URL and verify expected behavior. Capture screenshots as evidence. Record pass/fail with specific assertions.
- `runtime-executable` — execute the specified command or script. Capture stdout/stderr as evidence. Record pass/fail based on exit code and output.
- `live-runtime` — exercise the real runtime path. Start or connect to the app/service if needed, use browser/runtime/network checks, and verify observable behavior.
- `mixed` — run all automatable artifact-driven and live-runtime checks. Separate any remaining human-only checks explicitly.
- `human-experience` — automate setup, preconditions, screenshots, logs, and objective checks, but do **not** invent subjective PASS results. Mark taste-based, experiential, or purely human-judgment checks as `NEEDS-HUMAN` and use an overall verdict of `PARTIAL` unless every required check was objective and passed.