Merge remote-tracking branch 'origin/main' into dublin-v2

# Conflicts:
#	CHANGELOG.md
#	VERSION
#	agents-digest/gstack-AGENTS.md
#	office-hours/SKILL.md
#	package.json
#	plan-ceo-review/sections/review-sections.md
#	plan-devex-review/sections/review-sections.md
#	plan-eng-review/sections/review-sections.md
#	review/sections/adversarial.md
#	scripts/resolvers/review.ts
#	ship/sections/adversarial.md
#	test/fixtures/golden/factory-ship-SKILL.md
#	test/helpers/carve-guards.ts
This commit is contained in:
Garry Tan
2026-09-01 20:16:18 +00:00
151 changed files with 5955 additions and 3234 deletions
+19 -19
View File
@@ -150,7 +150,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
},
behavioral: 'external',
externalTest: 'test/skill-e2e-ship-section-loading.test.ts',
maxSkeletonBytes: 76_800, // + v1.76 AUQ proactive SESSION_KIND=spawned rule (#2733); measured 76_375
maxSkeletonBytes: 77_650, // + v1.78 AUQ spawned-trigger objectivity (explicit declaration + interactive fence); measured 77_236
minUnionBytes: 181_000, // token-reduction Phases 1-2 (v1.69.x branch); measured union 201,464
mustContain: ['VERSION', 'CHANGELOG', 'review', 'merge', 'PR'],
// v1.58.5.0: pre-push-guard install (#2077) stacks on the shared first-run-guidance preamble.
@@ -181,7 +181,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
// v1.65 merge: provisional larger-of-both-waves budget; re-measured below.
// Fork port wave 2 (#703): the repo-doc-preference block in the design
// check grew every plan-review skeleton ~0.7KB. Measured values noted.
maxSkeletonBytes: 75_900, // + v1.79 foreground-dispatch sweep (#497/#2440 third recurrence); measured 75_529
maxSkeletonBytes: 76_000, // + v1.78 AUQ objectivity + v1.79 foreground-dispatch sweep (merged); measured 75_586
minUnionBytes: 123_600, // token-reduction Phases 1-2 (v1.69.x branch): preamble bash -> bin/gstack-skill-start, onboarding -> gated emission; measured union 137,346
mustContain: ['SCOPE EXPANSION', 'SELECTIVE EXPANSION', 'HOLD SCOPE', 'SCOPE REDUCTION'],
// Default-on Codex outside-voice (codexPreflight block + CODEX_MODE branch
@@ -207,7 +207,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
// check grew every plan-review skeleton ~0.7KB. Measured values noted.
// #2499 project-scope MCP jq in the brain-sync block grew every tier-2+
// skeleton ~1.5KB (entry resolution emitted once per SKILL.md).
maxSkeletonBytes: 53_350, // + v1.76 AUQ proactive SESSION_KIND=spawned rule (#2733); measured 52_912
maxSkeletonBytes: 54_200, // + v1.78 AUQ spawned-trigger objectivity (explicit declaration + interactive fence); measured 53_773
minUnionBytes: 99_800, // token-reduction Phases 1-2 (v1.69.x branch); measured union 110,910
mustContain: ['Architecture', 'Code Quality', 'Test', 'Performance'],
// Cross-cutting preamble growth (v1.57.2.0 AUQ-failure prose fallback + the
@@ -240,7 +240,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
// tier-2+ skeleton (measured 89,184). Main's v1.64.0.0 adds ~340 B more
// (telemetry --error-message/--failed-step preamble prose, PR #769).
// Budget covers the sum of both waves.
maxSkeletonBytes: 73_750, // + v1.79 foreground-dispatch sweep (#497/#2440 third recurrence); measured 73_341
maxSkeletonBytes: 73_800, // + v1.78 AUQ objectivity + v1.79 foreground-dispatch sweep (merged); measured 73_398
minUnionBytes: 99_200, // token-reduction Phases 1-2 (v1.69.x branch); measured union 110,293
mustContain: ['design', 'visual'],
maxSizeRatio: 1.12, // D1 1.104 + main's ~0.008
@@ -264,7 +264,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
// check grew every plan-review skeleton ~0.7KB. Measured values noted.
// #2499 project-scope MCP jq in the brain-sync block grew every tier-2+
// skeleton ~1.5KB (entry resolution emitted once per SKILL.md).
maxSkeletonBytes: 65_050, // + v1.76 AUQ proactive SESSION_KIND=spawned rule (#2733); measured 64_625
maxSkeletonBytes: 65_900, // + v1.78 AUQ spawned-trigger objectivity (explicit declaration + interactive fence); measured 65_486
minUnionBytes: 99_700, // token-reduction Phases 1-2 (v1.69.x branch); measured union 110,833
mustContain: ['developer experience', 'Getting Started'],
// Default-on Codex outside-voice (codexPreflight block + CODEX_MODE branch
@@ -295,7 +295,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
// the #538 opt-out + D1 evidence directive — ratio 1.104 measured.
// #2499 project-scope MCP jq in the brain-sync block grew every tier-2+
// skeleton ~1.5KB (entry resolution emitted once per SKILL.md).
maxSkeletonBytes: 73_300, // + v1.79 foreground-dispatch sweep (#497/#2440 third recurrence); measured 72_892
maxSkeletonBytes: 73_450, // + v1.78 AUQ objectivity + v1.79 foreground-dispatch sweep (merged); measured 73_040
minUnionBytes: 115_800, // Phase 4 wave 4; measured union 118,175
mustContain: ['design doc', 'problem statement'],
maxSizeRatio: 1.12,
@@ -316,7 +316,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
// +Conductor AUQ-default-prose rule + one-way/continuation safety in the
// always-loaded AskUserQuestion Format section.
// v1.2.0 activation lift: first-run-guidance section in the shared preamble.
maxSkeletonBytes: 40_200, // + v1.79 spawned-dispatch contract (#497/#2440 third recurrence); measured 39_812
maxSkeletonBytes: 40_600, // + v1.78 AUQ objectivity + v1.79 foreground-dispatch sweep (merged); measured 40_175
minUnionBytes: 56_700, // token-reduction Phases 1-2 (v1.69.x branch): preamble bash -> bin/gstack-skill-start, onboarding -> gated emission; measured union 63,018
mustContain: ['CHANGELOG', 'Diataxis', 'coverage'],
// Two intentional additions stack on this small skill: the AUQ-failure prose
@@ -347,7 +347,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
// v1.65 merge: provisional larger-of-both-waves budget; re-measured below.
// v1.64.1.0: shared-preamble prose from the two parallel v1.64 waves lands
// the skeleton at 69,022 B; +~1 KB headroom.
maxSkeletonBytes: 53_700, // + v1.79 foreground-dispatch sweep (#497/#2440 third recurrence); measured 53_285
maxSkeletonBytes: 53_750, // + v1.78 AUQ objectivity + v1.79 foreground-dispatch sweep (merged); measured 53_342
minUnionBytes: 65_000, // token-reduction Phases 1-2 (v1.69.x branch): preamble bash -> bin/gstack-skill-start, onboarding -> gated emission; measured union 72,252
mustContain: ['Typography', 'Color', 'Aesthetic Direction'],
// Cross-cutting preamble growth (v1.57.2.0 AUQ-failure prose fallback ~2KB +
@@ -387,7 +387,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
// +Conductor AUQ-default-prose rule + one-way/continuation safety in the
// always-loaded AskUserQuestion Format section.
// v1.2.0 activation lift: first-run-guidance section in the shared preamble.
maxSkeletonBytes: 58_700, // + v1.79 foreground-dispatch sweep (#497/#2440 third recurrence); measured 58_307
maxSkeletonBytes: 58_800, // + v1.78 AUQ objectivity + v1.79 foreground-dispatch sweep (merged); measured 58_364
minUnionBytes: 64_200, // token-reduction Phases 1-2 (v1.69.x branch); measured union 71,379
mustContain: ['OWASP', 'STRIDE', 'daily', 'comprehensive', 'verif'],
// cso keeps its mode-dispatch + FP-filtering phases always-loaded, so the
@@ -424,7 +424,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
gateAfterStop: undefined, // operational multi-STOP skill, like ship
},
behavioral: 'plan',
maxSkeletonBytes: 58_300, // + v1.76 AUQ proactive SESSION_KIND=spawned rule (#2733); measured 57_861
maxSkeletonBytes: 59_150, // + v1.78 AUQ spawned-trigger objectivity (explicit declaration + interactive fence); measured 58_722
minUnionBytes: 89_000, // Phase 4 wave 1; measured union 93,357
mustContain: ['confidence', 'P1', 'P2', 'Review Army', 'adversarial'],
},
@@ -451,7 +451,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
gateAfterStop: 'EXIT PLAN MODE GATE',
},
behavioral: 'prompt',
maxSkeletonBytes: 58_400, // + v1.76 AUQ proactive SESSION_KIND=spawned rule (#2733); measured 58_006
maxSkeletonBytes: 59_300, // + v1.78 AUQ spawned-trigger objectivity (explicit declaration + interactive fence); measured 58_867
minUnionBytes: 83_400, // Phase 4 wave 1; measured union 84,304
mustContain: ['GATE: PASS', 'CROSS-MODEL ANALYSIS', 'codex exec resume', 'sandbox_mode="read-only"', 'mktemp'],
maxSizeRatio: 1.06, // measured 1.040 vs the v1.64.1.0 parity baseline
@@ -477,7 +477,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
gateAfterStop: undefined, // operational skill
},
behavioral: 'prompt',
maxSkeletonBytes: 61_600, // + v1.76 AUQ proactive SESSION_KIND=spawned rule (#2733); measured 61_160
maxSkeletonBytes: 62_450, // + v1.78 AUQ spawned-trigger objectivity (explicit declaration + interactive fence); measured 62_021
minUnionBytes: 91_000, // Phase 4 wave 1; estimated union ~94.9KB
mustContain: ['readiness', 'merge', 'canary', 'revert', 'staging'],
},
@@ -512,7 +512,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
},
behavioral: 'external',
externalTest: 'test/skill-e2e-autoplan-chain.test.ts', // phase-complete markers live ONLY in sections — its assertions ARE section-read proof
maxSkeletonBytes: 63_650, // + v1.76 AUQ proactive SESSION_KIND=spawned rule (#2733); measured 63_245
maxSkeletonBytes: 65_100, // + v1.78 AUQ objectivity + #2745 broken-install preflight arm + outside-voice honest labeling; measured 64_668
minUnionBytes: 85_000, // measured union 86,926
mustContain: ['6 Decision Principles', 'TASTE DECISION', 'USER CHALLENGE', 'consensus', 'Restore Point'],
},
@@ -541,7 +541,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
gateAfterStop: undefined,
},
behavioral: 'prompt',
maxSkeletonBytes: 56_250, // + v1.76 AUQ proactive SESSION_KIND=spawned rule (#2733); measured 55_836
maxSkeletonBytes: 57_100, // + v1.78 AUQ spawned-trigger objectivity (explicit declaration + interactive fence); measured 56_697
minUnionBytes: 64_500, // measured union 67,430
mustContain: ['HARD GATE', 'dedupe', 'quality gate', 'acceptance criteria', 'archive'],
},
@@ -570,7 +570,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
gateAfterStop: undefined,
},
behavioral: 'prompt',
maxSkeletonBytes: 59_550, // + v1.76 AUQ proactive SESSION_KIND=spawned rule (#2733); measured 59_152
maxSkeletonBytes: 60_450, // + v1.78 AUQ spawned-trigger objectivity (explicit declaration + interactive fence); measured 60_013
minUnionBytes: 78_300, // measured union 79,139
mustContain: ['PGLite', 'Supabase', 'claude mcp add', 'read_secret_to_env', 'pooler'],
maxSizeRatio: 1.07, // measured 1.051 vs the branch monolith: index + stubs + 4 STOP pointers
@@ -605,7 +605,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
gateAfterStop: undefined,
},
behavioral: 'prompt',
maxSkeletonBytes: 51_700, // + v1.76 AUQ proactive SESSION_KIND=spawned rule (#2733); measured 51_289
maxSkeletonBytes: 52_550, // + v1.78 AUQ spawned-trigger objectivity (explicit declaration + interactive fence); measured 52_150
minUnionBytes: 69_500, // measured union 70,385
mustContain: ['bug', 'browse', 'fix', 'Health Score Rubric', 'regression'],
},
@@ -642,7 +642,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
gateAfterStop: undefined,
},
behavioral: 'prompt',
maxSkeletonBytes: 72_600, // + v1.76 AUQ proactive SESSION_KIND=spawned rule (#2733); measured 72_198
maxSkeletonBytes: 73_450, // + v1.78 AUQ spawned-trigger objectivity (explicit declaration + interactive fence); measured 73_059
minUnionBytes: 66_000, // measured union 73,496
mustContain: ['retrospective', '45-minute gap', 'Ship of the week', 'Praise'],
},
@@ -674,7 +674,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
gateAfterStop: undefined, // operational skill, no plan-mode gate
},
behavioral: 'prompt',
maxSkeletonBytes: 52_050, // + v1.76 AUQ proactive SESSION_KIND=spawned rule (#2733); measured 51_631
maxSkeletonBytes: 52_900, // + v1.78 AUQ spawned-trigger objectivity (explicit declaration + interactive fence); measured 52_492
minUnionBytes: 57_500, // Phase 4 wave 4; measured union 58,682
mustContain: ["Don't make me think", "Users scan, they don't read", 'The Goodwill Reservoir', 'PRETEXT API CHEATSHEET', 'Pattern 3: Text around obstacles'],
},
@@ -701,7 +701,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
gateAfterStop: undefined,
},
behavioral: 'prompt',
maxSkeletonBytes: 52_950, // + v1.79 foreground-dispatch sweep (#497/#2440 third recurrence); measured 52_628
maxSkeletonBytes: 53_100, // + v1.78 AUQ objectivity + v1.79 foreground-dispatch sweep (merged); measured 52_685
minUnionBytes: 53_200, // Phase 4 wave 4; measured union 54,290
mustContain: ["Don't make me think", "Users scan, they don't read", 'trunk test', '44px minimum'],
},
+9 -1
View File
@@ -324,7 +324,15 @@ if (evalsEnabled) {
fs.mkdirSync(gstackDir, { recursive: true });
// Marker list kept at parity with hermetic-env.ts's child-GSTACK_HOME seed
// (the canonical set for the emission layer's gates).
for (const f of ['.activated', '.completeness-intro-seen', '.telemetry-prompted', '.proactive-prompted', '.first-loop-tip-shown']) {
for (const f of [
'.activated',
'.completeness-intro-seen',
'.telemetry-prompted',
'.proactive-prompted',
'.first-loop-tip-shown',
'.feature-prompted-continuous-checkpoint',
'.feature-prompted-model-overlay',
]) {
const p = path.join(gstackDir, f);
if (!fs.existsSync(p)) fs.writeFileSync(p, '');
}
+9 -1
View File
@@ -217,7 +217,15 @@ export function getHermeticDirs(): HermeticDirs {
// children — without these, the emission layer fires lake-intro/telemetry
// prompts that burn turns and can stall PTY tests waiting on an answer.
// Tests that exercise onboarding itself override GSTACK_HOME per-test.
for (const f of ['.activated', '.completeness-intro-seen', '.telemetry-prompted', '.proactive-prompted', '.first-loop-tip-shown']) {
for (const f of [
'.activated',
'.completeness-intro-seen',
'.telemetry-prompted',
'.proactive-prompted',
'.first-loop-tip-shown',
'.feature-prompted-continuous-checkpoint',
'.feature-prompted-model-overlay',
]) {
fs.writeFileSync(path.join(gstackHome, f), '');
}
// The privacy stop-gate is config-keyed, not marker-keyed: on machines