Two defensive hardening changes: 1. state.cjs: Replace two identical inline extractField closures (cmdStateSnapshot and buildStateFrontmatter) with a shared stateExtractField(content, fieldName) helper at module scope. The helper uses escapeRegex on fieldName before interpolation into RegExp constructors, preventing breakage if a field name ever contains regex metacharacters. Net removal of duplicated logic. 2. gsd-plan-checker.md: Bound the "relevant" definition in the exhaustive cross-check instruction. A requirement is "relevant" only if ROADMAP.md explicitly maps it to this phase or the phase goal directly implies it — prevents false blocker flags for requirements belonging to other phases. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
27 KiB
27 KiB