828 lines
19 KiB
JSON
828 lines
19 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"$id": "https://jyotisha.chat/contracts/personal-report/report-document.v2.schema.json",
|
|
"title": "ReportDocument v2",
|
|
"description": "Canonical server-issued personal astrology report document v2. The JSON Schema, frontend Zod contract, and stdlib Python validator align on all structural rules. Runtime validators additionally enforce: exactly one complete D1; unique chart, section, theme, and evidence ids; every requested theme is covered exactly once by either a thematic section or blockedConflictDisclosure; written career/wealth/marriage/education themes require D10/D2+D11/D9/D24 chart data respectively; all evidenceRefs close over evidenceAppendix; blocked content is non-deterministic; date claims require evidenceRefs; medical diagnoses, deterministic financial promises, HTML/CSS/executable content, internal paths, secrets, and tool traces are rejected; UTF-8 serialization is capped at 1572864 bytes. The server and Python validator recompute provenance.evidenceHash over canonical techniqueAudit, conflicts, and calculationEvidence. JSON object key order is not validated.",
|
|
"type": "object",
|
|
"definitions": {
|
|
"claimStatus": {
|
|
"type": "string",
|
|
"enum": [
|
|
"multi_system_consensus",
|
|
"single_system_inference",
|
|
"parameter_sensitive",
|
|
"unclosed_divisional_chart",
|
|
"user_history_verification_required",
|
|
"blocked"
|
|
]
|
|
},
|
|
"evidenceId": {
|
|
"type": "string",
|
|
"pattern": "^ev-[a-z0-9_-]{1,63}$",
|
|
"minLength": 4,
|
|
"maxLength": 67
|
|
},
|
|
"sha256Hex": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{64}$",
|
|
"minLength": 64,
|
|
"maxLength": 64
|
|
},
|
|
"iso8601": {
|
|
"type": "string",
|
|
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$",
|
|
"minLength": 20,
|
|
"maxLength": 40
|
|
},
|
|
"house": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"houseNumber": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"maximum": 12
|
|
},
|
|
"sign": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 40
|
|
},
|
|
"occupants": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 40
|
|
},
|
|
"maxItems": 12
|
|
}
|
|
},
|
|
"required": [
|
|
"houseNumber",
|
|
"sign",
|
|
"occupants"
|
|
]
|
|
},
|
|
"planet": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 40
|
|
},
|
|
"sign": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 40
|
|
},
|
|
"longitudeDegrees": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"exclusiveMaximum": 360
|
|
},
|
|
"houseNumber": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"maximum": 12
|
|
},
|
|
"retrograde": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"sign",
|
|
"longitudeDegrees",
|
|
"houseNumber",
|
|
"retrograde"
|
|
]
|
|
},
|
|
"chart": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"enum": [
|
|
"D1",
|
|
"D2",
|
|
"D9",
|
|
"D10",
|
|
"D11",
|
|
"D24"
|
|
]
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 120
|
|
},
|
|
"houses": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/house"
|
|
},
|
|
"maxItems": 12
|
|
},
|
|
"planets": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/planet"
|
|
},
|
|
"maxItems": 12
|
|
},
|
|
"claimStatus": {
|
|
"$ref": "#/definitions/claimStatus"
|
|
},
|
|
"evidenceRefs": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/evidenceId"
|
|
},
|
|
"maxItems": 24,
|
|
"minItems": 1
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"title",
|
|
"houses",
|
|
"claimStatus",
|
|
"evidenceRefs"
|
|
]
|
|
},
|
|
"thematicSection": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"pattern": "^[a-z][a-z0-9_-]{0,95}$",
|
|
"minLength": 1,
|
|
"maxLength": 96
|
|
},
|
|
"theme": {
|
|
"type": "string",
|
|
"pattern": "^[a-z][a-z0-9_.-]{0,95}$",
|
|
"minLength": 1,
|
|
"maxLength": 96
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 160
|
|
},
|
|
"narrative": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 4000
|
|
},
|
|
"actions": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 400
|
|
},
|
|
"maxItems": 12
|
|
},
|
|
"caveats": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 400
|
|
},
|
|
"maxItems": 12
|
|
},
|
|
"claimStatus": {
|
|
"$ref": "#/definitions/claimStatus"
|
|
},
|
|
"evidenceRefs": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/evidenceId"
|
|
},
|
|
"maxItems": 24,
|
|
"minItems": 1
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"theme",
|
|
"title",
|
|
"narrative",
|
|
"actions",
|
|
"caveats",
|
|
"claimStatus",
|
|
"evidenceRefs"
|
|
]
|
|
},
|
|
"techniqueAuditRow": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"id": {
|
|
"$ref": "#/definitions/evidenceId"
|
|
},
|
|
"techniqueId": {
|
|
"type": "string",
|
|
"pattern": "^[a-z0-9_.-]{1,80}$",
|
|
"minLength": 1,
|
|
"maxLength": 80
|
|
},
|
|
"techniqueName": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 160
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"verified",
|
|
"partial",
|
|
"blocked"
|
|
]
|
|
},
|
|
"used": {
|
|
"type": "boolean"
|
|
},
|
|
"notes": {
|
|
"type": "string",
|
|
"maxLength": 500
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"techniqueId",
|
|
"techniqueName",
|
|
"status",
|
|
"used"
|
|
]
|
|
},
|
|
"conflictRow": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"id": {
|
|
"$ref": "#/definitions/evidenceId"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 1000
|
|
},
|
|
"impact": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 500
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"unresolved",
|
|
"partial",
|
|
"resolved"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"description",
|
|
"impact",
|
|
"status"
|
|
]
|
|
},
|
|
"calculationEvidenceRow": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"id": {
|
|
"$ref": "#/definitions/evidenceId"
|
|
},
|
|
"label": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 160
|
|
},
|
|
"value": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 500
|
|
},
|
|
"source": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 200
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"label",
|
|
"value",
|
|
"source"
|
|
]
|
|
},
|
|
"actionNote": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"pattern": "^[a-z][a-z0-9_-]{0,95}$",
|
|
"minLength": 1,
|
|
"maxLength": 96
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 160
|
|
},
|
|
"note": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 1000
|
|
},
|
|
"priority": {
|
|
"type": "string",
|
|
"enum": [
|
|
"now",
|
|
"next",
|
|
"watch"
|
|
]
|
|
},
|
|
"evidenceRefs": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/evidenceId"
|
|
},
|
|
"maxItems": 24,
|
|
"minItems": 1
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"title",
|
|
"note",
|
|
"priority",
|
|
"evidenceRefs"
|
|
]
|
|
},
|
|
"blockedConflictDisclosure": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"theme": {
|
|
"type": "string",
|
|
"pattern": "^[a-z][a-z0-9_.-]{0,95}$",
|
|
"minLength": 1,
|
|
"maxLength": 96
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 160
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 2000
|
|
},
|
|
"missingEvidence": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 400
|
|
},
|
|
"maxItems": 24,
|
|
"minItems": 1
|
|
},
|
|
"conflictNotes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 500
|
|
},
|
|
"maxItems": 24
|
|
},
|
|
"evidenceRefs": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/evidenceId"
|
|
},
|
|
"maxItems": 24
|
|
},
|
|
"claimStatus": {
|
|
"type": "string",
|
|
"const": "blocked"
|
|
}
|
|
},
|
|
"required": [
|
|
"theme",
|
|
"title",
|
|
"reason",
|
|
"missingEvidence",
|
|
"conflictNotes",
|
|
"evidenceRefs",
|
|
"claimStatus"
|
|
]
|
|
}
|
|
},
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"schemaVersion": {
|
|
"type": "string",
|
|
"const": "report_document.v2"
|
|
},
|
|
"reportId": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
|
|
},
|
|
"reportType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"personal_full",
|
|
"personal_thematic"
|
|
]
|
|
},
|
|
"presentationMode": {
|
|
"type": "string",
|
|
"enum": [
|
|
"default",
|
|
"research"
|
|
]
|
|
},
|
|
"depth": {
|
|
"type": "string",
|
|
"enum": [
|
|
"concise",
|
|
"standard",
|
|
"deep",
|
|
"research"
|
|
]
|
|
},
|
|
"requestedThemes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"pattern": "^[a-z][a-z0-9_.-]{0,95}$",
|
|
"minLength": 1,
|
|
"maxLength": 96
|
|
},
|
|
"minItems": 1,
|
|
"maxItems": 12
|
|
},
|
|
"generatedAt": {
|
|
"$ref": "#/definitions/iso8601"
|
|
},
|
|
"subject": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"displayName": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 120
|
|
},
|
|
"birthTimeStatus": {
|
|
"type": "string",
|
|
"enum": [
|
|
"reported",
|
|
"candidate",
|
|
"accepted",
|
|
"confirmed"
|
|
]
|
|
},
|
|
"birthPlaceLabel": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 200
|
|
}
|
|
},
|
|
"required": [
|
|
"displayName",
|
|
"birthTimeStatus",
|
|
"birthPlaceLabel"
|
|
]
|
|
},
|
|
"provenance": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"skillName": {
|
|
"type": "string",
|
|
"pattern": "^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$",
|
|
"minLength": 1,
|
|
"maxLength": 120
|
|
},
|
|
"skillVersion": {
|
|
"type": "string",
|
|
"pattern": "^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$",
|
|
"minLength": 5,
|
|
"maxLength": 80
|
|
},
|
|
"skillSourceCommit": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
],
|
|
"pattern": "^[0-9a-f]{40}$",
|
|
"minLength": 40,
|
|
"maxLength": 40
|
|
},
|
|
"skillSnapshotSha256": {
|
|
"$ref": "#/definitions/sha256Hex"
|
|
},
|
|
"calculationHash": {
|
|
"$ref": "#/definitions/sha256Hex"
|
|
},
|
|
"evidenceHash": {
|
|
"$ref": "#/definitions/sha256Hex"
|
|
},
|
|
"reportContractVersion": {
|
|
"type": "string",
|
|
"const": "2"
|
|
}
|
|
},
|
|
"required": [
|
|
"skillName",
|
|
"skillVersion",
|
|
"skillSourceCommit",
|
|
"skillSnapshotSha256",
|
|
"calculationHash",
|
|
"evidenceHash",
|
|
"reportContractVersion"
|
|
]
|
|
},
|
|
"executiveSummary": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"headline": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 200
|
|
},
|
|
"summary": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 2000
|
|
},
|
|
"priorities": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 200
|
|
},
|
|
"maxItems": 8
|
|
},
|
|
"overallClaimStatus": {
|
|
"$ref": "#/definitions/claimStatus"
|
|
},
|
|
"evidenceRefs": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/evidenceId"
|
|
},
|
|
"maxItems": 24,
|
|
"minItems": 1
|
|
}
|
|
},
|
|
"required": [
|
|
"headline",
|
|
"summary",
|
|
"priorities",
|
|
"overallClaimStatus",
|
|
"evidenceRefs"
|
|
]
|
|
},
|
|
"natalFoundation": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"title": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 160
|
|
},
|
|
"narrative": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 4000
|
|
},
|
|
"keyFactors": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 400
|
|
},
|
|
"maxItems": 12
|
|
},
|
|
"caveats": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 400
|
|
},
|
|
"maxItems": 12
|
|
},
|
|
"claimStatus": {
|
|
"$ref": "#/definitions/claimStatus"
|
|
},
|
|
"evidenceRefs": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/evidenceId"
|
|
},
|
|
"maxItems": 24,
|
|
"minItems": 1
|
|
}
|
|
},
|
|
"required": [
|
|
"title",
|
|
"narrative",
|
|
"keyFactors",
|
|
"caveats",
|
|
"claimStatus",
|
|
"evidenceRefs"
|
|
]
|
|
},
|
|
"currentPhase": {
|
|
"oneOf": [
|
|
{
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"title": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 160
|
|
},
|
|
"phaseLabel": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 200
|
|
},
|
|
"narrative": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 4000
|
|
},
|
|
"timingNotes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 400
|
|
},
|
|
"maxItems": 12
|
|
},
|
|
"caveats": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 400
|
|
},
|
|
"maxItems": 12
|
|
},
|
|
"claimStatus": {
|
|
"$ref": "#/definitions/claimStatus"
|
|
},
|
|
"evidenceRefs": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/evidenceId"
|
|
},
|
|
"maxItems": 24,
|
|
"minItems": 1
|
|
}
|
|
},
|
|
"required": [
|
|
"title",
|
|
"phaseLabel",
|
|
"narrative",
|
|
"timingNotes",
|
|
"caveats",
|
|
"claimStatus",
|
|
"evidenceRefs"
|
|
]
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"actionNotes": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"maxItems": 24,
|
|
"items": {
|
|
"$ref": "#/definitions/actionNote"
|
|
}
|
|
},
|
|
"charts": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/chart"
|
|
},
|
|
"minItems": 1,
|
|
"maxItems": 6
|
|
},
|
|
"thematicNarrative": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/thematicSection"
|
|
},
|
|
"maxItems": 12
|
|
},
|
|
"blockedConflictDisclosure": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/blockedConflictDisclosure"
|
|
},
|
|
"maxItems": 12
|
|
},
|
|
"evidenceAppendix": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"expandedByDefault": {
|
|
"type": "boolean"
|
|
},
|
|
"techniqueAudit": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/techniqueAuditRow"
|
|
},
|
|
"maxItems": 100
|
|
},
|
|
"conflicts": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/conflictRow"
|
|
},
|
|
"maxItems": 50
|
|
},
|
|
"calculationEvidence": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/calculationEvidenceRow"
|
|
},
|
|
"maxItems": 100
|
|
},
|
|
"blockedTechniques": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 120
|
|
},
|
|
"maxItems": 100
|
|
}
|
|
},
|
|
"required": [
|
|
"expandedByDefault",
|
|
"techniqueAudit",
|
|
"conflicts",
|
|
"calculationEvidence",
|
|
"blockedTechniques"
|
|
]
|
|
},
|
|
"disclaimer": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 2000
|
|
}
|
|
},
|
|
"required": [
|
|
"schemaVersion",
|
|
"reportId",
|
|
"reportType",
|
|
"presentationMode",
|
|
"depth",
|
|
"requestedThemes",
|
|
"generatedAt",
|
|
"subject",
|
|
"provenance",
|
|
"executiveSummary",
|
|
"natalFoundation",
|
|
"currentPhase",
|
|
"actionNotes",
|
|
"charts",
|
|
"thematicNarrative",
|
|
"blockedConflictDisclosure",
|
|
"evidenceAppendix",
|
|
"disclaimer"
|
|
]
|
|
}
|