› falsify · spec falsify.dev · v0.1 · v0.2 RFC · discuss

PRML JSON Schemas

Drop-in IDE autocomplete, CI validation, and standards-body verification — no installation.

The schemas are JSON Schema 2020-12 conformant. They validate the eight required PRML v0.1 fields plus the optional v0.2 additions (streaming variant, runner attestation, revocation). Every v0.1 manifest validates against both schemas — backwards compatibility is mechanically verified across the locked test vectors (12 v0.1 + 8 v0.2).

URLs

SchemaURLStatus
v0.1 (stable) prml-v0.1.schema.json Working draft, public review
v0.2 (RFC) prml-v0.2.schema.json Comment window through 2026-05-22 23:59 UTC

VS Code / IDE autocomplete

Add to your project's .vscode/settings.json:

{
  "yaml.schemas": {
    "https://spec.falsify.dev/schema/prml-v0.1.schema.json":
      ["**/*.prml.yaml", "**/manifest.yaml", "**/prml-manifest.yaml"]
  }
}

Requires the YAML extension by Red Hat. JetBrains IDEs and Neovim with schemastore integration also pick this up.

JSON Schema Store registration

The schemas can be added to SchemaStore.org for global IDE auto-detection. PR pending — once accepted, any file matching the patterns above gets autocomplete without per-project config.

CI validation (Python)

pip install jsonschema pyyaml

python3 -c "
import json, yaml, jsonschema, urllib.request
schema = json.loads(urllib.request.urlopen(
    'https://spec.falsify.dev/schema/prml-v0.1.schema.json').read())
manifest = yaml.safe_load(open('manifest.yaml'))
jsonschema.validate(manifest, schema)
print('OK — manifest.yaml conforms to PRML v0.1')
"

CI validation (Node)

npm install ajv ajv-formats yaml node-fetch

node -e "
import('node-fetch').then(async ({default: fetch}) => {
  const Ajv = (await import('ajv')).default;
  const addFormats = (await import('ajv-formats')).default;
  const yaml = await import('yaml');
  const fs = await import('fs');
  const schema = await (await fetch(
    'https://spec.falsify.dev/schema/prml-v0.1.schema.json')).json();
  const ajv = new Ajv({strict: false});
  addFormats(ajv);
  const validate = ajv.compile(schema);
  const ok = validate(yaml.parse(fs.readFileSync('manifest.yaml', 'utf8')));
  console.log(ok ? 'OK' : validate.errors);
});
"

What the schemas do not catch

Stability & versioning

The v0.1 schema is locked: any change requires a v0.2+ bump. The v0.2 schema is in RFC and may change before 2026-05-22. Production CI should pin to v0.1 until v0.2 freezes.