ZDDC/transmittal/transmittal.schema.json
ZDDC ea385b5366 Initial commit
ZDDC — Zero Day Document Control. A file-naming convention plus five
single-file HTML tools (archive, transmittal, classifier, mdedit,
landing) and an optional Go HTTP server (zddc-server) with ACL and a
virtual archive index. Self-contained, offline-capable, dependency-free.

See README.md for an overview, AGENTS.md and ARCHITECTURE.md for the
build/release/architecture detail, bootstrap/README.md for the
two-level deployment install pattern, and zddc/README.md for the
HTTP server.
2026-04-27 11:05:47 -05:00

230 lines
7.6 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://zddc.varasys.io/transmittal.schema.json",
"title": "ZDDC Transmittal",
"description": "Schema for ZDDC transmittal documents with cryptographic envelope",
"type": "object",
"properties": {
"payload": {
"type": "object",
"description": "The core transmittal data",
"properties": {
"version": {
"type": "integer",
"description": "Payload schema version",
"const": 1
},
"type": {
"type": "string",
"description": "Document type - Transmittal and Submittal are fixed, or any custom text for file lists",
"default": "Transmittal"
},
"title": {
"type": "string",
"description": "Optional descriptive title"
},
"client": {
"type": "string",
"description": "The Owner Name"
},
"project": {
"type": "string",
"description": "The Project Name"
},
"projectNumber": {
"type": "string",
"description": "The Project Number"
},
"date": {
"type": "string",
"description": "Date in YYYY-MM-DD format (canonicalized from friendly text)",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"trackingNumber": {
"type": "string",
"description": "Tracking number; must not contain spaces or underscores",
"pattern": "^[^\\s_]+$"
},
"from": {
"type": "string",
"description": "Who issued the document (hidden for file lists)"
},
"to": {
"type": "string",
"description": "Recipient of the document (hidden for file lists)"
},
"purpose": {
"type": "string",
"description": "Purpose of document (hidden for file lists)"
},
"responseDue": {
"type": "string",
"description": "Response deadline (shown only for Submittal type)"
},
"subject": {
"type": "string",
"description": "Subject line"
},
"remarks": {
"type": "string",
"description": "Free-form Markdown content"
},
"files": {
"type": "array",
"description": "List of files included in the transmittal",
"items": {
"type": "object",
"properties": {
"trackingNumber": {
"type": "string",
"description": "File tracking number from ZDDC filename convention"
},
"revision": {
"type": "string",
"description": "File revision from ZDDC filename convention"
},
"status": {
"type": "string",
"description": "File status from ZDDC filename convention"
},
"title": {
"type": "string",
"description": "File title from ZDDC filename convention"
},
"path": {
"type": "string",
"description": "Directory path relative to transmittal root (without filename)",
"default": ""
},
"filename": {
"type": "string",
"description": "Filename only (without path)"
},
"sha256": {
"type": "string",
"description": "SHA-256 hash of file contents (hex)",
"pattern": "^[a-f0-9]{64}$"
},
"fileSize": {
"type": "integer",
"description": "File size in bytes",
"minimum": 0
}
},
"required": ["filename", "sha256"],
"additionalProperties": false
}
}
},
"required": ["version", "type", "date", "trackingNumber", "files"],
"additionalProperties": false
},
"envelope": {
"type": "object",
"description": "Cryptographic envelope capturing state after publish",
"properties": {
"version": {
"type": "integer",
"description": "Schema version number",
"const": 1
},
"digestAlgorithm": {
"type": "string",
"description": "Digest algorithm used",
"const": "SHA-256"
},
"digest": {
"type": "string",
"description": "SHA-256 hash of canonical payload string (hex)",
"pattern": "^[a-f0-9]{64}$"
},
"digestedAt": {
"type": "string",
"format": "date-time",
"description": "ISO 8601 timestamp when digest was computed"
},
"signatureAlgorithm": {
"type": "string",
"description": "Signature algorithm used",
"const": "ECDSA-P256-SHA256"
},
"signatures": {
"type": "array",
"description": "Array of signatures from multiple signers",
"items": {
"type": "object",
"properties": {
"signature": {
"type": "string",
"description": "ECDSA signature over canonical payload (base64)",
"contentEncoding": "base64"
},
"signedAt": {
"type": "string",
"format": "date-time",
"description": "ISO 8601 timestamp when this signature was created"
},
"publicKeyJwk": {
"type": "object",
"description": "EC P-256 public key in JWK format for signature verification",
"properties": {
"kty": {
"type": "string",
"const": "EC"
},
"crv": {
"type": "string",
"const": "P-256"
},
"x": {
"type": "string",
"description": "X coordinate (base64url)"
},
"y": {
"type": "string",
"description": "Y coordinate (base64url)"
}
},
"required": ["kty", "crv", "x", "y"],
"additionalProperties": false
}
},
"required": ["signature", "signedAt", "publicKeyJwk"],
"additionalProperties": false
}
}
},
"required": ["version", "digestAlgorithm", "digest", "digestedAt", "signatureAlgorithm"],
"additionalProperties": false
},
"presentation": {
"type": "object",
"description": "Optional presentation assets (logos, styling) - not part of signed payload",
"properties": {
"leftLogo": {
"type": "string",
"description": "Left logo as data URL (e.g., data:image/png;base64,...)",
"pattern": "^data:image/[a-z]+;base64,"
},
"rightLogo": {
"type": "string",
"description": "Right logo as data URL (e.g., data:image/png;base64,...)",
"pattern": "^data:image/[a-z]+;base64,"
},
"theme": {
"type": "string",
"description": "Visual theme identifier",
"default": "default"
},
"customCss": {
"type": "string",
"description": "Optional custom CSS for styling the transmittal",
"default": ""
}
},
"additionalProperties": false
}
},
"required": ["payload", "envelope"],
"additionalProperties": false
}