Technical Specification: ZQL In-Memory Preflight Validation and Diagnostic Receipt Protocol
Document ID: SPEC-ZQL-PREFLIGHT-VALIDATION
Status: Approved Architectural Specification
1. Executive Summary & Purpose
Before mutations are dispatched to persistent Content Addressable Storage (CAS) or underlying transactional write buffers, the ZQK Knowledge Kernel requires an in-memory preflight validation gate.
Dispatching malformed entities directly to storage causes:
- Unnecessary Disk & CAS I/O Overhead: Persisting and then rolling back unvalidated objects degrades throughput.
- Opaque Error Propagation: Low-level storage serialization errors lack semantic context regarding schema constraints, field paths, and human- or agent-actionable remediations.
- Graph Corruption Vulnerabilities: Subtle type mismatches or disallowed enums can compromise graph traversal and ontology query soundness.
This specification formalizes the In-Memory Preflight Validation Contract and the Diagnostic Receipt Protocol, ensuring fail-closed rejection of corrupted or malformed entities entirely in memory prior to storage dispatch.
2. In-Memory Validation Contract
The pre-persistence validation interface evaluates candidate mutations without initiating disk reads or writes.
2.1 Interface Definition
type PreflightValidator interface {
// Validate evaluates an individual mutation entirely in-memory.
Validate(ctx context.Context, mut *Mutation) (*PreflightDiagnosticReceipt, error)
// ValidateBatch evaluates a slice of mutations, aggregating diagnostic receipts.
ValidateBatch(ctx context.Context, muts []Mutation) (*PreflightBatchReceipt, error)
}
2.2 Validation Invariants
- Zero Disk I/O Invariant: The preflight validation pipeline operates exclusively on in-memory ASTs, entity maps, and compiled schema definitions. No temporary files or storage locks are created.
- Idempotence: Evaluating
Validatemultiple times over identical inputs yields deterministic receipts with identical violation order and error codes. - Comprehensive Evaluation: The validator accumulates all schema violations within an entity rather than aborting at the first failure, giving agents complete remediation context in a single pass.
3. Structured Diagnostic Receipt Protocol
When a mutation passes or fails preflight validation, the engine produces a machine-parseable PreflightDiagnosticReceipt.
3.1 JSON Schema Contract
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://zqk.dev/schemas/mutation/preflight_diagnostic_receipt_v1.json",
"title": "Preflight Diagnostic Receipt",
"type": "object",
"required": ["valid", "disposition", "violations"],
"properties": {
"valid": {
"type": "boolean"
},
"disposition": {
"type": "string",
"enum": ["accepted", "rejected_failclosed", "quarantined"]
},
"target_kind": {
"type": "string"
},
"target_id": {
"type": "string"
},
"violations": {
"type": "array",
"items": {
"$ref": "#/$defs/SchemaViolation"
}
}
},
"$defs": {
"SchemaViolation": {
"type": "object",
"required": ["field_path", "failing_constraint", "expected", "actual", "remediation"],
"properties": {
"field_path": { "type": "string" },
"failing_constraint": { "type": "string" },
"expected": { "type": "string" },
"actual": { "type": "string" },
"remediation": { "type": "string" }
}
}
}
}
3.2 Concrete Diagnostic Receipt Example
{
"valid": false,
"disposition": "rejected_failclosed",
"target_kind": "backlog_item",
"target_id": "BLI-INVALID-EXAMPLE",
"violations": [
{
"field_path": "fields.priority_tier",
"failing_constraint": "enum_membership",
"expected": "one of: [P0, P1, P2, P3, P4, P5]",
"actual": "URGENT_NOW",
"remediation": "Update priority_tier to a canonical tier: P0, P1, P2, P3, P4, or P5"
},
{
"field_path": "fields.title",
"failing_constraint": "type_mismatch",
"expected": "string",
"actual": "integer",
"remediation": "Wrap title value in string quotes"
}
]
}
4. Fail-Closed Boundary & Negative Invariants
To guarantee that corrupted state never crosses into persistent storage, the validation engine enforces strict fail-closed boundaries:
| Failure Category | Trigger Condition | Enforcement Behavior |
|---|---|---|
| Missing Mandatory Fields | Omission of required fields (action, target_kind, title, etc.) |
Marked invalid; disposition=rejected_failclosed; blocks commit |
| Field Type Mismatch | Value runtime type differs from schema (e.g. integer instead of string) | Marked invalid; failing_constraint=type_mismatch; blocks commit |
| Disallowed Enum Constant | Value not in defined enum set (e.g. status exploded instead of planned) |
Marked invalid; failing_constraint=enum_membership; blocks commit |
| Identifier Pattern Violation | Target ID violates kind prefix or formatting (e.g. invalid_id instead of BLI-...) |
Marked invalid; failing_constraint=id_pattern_mismatch; blocks commit |
| Unrecognized Kind | target_kind not registered in Kernel Kind Catalog |
Marked invalid; failing_constraint=unrecognized_kind; blocks commit |
Negative Invariant Rule: If valid == false, the mutation engine MUST NOT invoke underlying storage Create, Update, or CAS serialization. Storage mutation dispatch is completely aborted.