Merge remote-tracking branch 'origin/capy/gstack-install-wave' into capy/gstack-autoplan-wave

This commit is contained in:
garrytan committed 2026-10-13 02:16:52 +00:00
commit 6a04841bd6
2 files changed
+12

No files matched your search

+2
View File
@@ -210,6 +210,7 @@ export const FREE_ONLY_PR_FILES = [
'scripts/free-test-durations.json',
'scripts/paid-test-durations.json',
'scripts/ubicloud/**',
'capy/skill/**', // The vendored Capy skill (Drive bootstrapper): run by Capy agents, read by no paid case; test/capy-skill-wrapper.test.ts covers it.
'tsconfig.test.json', // Read only by `tsc -p tsconfig.test.json` (typecheck:test); Bun's runtime reads tsconfig.json.
'.gitignore', // Changes which untracked files git reports, never tracked content a case reads.
'.gstack/generated.json', // gstack's own regen registry: gstack-regen/gstack-pregate read it from origin/<base> of the repo they run in; paid cases run in fixture repos.
@@ -314,6 +315,7 @@ export function packageChangeOnlyVersion(before: string, after: string): boolean
}
function isPromptFile(file: string): boolean {
if (FREE_ONLY_PR_FILES.some(pattern => matchGlob(file, pattern))) return false;
return file.endsWith('.tmpl') || /(?:^|\/)SKILL\.md$/.test(file)
|| /^[^/]+\/sections\/.+\.md$/.test(file);
}
+10
View File
@@ -51,6 +51,16 @@ describe('fast PR coverage policy', () => {
expect(result.needsFullValidation).toBe(false);
});
test('the vendored Capy skill (capy/skill/**) is free-only: no paid case reads it, so it needs no full validation', () => {
const result = select({ selectedE2E: [], selectedJudges: [], changedFiles: ['capy/skill/gstack/SKILL.md', 'capy/skill/gstack/scripts/install.sh'], derived: null });
expect(result.needsFullValidation).toBe(false);
expect(result.missingCoverage).toEqual([]);
expect(result.mode).toBe('pr');
expect(result.e2e).toEqual([]);
const prompt = select({ selectedE2E: [], selectedJudges: [], changedFiles: ['plan-ceo-review/SKILL.md.tmpl'], derived: null });
expect(prompt.needsFullValidation || prompt.deferredPromptFiles.length > 0 || prompt.e2e.length > 0).toBe(true);
});
test('does not add unrelated short probes or drop selected quality judges', () => {
const result = select({ selectedJudges: ['browse quality', 'plan-ceo-review/SKILL.md modes'] });
expect(result.e2e).not.toContain('browse-smoke');