When vue-material-design-icons is not resolvable, gate-60 does not skip and does not warn — it emits a definite, per-icon verdict claiming the icon does not exist. On larpingapp that was 43 findings naming Calendar, Star, Trophy, Earth, MapMarker, Package, School, Sitemap, Lightbulb, Briefcase — all of which obviously do exist.
This is a false RED, which is rarer and in some ways worse than a false green: it is confidently worded, it names a specific remediation, and following it would replace correct icons with different ones.
Measured — same tree, same commit, two verdicts
ConductionNL/larpingapp@development c73df92d, hydra-gates main @ 756fe89:
| run |
node_modules |
gate-60 |
| 1 |
absent (npm ci still running) |
FAIL — 43 icon(s) outside the canonical vocabulary (ADR-077) |
| 2 |
present |
PASS |
Nothing else changed between the two runs. Sample from run 1's log:
FAIL src/manifest.json: Events: icon "Calendar" does not exist in vue-material-design-icons and is not a vocabulary icon — it renders blank wherever it is not aliased locally.
FAIL src/manifest.json: XP awarded: icon "Trophy" does not exist in vue-material-design-icons and is not a vocabulary icon — it renders blank wherever it is not aliased locally.
FAIL src/manifest.json: Setting: icon "Earth" does not exist in vue-material-design-icons and is not a vocabulary icon — it renders blank wherever it is not aliased locally.
...
checked 9 manifest(s): 43 failure(s), 0 warning(s)
Positive control: node_modules/vue-material-design-icons/Calendar.vue exists in run 2, and the identical manifest then passes.
Why this matters more than a normal FP
Gates 22 and 53 in the same run handled their missing dependency correctly and loudly:
[gate-22] manifest-validation: FAIL — SCHEMA VALIDATION DID NOT HAPPEN — Ajv is not
resolvable ... A weaker check reported as a pass is not a pass. Run `npm ci` ...
[gate-53] effective-manifest-crossref: FAIL — ajv not resolvable from ... — refusing
to run fail-open
That is the right pattern and it is already in the codebase. gate-60 should adopt it: if the icon package cannot be resolved, say "the icon set could not be loaded, so this gate did not run" — not "these 43 icons do not exist".
As written, an agent or human acting on run 1 would have "fixed" 43 correct icons. The remediation text explicitly invites it ("it renders blank"), and a subsequent run with node_modules present would then show PASS, appearing to confirm the change worked.
Suggested fix
Resolve vue-material-design-icons up front. If it is missing, fail with an explicit "did not run" message (mirroring gate-22/53) rather than iterating icons against an empty set. Include the resolution path in the message so the fix is obvious.
Also worth checking
Any CI job that runs the gates before npm ci, or in a container without the app's node_modules, will be producing these 43 findings today. Worth a fleet sweep for gate-60 findings naming icons that plainly exist.
When
vue-material-design-iconsis not resolvable, gate-60 does not skip and does not warn — it emits a definite, per-icon verdict claiming the icon does not exist. On larpingapp that was 43 findings namingCalendar,Star,Trophy,Earth,MapMarker,Package,School,Sitemap,Lightbulb,Briefcase— all of which obviously do exist.This is a false RED, which is rarer and in some ways worse than a false green: it is confidently worded, it names a specific remediation, and following it would replace correct icons with different ones.
Measured — same tree, same commit, two verdicts
ConductionNL/larpingapp@developmentc73df92d, hydra-gatesmain@756fe89:node_modulesnpm cistill running)FAIL — 43 icon(s) outside the canonical vocabulary (ADR-077)PASSNothing else changed between the two runs. Sample from run 1's log:
Positive control:
node_modules/vue-material-design-icons/Calendar.vueexists in run 2, and the identical manifest then passes.Why this matters more than a normal FP
Gates 22 and 53 in the same run handled their missing dependency correctly and loudly:
That is the right pattern and it is already in the codebase. gate-60 should adopt it: if the icon package cannot be resolved, say "the icon set could not be loaded, so this gate did not run" — not "these 43 icons do not exist".
As written, an agent or human acting on run 1 would have "fixed" 43 correct icons. The remediation text explicitly invites it ("it renders blank"), and a subsequent run with
node_modulespresent would then show PASS, appearing to confirm the change worked.Suggested fix
Resolve
vue-material-design-iconsup front. If it is missing, fail with an explicit "did not run" message (mirroring gate-22/53) rather than iterating icons against an empty set. Include the resolution path in the message so the fix is obvious.Also worth checking
Any CI job that runs the gates before
npm ci, or in a container without the app'snode_modules, will be producing these 43 findings today. Worth a fleet sweep for gate-60 findings naming icons that plainly exist.