Skip to content

date: 2026-06-25 tags: [harness, skills, ci, dashboard, drift-check] status: active graduated_to:

php artisan harness:check green ≠ the dashboard drift-check will pass — a new skill must be registered in the dashboard data too

Symptom — A PR adding the new preflight skill went red on the Generate, drift-check, test, build CI job: [drift-check] FAILED — owned skill "preflight" is in no data/skill-groups.json group. Local php artisan harness:check had been green, giving false confidence the harness side was done.

Root cause — There are two separate harness gates. harness:check validates config/harness.php and its committed snapshot (harness-dashboard/data/harness-config.json). The harness dashboard has its own Node drift-check (harness-dashboard/scripts/drift-check.mjs) that requires every owned skill to be in harness-dashboard/data/skill-groups.json (hard fail) and warns if it lacks skill-prose.json prose. harness:check does not run or cover the dashboard drift-check, so a new skill passes one gate and fails the other.

Fix — Registered preflight in skill-groups.json ("Verify & QA") + skill-prose.json (commit e2d6a2c on the #786 branch). Prevention added to the build-claude-skill checklist, step 1 (.claude/skills/build-claude-skill/SKILL.md).

Guardbuild-claude-skill step 1 now says: a new skill must be added to harness-dashboard/data/skill-groups.json (required) + skill-prose.json (recommended), verified with cd harness-dashboard && npm run generate && npm run drift, before opening the PR — and flags that this is a separate gate from harness:check. Stronger guard worth considering (a find-harness-improvements candidate): make harness:check also run the dashboard drift-check (or chain it locally) so a single local command catches both, rather than relying on the checklist.