Skip to content

gate-60 icon-vocabulary reports 43 confident FAILs when node_modules is absent — 'Calendar does not exist in vue-material-design-icons' #233

Description

@rubenvdlinde

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions