Reviews JSON output schema design, backwards compatibility, actions arrays, and machine-readability. Use when reviewing changes to fallow's JSON output format.
69
85%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
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.