再生成
fixtures/ も manifest.json も手書きではありません。どちらも wacz-validator 側の
generator が作ります —— 使っている builder(buildWacz)が wacz-validator のテスト内部の
ものであって public API ではないためです。
# wacz-validator の clone から、CORPUS_DIR にこの repo の絶対パスを渡す。# vitest は packages/core を CWD に走るので、相対パスは避ける。cd /path/to/wacz-validatorCORPUS_DIR=/path/to/wacz-validator-corpus pnpm --filter @wacz-validator/core corpus:buildCORPUS_DIR=/path/to/wacz-validator-corpus pnpm --filter @wacz-validator/core corpus:docscorpus:build は fixtures/ と manifest.json を、corpus:docs は
カタログの表を書きます。どちらも CORPUS_DIR 配下に落ちるので、
依存は一方向です —— wacz-validator が corpus を知っており、逆はありません。
生成は決定的です
Section titled “生成は決定的です”generator は zip entry の mtime を固定値で書くので、同じ wacz-validator revision からは バイト単位で同一の標本が出ます。再生成しても Git LFS が膨らみません。
標本を変えるには
Section titled “標本を変えるには”wacz-validator 側の packages/core/test/corpus/spec.ts を編集して再生成します。各エントリは
「どう壊すか」(options)と「どの rule が出るはずか」(expectRules)を宣言し、
generator は記録する前に、その rule が実際に発火したことを assert します。
manifest が嘘をつけないのはこの構造のためです —— expectRules は検査されますが、
書き込まれるのは実際の runValidation の出力です。
generator はテストです
Section titled “generator はテストです”4 つのコマンドはすべて vitest run です。意図的にそうしてあります —— 生成しながら
その場で検証するので、意図どおりに壊れなかった標本は repo に届きません。