automated-qa 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/NOTICE +9 -0
- package/README.md +100 -0
- package/SKILL.md +65 -0
- package/agent/prebuilt/darwin-universal/qa-agent +0 -0
- package/agent/prebuilt/linux-arm64/qa-agent +0 -0
- package/agent/prebuilt/linux-x64/qa-agent +0 -0
- package/agent/release-manifest.json +31 -0
- package/bin/autonomous-cache.mjs +2 -0
- package/bin/bench-generate.mjs +232 -0
- package/bin/bench-graph-query.mjs +2 -0
- package/bin/bench-score.mjs +10 -0
- package/bin/classify.mjs +15 -0
- package/bin/coherence-playwright.mjs +1 -0
- package/bin/coherence-runner.mjs +6 -0
- package/bin/crud-runner.mjs +12 -0
- package/bin/experiment-executor.mjs +10 -0
- package/bin/experiment-runner.mjs +3 -0
- package/bin/inventory.mjs +17 -0
- package/bin/probe.js +879 -0
- package/bin/qa.mjs +16 -0
- package/bin/rules.mjs +5 -0
- package/bin/run-benchmarks.mjs +2 -0
- package/bin/runtime-packs.mjs +3 -0
- package/bin/semantic-explorer.mjs +3 -0
- package/bin/shadow-collector.mjs +3 -0
- package/bin/shadow-replay.mjs +6 -0
- package/bin/soak-marathon.mjs +15 -0
- package/bin/sweep.mjs +43 -0
- package/bin/validate-priors.mjs +3 -0
- package/bin/verify-artifacts.mjs +3 -0
- package/bin/verify-manifest.mjs +2 -0
- package/install-skill.sh +45 -0
- package/lib/qa/agent-availability.mjs +1 -0
- package/lib/qa/agent-result.mjs +1 -0
- package/lib/qa/analysis.mjs +5 -0
- package/lib/qa/atlas-coverage.mjs +11 -0
- package/lib/qa/atlas-v1.mjs +1 -0
- package/lib/qa/atlas.mjs +2 -0
- package/lib/qa/auth/coordinator.mjs +1 -0
- package/lib/qa/auth/launcher.mjs +3 -0
- package/lib/qa/auth/lease.mjs +1 -0
- package/lib/qa/auth/oracle.mjs +1 -0
- package/lib/qa/auth/personas.mjs +3 -0
- package/lib/qa/autonomous-cache.mjs +3 -0
- package/lib/qa/block-ledger.mjs +1 -0
- package/lib/qa/capture-report.mjs +63 -0
- package/lib/qa/ci.mjs +11 -0
- package/lib/qa/cli.mjs +538 -0
- package/lib/qa/coherence/analyze.mjs +1 -0
- package/lib/qa/coherence/cache-key.mjs +6 -0
- package/lib/qa/coherence/causes.mjs +1 -0
- package/lib/qa/coherence/concurrency.mjs +1 -0
- package/lib/qa/coherence/contracts.mjs +1 -0
- package/lib/qa/coherence/entity-aliases.mjs +1 -0
- package/lib/qa/coherence/enums.mjs +1 -0
- package/lib/qa/coherence/family-report.mjs +1 -0
- package/lib/qa/coherence/flow-pool.mjs +1 -0
- package/lib/qa/coherence/graph.mjs +1 -0
- package/lib/qa/coherence/identity.mjs +1 -0
- package/lib/qa/coherence/ir.mjs +4 -0
- package/lib/qa/coherence/navigation.mjs +1 -0
- package/lib/qa/coherence/observe.mjs +2 -0
- package/lib/qa/coherence/offline.mjs +1 -0
- package/lib/qa/coherence/plan-join.mjs +1 -0
- package/lib/qa/coherence/provenance.mjs +2 -0
- package/lib/qa/coherence/report.mjs +1 -0
- package/lib/qa/coherence/representations.mjs +1 -0
- package/lib/qa/coherence/risk.mjs +2 -0
- package/lib/qa/coherence/structural-js.mjs +11 -0
- package/lib/qa/coherence/symbols.mjs +6 -0
- package/lib/qa/coherence/tanstack.mjs +4 -0
- package/lib/qa/coherence/views.mjs +1 -0
- package/lib/qa/coherence-planner.mjs +1 -0
- package/lib/qa/command-catalog.mjs +2 -0
- package/lib/qa/commands/dev.mjs +1 -0
- package/lib/qa/commands/fix.mjs +1 -0
- package/lib/qa/commands/impl/analysis.mjs +1 -0
- package/lib/qa/commands/impl/atlas.mjs +1 -0
- package/lib/qa/commands/impl/coherence.mjs +1 -0
- package/lib/qa/commands/impl/crud.mjs +2 -0
- package/lib/qa/commands/impl/doctor.mjs +1 -0
- package/lib/qa/commands/impl/experiments.mjs +1 -0
- package/lib/qa/commands/impl/fp.mjs +1 -0
- package/lib/qa/commands/impl/graph.mjs +1 -0
- package/lib/qa/commands/impl/invariants.mjs +1 -0
- package/lib/qa/commands/impl/lanes.mjs +7 -0
- package/lib/qa/commands/impl/ledger.mjs +11 -0
- package/lib/qa/commands/impl/loop.mjs +1 -0
- package/lib/qa/commands/impl/marathon.mjs +1 -0
- package/lib/qa/commands/impl/next.mjs +38 -0
- package/lib/qa/commands/impl/report.mjs +4 -0
- package/lib/qa/commands/impl/research.mjs +4 -0
- package/lib/qa/commands/impl/selftest.mjs +1 -0
- package/lib/qa/commands/impl/serve.mjs +1 -0
- package/lib/qa/commands/impl/shadow.mjs +1 -0
- package/lib/qa/commands/impl/stability.mjs +1 -0
- package/lib/qa/commands/impl/triage.mjs +1 -0
- package/lib/qa/commands/impl/validate.mjs +4 -0
- package/lib/qa/commands/impl/version.mjs +1 -0
- package/lib/qa/commands/impl/watch.mjs +1 -0
- package/lib/qa/commands/init.mjs +6 -0
- package/lib/qa/commands/measure.mjs +1 -0
- package/lib/qa/commands/run.mjs +1 -0
- package/lib/qa/commands/show.mjs +1 -0
- package/lib/qa/commands/verify.mjs +6 -0
- package/lib/qa/deepening.mjs +1 -0
- package/lib/qa/denominators.mjs +1 -0
- package/lib/qa/depth.mjs +4 -0
- package/lib/qa/doctor.mjs +2 -0
- package/lib/qa/experiments-default.mjs +1 -0
- package/lib/qa/fix-lanes.mjs +3 -0
- package/lib/qa/forced-states.mjs +1 -0
- package/lib/qa/fp.mjs +2 -0
- package/lib/qa/fs.mjs +6 -0
- package/lib/qa/graph-schema.mjs +2 -0
- package/lib/qa/graph.mjs +3 -0
- package/lib/qa/harness-plan.mjs +3 -0
- package/lib/qa/init.mjs +5 -0
- package/lib/qa/integrity.mjs +1 -0
- package/lib/qa/invariants.mjs +84 -0
- package/lib/qa/jcs.mjs +1 -0
- package/lib/qa/lanes.mjs +1 -0
- package/lib/qa/loop.mjs +7 -0
- package/lib/qa/marathon-coherence.mjs +1 -0
- package/lib/qa/marathon-phases.mjs +1 -0
- package/lib/qa/marathon-wait.mjs +3 -0
- package/lib/qa/marathon.mjs +5 -0
- package/lib/qa/mode-coverage.mjs +1 -0
- package/lib/qa/mutation-policy.mjs +1 -0
- package/lib/qa/pattern-ledger.mjs +3 -0
- package/lib/qa/pending.mjs +1 -0
- package/lib/qa/proc.mjs +4 -0
- package/lib/qa/recommend.mjs +1 -0
- package/lib/qa/release-manifest.mjs +1 -0
- package/lib/qa/report-html.mjs +178 -0
- package/lib/qa/reports.mjs +2 -0
- package/lib/qa/request-evidence.mjs +1 -0
- package/lib/qa/research.mjs +20 -0
- package/lib/qa/routing.mjs +1 -0
- package/lib/qa/runs.mjs +1 -0
- package/lib/qa/schema.mjs +1 -0
- package/lib/qa/serve.mjs +4 -0
- package/lib/qa/server.mjs +1 -0
- package/lib/qa/source-snapshot.mjs +3 -0
- package/lib/qa/stability.mjs +3 -0
- package/lib/qa/state-evidence.mjs +1 -0
- package/lib/qa/sweep-incremental.mjs +1 -0
- package/lib/qa/triage.mjs +2 -0
- package/lib/qa/verdict.mjs +1 -0
- package/lib/qa/watch.mjs +2 -0
- package/package.json +62 -0
- package/references/ATLAS-COVERAGE.md +231 -0
- package/references/atlas-v1.md +318 -0
- package/references/atlas.md +338 -0
- package/references/verify.crud.example.json +1 -0
- package/references/verify.impact.example.json +1 -0
- package/references/verify.shadow.example.json +1 -0
- package/schemas/agent-result.schema.json +135 -0
- package/schemas/analysis.schema.json +15 -0
- package/schemas/classify.schema.json +61 -0
- package/schemas/coherence-ir.schema.json +1585 -0
- package/schemas/coherence-observed.schema.json +1171 -0
- package/schemas/coherence-plan.schema.json +77 -0
- package/schemas/coherence-risk.schema.json +46 -0
- package/schemas/crud-observed.schema.json +118 -0
- package/schemas/experiment-execution.schema.json +82 -0
- package/schemas/graph-edge.schema.json +22 -0
- package/schemas/graph-node.schema.json +81 -0
- package/schemas/graph.schema.json +2493 -0
- package/schemas/identity-oracle.schema.json +19 -0
- package/schemas/inventory.schema.json +2167 -0
- package/schemas/lanes-plan.schema.json +52 -0
- package/schemas/next.schema.json +54 -0
- package/schemas/personas.schema.json +52 -0
- package/schemas/research.schema.json +192 -0
- package/schemas/run.schema.json +160 -0
- package/schemas/shadow-replay.schema.json +68 -0
- package/schemas/stability.schema.json +92 -0
- package/schemas/sweep.schema.json +239 -0
- package/schemas/v1/agent-result.schema.json +106 -0
- package/schemas/v1/run.schema.json +96 -0
- package/schemas/verify-crud.schema.json +37 -0
- package/schemas/verify-read-only.schema.json +37 -0
- package/templates/github-workflow.yml +80 -0
- package/templates/pre-commit.sample +22 -0
- package/verify.sh +385 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://frontend-verify.dev/schemas/coherence-plan.schema.json",
|
|
4
|
+
"title": "coherence plan v2",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "coverage", "universe", "invariants", "families", "unattributed", "obligationIds", "operationIds", "sideChannelIds", "cacheKeys", "reads", "mutations", "surfaces", "operations", "sideChannels", "obligations", "perRoute", "plan"],
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": 2 },
|
|
10
|
+
"coverage": { "$ref": "#/$defs/coverage" },
|
|
11
|
+
"universe": { "$ref": "#/$defs/universe" },
|
|
12
|
+
"invariants": { "type": "array", "items": { "enum": ["field-parity", "visibility-policy", "durability"] } },
|
|
13
|
+
"families": { "type": "array", "items": { "$ref": "#/$defs/familyAccounting" } },
|
|
14
|
+
"unattributed": { "$ref": "#/$defs/unattributed" },
|
|
15
|
+
"obligationIds": { "type": "array", "items": { "$ref": "#/$defs/id" } },
|
|
16
|
+
"operationIds": { "type": "array", "items": { "$ref": "#/$defs/id" } },
|
|
17
|
+
"sideChannelIds": { "type": "array", "items": { "$ref": "#/$defs/pairId" } },
|
|
18
|
+
"cacheKeys": { "type": "array", "items": { "$ref": "#/$defs/cacheKey" } },
|
|
19
|
+
"reads": { "type": "array", "items": { "$ref": "#/$defs/read" } },
|
|
20
|
+
"mutations": { "type": "array", "items": { "$ref": "#/$defs/mutation" } },
|
|
21
|
+
"surfaces": { "type": "array", "items": { "$ref": "#/$defs/surface" } },
|
|
22
|
+
"operations": { "type": "array", "items": { "$ref": "#/$defs/cacheOperation" } },
|
|
23
|
+
"sideChannels": { "type": "array", "items": { "$ref": "#/$defs/sideChannel" } },
|
|
24
|
+
"obligations": { "type": "array", "items": { "$ref": "#/$defs/obligation" } },
|
|
25
|
+
"perRoute": { "type": "array", "items": { "$ref": "#/$defs/perRoute" } },
|
|
26
|
+
"plan": { "$ref": "#/$defs/plan" }
|
|
27
|
+
},
|
|
28
|
+
"$defs": {
|
|
29
|
+
"id": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
|
|
30
|
+
"pairId": { "type": "string", "pattern": "^[a-f0-9]{64}:sha256:[a-f0-9]{64}$" },
|
|
31
|
+
"evidenceId": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
|
|
32
|
+
"jcsValue": { "anyOf": [{ "type": ["string", "boolean", "null"] }, { "type": "number", "minimum": -9007199254740991, "maximum": 9007199254740991 }, { "type": "array", "items": { "$ref": "#/$defs/jcsValue" } }, { "type": "object", "additionalProperties": { "$ref": "#/$defs/jcsValue" } }] },
|
|
33
|
+
"keyOrigin": { "type": "object", "required": ["file", "start", "end", "line", "column"], "additionalProperties": false, "properties": { "file": { "type": "string" }, "start": { "type": "integer", "minimum": 0 }, "end": { "type": "integer", "minimum": 1 }, "line": { "type": "integer", "minimum": 1 }, "column": { "type": "integer", "minimum": 1 } } },
|
|
34
|
+
"literalTerm": { "type": "object", "required": ["kind", "value"], "additionalProperties": false, "properties": { "kind": { "const": "literal" }, "value": { "$ref": "#/$defs/jcsValue" }, "origin": { "$ref": "#/$defs/keyOrigin" } } },
|
|
35
|
+
"symbolicTerm": { "type": "object", "required": ["kind", "expression", "ownerSymbol", "targetSymbol", "origin", "resolutionPath", "resolution", "reason"], "additionalProperties": false, "properties": { "kind": { "enum": ["parameter", "wildcard", "call", "unknown"] }, "expression": { "type": "string" }, "ownerSymbol": { "type": ["string", "null"] }, "targetSymbol": { "type": ["string", "null"] }, "origin": { "$ref": "#/$defs/keyOrigin" }, "resolutionPath": { "type": "array", "maxItems": 26, "items": { "type": "string" } }, "resolution": { "const": "unresolved" }, "reason": { "type": "string" } } },
|
|
36
|
+
"term": { "oneOf": [{ "$ref": "#/$defs/literalTerm" }, { "$ref": "#/$defs/symbolicTerm" }] },
|
|
37
|
+
"pattern": { "type": "object", "required": ["segments"], "additionalProperties": false, "properties": { "segments": { "type": "array", "items": { "$ref": "#/$defs/term" } } } },
|
|
38
|
+
"cacheKey": { "type": "object", "required": ["id", "material", "provenance"], "additionalProperties": false, "properties": { "id": { "$ref": "#/$defs/id" }, "material": { "type": "object", "required": ["namespace", "version", "segments"], "additionalProperties": false, "properties": { "namespace": { "const": "coherence/cache-key" }, "version": { "const": 1 }, "segments": { "type": "array", "items": { "$ref": "#/$defs/term" } } } }, "provenance": { "type": "array", "minItems": 1, "items": { "type": "object" } } } },
|
|
39
|
+
"sourceSpan": { "type": "object", "required": ["file", "start", "end", "line", "column"], "additionalProperties": false, "properties": { "file": { "type": "string" }, "start": { "type": "integer", "minimum": 0 }, "end": { "type": "integer", "minimum": 1 }, "line": { "type": "integer", "minimum": 1 }, "column": { "type": "integer", "minimum": 1 } } },
|
|
40
|
+
"read": { "type": "object", "required": ["id", "keyId", "file", "line", "span", "pattern", "endpoint", "family", "confidence"], "additionalProperties": false, "properties": { "id": { "$ref": "#/$defs/evidenceId" }, "keyId": { "$ref": "#/$defs/id" }, "file": { "type": "string" }, "line": { "type": "integer", "minimum": 0 }, "span": { "$ref": "#/$defs/sourceSpan" }, "pattern": { "$ref": "#/$defs/pattern" }, "endpoint": { "type": ["string", "null"] }, "family": { "type": ["string", "null"] }, "familySource": { "enum": ["declaration", "endpoint", "unresolved"] }, "confidence": { "enum": ["exact", "resolved", "coarse", "unresolved", "uncertain"] } } },
|
|
41
|
+
"mutation": { "type": "object", "required": ["id", "material", "file", "line", "endpoint", "family", "writes", "operationIds", "confidence"], "additionalProperties": false, "properties": { "id": { "$ref": "#/$defs/id" }, "material": { "$ref": "#/$defs/mutationMaterial" }, "file": { "type": "string" }, "line": { "type": "integer" }, "hook": { "type": ["string", "null"] }, "endpoint": { "type": ["string", "null"] }, "family": { "type": ["string", "null"] }, "familySource": { "enum": ["declaration", "endpoint", "unresolved"] }, "writes": { "type": "array" }, "operationIds": { "type": "array", "items": { "$ref": "#/$defs/id" } }, "confidence": { "type": "string" } } },
|
|
42
|
+
"surface": { "type": "object", "required": ["id", "material", "route", "file", "component", "readIds", "families", "confidence", "kind"], "additionalProperties": false, "properties": { "id": { "$ref": "#/$defs/id" }, "material": { "$ref": "#/$defs/surfaceMaterial" }, "route": { "type": "string" }, "file": { "type": ["string", "null"] }, "component": { "type": ["string", "null"] }, "readIds": { "type": "array", "items": { "$ref": "#/$defs/evidenceId" } }, "families": { "type": "array", "items": { "type": "string" } }, "confidence": { "enum": ["exact", "resolved", "coarse", "unresolved"] }, "kind": { "enum": ["route", "component", "modal", "drawer", "tab", "wizard-step", "embedded-widget"] } } },
|
|
43
|
+
"operationSpan": { "type": "object", "required": ["file", "start", "end"], "additionalProperties": false, "properties": { "file": { "type": "string" }, "start": { "type": "integer", "minimum": 0 }, "end": { "type": "integer", "minimum": 1 } } },
|
|
44
|
+
"receiver": { "type": "object", "required": ["expression", "ownerSymbol", "targetSymbol", "kind", "resolution", "reason"], "additionalProperties": false, "properties": { "expression": { "type": "string" }, "ownerSymbol": { "type": ["string", "null"] }, "targetSymbol": { "type": ["string", "null"] }, "kind": { "enum": ["query-client", "query-cache", "unknown"] }, "resolution": { "enum": ["resolved", "unresolved"] }, "reason": { "enum": [null, "unsupported-client"] } } },
|
|
45
|
+
"effect": { "type": "object", "required": ["kind", "scope"], "additionalProperties": false, "properties": { "kind": { "enum": ["invalidate", "refetch", "reset", "remove", "update", "clear-query-cache", "clear-mutation-cache"] }, "scope": { "type": "string" } } },
|
|
46
|
+
"cacheOperation": { "type": "object", "required": ["id", "material", "provenance"], "additionalProperties": false, "properties": { "id": { "$ref": "#/$defs/id" }, "material": { "type": "object", "required": ["namespace", "version", "sourceRef", "receiver", "operation", "keyId", "keyMatch", "exact", "predicate", "filters", "effects"], "additionalProperties": false, "properties": { "namespace": { "const": "coherence/cache-operation" }, "version": { "const": 1 }, "sourceRef": { "$ref": "#/$defs/operationSpan" }, "receiver": { "$ref": "#/$defs/receiver" }, "operation": { "enum": ["invalidateQueries", "refetchQueries", "resetQueries", "removeQueries", "setQueryData", "setQueriesData", "clear"] }, "keyId": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" }, "keyMatch": { "enum": ["all", "prefix", "exact", "unknown"] }, "exact": { "type": ["boolean", "null"] }, "predicate": { "anyOf": [{ "type": "null" }, { "$ref": "#/$defs/term" }] }, "filters": { "type": "object", "additionalProperties": false, "properties": { "type": {}, "stale": {}, "fetchStatus": {}, "refetchType": {} } }, "effects": { "type": "array", "items": { "$ref": "#/$defs/effect" } } } }, "provenance": { "type": "array", "minItems": 1, "items": { "type": "object" } } } },
|
|
47
|
+
"sideChannel": { "type": "object", "required": ["id", "operationId", "readId", "keyCoverage", "effectCoverage", "mandatory"], "additionalProperties": false, "properties": { "id": { "$ref": "#/$defs/pairId" }, "operationId": { "$ref": "#/$defs/id" }, "readId": { "$ref": "#/$defs/evidenceId" }, "keyCoverage": { "enum": ["covered", "not-covered", "unresolved"] }, "effectCoverage": { "enum": ["covered", "not-covered", "unresolved"] }, "mandatory": { "type": "boolean" } } },
|
|
48
|
+
"sourceRef": { "type": "object", "required": ["file", "line"], "additionalProperties": false, "properties": { "file": { "type": ["string", "null"] }, "line": { "type": "integer", "minimum": 0 } } },
|
|
49
|
+
"mutationMaterial": { "type": "object", "required": ["namespace", "version", "sourceRef", "endpoint"], "additionalProperties": false, "properties": { "namespace": { "const": "coherence/mutation" }, "version": { "const": 1 }, "sourceRef": { "$ref": "#/$defs/sourceRef" }, "endpoint": { "type": ["string", "null"] } } },
|
|
50
|
+
"surfaceMaterial": { "type": "object", "required": ["namespace", "version", "route", "component", "sourceRef"], "additionalProperties": false, "properties": { "namespace": { "const": "coherence/surface" }, "version": { "const": 1 }, "route": { "type": "string" }, "component": { "type": ["string", "null"] }, "sourceRef": { "$ref": "#/$defs/sourceRef" } } },
|
|
51
|
+
"targetMaterial": { "type": "object", "required": ["namespace", "version", "flow", "route", "transition", "role", "representation"], "additionalProperties": false, "properties": { "namespace": { "const": "coherence/target" }, "version": { "const": 1 }, "flow": { "$ref": "#/$defs/flowIdentity" }, "route": { "type": "string" }, "transition": { "type": ["string", "null"] }, "role": { "type": ["string", "null"] }, "representation": { "$ref": "#/$defs/targetRepresentation" } } },
|
|
52
|
+
"targetRepresentation": { "type": "object", "required": ["field", "type"], "additionalProperties": false, "properties": { "field": { "type": "string" }, "type": { "type": "string" }, "source": { "type": "string" }, "attribute": { "type": "string" }, "locale": { "type": "string" }, "timezone": { "type": "string" }, "currency": { "type": "string" }, "scale": { "type": "integer" }, "inputUnit": { "type": "string" }, "canonicalUnit": { "type": "string" }, "factor": { "type": "number" }, "optional_on_summary": { "type": "boolean" } } },
|
|
53
|
+
"principalMaterial": { "type": "object", "required": ["namespace", "version", "name"], "additionalProperties": false, "properties": { "namespace": { "const": "coherence/principal" }, "version": { "const": 1 }, "name": { "type": "string" } } },
|
|
54
|
+
"contextMaterial": { "type": "object", "required": ["namespace", "version", "kind", "transition"], "additionalProperties": false, "properties": { "namespace": { "const": "coherence/context" }, "version": { "const": 1 }, "kind": { "enum": ["warm-cache", "fresh-context"] }, "transition": { "type": ["string", "null"] } } },
|
|
55
|
+
"invariantMaterial": { "type": "object", "required": ["namespace", "version", "name"], "additionalProperties": false, "properties": { "namespace": { "const": "coherence/invariant" }, "version": { "const": 1 }, "name": { "enum": ["field-parity", "visibility-policy", "durability"] } } },
|
|
56
|
+
"flowMaterial": { "type": "object", "required": ["namespace", "version", "route", "declaredEndpoint"], "additionalProperties": false, "properties": { "namespace": { "const": "coherence/flow" }, "version": { "const": 1 }, "route": { "type": "string" }, "declaredEndpoint": { "type": "string" } } },
|
|
57
|
+
"mutationIdentity": { "type": "object", "required": ["id", "material"], "additionalProperties": false, "properties": { "id": { "$ref": "#/$defs/id" }, "material": { "$ref": "#/$defs/mutationMaterial" } } },
|
|
58
|
+
"surfaceIdentity": { "type": "object", "required": ["id", "material"], "additionalProperties": false, "properties": { "id": { "$ref": "#/$defs/id" }, "material": { "$ref": "#/$defs/surfaceMaterial" } } },
|
|
59
|
+
"targetIdentity": { "type": "object", "required": ["id", "material"], "additionalProperties": false, "properties": { "id": { "$ref": "#/$defs/id" }, "material": { "$ref": "#/$defs/targetMaterial" } } },
|
|
60
|
+
"principalIdentity": { "type": "object", "required": ["id", "material"], "additionalProperties": false, "properties": { "id": { "$ref": "#/$defs/id" }, "material": { "$ref": "#/$defs/principalMaterial" } } },
|
|
61
|
+
"contextIdentity": { "type": "object", "required": ["id", "material"], "additionalProperties": false, "properties": { "id": { "$ref": "#/$defs/id" }, "material": { "$ref": "#/$defs/contextMaterial" } } },
|
|
62
|
+
"invariantIdentity": { "type": "object", "required": ["id", "material"], "additionalProperties": false, "properties": { "id": { "$ref": "#/$defs/id" }, "material": { "$ref": "#/$defs/invariantMaterial" } } },
|
|
63
|
+
"flowIdentity": { "type": "object", "required": ["id", "material"], "additionalProperties": false, "properties": { "id": { "$ref": "#/$defs/id" }, "material": { "$ref": "#/$defs/flowMaterial" } } },
|
|
64
|
+
"unresolvedTarget": { "type": "object", "required": ["status", "reason"], "additionalProperties": false, "properties": { "status": { "const": "unresolved" }, "reason": { "const": "declaration-target-not-joined" } } },
|
|
65
|
+
"coordinates": { "type": "object", "required": ["mutation", "target", "surface", "principal", "context", "invariant", "expectation"], "additionalProperties": false, "properties": { "mutation": { "$ref": "#/$defs/mutationIdentity" }, "target": { "oneOf": [{ "$ref": "#/$defs/targetIdentity" }, { "$ref": "#/$defs/unresolvedTarget" }] }, "surface": { "$ref": "#/$defs/surfaceIdentity" }, "principal": { "$ref": "#/$defs/principalIdentity" }, "context": { "$ref": "#/$defs/contextIdentity" }, "invariant": { "$ref": "#/$defs/invariantIdentity" }, "expectation": { "enum": ["visible", "absent", "redacted", "withheld", "forbidden"] } } },
|
|
66
|
+
"cellMaterial": { "type": "object", "required": ["namespace", "version", "mutation", "target", "surface", "principal", "context", "invariant", "expectation"], "additionalProperties": false, "properties": { "namespace": { "const": "coherence/observation-cell" }, "version": { "const": 1 }, "mutation": { "$ref": "#/$defs/mutationIdentity" }, "target": { "oneOf": [{ "$ref": "#/$defs/targetIdentity" }, { "$ref": "#/$defs/unresolvedTarget" }] }, "surface": { "$ref": "#/$defs/surfaceIdentity" }, "principal": { "$ref": "#/$defs/principalIdentity" }, "context": { "$ref": "#/$defs/contextIdentity" }, "invariant": { "$ref": "#/$defs/invariantIdentity" }, "expectation": { "enum": ["visible", "absent", "redacted", "withheld", "forbidden"] } } },
|
|
67
|
+
"obligation": { "type": "object", "required": ["id", "material", "coordinates", "mutationId", "surfaceId", "route", "principal", "principalId", "context", "invariant", "expectation", "weight", "mandatory", "operationIds", "sideChannelIds", "sideChannels", "sideChannelStatus", "family", "component"], "additionalProperties": false, "properties": { "id": { "$ref": "#/$defs/id" }, "material": { "$ref": "#/$defs/cellMaterial" }, "coordinates": { "$ref": "#/$defs/coordinates" }, "mutationId": { "$ref": "#/$defs/id" }, "surfaceId": { "$ref": "#/$defs/id" }, "route": { "type": "string" }, "principal": { "type": "string" }, "principalId": { "$ref": "#/$defs/id" }, "context": { "enum": ["warm-cache", "fresh-context"] }, "invariant": { "enum": ["field-parity", "visibility-policy", "durability"] }, "expectation": { "enum": ["visible", "absent", "redacted", "withheld", "forbidden"] }, "weight": { "type": "integer", "minimum": 0 }, "mandatory": { "type": "boolean" }, "operationIds": { "type": "array", "items": { "$ref": "#/$defs/id" } }, "sideChannelIds": { "type": "array", "items": { "$ref": "#/$defs/pairId" } }, "sideChannels": { "type": "array", "items": { "$ref": "#/$defs/sideChannel" } }, "sideChannelStatus": { "enum": ["covered", "not-covered", "unresolved"] }, "family": { "type": "string" }, "component": { "type": ["string", "null"] }, "flowIdentity": { "$ref": "#/$defs/flowIdentity" } } },
|
|
68
|
+
"target": { "type": "object", "required": ["surfaceId", "surfaceIdentity", "route", "component", "family", "obligationIds", "obligations", "operationIds", "sideChannelIds", "sideChannels", "sideChannelStatus"], "additionalProperties": false, "properties": { "surfaceId": { "$ref": "#/$defs/id" }, "surfaceIdentity": { "$ref": "#/$defs/surfaceIdentity" }, "route": { "type": "string" }, "component": { "type": ["string", "null"] }, "family": { "type": "string" }, "obligationIds": { "type": "array", "items": { "$ref": "#/$defs/id" } }, "obligations": { "type": "array", "items": { "$ref": "#/$defs/obligation" } }, "operationIds": { "type": "array", "items": { "$ref": "#/$defs/id" } }, "sideChannelIds": { "type": "array", "items": { "$ref": "#/$defs/pairId" } }, "sideChannels": { "type": "array", "items": { "$ref": "#/$defs/sideChannel" } }, "sideChannelStatus": { "enum": ["covered", "not-covered", "unresolved"] } } },
|
|
69
|
+
"journey": { "type": "object", "required": ["journeyId", "mutationId", "mutationIdentity", "route", "covers", "weight", "cost", "targets"], "additionalProperties": false, "properties": { "journeyId": { "type": "string" }, "mutationId": { "$ref": "#/$defs/id" }, "mutationIdentity": { "$ref": "#/$defs/mutationIdentity" }, "flowIdentity": { "$ref": "#/$defs/flowIdentity" }, "route": { "type": "string" }, "covers": { "type": "integer", "minimum": 0 }, "weight": { "type": "integer", "minimum": 0 }, "cost": { "type": "number", "minimum": 0 }, "targets": { "type": "array", "items": { "$ref": "#/$defs/target" } } } },
|
|
70
|
+
"coverage": { "type": "object", "required": ["discovered", "resolved", "unresolved", "planned", "reached", "compared", "agreed"], "additionalProperties": false, "properties": { "discovered": { "type": "integer", "minimum": 0 }, "resolved": { "type": "integer", "minimum": 0 }, "unresolved": { "type": "integer", "minimum": 0 }, "planned": { "type": "integer", "minimum": 0 }, "reached": { "type": "integer", "minimum": 0 }, "compared": { "type": "integer", "minimum": 0 }, "agreed": { "type": "integer", "minimum": 0 } } },
|
|
71
|
+
"universe": { "type": "object", "required": ["obligations", "discovered", "unresolved", "mutations", "surfaces", "principals", "contexts", "invariants", "operations", "sideChannels", "unresolvedSideChannels"], "additionalProperties": false, "properties": { "obligations": { "type": "integer", "minimum": 0 }, "discovered": { "type": "integer", "minimum": 0 }, "unresolved": { "type": "integer", "minimum": 0 }, "mutations": { "type": "integer", "minimum": 0 }, "surfaces": { "type": "integer", "minimum": 0 }, "principals": { "type": "integer", "minimum": 0 }, "contexts": { "type": "integer", "minimum": 0 }, "invariants": { "type": "integer", "minimum": 0 }, "operations": { "type": "integer", "minimum": 0 }, "sideChannels": { "type": "integer", "minimum": 0 }, "unresolvedSideChannels": { "type": "integer", "minimum": 0 } } },
|
|
72
|
+
"familyAccounting": { "type": "object", "required": ["family", "mutations", "surfaces", "principals", "contexts", "invariants", "possible", "excluded", "discovered", "resolved", "unresolved", "planned"], "additionalProperties": false, "properties": { "family": { "type": "string" }, "mutations": { "type": "integer", "minimum": 0 }, "surfaces": { "type": "integer", "minimum": 0 }, "principals": { "type": "integer", "minimum": 0 }, "contexts": { "type": "integer", "minimum": 0 }, "invariants": { "type": "integer", "minimum": 0 }, "possible": { "type": "integer", "minimum": 0 }, "excluded": { "type": "object", "additionalProperties": { "type": "integer", "minimum": 0 } }, "discovered": { "type": "integer", "minimum": 0 }, "resolved": { "type": "integer", "minimum": 0 }, "unresolved": { "type": "integer", "minimum": 0 }, "planned": { "type": "integer", "minimum": 0 } } },
|
|
73
|
+
"unattributed": { "type": "object", "required": ["unresolvedWriters", "unresolvedWriterObligations", "writersWithNoReaderSurface", "writerFamiliesWithNoReaderSurface"], "additionalProperties": false, "properties": { "unresolvedWriters": { "type": "integer", "minimum": 0 }, "unresolvedWriterObligations": { "type": "integer", "minimum": 0 }, "writersWithNoReaderSurface": { "type": "integer", "minimum": 0 }, "writerFamiliesWithNoReaderSurface": { "type": "array", "items": { "type": "string" } } } },
|
|
74
|
+
"perRoute": { "type": "object", "required": ["route", "obligations", "uncovered"], "additionalProperties": false, "properties": { "route": { "type": "string" }, "obligations": { "type": "integer", "minimum": 0 }, "uncovered": { "type": "integer", "minimum": 0 } } },
|
|
75
|
+
"plan": { "type": "object", "required": ["ok", "reason", "budget", "selected", "rejected", "unselected"], "additionalProperties": false, "properties": { "ok": { "type": "boolean" }, "reason": { "type": ["string", "null"] }, "budget": { "type": "number", "minimum": 0 }, "selected": { "type": "array", "items": { "$ref": "#/$defs/journey" } }, "rejected": { "type": "integer", "minimum": 0 }, "unselected": { "type": "integer", "minimum": 0 } } }
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://frontend-verify.dev/schemas/coherence-risk.schema.json",
|
|
4
|
+
"title": "coherence-risk.json",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "status", "windowDays", "commitsInWindow", "counts", "families"],
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": 1 },
|
|
10
|
+
"status": { "type": "string", "enum": ["measured", "unmeasured"] },
|
|
11
|
+
"reason": { "type": ["string", "null"] },
|
|
12
|
+
"windowDays": { "type": "integer", "minimum": 1 },
|
|
13
|
+
"commitsInWindow": { "type": "integer", "minimum": 0 },
|
|
14
|
+
"counts": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"required": ["families", "ranked", "unmeasured"],
|
|
17
|
+
"additionalProperties": false,
|
|
18
|
+
"properties": {
|
|
19
|
+
"families": { "type": "integer", "minimum": 0 },
|
|
20
|
+
"ranked": { "type": "integer", "minimum": 0 },
|
|
21
|
+
"unmeasured": { "type": "integer", "minimum": 0 }
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"families": { "type": "array", "items": { "$ref": "#/$defs/family" } }
|
|
25
|
+
},
|
|
26
|
+
"$defs": {
|
|
27
|
+
"family": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"required": ["family", "files", "impact", "uncertainty", "affectedSurfaces", "commits", "changeRate", "risk", "neverCompared", "remeasureOn"],
|
|
30
|
+
"additionalProperties": false,
|
|
31
|
+
"properties": {
|
|
32
|
+
"family": { "type": "string", "minLength": 1 },
|
|
33
|
+
"files": { "type": "array", "items": { "type": "string" } },
|
|
34
|
+
"impact": { "type": "number", "minimum": 0 },
|
|
35
|
+
"uncertainty": { "type": ["number", "null"], "minimum": 0 },
|
|
36
|
+
"affectedSurfaces": { "type": "integer", "minimum": 0 },
|
|
37
|
+
"commits": { "type": ["integer", "null"], "minimum": 0 },
|
|
38
|
+
"changeRate": { "type": ["number", "null"], "minimum": 0 },
|
|
39
|
+
"risk": { "type": ["number", "null"], "minimum": 0 },
|
|
40
|
+
"reason": { "type": ["string", "null"] },
|
|
41
|
+
"neverCompared": { "type": "boolean" },
|
|
42
|
+
"remeasureOn": { "type": "array", "items": { "type": "string" } }
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://frontend-verify.dev/schemas/crud-observed.schema.json",
|
|
4
|
+
"title": "crud-observed.json",
|
|
5
|
+
"description": "bin/crud-runner.mjs — executable CRUD reconciliation: create/read/update/delete plus reload/navigation reconciliation through a real browser.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["status", "runId", "base", "flows", "findings"],
|
|
8
|
+
"additionalProperties": true,
|
|
9
|
+
"properties": {
|
|
10
|
+
"status": { "type": "string", "enum": ["measured", "invalid"] },
|
|
11
|
+
"runId": { "type": "string", "minLength": 1 },
|
|
12
|
+
"base": { "type": "string" },
|
|
13
|
+
"lane": { "type": "string" },
|
|
14
|
+
"fixtureNamespace": { "type": "string" },
|
|
15
|
+
"attempts": { "type": "integer", "minimum": 0 },
|
|
16
|
+
"counts": { "$ref": "#/$defs/stepCounts" },
|
|
17
|
+
"coverage": { "$ref": "#/$defs/coverage" },
|
|
18
|
+
"invalid": { "$ref": "#/$defs/invalid" },
|
|
19
|
+
"reason": { "type": "string" },
|
|
20
|
+
"flows": { "type": "array", "items": { "$ref": "#/$defs/flowResult" } },
|
|
21
|
+
"findings": { "type": "array", "items": { "$ref": "#/$defs/finding" } }
|
|
22
|
+
},
|
|
23
|
+
"$defs": {
|
|
24
|
+
"stepCounts": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"additionalProperties": { "$ref": "#/$defs/counts" }
|
|
27
|
+
},
|
|
28
|
+
"counts": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"required": ["true", "false", "unmeasured"],
|
|
31
|
+
"additionalProperties": false,
|
|
32
|
+
"properties": {
|
|
33
|
+
"true": { "type": "integer", "minimum": 0 },
|
|
34
|
+
"false": { "type": "integer", "minimum": 0 },
|
|
35
|
+
"unmeasured": { "type": "integer", "minimum": 0 }
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"coverage": {
|
|
39
|
+
"type": "object",
|
|
40
|
+
"additionalProperties": {
|
|
41
|
+
"type": "object",
|
|
42
|
+
"required": ["planned", "measured", "unmeasured", "failed"],
|
|
43
|
+
"additionalProperties": false,
|
|
44
|
+
"properties": {
|
|
45
|
+
"planned": { "type": "integer", "minimum": 0 },
|
|
46
|
+
"measured": { "type": "integer", "minimum": 0 },
|
|
47
|
+
"unmeasured": { "type": "integer", "minimum": 0 },
|
|
48
|
+
"failed": { "type": "integer", "minimum": 0 }
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"invalid": {
|
|
53
|
+
"type": "object",
|
|
54
|
+
"required": ["reason", "gaps"],
|
|
55
|
+
"additionalProperties": false,
|
|
56
|
+
"properties": {
|
|
57
|
+
"reason": { "type": "string", "minLength": 1 },
|
|
58
|
+
"gaps": { "type": "array", "items": { "type": "string" } }
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"tristate": { "anyOf": [{ "type": "boolean" }, { "const": "unmeasured" }] },
|
|
62
|
+
"request": {
|
|
63
|
+
"type": "object",
|
|
64
|
+
"required": ["method", "path", "status"],
|
|
65
|
+
"additionalProperties": true,
|
|
66
|
+
"properties": {
|
|
67
|
+
"method": { "type": "string" },
|
|
68
|
+
"path": { "type": "string" },
|
|
69
|
+
"status": { "type": "integer" }
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"outcome": {
|
|
73
|
+
"type": "object",
|
|
74
|
+
"required": ["role", "create", "read", "update", "delete", "reload_reconciled", "navigation_reconciled", "authorized", "cleanup"],
|
|
75
|
+
"additionalProperties": true,
|
|
76
|
+
"properties": {
|
|
77
|
+
"role": { "type": "string" },
|
|
78
|
+
"create": { "$ref": "#/$defs/tristate" },
|
|
79
|
+
"read": { "$ref": "#/$defs/tristate" },
|
|
80
|
+
"update": { "$ref": "#/$defs/tristate" },
|
|
81
|
+
"delete": { "$ref": "#/$defs/tristate" },
|
|
82
|
+
"reload_reconciled": { "$ref": "#/$defs/tristate" },
|
|
83
|
+
"navigation_reconciled": { "$ref": "#/$defs/tristate" },
|
|
84
|
+
"authorized": { "$ref": "#/$defs/tristate" },
|
|
85
|
+
"cleanup": { "$ref": "#/$defs/tristate" },
|
|
86
|
+
"gap": { "type": ["string", "null"] }
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"flowResult": {
|
|
90
|
+
"type": "object",
|
|
91
|
+
"required": ["name", "persona", "outcome", "requests"],
|
|
92
|
+
"additionalProperties": true,
|
|
93
|
+
"properties": {
|
|
94
|
+
"name": { "type": "string" },
|
|
95
|
+
"persona": { "type": "string" },
|
|
96
|
+
"route": { "type": ["string", "null"] },
|
|
97
|
+
"outcome": { "$ref": "#/$defs/outcome" },
|
|
98
|
+
"requests": { "type": "array", "items": { "$ref": "#/$defs/request" } },
|
|
99
|
+
"gaps": { "type": "array", "items": { "type": "string" } }
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"finding": {
|
|
103
|
+
"type": "object",
|
|
104
|
+
"required": ["kind", "severity", "at", "detail"],
|
|
105
|
+
"additionalProperties": true,
|
|
106
|
+
"properties": {
|
|
107
|
+
"kind": {
|
|
108
|
+
"type": "string",
|
|
109
|
+
"enum": ["crud.create-failed", "crud.write-lost", "crud.update-lost", "crud.delete-ineffective", "crud.unauthorized-allowed", "crud.cleanup-failed"]
|
|
110
|
+
},
|
|
111
|
+
"severity": { "type": "string", "enum": ["P0", "P1", "P2", "P3"] },
|
|
112
|
+
"at": { "type": "string" },
|
|
113
|
+
"route": { "type": ["string", "null"] },
|
|
114
|
+
"detail": { "type": "string" }
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://frontend-verify.dev/schemas/experiment-execution.schema.json",
|
|
4
|
+
"title": "experiment-execution.json",
|
|
5
|
+
"description": "bin/experiment-executor.mjs — executes the accepted candidates from the Rust experiment queue as targeted control/treatment sweeps, written to .verify/autonomous/experiment-execution.json.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["status", "executed", "skipped", "effect", "budget"],
|
|
8
|
+
"additionalProperties": true,
|
|
9
|
+
"properties": {
|
|
10
|
+
"status": { "type": "string", "enum": ["measured", "invalid", "unmeasured"] },
|
|
11
|
+
"reason": { "type": "string" },
|
|
12
|
+
"executed": { "type": "array", "items": { "$ref": "#/$defs/executedEntry" } },
|
|
13
|
+
"skipped": { "type": "array", "items": { "$ref": "#/$defs/skippedEntry" } },
|
|
14
|
+
"effect": { "type": "array", "items": { "$ref": "#/$defs/effectEntry" } },
|
|
15
|
+
"budget": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"required": ["cells", "cellsUsed", "wallMs", "elapsedMs"],
|
|
18
|
+
"additionalProperties": true,
|
|
19
|
+
"properties": {
|
|
20
|
+
"cells": { "type": "integer", "minimum": 0 },
|
|
21
|
+
"cellsUsed": { "type": "integer", "minimum": 0 },
|
|
22
|
+
"wallMs": { "type": "integer", "minimum": 0 },
|
|
23
|
+
"elapsedMs": { "type": "integer", "minimum": 0 }
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"integrity_hash": { "type": ["string", "null"] },
|
|
27
|
+
"runnerExit": { "type": ["integer", "null"] },
|
|
28
|
+
"experimentId": { "type": ["string", "null"] }
|
|
29
|
+
},
|
|
30
|
+
"$defs": {
|
|
31
|
+
"observation": {
|
|
32
|
+
"type": "object",
|
|
33
|
+
"required": ["arm", "route", "outcome", "integrity_hash", "evidence_id"],
|
|
34
|
+
"additionalProperties": true,
|
|
35
|
+
"properties": {
|
|
36
|
+
"arm": { "type": "string", "enum": ["control", "treatment"] },
|
|
37
|
+
"route": { "type": "string" },
|
|
38
|
+
"status": { "type": ["integer", "null"] },
|
|
39
|
+
"outcome": { "type": "array", "items": { "type": "string" } },
|
|
40
|
+
"metric": { "type": ["number", "null"] },
|
|
41
|
+
"integrity_hash": { "type": "string" },
|
|
42
|
+
"evidence_id": { "type": "string", "pattern": "^sha256:" }
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"executedEntry": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"required": ["route", "family", "status"],
|
|
48
|
+
"additionalProperties": true,
|
|
49
|
+
"properties": {
|
|
50
|
+
"route": { "type": "string" },
|
|
51
|
+
"family": { "type": "string" },
|
|
52
|
+
"status": { "type": "string", "enum": ["measured", "invalid"] },
|
|
53
|
+
"reason": { "type": "string" },
|
|
54
|
+
"control": { "$ref": "#/$defs/observation" },
|
|
55
|
+
"treatment": { "$ref": "#/$defs/observation" }
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"skippedEntry": {
|
|
59
|
+
"type": "object",
|
|
60
|
+
"required": ["route", "family", "reason"],
|
|
61
|
+
"additionalProperties": true,
|
|
62
|
+
"properties": {
|
|
63
|
+
"route": { "type": "string" },
|
|
64
|
+
"family": { "type": "string" },
|
|
65
|
+
"reason": { "type": "string" }
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"effectEntry": {
|
|
69
|
+
"type": "object",
|
|
70
|
+
"required": ["route", "family", "kind", "severity"],
|
|
71
|
+
"additionalProperties": true,
|
|
72
|
+
"properties": {
|
|
73
|
+
"route": { "type": "string" },
|
|
74
|
+
"family": { "type": "string" },
|
|
75
|
+
"kind": { "type": "string" },
|
|
76
|
+
"severity": { "type": "string", "enum": ["P0", "P1", "P2", "P3"] },
|
|
77
|
+
"detail": { "type": ["string", "null"] },
|
|
78
|
+
"at": { "type": ["string", "null"] }
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://frontend-verify.dev/schemas/graph-edge.schema.json",
|
|
4
|
+
"title": "edges.jsonl (one line)",
|
|
5
|
+
"description": "agent/src/graph_schema.rs — one line of the finite graph edge contract. Nine edge relations, a full SHA-256 edgeId over the canonical (fromRecordId, toRecordId, relation, semantic-key) tuple. Design: ARCHITECTURE.md, section L2 -- the Rust reduction kernel.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["edgeId", "from", "to", "relation"],
|
|
8
|
+
"additionalProperties": true,
|
|
9
|
+
"properties": {
|
|
10
|
+
"edgeId": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
|
|
11
|
+
"from": { "type": "string", "pattern": "^[0-9a-f]{64}$", "description": "the source node's recordId" },
|
|
12
|
+
"to": { "type": "string", "pattern": "^[0-9a-f]{64}$", "description": "the target node's recordId" },
|
|
13
|
+
"relation": { "$ref": "#/$defs/edgeRelation" },
|
|
14
|
+
"semanticKey": { "type": "string", "maxLength": 200, "description": "participates in edgeId; disambiguates multiple edges between the same pair under the same relation" }
|
|
15
|
+
},
|
|
16
|
+
"$defs": {
|
|
17
|
+
"edgeRelation": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"enum": ["renders-through", "reads", "writes", "writes-to", "invalidates", "transitions-to", "owned-by", "evidenced-by", "observed-as"]
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://frontend-verify.dev/schemas/graph-node.schema.json",
|
|
4
|
+
"title": "nodes.jsonl (one line)",
|
|
5
|
+
"description": "agent/src/graph_schema.rs — one line of the finite graph node contract. Ten node kinds, per-kind bounded attributes, a full 256-bit recordId. Design: ARCHITECTURE.md, section L2 -- the Rust reduction kernel.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["recordId", "kind", "attrs"],
|
|
8
|
+
"additionalProperties": true,
|
|
9
|
+
"properties": {
|
|
10
|
+
"recordId": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
|
|
11
|
+
"fid": { "type": "string", "description": "legacy display prefix only, never the record identity" },
|
|
12
|
+
"kind": { "$ref": "#/$defs/nodeKind" },
|
|
13
|
+
"attrs": { "$ref": "#/$defs/nodeAttrs" }
|
|
14
|
+
},
|
|
15
|
+
"$defs": {
|
|
16
|
+
"nodeKind": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"enum": ["finding", "route", "component", "query", "mutation", "entity", "endpoint", "role", "transition", "evidence"]
|
|
19
|
+
},
|
|
20
|
+
"evidenceRef": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"required": ["report", "pointer"],
|
|
23
|
+
"additionalProperties": false,
|
|
24
|
+
"properties": {
|
|
25
|
+
"report": { "type": "string", "enum": ["inventory", "classify", "sweep"] },
|
|
26
|
+
"pointer": { "type": "string", "pattern": "^(/[^/]*)*$" },
|
|
27
|
+
"file": { "type": "string", "minLength": 1, "maxLength": 200, "not": { "pattern": "^(/|\\\\|[A-Za-z]:)" } },
|
|
28
|
+
"line": { "type": "integer", "minimum": 1 }
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"boundedName": { "type": "string", "minLength": 1, "maxLength": 200 },
|
|
32
|
+
"routeTemplate": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"maxLength": 512,
|
|
35
|
+
"pattern": "^/([A-Za-z0-9._~-]{1,64}|:[A-Za-z][A-Za-z0-9_]{0,63})(/([A-Za-z0-9._~-]{1,64}|:[A-Za-z][A-Za-z0-9_]{0,63}))*$"
|
|
36
|
+
},
|
|
37
|
+
"nodeAttrs": {
|
|
38
|
+
"description": "Untagged: shape alone matches one of the ten kinds this node's own `kind` field already names. There is no free-form attributes slot.",
|
|
39
|
+
"oneOf": [
|
|
40
|
+
{
|
|
41
|
+
"type": "object",
|
|
42
|
+
"required": ["severity", "findingKind", "status", "evidenceRef"],
|
|
43
|
+
"additionalProperties": false,
|
|
44
|
+
"properties": {
|
|
45
|
+
"severity": { "$ref": "#/$defs/boundedName" },
|
|
46
|
+
"findingKind": { "$ref": "#/$defs/boundedName" },
|
|
47
|
+
"status": { "$ref": "#/$defs/boundedName" },
|
|
48
|
+
"evidenceRef": { "$ref": "#/$defs/evidenceRef" }
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"type": "object",
|
|
53
|
+
"required": ["template"],
|
|
54
|
+
"additionalProperties": false,
|
|
55
|
+
"properties": { "template": { "$ref": "#/$defs/routeTemplate" } }
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"type": "object",
|
|
59
|
+
"required": ["fromRoute", "toRoute"],
|
|
60
|
+
"additionalProperties": false,
|
|
61
|
+
"properties": {
|
|
62
|
+
"fromRoute": { "$ref": "#/$defs/routeTemplate" },
|
|
63
|
+
"toRoute": { "$ref": "#/$defs/routeTemplate" }
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"type": "object",
|
|
68
|
+
"required": ["evidenceRef"],
|
|
69
|
+
"additionalProperties": false,
|
|
70
|
+
"properties": { "evidenceRef": { "$ref": "#/$defs/evidenceRef" } }
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"type": "object",
|
|
74
|
+
"required": ["name"],
|
|
75
|
+
"additionalProperties": false,
|
|
76
|
+
"properties": { "name": { "$ref": "#/$defs/boundedName" } }
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|