7 schemas defining the data contracts across the 7-stage Harvest pipeline (S1 Discover → S7 Customize) plus the WAF compliance report.
Discover Record v1.0.0 · [H1] · CC0-1.0 · Draft 2020-12
H1 Discover stagePersistence shape for the output of the Discover stage — validated repo metadata, license, upstream commit SHA, and provenance.
Use this schemaimport Ajv2020 from "ajv/dist/2020";
const ajv = new Ajv2020();
const schema = await fetch("https://frootai.dev/schemas/discover-record.v1.json").then(r => r.json());
const validate = ajv.compile(schema);
const data = { /* your Discover Record data */ };
if (validate(data)) {
console.log("Valid Discover Record");
} else {
console.error(validate.errors);
} import httpx, jsonschema
schema = httpx.get("https://frootai.dev/schemas/discover-record.v1.json").json()
data = { ... } # your Discover Record data
jsonschema.validate(data, schema)
print("Valid Discover Record") Version history (1)v1.0.0 2026-06-04
Initial release — H1 Discover stage output shape. Validated by Ajv2020 in-loop before persistence.
Fetch Record v1.0.0 · [H2] · CC0-1.0 · Draft 2020-12
H2 Fetch stageFile tree enumeration, well-known surface classification, scrubbed file contents, and clone metadata from the Fetch stage.
Use this schemaimport Ajv2020 from "ajv/dist/2020";
const ajv = new Ajv2020();
const schema = await fetch("https://frootai.dev/schemas/fetch-record.v1.json").then(r => r.json());
const validate = ajv.compile(schema);
const data = { /* your Fetch Record data */ };
if (validate(data)) {
console.log("Valid Fetch Record");
} else {
console.error(validate.errors);
} import httpx, jsonschema
schema = httpx.get("https://frootai.dev/schemas/fetch-record.v1.json").json()
data = { ... } # your Fetch Record data
jsonschema.validate(data, schema)
print("Valid Fetch Record") Version history (1)v1.0.0 2026-06-04
Initial release — H2 Fetch stage output shape. File tree enumeration, surface classification, scrubbed content.
RepoFacts v1.0.0 · [H3] · CC0-1.0 · Draft 2020-12
H3 Extract stageDeterministic, typed extraction surface — architecture, services, regions, models, dependencies. All downstream stages ground claims on values from this shape.
Use this schemaimport Ajv2020 from "ajv/dist/2020";
const ajv = new Ajv2020();
const schema = await fetch("https://frootai.dev/schemas/repo-facts.v1.json").then(r => r.json());
const validate = ajv.compile(schema);
const data = { /* your RepoFacts data */ };
if (validate(data)) {
console.log("Valid RepoFacts");
} else {
console.error(validate.errors);
} import httpx, jsonschema
schema = httpx.get("https://frootai.dev/schemas/repo-facts.v1.json").json()
data = { ... } # your RepoFacts data
jsonschema.validate(data, schema)
print("Valid RepoFacts") Version history (1)v1.0.0 2026-06-04
Initial release — H3 Extract stage output. 30 derivers (H3.1–H3.30). Per-field provenance and confidence baked in.
Retrieval Record v1.0.0 · [H4] · CC0-1.0 · Draft 2020-12
H4 Retrieve stageTop-K nearest reference plays and top-N nearest primitives that condition the scaffolding LLM in stage S5.
Use this schemaimport Ajv2020 from "ajv/dist/2020";
const ajv = new Ajv2020();
const schema = await fetch("https://frootai.dev/schemas/retrieval-record.v1.json").then(r => r.json());
const validate = ajv.compile(schema);
const data = { /* your Retrieval Record data */ };
if (validate(data)) {
console.log("Valid Retrieval Record");
} else {
console.error(validate.errors);
} import httpx, jsonschema
schema = httpx.get("https://frootai.dev/schemas/retrieval-record.v1.json").json()
data = { ... } # your Retrieval Record data
jsonschema.validate(data, schema)
print("Valid Retrieval Record") Version history (1)v1.0.0 2026-06-04
Initial release — H4 Retrieve stage output. Top-K nearest plays + top-N nearest primitives.
FAI Manifest v2 v2.0.0 · [H0.3] · CC0-1.0 · Draft 2020-12
H5 Scaffold stageSolution Play manifest with Harvest provenance extension — harvested_from, pipeline_version, LLM steps, policy overlay, composition, and confidence aggregate.
sha256: 0f09619b564bed4f…
19.9 KB
Use this schemaimport Ajv2020 from "ajv/dist/2020";
const ajv = new Ajv2020();
const schema = await fetch("https://frootai.dev/schemas/fai-manifest.v2.json").then(r => r.json());
const validate = ajv.compile(schema);
const data = { /* your FAI Manifest v2 data */ };
if (validate(data)) {
console.log("Valid FAI Manifest v2");
} else {
console.error(validate.errors);
} import httpx, jsonschema
schema = httpx.get("https://frootai.dev/schemas/fai-manifest.v2.json").json()
data = { ... } # your FAI Manifest v2 data
jsonschema.validate(data, schema)
print("Valid FAI Manifest v2") Version history (2)v2.0.0 2026-06-04 breaking
Major bump from v1 (Draft-07) to v2 (Draft 2020-12). Added provenance block: harvested_from, pipeline_version, llm_steps, policy_overlay, composition, confidence_aggregate. Provenance optional at v2.0.0 for non-breaking v1 migration.
v1.0.0 2026-05-24
Initial release — Solution Play manifest schema. JSON Schema Draft-07. 101 existing plays reference this version.
Policy Overlay v1 v1.0.0 · [H0.4] · CC0-1.0 · Draft 2020-12
H7 Customize stageRegional, SKU, network, RBAC, identity, IaC, encryption, observability, and cost guardrails applied to Harvest-emitted plays.
sha256: 74d1416c2af03984…
12.9 KB
Use this schemaimport Ajv2020 from "ajv/dist/2020";
const ajv = new Ajv2020();
const schema = await fetch("https://frootai.dev/schemas/policy-overlay.v1.json").then(r => r.json());
const validate = ajv.compile(schema);
const data = { /* your Policy Overlay v1 data */ };
if (validate(data)) {
console.log("Valid Policy Overlay v1");
} else {
console.error(validate.errors);
} import httpx, jsonschema
schema = httpx.get("https://frootai.dev/schemas/policy-overlay.v1.json").json()
data = { ... } # your Policy Overlay v1 data
jsonschema.validate(data, schema)
print("Valid Policy Overlay v1") Version history (1)v1.0.0 2026-06-04
Initial release — regional, SKU, network, RBAC, identity, IaC, encryption, observability, and cost guardrails. Frozen enums — extending requires a major bump.
WAF Report v1.0.0 · [V1] · CC0-1.0 · Draft 2020-12
V1 WAF/CAF componentAggregated WAF compliance report — per-pillar scores, weighted aggregate, check-level pass/fail detail. Null-safe scoring for pillars with zero applicable checks.
Use this schemaimport Ajv2020 from "ajv/dist/2020";
const ajv = new Ajv2020();
const schema = await fetch("https://frootai.dev/schemas/waf-report.v1.json").then(r => r.json());
const validate = ajv.compile(schema);
const data = { /* your WAF Report data */ };
if (validate(data)) {
console.log("Valid WAF Report");
} else {
console.error(validate.errors);
} import httpx, jsonschema
schema = httpx.get("https://frootai.dev/schemas/waf-report.v1.json").json()
data = { ... } # your WAF Report data
jsonschema.validate(data, schema)
print("Valid WAF Report") Version history (1)v1.0.0 2026-06-04
Initial release — WAF compliance report. Per-pillar scores (5 WAF pillars), weighted aggregate, check-level detail. Sealed at V1.17.