Severity: P2 · Batch: B11 (input validation)
Location
src/utils/strings.js:6-17; src/core/hookRegistry.js:9-14; lookup miss at src/core/scanDirectives.js:73, extraction filter at :39
Root cause
camelToKebab('useURLParser') → use-urlparser, kebabToCamel back → useUrlparser ≠ registered name → selector matches but lookup misses → "Unknown hook" warn per scan. Also hookRegistry.js accepts any use… string (useful passes; usefoo produces a [usefoo] selector whose attrs then fail the use- extraction filter).
Proposed fix
Validate hook names as use[A-Z][A-Za-z0-9]* with no consecutive caps (or normalize lookups through kebab keys).
Verification recipe
Spec: register useURLParser; element with use-urlparser; scan; assert hook executed. Expected on unmodified code: "Unknown hook" warning, hook not executed → confirmed. Also assert registerHook(function useful(){}) is accepted (validation gap).
Severity: P2 · Batch: B11 (input validation)
Location
src/utils/strings.js:6-17;src/core/hookRegistry.js:9-14; lookup miss atsrc/core/scanDirectives.js:73, extraction filter at:39Root cause
camelToKebab('useURLParser')→use-urlparser,kebabToCamelback →useUrlparser≠ registered name → selector matches but lookup misses → "Unknown hook" warn per scan. AlsohookRegistry.jsaccepts anyuse…string (usefulpasses;usefooproduces a[usefoo]selector whose attrs then fail theuse-extraction filter).Proposed fix
Validate hook names as
use[A-Z][A-Za-z0-9]*with no consecutive caps (or normalize lookups through kebab keys).Verification recipe
Spec: register
useURLParser; element withuse-urlparser; scan; assert hook executed. Expected on unmodified code: "Unknown hook" warning, hook not executed → confirmed. Also assertregisterHook(function useful(){})is accepted (validation gap).