feat(skills): third-party web-actions contract — offer to drive vendor-site steps, never just dump a manual list

When a workflow needs something done on an external website the user
controls (register an API key, create a vendor account, configure a
dashboard/webhook/OAuth app), five skills (ship, spec, office-hours,
setup-deploy, land-and-deploy) now follow one contract: offer to drive it
in a visible browser via gstack's own stack ($B headed + handoff/resume,
GStack Browser) behind ONE per-task consent question naming the exact site
and actions; passwords, payment, CAPTCHA, and identity stay user-performed;
captured secrets go to owner-only files or the user's secret store, never
chat/logs/history; and the credential is verified with one non-mutating API
call before any success claim — dashboards show masked placeholders, and a
401 catches them. Declining yields manual steps and a blocked-on-user mark;
nothing new is ever installed to close the gap.

New resolver token {{THIRD_PARTY_ACTIONS}} (adapted from the fork's
contract — their Aside-browser detection swapped for our own driver stack;
MIT portions noted). Parity guards bumped with growth itemized (ship
1.10->1.12 at measured 1.103x; office-hours skeleton 101K / 1.09 at
measured 1.079x); ship goldens refreshed.

Ported from time-attack/gstack (GStack 2), driver adaptation ours.

Co-authored-by: Sina Matian <sina@time-attack.dev>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Garry Tan
2026-08-14 13:03:08 -07:00
co-authored by Sina Matian Claude Fable 5
parent 3e62edf800
commit 357498803d
16 changed files with 167 additions and 5 deletions
+10 -5
View File
@@ -131,9 +131,11 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
// v1.58.5.0: pre-push-guard install (#2077) stacks on the shared first-run-guidance preamble.
// Fork port wave 2: multi-ecosystem test-detection evidence (Django/JVM
// markers, test-file census — e3259078 port) + the #1079 gh pr edit REST
// fallback grew the union to 1.090x. Kept tight; the Apple release
// adapter raises this again deliberately with its own justification.
maxSizeRatio: 1.10,
// fallback grew the union to 1.090x; the third-party web-actions
// contract (consent-gated browser drive for API-key registration etc.)
// adds ~2.3KB inline judgment, measured 1.103x. Kept tight; the Apple
// release adapter raises this again deliberately.
maxSizeRatio: 1.12,
},
'plan-ceo-review': {
skill: 'plan-ceo-review',
@@ -241,10 +243,13 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
behavioral: 'prompt',
// v1.2.0 activation lift: first-run-guidance section in the shared preamble,
// plus the P1 office-hours closing handoff (AUQ that launches the next skill).
maxSkeletonBytes: 98_000,
// Fork port wave 2: the third-party web-actions contract sits inline
// (judgment must be visible before the workflow directs the user to a
// vendor site) — skeleton 99,780 / ratio 1.079 measured. Tight headroom.
maxSkeletonBytes: 101_000,
minUnionBytes: 70_000,
mustContain: ['design doc', 'problem statement'],
maxSizeRatio: 1.07,
maxSizeRatio: 1.09,
},
'document-release': {
skill: 'document-release',