feat(m3): search and export
- Pidgin lexer: words, escaped phrases (strict closing), parens
- Full-Pidgin token-level parser, strict: malformed input throws
SearchSyntaxException (BREAKING: lenient degradation removed from
the plan; M7 must surface the error, M8 USAGE.md documents strict
behavior)
- AST with reference-equality collection terms; structural
comparison lives in the test-side SearchNodeComparer (YYC MARK
note records the record-equality pitfall)
- SQL compiler: parameterized predicate over cards alias, LIKE
escaping, COLLATE NOCASE exact matches, tag EXISTS / column IN
subqueries
- Markdown exporter: ResX-driven templates, per-language export
time AND card time patterns, kebab i18n file names, table cell
escaping
- New RgbColor value type (byte components, strict #RRGGBB parse,
canonical lowercase text) wired through TagModel and repository
- 57 new tests (grammar branches, strict errors, SQL end-to-end,
en/zh export snapshots, color conversions)