mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-11 19:20:26 +01:00
test: skip alias symlinks in the voice-routing check, keep unrelated budget ceilings, add #3129 CHANGELOG entry
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
c085ddedfd
commit
f5d982a20c
3 files changed
+21
-3
No files matched your search
@@ -1,5 +1,23 @@
|
||||
# Changelog
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
**Claude SKILL.md files no longer carry a "When to invoke" body section, which saves about 20 KB across 56 skills.** Claude Code reads a skill's body only after the skill is invoked, so routing prose there never routed anything. Routing still comes from the catalog description and the CLAUDE.md routing block, and voice triggers move into the root router's routing block. From #3129 by @thanhnguyentung95.
|
||||
|
||||
### Changed
|
||||
- **Catalog trim (`scripts/gen-skill-docs.ts`):** the Claude render keeps the one-line catalog description and no longer inserts the routing and voice-trigger prose into the body. `--catalog-mode=full` and the other hosts are unchanged: they keep the full description.
|
||||
- **Voice triggers in the root router:** a new `{{VOICE_TRIGGER_ROUTING}}` resolver (`scripts/resolvers/voice-triggers.ts`) adds one `- Voice trigger "…" → invoke /<skill>` line per skill to the root `SKILL.md` routing block, Claude only. That's 21 lines, and the root router's eager ceiling rises from 4289 to 4821 tokens.
|
||||
- **Context budget:** 54 per-skill eager ceilings go down (net −5,139 tokens). The `claude/design-review` size pin drops by 437 chars, and the claude ship golden is refreshed.
|
||||
- **Gate integrity:** the tests that pinned the removed section now assert its absence, or check the template description instead:
|
||||
- `test/catalog-trim.test.ts` (the three `buildWhenToInvokeSection` tests go with the function);
|
||||
- `test/catalog-mode-full.test.ts` and `test/cso-preserved.test.ts`;
|
||||
- `test/gen-skill-docs.test.ts` (the benchmark routing and CSO voice tests read the template);
|
||||
- `test/skill-validation.test.ts` (trigger and proactive phrases are checked in `SKILL.md.tmpl`);
|
||||
- `test/helpers/parity-harness.ts` (no `## When to invoke` heading required);
|
||||
- `test/helpers/skill-fixture.ts` and `test/skill-e2e-retro.test.ts` (the section is dropped from the review, review-army and retro E2E section lists).
|
||||
|
||||
One new free test checks that the root router routes every voice trigger, and it skips the `connect-chrome` alias symlink. No threshold, trial count, case kind or judge changed. No context-budget ceiling rose except the root router's.
|
||||
|
||||
## [1.91.149.0] - 2026-10-19
|
||||
|
||||
**Paid eval cases can now run on the Codex host, and the Monday census runs two arms: Claude Opus 5.5 and Codex gpt-6.1-sol.** `EVALS_HOST=codex` runs the 52 adapter-only gate cases through a full Codex runtime per case. On its first pilot gpt-6.1-sol passed 48 of 52 with no retries, at $4.63 for the 52 cases, against $28.93 for the same cases on Fable (0.16×). Claude-only cases are skipped on Codex with a recorded reason and never count as failed. GSTA-49 TM2.
|
||||
|
||||
Vendored
+2
-2
@@ -19,11 +19,11 @@
|
||||
"design-review": 35808,
|
||||
"design-shotgun": 14901,
|
||||
"deslop-shared-libs": 3411,
|
||||
"devex-review": 21004,
|
||||
"devex-review": 20161,
|
||||
"diagram": 4268,
|
||||
"document-generate": 11713,
|
||||
"document-release": 10092,
|
||||
"eval-plan": 10098,
|
||||
"eval-plan": 9811,
|
||||
"freeze": 1115,
|
||||
"gstack": 4821,
|
||||
"gstack-upgrade": 6212,
|
||||
|
||||
@@ -4453,7 +4453,7 @@ describe('voice-triggers processing', () => {
|
||||
|
||||
test('Claude root router routes every skill voice trigger the catalog trim drops', () => {
|
||||
const routing = between(fs.readFileSync(path.join(ROOT, 'SKILL.md'), 'utf-8'), '**Routing rules', '**Route only to skills');
|
||||
const skills = fs.readdirSync(ROOT).filter(d => fs.existsSync(path.join(ROOT, d, 'SKILL.md.tmpl')));
|
||||
const skills = fs.readdirSync(ROOT).filter(d => !fs.lstatSync(path.join(ROOT, d)).isSymbolicLink() && fs.existsSync(path.join(ROOT, d, 'SKILL.md.tmpl')));
|
||||
let routed = 0;
|
||||
for (const skill of skills) {
|
||||
const triggers = extractVoiceTriggers(fs.readFileSync(path.join(ROOT, skill, 'SKILL.md.tmpl'), 'utf-8').replace(/\r\n/g, '\n'));
|
||||
|
||||
Reference in new issue
Block a user