Reviews JSON output schema design, backwards compatibility, actions arrays, and machine-readability. Use when reviewing changes to fallow's JSON output format.
Review changes to fallow's JSON output format. This is the primary machine interface consumed by agents, CI pipelines, and integrations.
schema_version bump. Never rename, remove, or change the type of an existing field without versioningactions array with machine-actionable fix and suppress hints. Check auto_fixable is set correctlyunused_exports not unusedExports)null means "computed but no value". Never mix these semantics--explain: _meta objects must include value ranges, definitions, and interpretation hints for every numeric field--group-by is active, the envelope changes to { grouped_by, total_issues, groups: [...] }. Verify both grouped and ungrouped paths{"error": true, "message": "...", "exit_code": 2} on stdout, not stderrFor each JSON-output diff, walk this list in addition to the generic checks above:
Serialize-derived String fields that the published schema constrains to closed enums (docs/output-schema.json enum: [...]), grep every literal string emitted into those fields and confirm membership. Concrete recipe: for each new <StructWithSchema> { field: "...".to_owned(), } in the diff, run grep -nE '"<field>"' docs/output-schema.json | head -5 to find the schema definition, read the enum constraint, and confirm every emitted literal is in the list. Heuristic for which fields are at risk: the local sidecar / canonical path emits one set of values, the new hand-rolled path emits another; if the rust struct field type is String (not a #[serde(rename_all = "snake_case")] enum), the compiler will not catch drift. Pattern target list for runtime coverage: evidence.static_status (["used","unused"]), evidence.test_coverage (["covered","not_covered"]), evidence.v8_tracking (["tracked","untracked"]), verdict (already enum-typed, safe). Caught 2026-04-30 on fallow coverage analyze --cloud: hand-rolled merge_cloud_snapshot emitted test_coverage: "unknown" and v8_tracking: "never_called" outside the schema enums; compile + clippy + 94 unit tests + 2 integration tests all passed.README.md / detection.md updates, ALSO grep these additional in-repo and internal locations for stale counts:
/usr/bin/grep -nE "\b(89|90|91|92|93)\b.*plugin" \
.claude/rules/plugins.md \
.claude/rules/core-crate.md \
npm/fallow/package.json \
npm/fallow/README.mdnpm/fallow/skills/** as a vendored release artifact rather than a canonical edit target. The registry defines what to compare, while this search identifies every current consumer that must move with it.The real-world corpus is intentionally untracked. Before its first use, follow
the benchmark setup and run
npm --prefix benchmarks run download-fixtures.
FALLOW_QUIET=1 fallow <command> --format json --root benchmarks/fixtures/real-world/zod 2>/dev/null | jq . | head -c 2000Check:
schema_version present and correctskip_serializing_if, omitted when not applicablecrates/cli/src/report/json.rs (main JSON serialization)crates/cli/src/report/mod.rs (format dispatch, schema_version constant)crates/types/src/results.rs (result types that become JSON)Can BLOCK on:
schema_version bumpactions arrays on issuesEnd with a verdict:
## Verdict: APPROVE | CONCERN | BLOCK55944e8
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.