5ba62a8f0d
Restructure the JSON-runner integ corpus from a flat `category/command.json` layout into a three-level `category/name/facet.json` tree, so cases are navigable by the flag or feature they exercise (e.g. `unix/grep/n.json`, `unix/find/name.json`, `unix/meta/chmod.json`, `resources/dify/search.json`). Faceting rules: - unix command files split by the primary flag on the named command, with reserved `basic` / `error` / `operand` buckets, and populate the previously-dormant `flags` field on those cases (370 cases). - feature files plus bash/crossmount/resources split by the case-id's distinguishing segment (`meta_chmod_*` -> chmod, `col_parquet_*` -> parquet). - 9 high-cardinality flat files (provision, printf, gmail, ...) collapse to a single `basic.json` instead of exploding into 40+ singletons. - uppercase-only flags get a `.upper` suffix so filenames stay unique on case-insensitive filesystems (`grep -C` -> `C.upper.json`). Discovery now walks recursively: `rglob` in the Python harness and the existing `walkFiles` helper in the TypeScript harness. 177 flat files -> 701 facet files, 1898 cases. The migration preserves each case's `seq`, so the global execution order and every case body are byte-identical to before (only the additive `flags` field differs); verified 0 content mismatches vs the flat tree, unchanged id order, and the Python runner green (1582/1582 on ram). Adds runners/tools/refile_facets.py, the deterministic, re-runnable migration tool (with a case-collision guard). Co-authored-by: bytecii <bytecii@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>