mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-27 23:21:53 +02:00
* fix(design-detect): find impeccable installed as a Claude Code plugin The design-detector probe only ever checked <root>/<SKILL_ROOTS>/skills/impeccable/, never the Claude Code plugin-cache layout (<root>/.claude/plugins/cache/<marketplace>/<plugin>/<version>/skills/impeccable/). A plugin-installed impeccable was therefore invisible: IMPECCABLE_SKILL stayed absent, the launcher was never found (so the NOT_CACHED run hint never fired), and its sibling engine was never considered. Add a plugin-cache walk alongside the existing SKILL_ROOTS walk, sharing the same presence/launcher/repo-local-exclusion/sibling-engine logic via an extracted checkSkillDir() helper so both paths stay behaviorally identical. Fixes #2838 * refactor(design-detect): consolidate newestSemverDir onto safeReaddir Both did the identical try/catch-around-readdirSync; newestSemverDir now reuses the new safeReaddir helper instead of duplicating it. * fix: harden Impeccable plugin discovery and regression fixtures * test: supply eval mode to the integrated detector callback adapter --------- Co-authored-by: Som Samantray <som.samantray@gmail.com>
887 lines
51 KiB
TypeScript
887 lines
51 KiB
TypeScript
import { describe, expect, test } from 'bun:test';
|
|
import { E2E_TIERS, E2E_TOUCHFILES, LLM_JUDGE_TOUCHFILES, selectTests } from './helpers/touchfiles';
|
|
import { OVERLAY_FIXTURES } from './fixtures/overlay-nudges';
|
|
|
|
describe('periodic fixture dependencies select their behavioral cases', () => {
|
|
const cases: Array<[string, string[]]> = [
|
|
['test/ceo-expansion-pacing-native.test.ts', ['plan-ceo-mode-routing']],
|
|
['test/fixtures/ceo-expansion-pacing-fb10.json', ['plan-ceo-mode-routing']],
|
|
['test/helpers/ceo-hold-posture-review.ts', ['plan-ceo-mode-routing']],
|
|
['test/ceo-hold-posture-review.test.ts', ['plan-ceo-mode-routing']],
|
|
['test/fixtures/ceo-hold-proof-fb10.json', ['plan-ceo-mode-routing']],
|
|
['test/eng-semantic-terminal.test.ts', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-fb10-count-public.json', ['plan-eng-finding-count']],
|
|
['test/fixtures/autoplan-home-phase-entry-fb10.json', ['autoplan-chain-pty']],
|
|
['test/eng-error-flow-seed.test.ts', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/fixtures/eng-69193-count-public.json', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/fixtures/eng-e366-count-public.json', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/ceo-current-decision-record.test.ts', ['plan-ceo-finding-count']],
|
|
['test/fixtures/ceo-current-decision-cdd-public.json', ['plan-ceo-finding-count']],
|
|
['test/fixtures/eng-count-c6fc-public.json', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-cdd-regression-task.json', ['plan-eng-finding-count']],
|
|
['test/eng-resolution-block-position.test.ts', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/eng-initial-selector-043a.test.ts', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/fixtures/eng-initial-selector-043a.json', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/fixtures/eng-a689-count-public.json', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/fixtures/eng-a689-retry-public.json', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/fixtures/eng-neutral-seed-749df.json', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/fixtures/eng-paired-suite-749df.json', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/fixtures/auto-decide-mode-selector-749df.json', ['auto-decide-preserved']],
|
|
['test/eng-count-owned-outcomes.test.ts', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-count-owned-outcomes-f359.json', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-batching-prefixed-ledger-f359.json', ['plan-eng-multi-finding-batching']],
|
|
['test/fixtures/ceo-hold-preservation-f359.json', ['plan-ceo-mode-routing']],
|
|
['test/ceo-native-fields-f359.test.ts', ['plan-ceo-finding-count']],
|
|
['test/ceo-conditional-option-facts.test.ts', ['plan-ceo-finding-count']],
|
|
['test/fixtures/ceo-conditional-option-facts-c6fc.json', ['plan-ceo-finding-count']],
|
|
['test/fixtures/ceo-native-fields-f359.json', ['plan-ceo-finding-count']],
|
|
['test/fixtures/ceo-plain-fields-f359.json', ['plan-ceo-finding-count']],
|
|
['test/eng-task-pause-navigation-f359.test.ts', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-task-pause-navigation-f359.json', ['plan-eng-finding-count']],
|
|
['test/fixtures/auto-decide-completed-mode-f359.json', ['auto-decide-preserved']],
|
|
['test/fixtures/ceo-onboarding-packet-90f.json', ['plan-ceo-finding-count']],
|
|
['test/fixtures/ceo-baseline-alternatives-90f.json', ['plan-ceo-finding-count']],
|
|
['test/fixtures/eng-structure-choice-90f.json', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-idp-choice-90f.json', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-legacy-declaration-90f.json', ['plan-eng-finding-count']],
|
|
['test/fixtures/design-completion-envelope-90f.json', ['plan-design-finding-count']],
|
|
['test/eng-native-seed-contract.test.ts', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-native-seed-contract-6f.json', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-native-packets-b955.json', ['plan-eng-finding-count']],
|
|
['test/review-count-markdown.test.ts', ['plan-eng-finding-count', 'plan-design-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/fixtures/review-count-markdown-6f.json', ['plan-eng-finding-count', 'plan-design-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/eng-current-native-seeds.test.ts', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-current-native-seeds-6714.json', ['plan-eng-finding-count']],
|
|
['test/fixtures/ceo-recorded-decisions-67147822.json', ['plan-ceo-finding-count']],
|
|
['test/fixtures/eng-batching-expanded-ledger-6714.json', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/fixtures/eng-native-review-identities-6714.json', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/design-count-current-pass.test.ts', ['plan-design-finding-count']],
|
|
['test/fixtures/design-count-current-pass.json', ['plan-design-finding-count']],
|
|
['test/eng-test-plan-edit-approval.test.ts', ['autoplan-chain-pty', 'plan-eng-finding-count']],
|
|
['test/fixtures/eng-test-plan-edit-dacc.json', ['autoplan-chain-pty', 'plan-eng-finding-count']],
|
|
['test/fixtures/eng-test-plan-edit-cli.js', ['autoplan-chain-pty', 'plan-eng-finding-count']],
|
|
['test/autoplan-owned-state.test.ts', ['autoplan-chain-pty']],
|
|
['test/autoplan-artifact-windows-argv.test.ts', ['autoplan-chain-pty', 'plan-eng-finding-count']],
|
|
['test/fixtures/eng-current-choice-cab3.json', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-completed-navigation-cab3.json', ['plan-eng-finding-count']],
|
|
['test/autoplan-dual-voice-fixture.test.ts', ['autoplan-dual-voice']],
|
|
['test/helpers/autoplan-dual-voice-evidence.ts', ['autoplan-dual-voice']],
|
|
['test/autoplan-dual-voice-evidence.test.ts', ['autoplan-dual-voice']],
|
|
['test/fixtures/autoplan-dual-false-positive-6bd.json', ['autoplan-dual-voice']],
|
|
['test/helpers/autoplan-method-read-audit.ts', ['autoplan-chain-pty', 'autoplan-dual-voice']],
|
|
['test/fixtures/autoplan-phase-entry-alias-f359.json', ['autoplan-chain-pty']],
|
|
['test/fixtures/autoplan-method-read-aa-events.json', ['autoplan-chain-pty', 'autoplan-dual-voice']],
|
|
['test/helpers/outside-voice-evidence.ts', ['autoplan-dual-voice', 'outside-plan-disabled-no-fallback',
|
|
'outside-voice-claude-code-to-codex', 'outside-voice-codex-to-claude-code']],
|
|
['test/fixtures/outside-async-task-m-events.json', ['autoplan-dual-voice',
|
|
'outside-voice-claude-code-to-codex', 'outside-voice-codex-to-claude-code']],
|
|
['test/fixtures/devex-journey-evidence-cab3.json', ['plan-devex-finding-count']],
|
|
['test/autoplan-phase-handoff.test.ts', ['carve-section-loading', 'autoplan-chain-pty', 'autoplan-dual-voice']],
|
|
['test/autoplan-amend-input.test.ts', ['carve-section-loading', 'autoplan-chain-pty', 'autoplan-dual-voice']],
|
|
['test/fixtures/autoplan-amend-input-77.json', ['carve-section-loading', 'autoplan-chain-pty', 'autoplan-dual-voice']],
|
|
['test/fixtures/autoplan-phase-handoff-6714.json', ['carve-section-loading', 'autoplan-chain-pty', 'autoplan-dual-voice']],
|
|
['test/fixtures/autoplan-owned-state-edit.json', ['autoplan-chain-pty']],
|
|
['test/eng-finding-retry-budget.test.ts', ['plan-ceo-finding-count', 'plan-ceo-split-overflow', 'plan-design-finding-count', 'plan-devex-finding-count', 'plan-eng-finding-count', 'plan-eng-multi-finding-batching', 'autoplan-chain-pty']],
|
|
['test/design-count-native-8525.test.ts', ['plan-design-finding-count']],
|
|
['test/fixtures/design-count-native-8525.json', ['plan-design-finding-count']],
|
|
['test/fixtures/design-phase-entry-77.json', ['plan-design-finding-count']],
|
|
['test/fixtures/ceo-expansion-pacing-77.json', ['plan-ceo-mode-routing']],
|
|
['test/eng-published-navigation.test.ts', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-published-navigation.json', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-6aef-count-public.json', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/fixtures/disabled-retained-record.json', ['outside-plan-disabled-no-fallback']],
|
|
['test/ceo-native-ledger-replay.test.ts', ['plan-ceo-finding-count']],
|
|
['test/fixtures/ceo-native-ledger-8525.json', ['plan-ceo-finding-count']],
|
|
['test/fixtures/ceo-option-metadata-list-6f6730f4.json', ['plan-ceo-finding-count']],
|
|
['test/fixtures/ceo-zero-test-absence-6f6730f4.json', ['plan-ceo-finding-count']],
|
|
['test/fixtures/ceo-recorded-decisions-dacc95ea.json', ['plan-ceo-finding-count']],
|
|
['test/fixtures/ceo-expansion-posture-kind-dacc.json', ['plan-ceo-mode-routing']],
|
|
['test/fixtures/ceo-expansion-pause-6714.json', ['plan-ceo-mode-routing']],
|
|
['test/fixtures/ceo-expansion-complete-inventory-6f.json', ['plan-ceo-mode-routing']],
|
|
['test/ceo-mode-pending-submit.test.ts', ['plan-ceo-mode-routing']],
|
|
['test/fixtures/ceo-mode-pending-submit.json', ['plan-ceo-mode-routing']],
|
|
['test/fixtures/ceo-fill-lifetime.json', ['plan-ceo-section-loading']],
|
|
['test/fixtures/eng-current-ledger-seeds.json', ['plan-eng-finding-count']],
|
|
['test/eng-batching-native-replay.test.ts', ['plan-eng-multi-finding-batching']],
|
|
['test/fixtures/eng-batching-native-8525.json', ['plan-eng-multi-finding-batching']],
|
|
['test/eng-batching-saved-ledger.test.ts', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/fixtures/eng-batching-saved-ledger-dacc.json', ['plan-eng-finding-count', 'plan-eng-multi-finding-batching']],
|
|
['test/plan-design-sdk-fixture.test.ts', ['plan-design-review-plan-mode']],
|
|
['test/design-count-native-issue-fields.test.ts', ['plan-design-finding-count']],
|
|
['test/fixtures/design-count-native-issue-fields.json', ['plan-design-finding-count']],
|
|
['test/helpers/ceo-payment-findings.ts', ['plan-ceo-finding-count']],
|
|
['test/ceo-payment-findings.test.ts', ['plan-ceo-finding-count']],
|
|
['test/ceo-source-attribution.test.ts', ['plan-ceo-finding-count']],
|
|
['test/fixtures/ceo-source-attribution-6aef.json', ['plan-ceo-finding-count']],
|
|
['test/fixtures/ceo-current-record-6aef.json', ['plan-ceo-finding-count']],
|
|
['test/fixtures/ceo-payment-ledger-decisions.json', ['plan-ceo-finding-count']],
|
|
['test/setup-gbrain-remote-caller.test.ts', ['setup-gbrain-remote']],
|
|
['test/skill-fixture.test.ts', ['journey-ideation', 'journey-plan-eng', 'journey-debug', 'journey-qa', 'journey-code-review', 'journey-ship', 'journey-docs', 'journey-retro', 'journey-design-system', 'journey-visual-qa']],
|
|
['test/office-hours-writeback-env.test.ts', ['office-hours-brain-writeback']],
|
|
['test/review-army-budget.test.ts', ['review-army-red-team', 'review-army-consensus']],
|
|
['test/helpers/setup-gbrain-sandbox.ts', ['setup-gbrain-bad-token', 'setup-gbrain-path4-local-pglite', 'setup-gbrain-remote']],
|
|
['test/helpers/setup-gbrain-fixture-command.ts', ['setup-gbrain-bad-token', 'setup-gbrain-path4-local-pglite']],
|
|
['test/fixtures/autoplan-caller.fixture.test.ts', ['autoplan-chain-pty']],
|
|
['test/gstack-paths.test.ts', ['autoplan-chain-pty', 'carve-section-loading', 'design-html-slop-gate']],
|
|
['test/gstack-brain-context-load.test.ts', ['autoplan-chain-pty', 'plan-ceo-section-loading']],
|
|
['test/autoplan-permission-viewport.test.ts', ['autoplan-chain-pty']],
|
|
['test/fixtures/autoplan-settings-overwrite.json', ['autoplan-chain-pty']],
|
|
['test/fixtures/eng-file-permission-repaint.json', ['plan-eng-multi-finding-batching']],
|
|
['test/helpers/carve-section-case.ts', ['carve-section-loading']],
|
|
['test/helpers/carve-plan-fixture.ts', ['carve-section-loading']],
|
|
['test/carve-plan-fixture.test.ts', ['carve-section-loading']],
|
|
['test/fixtures/carve-existing-repository/src/repository.ts', ['carve-section-loading']],
|
|
['test/fixtures/carve-existing-repository/README.md', ['carve-section-loading']],
|
|
['test/fixtures/carve-existing-repository/example.ts', ['carve-section-loading']],
|
|
['test/helpers/eng-finding-fixture.ts', ['plan-eng-finding-count']],
|
|
['test/eng-finding-fixture.test.ts', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-existing-auth/legacy-auth.ts', ['plan-eng-finding-count']],
|
|
['test/fixtures/eng-existing-auth/package.json', ['plan-eng-finding-count']],
|
|
['test/codex-carve-fixture.test.ts', ['carve-section-loading']],
|
|
['test/design-html-section-completion.test.ts', ['carve-section-loading']],
|
|
['test/fixtures/design-html-section-complete.md', ['carve-section-loading']],
|
|
['test/plan-design-floor-fixture.test.ts', ['plan-design-finding-floor']],
|
|
['test/devex-finding-fixture.test.ts', ['plan-devex-finding-count']],
|
|
['test/fixtures/devex-checkpoint-todos.json', ['plan-devex-finding-count']],
|
|
['test/fixtures/devex-existing-sdk/README.md', ['plan-devex-finding-count']],
|
|
['test/fixtures/devex-existing-sdk/docs/getting-started.md', ['plan-devex-finding-count']],
|
|
['test/fixtures/devex-existing-sdk/docs/feedback.md', ['plan-devex-finding-count']],
|
|
['test/fixtures/devex-existing-sdk/docs/reference-v1.md', ['plan-devex-finding-count']],
|
|
['test/design-finding-fixture.test.ts', ['plan-design-finding-count']],
|
|
['test/helpers/hermetic-env.test.ts', ['plan-ceo-split-overflow']],
|
|
['test/helpers/ceo-split-question-policy.ts', ['plan-ceo-split-overflow']],
|
|
['test/ceo-split-question-policy.test.ts', ['plan-ceo-split-overflow']],
|
|
['test/ceo-split-collection.test.ts', ['plan-ceo-split-overflow']],
|
|
['test/fixtures/ceo-split-collection-0bcd.json', ['plan-ceo-split-overflow']],
|
|
['test/fixtures/ceo-split-actor-6aef.json', ['plan-ceo-split-overflow']],
|
|
['test/helpers/ceo-mode-option.ts', ['plan-ceo-mode-routing', 'plan-ceo-finding-count', 'plan-ceo-split-overflow']],
|
|
['docs/askuserquestion-split.md', ['plan-ceo-split-overflow', 'plan-decision-classification', 'plan-devex-peer-comparison-classification']],
|
|
['test/resolver-ask-user-format.test.ts', ['plan-ceo-split-overflow']],
|
|
['test/skill-e2e-plan-ceo-finding-count.test.ts', ['plan-ceo-finding-count']],
|
|
['test/section-capture-native-tools.test.ts', ['ship-section-loading', 'plan-ceo-section-loading', 'office-hours-section-loading', 'carve-section-loading']],
|
|
['test/helpers/ceo-paired-fixture.ts', ['plan-ceo-finding-count']],
|
|
['test/ceo-paired-payment-fixture.test.ts', ['plan-ceo-finding-count']],
|
|
['test/fixtures/ceo-paired-option-values.json', ['plan-ceo-finding-count']],
|
|
['test/fixtures/paired-payment/src/payment.ts', ['plan-ceo-finding-count']],
|
|
['test/fixtures/paired-payment/contract.test.ts.fixture', ['plan-ceo-finding-count']],
|
|
['test/fixtures/paired-payment/README.md', ['plan-ceo-finding-count']],
|
|
...['README.md', 'platform.ts', 'existing-invoice-handler.ts', 'schema.sql', 'contract.test.ts.fixture'].map((file): [string, string[]] =>
|
|
[`test/fixtures/ceo-existing-payment/${file}`, ['plan-ceo-finding-count']]),
|
|
...['test/fixtures/webfetch-permission.json', 'test/plan-skill-webfetch-permission.test.ts'].map((file): [string, string[]] => [file,
|
|
['plan-ceo-finding-count', 'plan-eng-finding-count', 'plan-design-finding-count',
|
|
'plan-devex-finding-count', 'plan-eng-multi-finding-batching', 'plan-ceo-split-overflow'],
|
|
]),
|
|
['test/helpers/plan-mode-evidence.ts', ['plan-design-review-plan-mode', 'plan-eng-review-plan-mode']],
|
|
['test/plan-mode-evidence.test.ts', ['plan-design-review-plan-mode', 'plan-eng-review-plan-mode']],
|
|
...['test/helpers/autoplan-phase-order.ts', 'test/autoplan-phase-observation.test.ts'].map((file): [string, string[]] => [file,
|
|
['autoplan-chain-pty', 'plan-ceo-finding-count', 'plan-eng-finding-count', 'plan-design-finding-count',
|
|
'plan-devex-finding-count', 'plan-eng-multi-finding-batching', 'plan-ceo-split-overflow'],
|
|
]),
|
|
...['overlay-measurement', 'overlay-workspace', 'overlay-attempt', 'overlay-case', 'overlay-case-policy', 'overlay-lifecycle'].map((helper): [string, string[]] => [
|
|
`test/helpers/${helper}.ts`, OVERLAY_FIXTURES.map(fixture => `overlay-harness-${fixture.id}`),
|
|
]),
|
|
];
|
|
|
|
for (const file of ['test/overlay-sdk-cancel-eof.test.ts', 'test/overlay-recording-order.test.ts', 'test/paid-overlay-scheduling.test.ts', 'test/fixtures/overlay-admission-child.ts']) {
|
|
cases.push([file, OVERLAY_FIXTURES.map(fixture => `overlay-harness-${fixture.id}`)]);
|
|
}
|
|
|
|
for (const fixture of OVERLAY_FIXTURES) {
|
|
cases.push([`test/skill-e2e-overlay-harness-${fixture.id}.test.ts`, [`overlay-harness-${fixture.id}`]]);
|
|
}
|
|
|
|
test('SDK runner changes retain the native gate and existing periodic consumers', () => {
|
|
const periodic = ['brain-privacy-gate', 'setup-gbrain-remote', 'setup-gbrain-bad-token',
|
|
'setup-gbrain-path4-local-pglite', ...OVERLAY_FIXTURES.map(fixture => `overlay-harness-${fixture.id}`)];
|
|
const result = selectTests(['test/agent-sdk-runner.test.ts'], E2E_TOUCHFILES);
|
|
expect(result.reason).toBe('diff');
|
|
expect(result.selected.sort()).toEqual(['auq-format-gate', ...periodic].sort());
|
|
expect(E2E_TIERS['auq-format-gate']).toBe('gate');
|
|
for (const id of periodic) expect(E2E_TIERS[id]).toBe('periodic');
|
|
});
|
|
|
|
for (const [file, expected] of cases) {
|
|
test(file, () => {
|
|
const result = selectTests([file], E2E_TOUCHFILES);
|
|
expect(result.reason).toBe('diff');
|
|
expect(result.selected.sort()).toEqual([...expected].sort());
|
|
for (const id of expected) expect(E2E_TIERS[id]).toBe('periodic');
|
|
});
|
|
}
|
|
});
|
|
|
|
test('Eng section local review helpers select their carve evaluation', () => {
|
|
for (const file of ['bin/gstack-review-log', 'bin/gstack-review-read', 'lib/review-evidence.ts',
|
|
'bin/gstack-slug', 'bin/gstack-wtree', 'bin/gstack-config', 'bin/gstack-brain-enqueue']) {
|
|
const result = selectTests([file], E2E_TOUCHFILES);
|
|
expect(result.reason).toBe('diff');
|
|
expect(result.selected).toContain('carve-section-loading');
|
|
}
|
|
expect(E2E_TIERS['carve-section-loading']).toBe('periodic');
|
|
});
|
|
|
|
test('offering source lookup dependencies select all four gate audits', () => {
|
|
const expected = ['codex-offered-office-hours', 'codex-offered-ceo-review',
|
|
'codex-offered-design-review', 'codex-offered-eng-review'].sort();
|
|
for (const file of ['test/helpers/codex-offering-fixture.ts', 'test/codex-offering-fixture.test.ts',
|
|
'test/fixtures/codex-offering-cdd-public.json', 'test/fixtures/codex-offering-timeout-public.json', 'test/helpers/workflow-judge-input.ts',
|
|
'test/workflow-judge-input.test.ts', 'test/helpers/workflow-excerpt.ts']) {
|
|
const result = selectTests([file], E2E_TOUCHFILES);
|
|
expect(result.reason).toBe('diff');
|
|
expect(result.selected.sort()).toEqual(expected);
|
|
for (const id of expected) expect(E2E_TIERS[id]).toBe('gate');
|
|
}
|
|
for (const file of ['test/helpers/codex-offering-fixture.ts', 'test/codex-offering-fixture.test.ts',
|
|
'test/fixtures/codex-offering-cdd-public.json', 'test/fixtures/codex-offering-timeout-public.json']) {
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
});
|
|
|
|
test('shared attempt regressions select periodic callers and the gate report case', () => {
|
|
const periodic = ['plan-design-review-plan-mode', 'office-hours-forcing-energy', 'office-hours-builder-wildness', 'office-hours-brain-writeback', 'plan-ceo-review-format-mode', 'plan-ceo-review-format-approach', 'plan-eng-review-format-coverage', 'plan-eng-review-format-kind', 'plan-ceo-review-prosons-cadence', 'plan-review-prosons-format', 'plan-review-prosons-hardstop-neg', 'plan-review-prosons-neutral-neg', 'setup-gbrain-bad-token', 'setup-gbrain-path4-local-pglite', 'setup-gbrain-remote', 'review-army-red-team'];
|
|
const result = selectTests(['test/office-hours-attempt.test.ts'], E2E_TOUCHFILES);
|
|
expect(result.reason).toBe('diff');
|
|
expect(result.selected.sort()).toEqual([...periodic, 'plan-review-report'].sort());
|
|
for (const id of periodic) expect(E2E_TIERS[id]).toBe('periodic');
|
|
expect(E2E_TIERS['plan-review-report']).toBe('gate');
|
|
});
|
|
|
|
test('decision-log CLI and validator select the demonstrated DX consumer without global or quality fanout', () => {
|
|
for (const file of ['bin/gstack-decision-log', 'lib/gstack-decision.ts']) {
|
|
const selected = selectTests([file], E2E_TOUCHFILES);
|
|
expect(selected.reason).toBe('diff');
|
|
expect(selected.selected).toEqual(['plan-devex-finding-count']);
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
expect(E2E_TIERS['plan-devex-finding-count']).toBe('periodic');
|
|
});
|
|
|
|
test('native fixture dependencies include the migrated auto-decision and seeded CEO smoke callers', () => {
|
|
const expected = [
|
|
'auto-decide-preserved', 'autoplan-chain-pty',
|
|
'plan-ceo-finding-count', 'plan-ceo-finding-floor', 'plan-ceo-mode-routing', 'plan-ceo-review-plan-mode', 'plan-ceo-split-overflow',
|
|
'plan-design-finding-count', 'plan-design-finding-floor', 'plan-design-with-ui-scope',
|
|
'plan-devex-finding-count', 'plan-devex-finding-floor',
|
|
'plan-eng-finding-count', 'plan-eng-finding-floor', 'plan-eng-multi-finding-batching',
|
|
];
|
|
for (const file of ['test/helpers/plan-count-fixture.ts', 'test/plan-count-fixture.test.ts']) {
|
|
const result = selectTests([file], E2E_TOUCHFILES);
|
|
expect(result.reason).toBe('diff');
|
|
expect(result.selected.sort()).toEqual(expected);
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
expect(E2E_TIERS['auto-decide-preserved']).toBe('periodic');
|
|
expect(E2E_TIERS['plan-ceo-review-plan-mode']).toBe('gate');
|
|
});
|
|
|
|
test('shared native input dependencies select every PTY consumer without changing tiers', () => {
|
|
const expected = selectTests(['test/helpers/claude-pty-runner.ts'], E2E_TOUCHFILES).selected.sort();
|
|
expect(expected).toHaveLength(22);
|
|
expect(expected.filter(id => E2E_TIERS[id] === 'gate')).toHaveLength(7);
|
|
expect(expected.filter(id => E2E_TIERS[id] === 'periodic')).toHaveLength(15);
|
|
for (const file of ['test/plan-count-design-ui-recovery.test.ts', 'test/fixtures/design-ui-boxed-question.json', 'test/pty-workspace-trust.test.ts', 'test/fixtures/pty-companion-cli.ts', 'test/helpers/pty-current-screen.ts', 'test/pty-current-screen.test.ts', 'test/fixtures/native-viewport.ts',
|
|
'test/helpers/plan-skill-questions.ts', 'test/plan-skill-questions.test.ts', 'test/fixtures/design-tasks-bash-permission.json', 'test/fixtures/eng-auq-validation-error.json',
|
|
'test/helpers/plan-skill-question-events.ts', 'test/plan-skill-question-events.test.ts',
|
|
'test/helpers/plan-skill-question-hook-scope.ts', 'test/helpers/skill-census.ts', 'test/plan-skill-question-hook-scope.test.ts']) {
|
|
const result = selectTests([file], E2E_TOUCHFILES);
|
|
expect(result.reason).toBe('diff');
|
|
expect(result.selected.sort()).toEqual(expected);
|
|
}
|
|
});
|
|
|
|
|
|
test('seed submission dependencies select every seeded caller with its existing tier', () => {
|
|
const expected = ['auto-decide-preserved', 'conductor-prose', 'plan-ceo-review-plan-mode',
|
|
'plan-design-review-plan-mode', 'plan-devex-review-plan-mode', 'plan-eng-review-plan-mode', 'plan-mode-no-op'];
|
|
for (const file of ['test/helpers/fake-plan-seed.ts', 'test/helpers/plan-seed-submission.ts', 'test/plan-seed-submission.test.ts', 'test/fixtures/plan-seed-cli.ts']) {
|
|
const result = selectTests([file], E2E_TOUCHFILES);
|
|
expect(result.reason).toBe('diff');
|
|
expect(result.selected.sort()).toEqual(expected);
|
|
}
|
|
expect(expected.map(id => E2E_TIERS[id])).toEqual(['periodic', 'periodic', 'gate', 'periodic', 'gate', 'periodic', 'gate']);
|
|
});
|
|
|
|
test('task emission source selects CEO completion consumers', () => {
|
|
const selected = selectTests(['scripts/resolvers/tasks-section.ts'], E2E_TOUCHFILES);
|
|
expect(selected.reason).toBe('diff');
|
|
for (const id of [
|
|
'plan-ceo-finding-count', 'plan-ceo-finding-floor', 'plan-ceo-split-overflow',
|
|
'plan-ceo-section-loading', 'plan-ceo-review-plan-mode', 'autoplan-chain-pty',
|
|
]) expect(selected.selected).toContain(id);
|
|
expect(selectTests(['scripts/resolvers/tasks-section.ts'], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
});
|
|
|
|
test('review report resolver selects every periodic completion consumer', () => {
|
|
const required = [
|
|
'plan-ceo-finding-count', 'plan-eng-finding-count', 'plan-design-finding-count',
|
|
'plan-devex-finding-count', 'plan-ceo-split-overflow', 'autoplan-chain-pty',
|
|
'carve-section-loading', 'plan-ceo-section-loading', 'plan-eng-multi-finding-batching',
|
|
];
|
|
const result = selectTests(['scripts/resolvers/review.ts'], E2E_TOUCHFILES);
|
|
expect(result.reason).toBe('diff');
|
|
for (const id of required) {
|
|
expect(result.selected).toContain(id);
|
|
expect(E2E_TIERS[id]).toBe('periodic');
|
|
}
|
|
});
|
|
|
|
|
|
test('shared plan question source selects every generated review consumer', () => {
|
|
const source = 'scripts/resolvers/preamble/generate-ask-user-format.ts';
|
|
const renders = ['plan-ceo-review', 'plan-eng-review', 'plan-design-review', 'plan-devex-review']
|
|
.map(skill => `${skill}/SKILL.md`);
|
|
for (const map of [E2E_TOUCHFILES, LLM_JUDGE_TOUCHFILES]) {
|
|
const expected = selectTests(renders, map);
|
|
const actual = selectTests([source], map);
|
|
expect(expected.reason).toBe('diff');
|
|
expect(actual.reason).toBe('diff');
|
|
expect(expected.selected.length).toBeGreaterThan(0);
|
|
expect(expected.selected.filter(id => !actual.selected.includes(id))).toEqual([]);
|
|
}
|
|
});
|
|
|
|
|
|
test('Eng approval-rule source and free contract controls select every declared Eng consumer', () => {
|
|
const expected = [
|
|
'plan-eng-review',
|
|
'plan-eng-review-artifact',
|
|
'plan-review-report',
|
|
'plan-eng-review-plan-mode',
|
|
'plan-mode-no-op',
|
|
'conductor-prose',
|
|
'carve-section-loading',
|
|
'autoplan-chain-pty',
|
|
'plan-eng-finding-count',
|
|
'plan-eng-finding-floor',
|
|
'plan-eng-multi-finding-batching',
|
|
'plan-eng-review-format-coverage',
|
|
'plan-eng-review-format-kind',
|
|
'plan-ceo-review-prosons-cadence',
|
|
'plan-review-prosons-format',
|
|
'codex-offered-eng-review',
|
|
'codex-plan-eng-format-coverage',
|
|
'codex-plan-eng-format-kind',
|
|
'plan-eng-coverage-audit',
|
|
'autoplan-dual-voice'
|
|
];
|
|
for (const file of ['plan-eng-review/sections/review-sections.md.tmpl', 'scripts/resolvers/review.ts', 'test/plan-review-cases.test.ts']) {
|
|
const result = selectTests([file], E2E_TOUCHFILES);
|
|
expect(result.reason).toBe('diff');
|
|
for (const id of expected) expect(result.selected, `${file}: ${id}`).toContain(id);
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toContain('plan-eng-review/SKILL.md sections');
|
|
}
|
|
});
|
|
|
|
// This actor is used by the bounded native Design UI case, not the optional
|
|
// outside-review evaluations. Its captured inputs must select that same case.
|
|
test('Design native-only actor capture selects its gate case', () => {
|
|
const result = selectTests(['test/fixtures/design-outside-voices-question.json'], E2E_TOUCHFILES);
|
|
expect(result.reason).toBe('diff');
|
|
expect(result.selected).toEqual(['plan-design-with-ui-scope']);
|
|
expect(E2E_TIERS['plan-design-with-ui-scope']).toBe('gate');
|
|
});
|
|
|
|
|
|
test('native compact-boundary ancestry selects every consuming callback', () => {
|
|
const expected = [
|
|
'plan-ceo-mode-routing', 'autoplan-chain-pty', 'plan-ceo-finding-count',
|
|
'plan-eng-finding-count', 'plan-design-finding-count', 'plan-devex-finding-count',
|
|
'plan-eng-multi-finding-batching', 'plan-ceo-split-overflow',
|
|
'plan-design-with-ui-scope', 'plan-design-review-plan-mode', 'plan-eng-review-plan-mode',
|
|
'auto-decide-preserved', 'conductor-prose',
|
|
].sort();
|
|
for (const file of ['test/helpers/plan-count-transcript.ts', 'test/plan-count-session-cwd.test.ts']) {
|
|
const selected = selectTests([file], E2E_TOUCHFILES);
|
|
expect(selected.reason).toBe('diff');
|
|
expect(selected.selected.sort()).toEqual(expected);
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
});
|
|
|
|
|
|
test('same-plan expansion disposition replay selects the existing mode helper consumers', () => {
|
|
for (const dependency of ['test/ceo-mode-expansion-disposition.test.ts', 'test/fixtures/ceo-expansion-disposition-77.json']) {
|
|
expect([...selectTests([dependency], E2E_TOUCHFILES).selected].sort()).toEqual(['plan-ceo-finding-count', 'plan-ceo-mode-routing']);
|
|
expect(selectTests([dependency], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
});
|
|
|
|
|
|
test('structured auto-decision evidence selects every native observer', () => {
|
|
const expected = ['auto-decide-preserved', 'conductor-prose', 'plan-ceo-review-plan-mode',
|
|
'plan-design-review-plan-mode', 'plan-devex-review-plan-mode', 'plan-eng-review-plan-mode', 'plan-mode-no-op'];
|
|
for (const file of ['test/auto-decide-structured.test.ts', 'test/fixtures/auto-decide-structured-77.json',
|
|
'test/helpers/auto-decision-state.ts', 'test/auto-decision-state.test.ts', 'test/fixtures/auto-decide-state-cab3.json']) {
|
|
expect([...selectTests([file], E2E_TOUCHFILES).selected].sort()).toEqual(expected);
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
for (const file of ['bin/gstack-question-log', 'bin/gstack-question-preference']) {
|
|
const producers = selectTests([file], E2E_TOUCHFILES).selected;
|
|
for (const id of expected) expect(producers).toContain(id);
|
|
}
|
|
});
|
|
|
|
|
|
test('explanatory native mode evidence selects all observers with their existing tiers', () => {
|
|
const expected = ['auto-decide-preserved', 'conductor-prose', 'office-hours-auto-mode',
|
|
'plan-ceo-review-plan-mode', 'plan-design-review-plan-mode', 'plan-devex-review-plan-mode',
|
|
'plan-eng-review-plan-mode', 'plan-mode-no-op'];
|
|
for (const file of ['test/helpers/native-auto-decide.ts', 'test/auto-decide-current-declaration.test.ts',
|
|
'test/fixtures/auto-decide-current-declaration-6aef.json', 'test/auto-decide-explanatory-mode.test.ts',
|
|
'test/fixtures/auto-decide-explanatory-mode-043a.json', 'test/fixtures/auto-decide-explanatory-mode-749df.json']) {
|
|
expect([...selectTests([file], E2E_TOUCHFILES).selected].sort()).toEqual(expected);
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
expect(expected.map(id => E2E_TIERS[id])).toEqual([
|
|
'periodic', 'periodic', 'gate', 'gate', 'periodic', 'gate', 'periodic', 'gate',
|
|
]);
|
|
});
|
|
|
|
// The workflow judge includes all carved sections, including those outside the
|
|
// entrypoint marker window (readWorkflowJudgeInput).
|
|
test('CEO carved sections select the judge that consumes their complete content', () => {
|
|
for (const file of [
|
|
'plan-ceo-review/sections/review-sections.md.tmpl',
|
|
'plan-ceo-review/sections/review-sections.md',
|
|
]) {
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected)
|
|
.toEqual(['plan-ceo-review/SKILL.md modes']);
|
|
}
|
|
});
|
|
|
|
|
|
test('file supervision regression selects all affected callers with their existing tiers', () => {
|
|
const gate = [
|
|
'codex-offered-ceo-review', 'codex-offered-design-review', 'codex-offered-eng-review',
|
|
'codex-offered-office-hours', 'office-hours-spec-review', 'plan-ceo-finding-floor',
|
|
'plan-ceo-review-benefits', 'plan-devex-finding-floor', 'plan-mode-no-op', 'plan-review-report',
|
|
];
|
|
const periodic = [
|
|
'auto-decide-preserved', 'codex-plan-ceo-format-approach', 'codex-plan-ceo-format-mode',
|
|
'codex-plan-eng-format-coverage', 'codex-plan-eng-format-kind', 'plan-ceo-mode-routing',
|
|
'plan-ceo-review', 'plan-ceo-review-expansion-energy', 'plan-ceo-review-format-approach',
|
|
'plan-ceo-review-format-mode', 'plan-ceo-review-prosons-cadence', 'plan-ceo-review-selective',
|
|
'plan-design-finding-floor', 'plan-eng-finding-floor', 'plan-eng-review', 'plan-eng-review-artifact',
|
|
'plan-eng-review-format-coverage', 'plan-eng-review-format-kind', 'plan-eng-review-plan-mode',
|
|
'plan-review-prosons-format', 'plan-review-prosons-hardstop-neg', 'plan-review-prosons-neutral-neg',
|
|
];
|
|
const changed = ['test/paid-retry-supervision.test.ts'];
|
|
const result = selectTests(changed, E2E_TOUCHFILES);
|
|
expect(result.reason).toBe('diff');
|
|
expect(result.selected.sort()).toEqual([...gate, ...periodic].sort());
|
|
for (const id of gate) expect(E2E_TIERS[id]).toBe('gate');
|
|
for (const id of periodic) expect(E2E_TIERS[id]).toBe('periodic');
|
|
expect(selectTests(changed, LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
});
|
|
|
|
test('floor permissions and large-report fixtures select their actual consumers', () => {
|
|
const floors = ['plan-ceo-finding-floor', 'plan-eng-finding-floor', 'plan-design-finding-floor', 'plan-devex-finding-floor'];
|
|
for (const file of ['test/plan-floor-permission.test.ts', 'test/fixtures/plan-floor-permission-fb10.json'])
|
|
expect(selectTests([file], E2E_TOUCHFILES).selected.sort()).toEqual([...floors].sort());
|
|
const filePermissionConsumers = selectTests(['test/helpers/plan-count-file-permission.ts'], E2E_TOUCHFILES).selected;
|
|
expect(filePermissionConsumers.sort()).toEqual([...floors, 'plan-ceo-finding-count', 'plan-eng-finding-count',
|
|
'plan-design-finding-count', 'plan-devex-finding-count', 'plan-eng-multi-finding-batching', 'plan-ceo-split-overflow'].sort());
|
|
expect(selectTests(['test/fixtures/ceo-report-permission-fb10.json'], E2E_TOUCHFILES).selected.sort())
|
|
.toEqual(filePermissionConsumers);
|
|
expect(E2E_TIERS['plan-ceo-finding-floor']).toBe('gate');
|
|
expect(E2E_TIERS['plan-devex-finding-floor']).toBe('gate');
|
|
expect(E2E_TIERS['plan-eng-finding-floor']).toBe('periodic');
|
|
expect(E2E_TIERS['plan-design-finding-floor']).toBe('periodic');
|
|
});
|
|
|
|
// These existing permission checks now also serve gate floor actors.
|
|
for (const file of ['test/plan-count-cropped-wrap.test.ts', 'test/fixtures/plan-count-cropped-wrap-6714.json']) {
|
|
test(file, () => {
|
|
const gate = ['plan-ceo-finding-floor', 'plan-devex-finding-floor'];
|
|
const periodic = ['plan-ceo-finding-count', 'plan-eng-finding-count', 'plan-design-finding-count',
|
|
'plan-devex-finding-count', 'plan-eng-multi-finding-batching', 'plan-ceo-split-overflow',
|
|
'plan-eng-finding-floor', 'plan-design-finding-floor'];
|
|
const result = selectTests([file], E2E_TOUCHFILES);
|
|
expect(result.reason).toBe('diff');
|
|
expect(result.selected.sort()).toEqual([...gate, ...periodic].sort());
|
|
for (const id of gate) expect(E2E_TIERS[id]).toBe('gate');
|
|
for (const id of periodic) expect(E2E_TIERS[id]).toBe('periodic');
|
|
});
|
|
}
|
|
|
|
|
|
// Shared harness repairs must select every existing consumer, including gate floors.
|
|
const nativeRepairDependencies = [
|
|
{
|
|
"name": "AUTO mode declarations",
|
|
"files": [
|
|
"test/auto-decide-recommendation-scope.test.ts",
|
|
"test/fixtures/auto-decide-recommendation-361c.json",
|
|
"test/auto-decide-target-identity.test.ts",
|
|
"test/fixtures/auto-decide-target-361c.json"
|
|
],
|
|
"owners": [
|
|
"plan-ceo-review-plan-mode",
|
|
"plan-eng-review-plan-mode",
|
|
"plan-design-review-plan-mode",
|
|
"plan-devex-review-plan-mode",
|
|
"plan-mode-no-op",
|
|
"office-hours-auto-mode",
|
|
"auto-decide-preserved",
|
|
"conductor-prose"
|
|
]
|
|
},
|
|
{
|
|
"name": "owned cropped Create previews",
|
|
"files": [
|
|
"test/plan-create-permission.test.ts",
|
|
"test/fixtures/plan-create-permission-361c.json"
|
|
],
|
|
"owners": [
|
|
"plan-ceo-finding-count",
|
|
"plan-eng-finding-count",
|
|
"plan-design-finding-count",
|
|
"plan-devex-finding-count",
|
|
"plan-eng-finding-floor",
|
|
"plan-ceo-finding-floor",
|
|
"plan-design-finding-floor",
|
|
"plan-devex-finding-floor",
|
|
"plan-eng-multi-finding-batching",
|
|
"plan-ceo-split-overflow"
|
|
]
|
|
},
|
|
{
|
|
"name": "native selection defaults",
|
|
"files": [
|
|
"test/plan-review-native-default.test.ts",
|
|
"test/fixtures/eng-omitted-select-361c.json"
|
|
],
|
|
"owners": [
|
|
"plan-ceo-mode-routing",
|
|
"plan-ceo-finding-count",
|
|
"plan-eng-finding-count",
|
|
"plan-design-finding-count",
|
|
"plan-devex-finding-count",
|
|
"plan-eng-multi-finding-batching",
|
|
"plan-ceo-split-overflow",
|
|
"plan-devex-peer-comparison-classification",
|
|
"plan-decision-classification"
|
|
]
|
|
},
|
|
{
|
|
"name": "split native question and report permission",
|
|
"files": [
|
|
"test/fixtures/ceo-split-padding-361c-public.json",
|
|
"test/fixtures/ceo-split-edit-permission-361c-public.json"
|
|
],
|
|
"owners": [
|
|
"plan-ceo-split-overflow"
|
|
]
|
|
},
|
|
{
|
|
"name": "finding-qualified floors",
|
|
"files": [
|
|
"test/helpers/plan-floor-review.ts",
|
|
"test/plan-floor-review.test.ts",
|
|
"test/fixtures/plan-floor-routing-361c.json"
|
|
],
|
|
"owners": [
|
|
"plan-ceo-finding-floor",
|
|
"plan-eng-finding-floor",
|
|
"plan-design-finding-floor",
|
|
"plan-devex-finding-floor"
|
|
]
|
|
},
|
|
{
|
|
"name": "complete long native Edit panes",
|
|
"files": [
|
|
"test/plan-count-long-edit.test.ts",
|
|
"test/fixtures/plan-count-long-edit-0bcd.json"
|
|
],
|
|
"owners": [
|
|
"plan-ceo-finding-count",
|
|
"plan-eng-finding-count",
|
|
"plan-design-finding-count",
|
|
"plan-devex-finding-count",
|
|
"plan-eng-finding-floor",
|
|
"plan-ceo-finding-floor",
|
|
"plan-design-finding-floor",
|
|
"plan-devex-finding-floor",
|
|
"plan-eng-multi-finding-batching",
|
|
"plan-ceo-split-overflow"
|
|
]
|
|
},
|
|
{
|
|
"name": "native border on truncated questions",
|
|
"files": [
|
|
"test/plan-count-truncated-border.test.ts",
|
|
"test/fixtures/eng-d2-truncated-border-0bcd.json"
|
|
],
|
|
"owners": [
|
|
"plan-ceo-review-plan-mode",
|
|
"plan-eng-review-plan-mode",
|
|
"plan-design-review-plan-mode",
|
|
"plan-devex-review-plan-mode",
|
|
"plan-mode-no-op",
|
|
"office-hours-auto-mode",
|
|
"auto-decide-preserved",
|
|
"conductor-prose",
|
|
"plan-ceo-mode-routing",
|
|
"plan-design-with-ui-scope",
|
|
"ship-idempotency-pty",
|
|
"autoplan-chain-pty",
|
|
"plan-ceo-finding-count",
|
|
"plan-eng-finding-count",
|
|
"plan-design-finding-count",
|
|
"plan-devex-finding-count",
|
|
"plan-eng-finding-floor",
|
|
"plan-ceo-finding-floor",
|
|
"plan-design-finding-floor",
|
|
"plan-devex-finding-floor",
|
|
"plan-eng-multi-finding-batching",
|
|
"plan-ceo-split-overflow"
|
|
]
|
|
}
|
|
];
|
|
for (const group of nativeRepairDependencies) {
|
|
test(`native repair dependencies: ${group.name}`, () => {
|
|
for (const file of group.files) {
|
|
const selected = selectTests([file], E2E_TOUCHFILES);
|
|
expect(selected.reason).toBe('diff');
|
|
expect(selected.selected.sort()).toEqual([...group.owners].sort());
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
});
|
|
}
|
|
test('native repair dependencies preserve every original tier', () => {
|
|
expect(E2E_TIERS).toMatchObject({
|
|
"plan-ceo-review-plan-mode": "gate",
|
|
"plan-eng-review-plan-mode": "periodic",
|
|
"plan-design-review-plan-mode": "periodic",
|
|
"plan-devex-review-plan-mode": "gate",
|
|
"plan-mode-no-op": "gate",
|
|
"office-hours-auto-mode": "gate",
|
|
"auto-decide-preserved": "periodic",
|
|
"conductor-prose": "periodic",
|
|
"plan-ceo-finding-count": "periodic",
|
|
"plan-eng-finding-count": "periodic",
|
|
"plan-design-finding-count": "periodic",
|
|
"plan-devex-finding-count": "periodic",
|
|
"plan-eng-finding-floor": "periodic",
|
|
"plan-ceo-finding-floor": "gate",
|
|
"plan-design-finding-floor": "periodic",
|
|
"plan-devex-finding-floor": "gate",
|
|
"plan-eng-multi-finding-batching": "periodic",
|
|
"plan-ceo-split-overflow": "periodic",
|
|
"plan-ceo-mode-routing": "periodic",
|
|
"plan-devex-peer-comparison-classification": "periodic",
|
|
"plan-decision-classification": "periodic"
|
|
});
|
|
});
|
|
|
|
|
|
// These dependency edges do not create new paid identities. Reuse of unchanged
|
|
// model inputs is qualified separately before a paid run.
|
|
test('promoted public transcript decoder keeps its actual callers selected', () => {
|
|
const expected = [
|
|
'plan-eng-review-plan-mode',
|
|
'plan-design-review-plan-mode',
|
|
'auto-decide-preserved',
|
|
'conductor-prose',
|
|
'plan-ceo-mode-routing',
|
|
'plan-design-with-ui-scope',
|
|
'autoplan-chain-pty',
|
|
'plan-ceo-finding-count',
|
|
'plan-eng-finding-count',
|
|
'plan-design-finding-count',
|
|
'plan-devex-finding-count',
|
|
'plan-eng-multi-finding-batching',
|
|
'plan-ceo-split-overflow',
|
|
'plan-ceo-finding-floor',
|
|
'plan-eng-finding-floor',
|
|
'plan-design-finding-floor',
|
|
'plan-devex-finding-floor',
|
|
];
|
|
expect(selectTests(['lib/claude-public-transcript.ts'], E2E_TOUCHFILES).selected.sort())
|
|
.toEqual(expected.sort());
|
|
expect(selectTests(['lib/claude-public-transcript.ts'], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
});
|
|
|
|
test('Autoplan publication libraries and captured hook controls select the native chain', () => {
|
|
for (const file of [
|
|
'lib/autoplan-phase-publication.ts',
|
|
'test/autoplan-publication-guard.test.ts',
|
|
'test/autoplan-publication-hook.test.ts',
|
|
'test/autoplan-publication-generation.test.ts',
|
|
'test/fixtures/autoplan-publication-boundary-361c.json',
|
|
'test/fixtures/autoplan-phase-consumption-491.json',
|
|
]) {
|
|
expect(selectTests([file], E2E_TOUCHFILES).selected).toEqual(['autoplan-chain-pty']);
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
// Preserve the existing autoplan/** edges; native hook controls select only
|
|
// the chain, while a skill file change can select the existing broad owners.
|
|
expect(selectTests(['autoplan/bin/phase-publication-hook.ts'], E2E_TOUCHFILES).selected.sort())
|
|
.toEqual(selectTests(['autoplan/SKILL.md'], E2E_TOUCHFILES).selected.sort());
|
|
expect(E2E_TIERS['autoplan-chain-pty']).toBe('periodic');
|
|
});
|
|
|
|
test('combined Create captures select the existing owned file-permission consumers', () => {
|
|
const expected = [
|
|
'plan-ceo-finding-count',
|
|
'plan-eng-finding-count',
|
|
'plan-design-finding-count',
|
|
'plan-devex-finding-count',
|
|
'plan-eng-finding-floor',
|
|
'plan-ceo-finding-floor',
|
|
'plan-design-finding-floor',
|
|
'plan-devex-finding-floor',
|
|
'plan-eng-multi-finding-batching',
|
|
'plan-ceo-split-overflow',
|
|
];
|
|
for (const file of ['test/plan-create-combined-permission.test.ts',
|
|
'test/fixtures/plan-create-combined-permission-70b.json']) {
|
|
expect(selectTests([file], E2E_TOUCHFILES).selected.sort()).toEqual([...expected].sort());
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
});
|
|
|
|
test('floor quotation evidence selects four assessors and product-type evidence selects only DX', () => {
|
|
const floors = [
|
|
'plan-ceo-finding-floor',
|
|
'plan-eng-finding-floor',
|
|
'plan-design-finding-floor',
|
|
'plan-devex-finding-floor',
|
|
];
|
|
expect(selectTests(['test/fixtures/plan-floor-quote-70b.json'], E2E_TOUCHFILES).selected.sort())
|
|
.toEqual([...floors].sort());
|
|
expect(selectTests(['test/fixtures/plan-floor-product-type-70b.json'], E2E_TOUCHFILES).selected)
|
|
.toEqual(['plan-devex-finding-floor']);
|
|
for (const file of ['test/plan-floor-review.test.ts', 'test/plan-floor-permission.test.ts'])
|
|
expect(selectTests([file], E2E_TOUCHFILES).selected.sort()).toEqual([...floors].sort());
|
|
for (const file of ['test/fixtures/plan-floor-quote-70b.json', 'test/fixtures/plan-floor-product-type-70b.json'])
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
expect(E2E_TIERS['plan-ceo-finding-floor']).toBe('gate');
|
|
expect(E2E_TIERS['plan-devex-finding-floor']).toBe('gate');
|
|
expect(E2E_TIERS['plan-design-finding-floor']).toBe('periodic');
|
|
expect(E2E_TIERS['plan-eng-finding-floor']).toBe('periodic');
|
|
});
|
|
|
|
test('DX custom setup transport selects its existing floor case without quality resampling', () => {
|
|
for (const file of ['test/plan-floor-dx-actor.test.ts', 'test/fixtures/plan-floor-dx-custom-491.json']) {
|
|
expect(selectTests([file], E2E_TOUCHFILES).selected).toEqual(['plan-devex-finding-floor']);
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
});
|
|
|
|
|
|
test('numbered native-menu captures select the existing parser consumers', () => {
|
|
const expected = Object.entries(E2E_TOUCHFILES)
|
|
.filter(([, files]) => files.includes('test/plan-skill-questions.test.ts'))
|
|
.map(([id]) => id).sort();
|
|
expect(expected).toHaveLength(22);
|
|
for (const file of ['test/pty-numbered-option-indent-native.test.ts',
|
|
'test/fixtures/ceo-split-e5-numbered-description-491.json']) {
|
|
expect(selectTests([file], E2E_TOUCHFILES).selected.sort()).toEqual(expected);
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
});
|
|
|
|
|
|
test('pending native Write captures select the existing owned-permission consumers', () => {
|
|
const expected = Object.entries(E2E_TOUCHFILES)
|
|
.filter(([, files]) => files.includes('test/plan-create-combined-permission.test.ts'))
|
|
.map(([id]) => id).sort();
|
|
expect(expected).toHaveLength(10);
|
|
for (const file of ['test/plan-create-prepublication.test.ts',
|
|
'test/fixtures/plan-create-prepublication-491.json']) {
|
|
expect(selectTests([file], E2E_TOUCHFILES).selected.sort()).toEqual(expected);
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
});
|
|
|
|
test('the declared engineering actor selects its existing count case', () => {
|
|
for (const file of ['test/helpers/eng-count-question-policy.ts',
|
|
'test/eng-count-question-policy.test.ts', 'test/fixtures/eng-count-actor-491.json']) {
|
|
expect(selectTests([file], E2E_TOUCHFILES).selected).toEqual(['plan-eng-finding-count']);
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
});
|
|
|
|
|
|
test('stderr lifecycle regression selects runtime consumers without a quality-map edge', () => {
|
|
const expected = [
|
|
'browse-basic', 'browse-snapshot', 'aside-browse-basic', 'aside-browse-flow', 'aside-qa-quick',
|
|
'aside-scrape-json', 'aside-canary-quick', 'hermetic-canary', 'hermetic-sentinel', 'first-task-scaffold',
|
|
'skillmd-setup-discovery', 'skillmd-no-local-binary', 'skillmd-outside-git', 'session-awareness', 'operational-learning',
|
|
'qa-quick', 'qa-b6-static', 'qa-b7-spa', 'qa-b8-checkout', 'qa-only-no-fix',
|
|
'qa-fix-loop', 'qa-bootstrap', 'review-sql-injection', 'review-enum-completeness', 'review-base-branch',
|
|
'review-design-lite', 'review-army-migration-safety', 'review-army-perf-n-plus-one', 'review-army-delivery-audit', 'review-army-quality-score',
|
|
'review-army-json-findings', 'review-army-red-team', 'review-army-simplification', 'review-army-simplification-precision', 'review-army-consensus',
|
|
'office-hours-spec-review', 'office-hours-forcing-energy', 'office-hours-builder-wildness', 'plan-ceo-review', 'plan-ceo-review-selective',
|
|
'plan-ceo-review-benefits', 'plan-ceo-review-expansion-energy', 'plan-eng-review', 'plan-eng-review-artifact', 'plan-review-report',
|
|
'plan-design-review-plan-mode', 'office-hours-phase4-fork', 'auq-format-gate', 'tpa-present', 'tpa-absent-linux',
|
|
'tpa-broken', 'tpa-absent-darwin', 'tpa-apple-ban', 'ship-section-loading', 'plan-ceo-section-loading',
|
|
'carve-section-loading', 'setup-gbrain-remote', 'setup-gbrain-bad-token', 'setup-gbrain-path4-local-pglite', 'plan-ceo-review-format-mode',
|
|
'plan-ceo-review-format-approach', 'plan-eng-review-format-coverage', 'plan-eng-review-format-kind', 'plan-ceo-review-prosons-cadence', 'plan-review-prosons-format',
|
|
'plan-review-prosons-hardstop-neg', 'plan-review-prosons-neutral-neg', 'plan-tune-inspect', 'codex-offered-office-hours', 'codex-offered-ceo-review',
|
|
'codex-offered-design-review', 'codex-offered-eng-review', 'ship-base-branch', 'ship-local-workflow', 'review-dashboard-via',
|
|
'retro', 'retro-base-branch', 'cso-full-audit', 'cso-diff-mode', 'cso-infra-scope',
|
|
'learnings-show', 'timeline-event-flow', 'context-recovery-artifacts', 'context-save-writes-file', 'context-restore-loads-latest',
|
|
'context-save-routing', 'context-save-then-restore-roundtrip', 'context-restore-fragment-match', 'context-restore-empty-state', 'context-restore-list-delegates',
|
|
'context-restore-legacy-compat', 'context-save-list-current-branch', 'context-save-list-all-branches', 'document-release', 'codex-review',
|
|
'outside-voice-codex-to-claude-code', 'outside-voice-claude-code-to-codex', 'outside-plan-disabled-no-fallback', 'ship-coverage-audit', 'review-coverage-audit',
|
|
'plan-eng-coverage-audit', 'ship-triage', 'ship-docsync', 'docsync-spawned', 'design-consultation-core',
|
|
'design-consultation-existing', 'design-consultation-research', 'design-consultation-preview', 'plan-design-review-no-ui-scope', 'design-review-fix',
|
|
'design-review-detector-shim', 'design-review-detector-shim-dom', 'design-review-plugin-handoff', 'design-html-slop-gate', 'diagram-triplet', 'diagram-authoring-quality',
|
|
'gstack-upgrade-happy-path', 'land-and-deploy-workflow', 'land-and-deploy-first-run', 'land-and-deploy-review-gate', 'canary-workflow',
|
|
'benchmark-workflow', 'setup-deploy-workflow', 'autoplan-dual-voice', 'scrape-match-path', 'scrape-prototype-path',
|
|
'skillify-happy-path', 'skillify-provenance-refusal', 'skillify-approval-reject', 'journey-ideation', 'journey-plan-eng',
|
|
'journey-debug', 'journey-qa', 'journey-code-review', 'journey-ship', 'journey-docs',
|
|
'journey-retro', 'journey-design-system', 'journey-visual-qa', 'fanout-arm-overlay-on', 'fanout-arm-overlay-off',
|
|
'office-hours-brain-writeback', 'arm-benchmark-native-overbuild', 'arm-benchmark-crud-endpoint', 'arm-benchmark-bugfix-decoys', 'office-hours-section-loading',
|
|
];
|
|
const file = 'test/session-runner-stream-lifecycle.test.ts';
|
|
expect(selectTests([file], E2E_TOUCHFILES).selected.sort()).toEqual(expected.sort());
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
});
|
|
|
|
|
|
test('collection completion lifecycle selects the existing native counter consumers', () => {
|
|
const selected = selectTests(['test/plan-count-collection-completion.test.ts'], E2E_TOUCHFILES);
|
|
expect(selected.reason).toBe('diff');
|
|
expect(selected.selected.length).toBeGreaterThan(0);
|
|
expect(selected.selected.sort()).toEqual(
|
|
selectTests(['test/plan-count-timeout.test.ts'], E2E_TOUCHFILES).selected.sort());
|
|
expect(selectTests(['test/plan-count-collection-completion.test.ts'], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
});
|
|
|
|
for (const file of ['test/plan-count-cross-cwd-ancestry.test.ts', 'test/fixtures/plan-count-cross-cwd-ancestry-0bcd.json']) {
|
|
test(`${file} selects native cwd continuation consumers`, () => {
|
|
const selected = selectTests([file], E2E_TOUCHFILES);
|
|
expect(selected.reason).toBe('diff');
|
|
expect(selected.selected.sort()).toEqual([
|
|
'auto-decide-preserved', 'autoplan-chain-pty', 'conductor-prose',
|
|
'plan-ceo-finding-count', 'plan-ceo-mode-routing', 'plan-ceo-split-overflow',
|
|
'plan-design-finding-count', 'plan-design-review-plan-mode', 'plan-design-with-ui-scope',
|
|
'plan-devex-finding-count', 'plan-eng-finding-count', 'plan-eng-multi-finding-batching',
|
|
'plan-eng-review-plan-mode',
|
|
].sort());
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
});
|
|
}
|
|
|
|
|
|
test('native clipped regressions retain the existing parser and owned-permission selection', () => {
|
|
for (const [dependency, count, files] of [
|
|
['test/helpers/claude-pty-runner.ts', 22, [
|
|
'test/plan-count-clipped-elision.test.ts', 'test/fixtures/eng-d1-clipped-elision-1579.json', 'test/fixtures/eng-d2-planning-prelude-4d.json',
|
|
]],
|
|
['test/helpers/plan-count-file-permission.ts', 10, [
|
|
'test/plan-edit-cropped-permission.test.ts', 'test/fixtures/plan-edit-cropped-permission-1579.json',
|
|
]],
|
|
] as const) {
|
|
const expected = selectTests([dependency], E2E_TOUCHFILES).selected.sort();
|
|
expect(expected).toHaveLength(count);
|
|
for (const file of files) {
|
|
expect(selectTests([file], E2E_TOUCHFILES).selected.sort()).toEqual(expected);
|
|
expect(selectTests([file], LLM_JUDGE_TOUCHFILES).selected).toEqual([]);
|
|
}
|
|
}
|
|
});
|