Exposed search actions become a structured result with explicit evidence boundaries.

Fanout result schema: validate full runs, selections and comparisons

Native and modelled full runs use toolVersion and methodVersion without a root schemaVersion. Query selections and local comparisons have their own schemaVersion values. The reference checks four export families; the validator adds count and scope rules.

Use this when consuming JSON from the current website tool. The reference covers documented versions; raw provider responses and the older planner contract remain separate formats.

Inspect your own result nextThe offline kit needs no API key. You can later inspect a separate bounded run in the free tool.Open the free tool

Four families serve different jobs

A native full run contains normalized queries, search actions, sources, provider status and run metadata. A modelled full run contains ten objects with query, intent and reason. Those objects are research ideas; similar text does not turn them into provider observations.

A query selection contains only checked strings and their original one-based indexes. Its run object retains context without a source list. A comparison instead contains several saved runs, analyses and shared sets. A comparison run's domain set is not source evidence for each CSV query.

Continue with choose an export in the tool.

The JSON Schema file is a new reference for existing contracts, not an invented field in tool output. The versions below come from current source. The older ai-fanout.export/1.0 planner with branches and the SEO research handoff are outside this validator and are not silently reinterpreted.

Choose the contract

Source checked on 10 October 2026. Reference-artifact v2 is not a full run's root schemaVersion.

FileIdentifierScope
Native full runnative-fanout-tool/1.1.0 · provider-native-search/1.1One normalized run result
Modelled full runmodelled-fanout-tool/2.1.0 · openrouter-structured-fanout/2.1Ten research ideas
Query selectionai-fanout.query-selection/1.0Selected strings, no sources
Local comparisonai-fanout.local-comparison/1.0Saved runs and derived analysis

Check JSON shape and cross-field counts separately

The kit uses Ajv 8.20.0 with its Draft 2020-12 class. It compiles the actual JSON Schema instead of approximating validation with a few handwritten field checks. Strict object rules catch an invented source list in a query selection or a wrong evidence status.

JSON Schema alone does not compare selectedQueryCount with the actual array length here. validate.mjs adds that check, unique selection indexes and comparison IDs, run and analysis counts. It also checks saved Gemini source removal and whether an exact_query scope belongs to a single-query action.

After npm ci, run npm run validate. The bundle contains four explicitly synthetic export shapes; selections and comparisons were produced with the website's actual export functions. Repository checks also validate outputs of both service functions using mocked providers. No paid requests were made for these checks.

Continue with inspect negative contract tests.

Validate the fixture bundle and your own file
npm run validate
node validate.mjs path/to/your-export.json

A valid schema does not authenticate provenance

Correctly shaped JSON can still be fabricated. The validator establishes shape and the listed relationships, not provider origin, citation truth or today's prices. Zero values in synthetic usage are placeholders rather than cost measurements.

A formally valid comparison is not automatically methodologically fair. The current type label checks topics and providers, not equality of every locale and protocol field. Shared query sets are deterministic analysis, not a general quality score. These questions belong in the repetition and comparison plan.

Continue with prepare a controlled comparison.

The reference checks timestamps in the serialized ISO shape used here, not freshness or every calendar boundary. It does not recreate all intersections. Retain your unchanged original export and record schema and parser versions separately. Recheck the reference before accepting a new tool version.

Sources used

These sources support the functions and limits described here. They do not prove claims beyond that scope.

  1. Ajv: JSON Schema draft support

    Supports use of the Ajv2020 class for Draft 2020-12. Ajv 8.20.0 is pinned in the kit; dependency versions are locked. This source does not authenticate provider provenance or validate the truth of an exported claim.

    Open source
  2. Original runnable offline parser and edge-case test kit

    Original educational parser code and 27 offline checks. Synthetic response fixtures are not provider output; exact strings, status states, source scope and retention exclusions are tested. No paid calls or new actual grounding data. The teaching helper explicitly differs from the live normalized wrapper.

    Open source
  3. Current website export contracts and reference validation

    Draft 2020-12 reference for the current native/modelled full runs, query selections and local comparisons. Schema checked against actual service/export functions with synthetic provider stubs and semantic negative tests. No root schemaVersion is invented for full runs. Legacy planner and handoff formats remain separate.

    Open source