fix: skill-specific Aside research queries travel as prompt files

investigate, office-hours, plan-ceo-review, review, plan-eng-review,
design-consultation Phase 2, the shared test bootstrap (B2) and QA's test
bootstrap each carried their own _aside_exec call with the model-filled query
inside a double-quoted argument. Skills that already carry the Web research
block now give only the prompt-file text and use that block to create, write
and send it; design-consultation, the shared bootstrap and QA create the file
and send it with the new {{ASIDE_RESEARCH_SEND}} resolver, which is the same
send block the research section uses (read-only sentence stays in the shell).

aside-driver's B2 pin and qa-browser-preservation's bootstrap contract move
from the inline call to the prompt file and the shared send resolver.

Co-authored-by: dgrant <dgrant@users.noreply.github.com>
This commit is contained in:
garrytananddgrant committed 2026-10-06 21:11:01 +00:00
1 parent f14e2f5b19
commit e652ae4ae9
21 files changed
+104 -65

No files matched your search

+6 -3
View File
@@ -17,7 +17,7 @@ import { spawnSync } from 'child_process';
import * as fs from 'fs';
import * as os from 'os';
import * as path from 'path';
import { generateAsideSetup, generateAsideCookbook, generateAsideResearch, asideExecPrelude, ASIDE_LOCAL_HOST_RULE } from '../scripts/resolvers/aside';
import { generateAsideSetup, generateAsideCookbook, generateAsideResearch, asideExecPrelude, asideResearchSend, ASIDE_LOCAL_HOST_RULE } from '../scripts/resolvers/aside';
import { generateTestBootstrap } from '../scripts/resolvers/testing';
import { generateBrowseFallback, generateBrowseSetup, generateUntrustedContentWarning } from '../scripts/resolvers/browse';
import { RESOLVERS } from '../scripts/resolvers/index';
@@ -422,8 +422,11 @@ describe('web research ({{ASIDE_RESEARCH}})', () => {
test('the test-bootstrap research step (B2) routes through the same _aside_exec prelude', () => {
const bootstrap = generateTestBootstrap(ctx);
expect(bootstrap).toContain(asideExecPrelude(ctx) + '\n_aside_exec "Search the web for the best');
expect(bootstrap).toContain('_aside_exec "Search the web for the best [runtime] test framework');
// CEO-12: the query travels in an agent-written file and goes out through the shared research send block.
expect(bootstrap).toContain('PROMPT_FILE=$(mktemp "$_GT/aside-prompt.XXXXXX")');
expect(bootstrap).toContain('Prompt file text: `the best [runtime] test framework');
expect(bootstrap).toContain('```bash\n' + asideResearchSend(ctx) + '\n```');
expect(asideResearchSend(ctx).startsWith(asideExecPrelude(ctx) + '\n')).toBe(true);
expect(bootstrap).not.toMatch(BARE_ASIDE_EXEC);
// Same degradation ladder: WebSearch when the host has it, built-in table last.
});
+1 -1
View File
@@ -75,7 +75,7 @@ describe('compact QA bootstrap preserves native detection', () => {
'Never silently delete a valid red regression', '/qa\'s diagnosis/fix gate', 'First real tests',
'min 1, max 5', 'full verified command', '.github/workflows/test.yml', 'push + pull_request',
'ubuntu-latest', 'manual test-step addition', 'never overwrite TESTING.md', '100% test coverage',
'BOTH branches', 'unrelated staged edits', '{{ASIDE_EXEC_PRELUDE}}', 'WebSearch',
'BOTH branches', 'unrelated staged edits', '{{FREE_TEXT_FILE:PROMPT_FILE=aside-prompt}}', '{{ASIDE_RESEARCH_SEND}}', 'WebSearch',
]) expect(bootstrap).toContain(contract);
expect(bootstrap).not.toContain('git checkout --');
expect(bootstrap).not.toContain('delete silently');