v1.87.4.0 fix: preserve health failures and disclose coverage (#2882)

* fix: report health failures and coverage accurately

* chore: prepare health reporting release 1.87.4.0

* test: restrict routing evaluations to installed project skills

* test: stabilize health selection and terminal fixtures
This commit is contained in:
Garry Tan
2026-09-15 21:35:11 -07:00
committed by GitHub
parent 85b8c038fc
commit a6b3a57512
15 changed files with 728 additions and 43 deletions
+9 -1
View File
@@ -79,6 +79,7 @@ function installSkills(tmpDir: string) {
];
const targetBase = path.join(tmpDir, '.claude', 'skills');
const installedSkills: string[] = [];
for (const skill of skillDirs) {
const srcPath = path.join(ROOT, skill, 'SKILL.md');
@@ -88,8 +89,11 @@ function installSkills(tmpDir: string) {
const destDir = path.join(targetBase, skillName);
fs.mkdirSync(destDir, { recursive: true });
fs.writeFileSync(path.join(destDir, 'SKILL.md'), extractSkillHead(srcPath));
installedSkills.push(skillName);
}
// The names-only catalog keeps new CLI built-ins from changing the candidate
// set. Descriptions still choose the skill; no request-to-skill answer key.
// Write a CLAUDE.md with a GENERIC invoke-skills nudge — deliberately NO
// per-skill routing table. These journey tests exist to catch skill
// DESCRIPTION regressions (their touchfiles key on */SKILL.md.tmpl), and
@@ -102,7 +106,11 @@ function installSkills(tmpDir: string) {
## Skill routing
When the user's request matches an available skill, ALWAYS invoke it using the Skill
This project uses the following installed gstack skills: ${installedSkills.join(', ')}.
Choose among this project catalog by matching the request to the skill descriptions.
The CLI's built-in skills are outside this project's workflow.
When the user's request matches an available project skill, ALWAYS invoke it using the Skill
tool as your FIRST action. Do NOT answer directly, do NOT use other tools first.
The skill has specialized workflows that produce better results than ad-hoc answers.
Choose the skill by matching the request against each skill's description.