mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-17 18:32:19 +02:00
test: align cross-cutting pins with the wave's contracts
Three suites pinned pre-wave behavior: browse's gstack-config test asserted the old unknown-key ''/exit-0 shape (#2611 made it exit 1); the Windows-paths suite pinned O_APPEND enqueue atomicity (the spool design satisfies the same invariant via tmp + os.replace, one file per record — pinned in its new form); and nine carve-guard skeleton ceilings absorbed the #2402 unconditional-learnings prose (~450B per skill), bumped with measured values per the guard's own protocol. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
8c9e81d242
commit
a54802dc6e
@@ -56,9 +56,11 @@ describe('gstack-config', () => {
|
|||||||
expect(stdout).toBe('false');
|
expect(stdout).toBe('false');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('get unknown key on missing file returns empty, exit 0', () => {
|
test('get unknown key on missing file returns empty, exit 1 (#2611)', () => {
|
||||||
|
// #2611: an unknown key exits 1 so `|| echo fallback` callers can fire —
|
||||||
|
// "" with exit 0 was indistinguishable from a real empty value.
|
||||||
const { exitCode, stdout } = run(['get', 'some_unknown_key']);
|
const { exitCode, stdout } = run(['get', 'some_unknown_key']);
|
||||||
expect(exitCode).toBe(0);
|
expect(exitCode).toBe(1);
|
||||||
expect(stdout).toBe('');
|
expect(stdout).toBe('');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -69,10 +71,10 @@ describe('gstack-config', () => {
|
|||||||
expect(stdout).toBe('true');
|
expect(stdout).toBe('true');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('get missing key returns empty', () => {
|
test('get missing key returns empty, exit 1 (#2611)', () => {
|
||||||
writeFileSync(join(stateDir, 'config.yaml'), 'auto_upgrade: true\n');
|
writeFileSync(join(stateDir, 'config.yaml'), 'auto_upgrade: true\n');
|
||||||
const { exitCode, stdout } = run(['get', 'nonexistent']);
|
const { exitCode, stdout } = run(['get', 'nonexistent']);
|
||||||
expect(exitCode).toBe(0);
|
expect(exitCode).toBe(1);
|
||||||
expect(stdout).toBe('');
|
expect(stdout).toBe('');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -48,11 +48,15 @@ describe('gstack-brain-sync — Windows path/exec invariants', () => {
|
|||||||
expect(SRC.indexOf(CR_STRIP)).toBeLessThan(SRC.indexOf('add -f -- "$p"'));
|
expect(SRC.indexOf(CR_STRIP)).toBeLessThan(SRC.indexOf('add -f -- "$p"'));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('inline enqueue appends one atomic record at a time (codex P2 #1)', () => {
|
test('inline enqueue writes one atomic record at a time (codex P2 #1, spool form)', () => {
|
||||||
expect(SRC).toContain('os.O_APPEND');
|
// The invariant is per-record write atomicity (no interleave corruption).
|
||||||
expect(SRC).toContain('os.write(fd');
|
// Pre-spool this was O_APPEND on the shared queue file; the spool design
|
||||||
// No buffered batch write to the queue (the interleave-corruption shape).
|
// satisfies it more strongly: one FILE per record, tmp write + atomic
|
||||||
|
// os.replace — nothing shared to interleave.
|
||||||
|
expect(SRC).toContain('os.replace(tmp');
|
||||||
|
// No shared-file append anywhere (the interleave-corruption shape).
|
||||||
expect(SRC).not.toContain('open(queue_path, "a"');
|
expect(SRC).not.toContain('open(queue_path, "a"');
|
||||||
|
expect(SRC).not.toContain('os.O_APPEND');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('skip-list is normalized on BOTH discover and drain sides (codex P2 #2)', () => {
|
test('skip-list is normalized on BOTH discover and drain sides (codex P2 #2)', () => {
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
|
|||||||
},
|
},
|
||||||
behavioral: 'external',
|
behavioral: 'external',
|
||||||
externalTest: 'test/skill-e2e-ship-section-loading.test.ts',
|
externalTest: 'test/skill-e2e-ship-section-loading.test.ts',
|
||||||
maxSkeletonBytes: 90_800, // v1.67 wave + v1.66.1's evidence-ledger prose (merged): measured 90,333
|
maxSkeletonBytes: 91_600, // v1.68 fix wave: unconditional learnings capture (#2402, ~450B/skill); measured 91,061
|
||||||
minUnionBytes: 120_000,
|
minUnionBytes: 120_000,
|
||||||
mustContain: ['VERSION', 'CHANGELOG', 'review', 'merge', 'PR'],
|
mustContain: ['VERSION', 'CHANGELOG', 'review', 'merge', 'PR'],
|
||||||
// v1.58.5.0: pre-push-guard install (#2077) stacks on the shared first-run-guidance preamble.
|
// v1.58.5.0: pre-push-guard install (#2077) stacks on the shared first-run-guidance preamble.
|
||||||
@@ -157,7 +157,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
|
|||||||
// v1.65 merge: provisional larger-of-both-waves budget; re-measured below.
|
// 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
|
// Fork port wave 2 (#703): the repo-doc-preference block in the design
|
||||||
// check grew every plan-review skeleton ~0.7KB. Measured values noted.
|
// check grew every plan-review skeleton ~0.7KB. Measured values noted.
|
||||||
maxSkeletonBytes: 93_000, // v1.67 fix wave: #2499 jq entry-resolution in the brain-sync preamble (~340B/skill) + wave doc additions; measured 92,531
|
maxSkeletonBytes: 93_900, // v1.68 fix wave: #2402 learnings capture + spool queue-depth lines; measured 93,345
|
||||||
minUnionBytes: 80_000,
|
minUnionBytes: 80_000,
|
||||||
mustContain: ['SCOPE EXPANSION', 'SELECTIVE EXPANSION', 'HOLD SCOPE', 'SCOPE REDUCTION'],
|
mustContain: ['SCOPE EXPANSION', 'SELECTIVE EXPANSION', 'HOLD SCOPE', 'SCOPE REDUCTION'],
|
||||||
// Default-on Codex outside-voice (codexPreflight block + CODEX_MODE branch
|
// Default-on Codex outside-voice (codexPreflight block + CODEX_MODE branch
|
||||||
@@ -183,7 +183,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
|
|||||||
// check grew every plan-review skeleton ~0.7KB. Measured values noted.
|
// 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+
|
// #2499 project-scope MCP jq in the brain-sync block grew every tier-2+
|
||||||
// skeleton ~1.5KB (entry resolution emitted once per SKILL.md).
|
// skeleton ~1.5KB (entry resolution emitted once per SKILL.md).
|
||||||
maxSkeletonBytes: 70_500, // measured 70,318
|
maxSkeletonBytes: 71_800, // v1.68 fix wave (#2402); measured 71,228
|
||||||
minUnionBytes: 70_000,
|
minUnionBytes: 70_000,
|
||||||
mustContain: ['Architecture', 'Code Quality', 'Test', 'Performance'],
|
mustContain: ['Architecture', 'Code Quality', 'Test', 'Performance'],
|
||||||
// Cross-cutting preamble growth (v1.57.2.0 AUQ-failure prose fallback + the
|
// Cross-cutting preamble growth (v1.57.2.0 AUQ-failure prose fallback + the
|
||||||
@@ -216,7 +216,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
|
|||||||
// tier-2+ skeleton (measured 89,184). Main's v1.64.0.0 adds ~340 B more
|
// 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).
|
// (telemetry --error-message/--failed-step preamble prose, PR #769).
|
||||||
// Budget covers the sum of both waves.
|
// Budget covers the sum of both waves.
|
||||||
maxSkeletonBytes: 91_000,
|
maxSkeletonBytes: 91_700, // v1.68 fix wave (#2402); measured 91,176
|
||||||
minUnionBytes: 70_000,
|
minUnionBytes: 70_000,
|
||||||
mustContain: ['design', 'visual'],
|
mustContain: ['design', 'visual'],
|
||||||
maxSizeRatio: 1.12, // D1 1.104 + main's ~0.008
|
maxSizeRatio: 1.12, // D1 1.104 + main's ~0.008
|
||||||
@@ -240,7 +240,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
|
|||||||
// check grew every plan-review skeleton ~0.7KB. Measured values noted.
|
// 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+
|
// #2499 project-scope MCP jq in the brain-sync block grew every tier-2+
|
||||||
// skeleton ~1.5KB (entry resolution emitted once per SKILL.md).
|
// skeleton ~1.5KB (entry resolution emitted once per SKILL.md).
|
||||||
maxSkeletonBytes: 82_500, // measured 82,031
|
maxSkeletonBytes: 83_500, // v1.68 fix wave (#2402); measured 82,941
|
||||||
minUnionBytes: 70_000,
|
minUnionBytes: 70_000,
|
||||||
mustContain: ['developer experience', 'Getting Started'],
|
mustContain: ['developer experience', 'Getting Started'],
|
||||||
// Default-on Codex outside-voice (codexPreflight block + CODEX_MODE branch
|
// Default-on Codex outside-voice (codexPreflight block + CODEX_MODE branch
|
||||||
@@ -270,7 +270,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
|
|||||||
// the #538 opt-out + D1 evidence directive — ratio 1.104 measured.
|
// 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+
|
// #2499 project-scope MCP jq in the brain-sync block grew every tier-2+
|
||||||
// skeleton ~1.5KB (entry resolution emitted once per SKILL.md).
|
// skeleton ~1.5KB (entry resolution emitted once per SKILL.md).
|
||||||
maxSkeletonBytes: 101_500, // measured 101,314
|
maxSkeletonBytes: 102_800, // v1.68 fix wave (#2402); measured 102,220
|
||||||
minUnionBytes: 70_000,
|
minUnionBytes: 70_000,
|
||||||
mustContain: ['design doc', 'problem statement'],
|
mustContain: ['design doc', 'problem statement'],
|
||||||
maxSizeRatio: 1.12,
|
maxSizeRatio: 1.12,
|
||||||
@@ -291,7 +291,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
|
|||||||
// +Conductor AUQ-default-prose rule + one-way/continuation safety in the
|
// +Conductor AUQ-default-prose rule + one-way/continuation safety in the
|
||||||
// always-loaded AskUserQuestion Format section.
|
// always-loaded AskUserQuestion Format section.
|
||||||
// v1.2.0 activation lift: first-run-guidance section in the shared preamble.
|
// v1.2.0 activation lift: first-run-guidance section in the shared preamble.
|
||||||
maxSkeletonBytes: 57_000, // v1.67 fix wave: #2499 preamble growth; measured 56,571
|
maxSkeletonBytes: 57_900, // v1.68 fix wave (#2402); measured 57,385
|
||||||
minUnionBytes: 55_000,
|
minUnionBytes: 55_000,
|
||||||
mustContain: ['CHANGELOG', 'Diataxis', 'coverage'],
|
mustContain: ['CHANGELOG', 'Diataxis', 'coverage'],
|
||||||
// Two intentional additions stack on this small skill: the AUQ-failure prose
|
// Two intentional additions stack on this small skill: the AUQ-failure prose
|
||||||
@@ -322,7 +322,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
|
|||||||
// v1.65 merge: provisional larger-of-both-waves budget; re-measured below.
|
// 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
|
// v1.64.1.0: shared-preamble prose from the two parallel v1.64 waves lands
|
||||||
// the skeleton at 69,022 B; +~1 KB headroom.
|
// the skeleton at 69,022 B; +~1 KB headroom.
|
||||||
maxSkeletonBytes: 70_500, // v1.67 fix wave: #2499 preamble growth; measured 70,003
|
maxSkeletonBytes: 71_400, // v1.68 fix wave (#2402); measured 70,815
|
||||||
minUnionBytes: 72_000,
|
minUnionBytes: 72_000,
|
||||||
mustContain: ['Typography', 'Color', 'Aesthetic Direction'],
|
mustContain: ['Typography', 'Color', 'Aesthetic Direction'],
|
||||||
// Cross-cutting preamble growth (v1.57.2.0 AUQ-failure prose fallback ~2KB +
|
// Cross-cutting preamble growth (v1.57.2.0 AUQ-failure prose fallback ~2KB +
|
||||||
@@ -362,7 +362,7 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
|
|||||||
// +Conductor AUQ-default-prose rule + one-way/continuation safety in the
|
// +Conductor AUQ-default-prose rule + one-way/continuation safety in the
|
||||||
// always-loaded AskUserQuestion Format section.
|
// always-loaded AskUserQuestion Format section.
|
||||||
// v1.2.0 activation lift: first-run-guidance section in the shared preamble.
|
// v1.2.0 activation lift: first-run-guidance section in the shared preamble.
|
||||||
maxSkeletonBytes: 76_400, // v1.67 fix wave: #2499 preamble growth; measured 75,891
|
maxSkeletonBytes: 77_300, // v1.68 fix wave (#2402); measured 76,705
|
||||||
minUnionBytes: 72_000,
|
minUnionBytes: 72_000,
|
||||||
mustContain: ['OWASP', 'STRIDE', 'daily', 'comprehensive', 'verif'],
|
mustContain: ['OWASP', 'STRIDE', 'daily', 'comprehensive', 'verif'],
|
||||||
// cso keeps its mode-dispatch + FP-filtering phases always-loaded, so the
|
// cso keeps its mode-dispatch + FP-filtering phases always-loaded, so the
|
||||||
|
|||||||
Reference in New Issue
Block a user