mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-07 14:06:42 +02:00
Merge remote-tracking branch 'origin/main' into garrytan/workspace-aware-ship
Rebumped v1.8.0.0 -> v1.11.0.0 (minor-past main's v1.10.1.0) using bin/gstack-next-version — the same queue-aware path this branch introduces. CHANGELOG repositioned so v1.11.0.0 sits above main's new entries (v1.10.1.0 / v1.10.0.0 / v1.9.0.0). Conflicts resolved: - VERSION, package.json: rebumped to v1.11.0.0 (util-picked) - bin/gstack-config: merged both lists (workspace_root + gbrain keys) - CHANGELOG.md: hoisted v1.11.0.0 entry above main's new entries Pre-existing failures in main (4) documented but not fixed in this PR: 1. gstack-brain-sync secret scan > blocks bearer-json (brain-sync tests) 2. no files larger than 2MB (security-bench fixture, already TODO'd) 3. selectTests > skill-specific change (touchfiles scoping) 4. Opus 4.7 overlay pacing directive (expectation stale after v1.10.1.0 removed the Fan out nudge) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -286,11 +286,38 @@ Log the operational learning now. Then say what you logged.`,
|
||||
// Add a remote so the agent can derive a project name
|
||||
run('git', ['remote', 'add', 'origin', 'https://github.com/acme/billing-app.git']);
|
||||
|
||||
// Extract AskUserQuestion format instructions from generated SKILL.md
|
||||
const skillMd = fs.readFileSync(path.join(ROOT, 'SKILL.md'), 'utf-8');
|
||||
// Extract AskUserQuestion format instructions from a generated SKILL.md.
|
||||
// ROOT/SKILL.md is the browse skill (Tier 1) and does NOT contain the
|
||||
// "## AskUserQuestion Format" section — that block is only emitted for
|
||||
// Tier 2+ skills by scripts/resolvers/preamble.ts. Use office-hours/SKILL.md
|
||||
// (Tier 3) which always has the format guidance baked in. Falls back to
|
||||
// the first SKILL.md that contains the header so a future template move
|
||||
// doesn't break this test again.
|
||||
let skillMdPath = path.join(ROOT, 'office-hours', 'SKILL.md');
|
||||
let skillMd = '';
|
||||
if (fs.existsSync(skillMdPath)) {
|
||||
skillMd = fs.readFileSync(skillMdPath, 'utf-8');
|
||||
}
|
||||
if (!skillMd.includes('## AskUserQuestion Format')) {
|
||||
// Fallback: scan top-level skill dirs for the first match.
|
||||
const skillDirs = fs.readdirSync(ROOT, { withFileTypes: true })
|
||||
.filter(d => d.isDirectory())
|
||||
.map(d => path.join(ROOT, d.name, 'SKILL.md'));
|
||||
for (const candidate of skillDirs) {
|
||||
if (!fs.existsSync(candidate)) continue;
|
||||
const content = fs.readFileSync(candidate, 'utf-8');
|
||||
if (content.includes('## AskUserQuestion Format')) {
|
||||
skillMd = content;
|
||||
skillMdPath = candidate;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
const aqStart = skillMd.indexOf('## AskUserQuestion Format');
|
||||
const aqEnd = skillMd.indexOf('\n## ', aqStart + 1);
|
||||
const aqBlock = skillMd.slice(aqStart, aqEnd > 0 ? aqEnd : undefined);
|
||||
const aqBlock = aqStart >= 0
|
||||
? skillMd.slice(aqStart, aqEnd > 0 ? aqEnd : undefined)
|
||||
: '';
|
||||
|
||||
const outputPath = path.join(sessionDir, 'question-output.md');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user