Spaces:
Running
Running
deploy(hf): sync szl-holdings/a11oy@main derived COPY set
Browse filesReusable Dockerfile-COPY-derived deploy from szl-holdings/a11oy main.
Files: 1135 Pruned: 0
Derived from Dockerfile COPY sources (NO hand-maintained allowlist).
Signed-off-by: SZL Holdings <noreply@szlholdings.ai>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- schemas/evidenceos/claim-atomize-request.v1.schema.json +19 -0
- schemas/evidenceos/claim-evaluate-request.v1.schema.json +225 -0
- schemas/evidenceos/public-claim-manifest.v1.schema.json +105 -0
- schemas/evidenceos/public-claim-report.v1.schema.json +148 -0
- static/3d/surfaces/integritycontrol.js +258 -8
schemas/evidenceos/claim-atomize-request.v1.schema.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
| 3 |
+
"$id": "https://a-11-oy.com/schemas/evidenceos/claim-atomize-request.v1.schema.json",
|
| 4 |
+
"title": "EvidenceOS Claim Atomize Request v1",
|
| 5 |
+
"description": "Bounded request for structural-only claim atomization. The operation does not assert semantic atomicity or truth.",
|
| 6 |
+
"$comment": "The runtime refuses input that structurally splits into more than 32 review candidates; this output-bound invariant is not expressible from the input string in JSON Schema.",
|
| 7 |
+
"type": "object",
|
| 8 |
+
"additionalProperties": false,
|
| 9 |
+
"required": [
|
| 10 |
+
"text"
|
| 11 |
+
],
|
| 12 |
+
"properties": {
|
| 13 |
+
"text": {
|
| 14 |
+
"type": "string",
|
| 15 |
+
"maxLength": 32768,
|
| 16 |
+
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$"
|
| 17 |
+
}
|
| 18 |
+
}
|
| 19 |
+
}
|
schemas/evidenceos/claim-evaluate-request.v1.schema.json
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
| 3 |
+
"$id": "https://a-11-oy.com/schemas/evidenceos/claim-evaluate-request.v1.schema.json",
|
| 4 |
+
"title": "EvidenceOS Claim Evaluate Request v1",
|
| 5 |
+
"description": "Bounded proposal-only request for deterministic claim-integrity evaluation.",
|
| 6 |
+
"$comment": "Cross-record invariants that JSON Schema cannot express are enforced by parse_evaluate_request after identifier whitespace normalization: explicit claim_id values are unique; external-signal keys and contradiction IDs reference explicit claim IDs; refutes_claim_ids is a subset of claim_ids.",
|
| 7 |
+
"type": "object",
|
| 8 |
+
"additionalProperties": false,
|
| 9 |
+
"required": [
|
| 10 |
+
"claims"
|
| 11 |
+
],
|
| 12 |
+
"properties": {
|
| 13 |
+
"claims": {
|
| 14 |
+
"type": "array",
|
| 15 |
+
"maxItems": 32,
|
| 16 |
+
"items": {
|
| 17 |
+
"$ref": "#/$defs/claim"
|
| 18 |
+
}
|
| 19 |
+
},
|
| 20 |
+
"external_signals": {
|
| 21 |
+
"type": "object",
|
| 22 |
+
"maxProperties": 32,
|
| 23 |
+
"propertyNames": {
|
| 24 |
+
"$ref": "#/$defs/nonblankId"
|
| 25 |
+
},
|
| 26 |
+
"additionalProperties": {
|
| 27 |
+
"$ref": "#/$defs/signalEnvelope"
|
| 28 |
+
}
|
| 29 |
+
},
|
| 30 |
+
"contradictions": {
|
| 31 |
+
"type": "array",
|
| 32 |
+
"maxItems": 32,
|
| 33 |
+
"items": {
|
| 34 |
+
"$ref": "#/$defs/contradiction"
|
| 35 |
+
}
|
| 36 |
+
}
|
| 37 |
+
},
|
| 38 |
+
"$defs": {
|
| 39 |
+
"nonblankId": {
|
| 40 |
+
"type": "string",
|
| 41 |
+
"maxLength": 128,
|
| 42 |
+
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$"
|
| 43 |
+
},
|
| 44 |
+
"boundedReference": {
|
| 45 |
+
"type": "string",
|
| 46 |
+
"maxLength": 512
|
| 47 |
+
},
|
| 48 |
+
"provenance": {
|
| 49 |
+
"type": "object",
|
| 50 |
+
"additionalProperties": false,
|
| 51 |
+
"properties": {
|
| 52 |
+
"source_id": {
|
| 53 |
+
"$ref": "#/$defs/boundedReference"
|
| 54 |
+
},
|
| 55 |
+
"content_sha256": {
|
| 56 |
+
"type": "string",
|
| 57 |
+
"minLength": 64,
|
| 58 |
+
"maxLength": 64,
|
| 59 |
+
"pattern": "^[0-9a-fA-F]{64}$"
|
| 60 |
+
},
|
| 61 |
+
"receipt_ref": {
|
| 62 |
+
"$ref": "#/$defs/boundedReference"
|
| 63 |
+
}
|
| 64 |
+
}
|
| 65 |
+
},
|
| 66 |
+
"owner": {
|
| 67 |
+
"type": "object",
|
| 68 |
+
"additionalProperties": false,
|
| 69 |
+
"properties": {
|
| 70 |
+
"owner_id": {
|
| 71 |
+
"type": "string",
|
| 72 |
+
"maxLength": 128
|
| 73 |
+
},
|
| 74 |
+
"accountability_scope": {
|
| 75 |
+
"type": "string",
|
| 76 |
+
"maxLength": 1024
|
| 77 |
+
}
|
| 78 |
+
}
|
| 79 |
+
},
|
| 80 |
+
"evidence": {
|
| 81 |
+
"type": "object",
|
| 82 |
+
"additionalProperties": false,
|
| 83 |
+
"properties": {
|
| 84 |
+
"reference_id": {
|
| 85 |
+
"type": "string",
|
| 86 |
+
"maxLength": 128
|
| 87 |
+
},
|
| 88 |
+
"evidence_state": {
|
| 89 |
+
"$ref": "#/$defs/claimState"
|
| 90 |
+
},
|
| 91 |
+
"provenance": {
|
| 92 |
+
"$ref": "#/$defs/provenance"
|
| 93 |
+
},
|
| 94 |
+
"verification_ref": {
|
| 95 |
+
"$ref": "#/$defs/boundedReference"
|
| 96 |
+
}
|
| 97 |
+
}
|
| 98 |
+
},
|
| 99 |
+
"claim": {
|
| 100 |
+
"type": "object",
|
| 101 |
+
"additionalProperties": false,
|
| 102 |
+
"properties": {
|
| 103 |
+
"claim_id": {
|
| 104 |
+
"$ref": "#/$defs/nonblankId"
|
| 105 |
+
},
|
| 106 |
+
"statement": {
|
| 107 |
+
"type": "string",
|
| 108 |
+
"maxLength": 4096
|
| 109 |
+
},
|
| 110 |
+
"atomic": {
|
| 111 |
+
"type": "boolean"
|
| 112 |
+
},
|
| 113 |
+
"evidence_refs": {
|
| 114 |
+
"type": "array",
|
| 115 |
+
"maxItems": 8,
|
| 116 |
+
"items": {
|
| 117 |
+
"$ref": "#/$defs/evidence"
|
| 118 |
+
}
|
| 119 |
+
},
|
| 120 |
+
"consequence_owner": {
|
| 121 |
+
"oneOf": [
|
| 122 |
+
{
|
| 123 |
+
"type": "null"
|
| 124 |
+
},
|
| 125 |
+
{
|
| 126 |
+
"$ref": "#/$defs/owner"
|
| 127 |
+
}
|
| 128 |
+
]
|
| 129 |
+
}
|
| 130 |
+
}
|
| 131 |
+
},
|
| 132 |
+
"semanticSignal": {
|
| 133 |
+
"type": "object",
|
| 134 |
+
"additionalProperties": false,
|
| 135 |
+
"properties": {
|
| 136 |
+
"value": {
|
| 137 |
+
"type": "number",
|
| 138 |
+
"minimum": 0,
|
| 139 |
+
"maximum": 1
|
| 140 |
+
},
|
| 141 |
+
"source_ref": {
|
| 142 |
+
"$ref": "#/$defs/boundedReference"
|
| 143 |
+
},
|
| 144 |
+
"method": {
|
| 145 |
+
"type": "string",
|
| 146 |
+
"maxLength": 256
|
| 147 |
+
}
|
| 148 |
+
}
|
| 149 |
+
},
|
| 150 |
+
"factualitySignal": {
|
| 151 |
+
"type": "object",
|
| 152 |
+
"additionalProperties": false,
|
| 153 |
+
"properties": {
|
| 154 |
+
"state": {
|
| 155 |
+
"$ref": "#/$defs/claimState"
|
| 156 |
+
},
|
| 157 |
+
"source_ref": {
|
| 158 |
+
"$ref": "#/$defs/boundedReference"
|
| 159 |
+
},
|
| 160 |
+
"method": {
|
| 161 |
+
"type": "string",
|
| 162 |
+
"maxLength": 256
|
| 163 |
+
}
|
| 164 |
+
}
|
| 165 |
+
},
|
| 166 |
+
"signalEnvelope": {
|
| 167 |
+
"type": "object",
|
| 168 |
+
"additionalProperties": false,
|
| 169 |
+
"properties": {
|
| 170 |
+
"semantic_uncertainty": {
|
| 171 |
+
"$ref": "#/$defs/semanticSignal"
|
| 172 |
+
},
|
| 173 |
+
"factuality": {
|
| 174 |
+
"$ref": "#/$defs/factualitySignal"
|
| 175 |
+
}
|
| 176 |
+
}
|
| 177 |
+
},
|
| 178 |
+
"contradiction": {
|
| 179 |
+
"type": "object",
|
| 180 |
+
"additionalProperties": false,
|
| 181 |
+
"properties": {
|
| 182 |
+
"claim_ids": {
|
| 183 |
+
"type": "array",
|
| 184 |
+
"maxItems": 32,
|
| 185 |
+
"uniqueItems": true,
|
| 186 |
+
"items": {
|
| 187 |
+
"$ref": "#/$defs/nonblankId"
|
| 188 |
+
}
|
| 189 |
+
},
|
| 190 |
+
"status": {
|
| 191 |
+
"type": "string",
|
| 192 |
+
"enum": [
|
| 193 |
+
"UNRESOLVED",
|
| 194 |
+
"CONFIRMED",
|
| 195 |
+
"RESOLVED"
|
| 196 |
+
]
|
| 197 |
+
},
|
| 198 |
+
"provenance": {
|
| 199 |
+
"$ref": "#/$defs/provenance"
|
| 200 |
+
},
|
| 201 |
+
"refutes_claim_ids": {
|
| 202 |
+
"type": "array",
|
| 203 |
+
"maxItems": 32,
|
| 204 |
+
"uniqueItems": true,
|
| 205 |
+
"items": {
|
| 206 |
+
"$ref": "#/$defs/nonblankId"
|
| 207 |
+
}
|
| 208 |
+
},
|
| 209 |
+
"resolution_ref": {
|
| 210 |
+
"$ref": "#/$defs/boundedReference"
|
| 211 |
+
}
|
| 212 |
+
}
|
| 213 |
+
},
|
| 214 |
+
"claimState": {
|
| 215 |
+
"type": "string",
|
| 216 |
+
"enum": [
|
| 217 |
+
"VERIFIED",
|
| 218 |
+
"SUPPORTED",
|
| 219 |
+
"UNCERTAIN",
|
| 220 |
+
"REFUTED",
|
| 221 |
+
"UNKNOWN"
|
| 222 |
+
]
|
| 223 |
+
}
|
| 224 |
+
}
|
| 225 |
+
}
|
schemas/evidenceos/public-claim-manifest.v1.schema.json
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
| 3 |
+
"$id": "https://a-11-oy.com/schemas/evidenceos/public-claim-manifest.v1.schema.json",
|
| 4 |
+
"title": "EvidenceOS Public Claim Manifest v1",
|
| 5 |
+
"type": "object",
|
| 6 |
+
"additionalProperties": false,
|
| 7 |
+
"required": ["schema_version", "manifest_id", "revision", "generated_at", "claims"],
|
| 8 |
+
"properties": {
|
| 9 |
+
"schema_version": {"const": "1.0.0"},
|
| 10 |
+
"manifest_id": {"$ref": "#/$defs/identifier"},
|
| 11 |
+
"revision": {"type": "string", "minLength": 1, "maxLength": 128},
|
| 12 |
+
"generated_at": {"$ref": "#/$defs/utcTimestamp"},
|
| 13 |
+
"claims": {
|
| 14 |
+
"type": "array",
|
| 15 |
+
"minItems": 1,
|
| 16 |
+
"maxItems": 64,
|
| 17 |
+
"items": {"$ref": "#/$defs/claim"}
|
| 18 |
+
}
|
| 19 |
+
},
|
| 20 |
+
"$defs": {
|
| 21 |
+
"identifier": {"type": "string", "minLength": 1, "maxLength": 128},
|
| 22 |
+
"utcTimestamp": {
|
| 23 |
+
"type": "string",
|
| 24 |
+
"minLength": 20,
|
| 25 |
+
"maxLength": 32,
|
| 26 |
+
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(?:\\.[0-9]{1,6})?Z$"
|
| 27 |
+
},
|
| 28 |
+
"owner": {
|
| 29 |
+
"type": "object",
|
| 30 |
+
"additionalProperties": false,
|
| 31 |
+
"required": ["owner_id", "accountability_scope"],
|
| 32 |
+
"properties": {
|
| 33 |
+
"owner_id": {"$ref": "#/$defs/identifier"},
|
| 34 |
+
"accountability_scope": {"type": "string", "minLength": 1, "maxLength": 1024}
|
| 35 |
+
}
|
| 36 |
+
},
|
| 37 |
+
"source": {
|
| 38 |
+
"type": "object",
|
| 39 |
+
"additionalProperties": false,
|
| 40 |
+
"required": ["repository", "revision"],
|
| 41 |
+
"properties": {
|
| 42 |
+
"repository": {"type": "string", "minLength": 1, "maxLength": 1024},
|
| 43 |
+
"revision": {"type": "string", "minLength": 1, "maxLength": 128}
|
| 44 |
+
}
|
| 45 |
+
},
|
| 46 |
+
"evidence": {
|
| 47 |
+
"type": "object",
|
| 48 |
+
"additionalProperties": false,
|
| 49 |
+
"required": [
|
| 50 |
+
"evidence_id", "path", "content_sha256", "collected_at",
|
| 51 |
+
"max_age_seconds", "kind", "verification_ref"
|
| 52 |
+
],
|
| 53 |
+
"properties": {
|
| 54 |
+
"evidence_id": {"$ref": "#/$defs/identifier"},
|
| 55 |
+
"path": {"type": "string", "minLength": 1, "maxLength": 1024},
|
| 56 |
+
"content_sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
| 57 |
+
"collected_at": {"$ref": "#/$defs/utcTimestamp"},
|
| 58 |
+
"max_age_seconds": {"type": "integer", "minimum": 1, "maximum": 31536000},
|
| 59 |
+
"kind": {
|
| 60 |
+
"enum": [
|
| 61 |
+
"FORMAL_PROOF", "TEST_RECEIPT", "MEASUREMENT_RECEIPT", "MODEL_OUTPUT",
|
| 62 |
+
"CONJECTURE_RECORD", "OPEN_ISSUE", "SOURCE_RECORD"
|
| 63 |
+
]
|
| 64 |
+
},
|
| 65 |
+
"verification_ref": {"type": "string", "minLength": 1, "maxLength": 1024}
|
| 66 |
+
}
|
| 67 |
+
},
|
| 68 |
+
"claim": {
|
| 69 |
+
"type": "object",
|
| 70 |
+
"additionalProperties": false,
|
| 71 |
+
"required": [
|
| 72 |
+
"claim_id", "assertion", "maturity", "scope", "owner", "consumers",
|
| 73 |
+
"source", "evidence", "reproduction_argv"
|
| 74 |
+
],
|
| 75 |
+
"properties": {
|
| 76 |
+
"claim_id": {"$ref": "#/$defs/identifier"},
|
| 77 |
+
"assertion": {"type": "string", "minLength": 1, "maxLength": 4096},
|
| 78 |
+
"maturity": {"enum": ["PROVEN", "MEASURED", "MODELED", "CONJECTURE", "OPEN"]},
|
| 79 |
+
"scope": {"type": "string", "minLength": 1, "maxLength": 1024},
|
| 80 |
+
"owner": {"$ref": "#/$defs/owner"},
|
| 81 |
+
"consumers": {
|
| 82 |
+
"type": "array",
|
| 83 |
+
"minItems": 1,
|
| 84 |
+
"maxItems": 16,
|
| 85 |
+
"items": {"$ref": "#/$defs/identifier"},
|
| 86 |
+
"uniqueItems": true
|
| 87 |
+
},
|
| 88 |
+
"source": {"$ref": "#/$defs/source"},
|
| 89 |
+
"evidence": {
|
| 90 |
+
"type": "array",
|
| 91 |
+
"minItems": 1,
|
| 92 |
+
"maxItems": 8,
|
| 93 |
+
"items": {"$ref": "#/$defs/evidence"}
|
| 94 |
+
},
|
| 95 |
+
"reproduction_argv": {
|
| 96 |
+
"type": "array",
|
| 97 |
+
"minItems": 1,
|
| 98 |
+
"maxItems": 32,
|
| 99 |
+
"items": {"type": "string", "minLength": 1, "maxLength": 256}
|
| 100 |
+
}
|
| 101 |
+
}
|
| 102 |
+
}
|
| 103 |
+
},
|
| 104 |
+
"$comment": "Runtime validation additionally enforces canonical ID uniqueness, safe repository-relative paths, global evidence-ID uniqueness, freshness, digest binding, and maturity/evidence-kind compatibility."
|
| 105 |
+
}
|
schemas/evidenceos/public-claim-report.v1.schema.json
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
| 3 |
+
"$id": "https://a-11-oy.com/schemas/evidenceos/public-claim-report.v1.schema.json",
|
| 4 |
+
"title": "EvidenceOS Public Claim Report v1",
|
| 5 |
+
"type": "object",
|
| 6 |
+
"additionalProperties": false,
|
| 7 |
+
"required": [
|
| 8 |
+
"module", "schema_version", "manifest_id", "manifest_revision",
|
| 9 |
+
"manifest_generated_at", "manifest_content_sha256", "evaluated_as_of", "decision_state",
|
| 10 |
+
"effectors_enabled", "claim_count", "freshness_counts", "passes",
|
| 11 |
+
"outcome", "manifest_violations", "claims", "honesty_invariants", "receipt"
|
| 12 |
+
],
|
| 13 |
+
"properties": {
|
| 14 |
+
"module": {"const": "szl-public-claim-manifest"},
|
| 15 |
+
"schema_version": {"const": "1.0.0"},
|
| 16 |
+
"manifest_id": {"type": "string"},
|
| 17 |
+
"manifest_revision": {"type": "string"},
|
| 18 |
+
"manifest_generated_at": {"type": "string"},
|
| 19 |
+
"manifest_content_sha256": {"$ref": "#/$defs/sha256"},
|
| 20 |
+
"evaluated_as_of": {"type": "string"},
|
| 21 |
+
"decision_state": {"const": "PROPOSAL_ONLY"},
|
| 22 |
+
"effectors_enabled": {"const": 0},
|
| 23 |
+
"claim_count": {"type": "integer", "minimum": 1, "maximum": 64},
|
| 24 |
+
"freshness_counts": {
|
| 25 |
+
"type": "object",
|
| 26 |
+
"additionalProperties": false,
|
| 27 |
+
"required": ["CURRENT", "STALE", "MISSING", "UNKNOWN", "NOT_EVALUATED"],
|
| 28 |
+
"properties": {
|
| 29 |
+
"CURRENT": {"type": "integer", "minimum": 0},
|
| 30 |
+
"STALE": {"type": "integer", "minimum": 0},
|
| 31 |
+
"MISSING": {"type": "integer", "minimum": 0},
|
| 32 |
+
"UNKNOWN": {"type": "integer", "minimum": 0},
|
| 33 |
+
"NOT_EVALUATED": {"type": "integer", "minimum": 0}
|
| 34 |
+
}
|
| 35 |
+
},
|
| 36 |
+
"passes": {"type": "boolean"},
|
| 37 |
+
"outcome": {"enum": ["PASS", "REFUSE"]},
|
| 38 |
+
"manifest_violations": {"type": "array", "items": {"type": "string"}},
|
| 39 |
+
"claims": {
|
| 40 |
+
"type": "array",
|
| 41 |
+
"minItems": 1,
|
| 42 |
+
"maxItems": 64,
|
| 43 |
+
"items": {"$ref": "#/$defs/claimReport"}
|
| 44 |
+
},
|
| 45 |
+
"honesty_invariants": {
|
| 46 |
+
"type": "object",
|
| 47 |
+
"additionalProperties": false,
|
| 48 |
+
"required": [
|
| 49 |
+
"explicit_paths_only", "repository_crawling", "reproduction_commands_executed",
|
| 50 |
+
"truth_inference", "unsigned_report", "effectors_are_zero"
|
| 51 |
+
],
|
| 52 |
+
"properties": {
|
| 53 |
+
"explicit_paths_only": {"const": true},
|
| 54 |
+
"repository_crawling": {"const": false},
|
| 55 |
+
"reproduction_commands_executed": {"const": false},
|
| 56 |
+
"truth_inference": {"const": false},
|
| 57 |
+
"unsigned_report": {"const": true},
|
| 58 |
+
"effectors_are_zero": {"const": true}
|
| 59 |
+
}
|
| 60 |
+
},
|
| 61 |
+
"receipt": {
|
| 62 |
+
"type": "object",
|
| 63 |
+
"additionalProperties": false,
|
| 64 |
+
"required": ["mode", "algorithm", "signed", "content_sha256", "attests_truth"],
|
| 65 |
+
"properties": {
|
| 66 |
+
"mode": {"const": "UNSIGNED-CONTENT-DIGEST"},
|
| 67 |
+
"algorithm": {"const": "sha256"},
|
| 68 |
+
"signed": {"const": false},
|
| 69 |
+
"content_sha256": {"$ref": "#/$defs/sha256"},
|
| 70 |
+
"attests_truth": {"const": false}
|
| 71 |
+
}
|
| 72 |
+
}
|
| 73 |
+
},
|
| 74 |
+
"$defs": {
|
| 75 |
+
"sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
| 76 |
+
"owner": {
|
| 77 |
+
"type": "object",
|
| 78 |
+
"additionalProperties": false,
|
| 79 |
+
"required": ["owner_id", "accountability_scope"],
|
| 80 |
+
"properties": {
|
| 81 |
+
"owner_id": {"type": "string"},
|
| 82 |
+
"accountability_scope": {"type": "string"}
|
| 83 |
+
}
|
| 84 |
+
},
|
| 85 |
+
"source": {
|
| 86 |
+
"type": "object",
|
| 87 |
+
"additionalProperties": false,
|
| 88 |
+
"required": ["repository", "revision"],
|
| 89 |
+
"properties": {
|
| 90 |
+
"repository": {"type": "string"},
|
| 91 |
+
"revision": {"type": "string"}
|
| 92 |
+
}
|
| 93 |
+
},
|
| 94 |
+
"evidenceReport": {
|
| 95 |
+
"type": "object",
|
| 96 |
+
"additionalProperties": false,
|
| 97 |
+
"required": [
|
| 98 |
+
"evidence_id", "path", "kind", "freshness_state", "collected_at",
|
| 99 |
+
"max_age_seconds", "age_seconds", "expected_content_sha256",
|
| 100 |
+
"observed_content_sha256", "verification_ref", "violations"
|
| 101 |
+
],
|
| 102 |
+
"properties": {
|
| 103 |
+
"evidence_id": {"type": "string"},
|
| 104 |
+
"path": {"type": "string"},
|
| 105 |
+
"kind": {"enum": [
|
| 106 |
+
"FORMAL_PROOF", "TEST_RECEIPT", "MEASUREMENT_RECEIPT", "MODEL_OUTPUT",
|
| 107 |
+
"CONJECTURE_RECORD", "OPEN_ISSUE", "SOURCE_RECORD"
|
| 108 |
+
]},
|
| 109 |
+
"freshness_state": {"enum": ["CURRENT", "STALE", "MISSING", "UNKNOWN", "NOT_EVALUATED"]},
|
| 110 |
+
"collected_at": {"type": "string"},
|
| 111 |
+
"max_age_seconds": {"type": "integer", "minimum": 1, "maximum": 31536000},
|
| 112 |
+
"age_seconds": {"type": "integer"},
|
| 113 |
+
"expected_content_sha256": {"$ref": "#/$defs/sha256"},
|
| 114 |
+
"observed_content_sha256": {
|
| 115 |
+
"oneOf": [{"$ref": "#/$defs/sha256"}, {"type": "null"}]
|
| 116 |
+
},
|
| 117 |
+
"verification_ref": {"type": "string"},
|
| 118 |
+
"violations": {"type": "array", "uniqueItems": true, "items": {"type": "string"}}
|
| 119 |
+
}
|
| 120 |
+
},
|
| 121 |
+
"claimReport": {
|
| 122 |
+
"type": "object",
|
| 123 |
+
"additionalProperties": false,
|
| 124 |
+
"required": [
|
| 125 |
+
"claim_id", "assertion", "maturity", "scope", "owner", "consumers",
|
| 126 |
+
"source", "reproduction_argv", "evidence", "passes", "violations"
|
| 127 |
+
],
|
| 128 |
+
"properties": {
|
| 129 |
+
"claim_id": {"type": "string"},
|
| 130 |
+
"assertion": {"type": "string"},
|
| 131 |
+
"maturity": {"enum": ["PROVEN", "MEASURED", "MODELED", "CONJECTURE", "OPEN"]},
|
| 132 |
+
"scope": {"type": "string"},
|
| 133 |
+
"owner": {"$ref": "#/$defs/owner"},
|
| 134 |
+
"consumers": {"type": "array", "minItems": 1, "maxItems": 16, "uniqueItems": true, "items": {"type": "string"}},
|
| 135 |
+
"source": {"$ref": "#/$defs/source"},
|
| 136 |
+
"reproduction_argv": {
|
| 137 |
+
"type": "array",
|
| 138 |
+
"minItems": 1,
|
| 139 |
+
"maxItems": 32,
|
| 140 |
+
"items": {"type": "string", "minLength": 1, "maxLength": 256}
|
| 141 |
+
},
|
| 142 |
+
"evidence": {"type": "array", "minItems": 1, "maxItems": 8, "items": {"$ref": "#/$defs/evidenceReport"}},
|
| 143 |
+
"passes": {"type": "boolean"},
|
| 144 |
+
"violations": {"type": "array", "uniqueItems": true, "items": {"type": "string"}}
|
| 145 |
+
}
|
| 146 |
+
}
|
| 147 |
+
}
|
| 148 |
+
}
|
static/3d/surfaces/integritycontrol.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
| 1 |
// SPDX-License-Identifier: Apache-2.0
|
| 2 |
// Copyright 2026 Stephen P. Lutar Jr. / SZL Holdings
|
| 3 |
//
|
| 4 |
-
// Integrity Control Plane --
|
| 5 |
// GET /api/a11oy/v1/waqay/security-loop/manifest
|
| 6 |
// GET /api/a11oy/v1/claim-integrity/info
|
|
|
|
| 7 |
//
|
| 8 |
-
//
|
| 9 |
-
//
|
| 10 |
-
//
|
| 11 |
-
//
|
| 12 |
|
| 13 |
import { createShowcase } from "./_showcase.js";
|
| 14 |
|
|
@@ -16,6 +17,7 @@ const ID = "integritycontrol";
|
|
| 16 |
const TITLE = "Integrity Control Plane · proposal boundaries";
|
| 17 |
const SECURITY_EP = "/api/a11oy/v1/waqay/security-loop/manifest";
|
| 18 |
const CLAIM_EP = "/api/a11oy/v1/claim-integrity/info";
|
|
|
|
| 19 |
|
| 20 |
const C_TEAL = 0x3af4c8;
|
| 21 |
const C_BLUE = 0x5b8dee;
|
|
@@ -36,6 +38,12 @@ let _ring = null;
|
|
| 36 |
let _nodes = [];
|
| 37 |
let _links = [];
|
| 38 |
let _boundaryPill = null;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
|
| 40 |
const S = {
|
| 41 |
security: null,
|
|
@@ -109,6 +117,156 @@ function _derive() {
|
|
| 109 |
_paint();
|
| 110 |
}
|
| 111 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 112 |
export function mount(ctx) {
|
| 113 |
_ctx = ctx;
|
| 114 |
_stage = ctx.stage;
|
|
@@ -210,6 +368,7 @@ function _buildOverlay() {
|
|
| 210 |
id: ID,
|
| 211 |
title: TITLE,
|
| 212 |
accent: "#3af4c8",
|
|
|
|
| 213 |
chips: [
|
| 214 |
{
|
| 215 |
label: "STRUCTURAL-ONLY",
|
|
@@ -220,8 +379,8 @@ function _buildOverlay() {
|
|
| 220 |
],
|
| 221 |
description:
|
| 222 |
"A compact view of the <b>Waqay Security Loop</b> and <b>Claim Integrity</b> " +
|
| 223 |
-
"contracts. It
|
| 224 |
-
"without invoking
|
| 225 |
"<b>LIVE</b> here can only mean a manifest fetch succeeded; it never means effectors are live.",
|
| 226 |
citations:
|
| 227 |
"SZL-native clean-room control plane · read-only contract manifests · " +
|
|
@@ -252,6 +411,91 @@ function _buildOverlay() {
|
|
| 252 |
_show.addField("signature boundary", "signing");
|
| 253 |
_show.addField("contract endpoints", "feeds");
|
| 254 |
_show.addField("allowed output", "output");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 255 |
}
|
| 256 |
|
| 257 |
function _field(key, value, color) {
|
|
@@ -325,6 +569,11 @@ function _onFrame() {
|
|
| 325 |
}
|
| 326 |
|
| 327 |
export function unmount() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 328 |
_polls.forEach((p) => { try { p.stop(); } catch (_) {} });
|
| 329 |
_polls = [];
|
| 330 |
try { if (_show) _show.destroy(); } catch (_) {}
|
|
@@ -349,12 +598,13 @@ export function unmount() {
|
|
| 349 |
S.fetch.security = S.fetch.claim = "init";
|
| 350 |
S.mode = S.effectors = S.signing = null;
|
| 351 |
S.verdict = "AWAITING-CONTRACTS";
|
|
|
|
| 352 |
}
|
| 353 |
|
| 354 |
export default {
|
| 355 |
id: ID,
|
| 356 |
title: TITLE,
|
| 357 |
-
endpoints: [SECURITY_EP, CLAIM_EP],
|
| 358 |
mount,
|
| 359 |
unmount,
|
| 360 |
};
|
|
|
|
| 1 |
// SPDX-License-Identifier: Apache-2.0
|
| 2 |
// Copyright 2026 Stephen P. Lutar Jr. / SZL Holdings
|
| 3 |
//
|
| 4 |
+
// Integrity Control Plane -- two read-only contracts plus one bounded computational read:
|
| 5 |
// GET /api/a11oy/v1/waqay/security-loop/manifest
|
| 6 |
// GET /api/a11oy/v1/claim-integrity/info
|
| 7 |
+
// POST /api/a11oy/v1/claim-integrity/atomize
|
| 8 |
//
|
| 9 |
+
// Atomization is a deterministic punctuation/newline split. It is not semantic evaluation,
|
| 10 |
+
// persistence, signing, approval, or execution. Every returned candidate stays atomic=false
|
| 11 |
+
// and human-review-required. A successful request does NOT mean that a deployer, rollback
|
| 12 |
+
// mechanism, model, signer, repository writer, or any other effector is live.
|
| 13 |
|
| 14 |
import { createShowcase } from "./_showcase.js";
|
| 15 |
|
|
|
|
| 17 |
const TITLE = "Integrity Control Plane · proposal boundaries";
|
| 18 |
const SECURITY_EP = "/api/a11oy/v1/waqay/security-loop/manifest";
|
| 19 |
const CLAIM_EP = "/api/a11oy/v1/claim-integrity/info";
|
| 20 |
+
const ATOMIZE_EP = "/api/a11oy/v1/claim-integrity/atomize";
|
| 21 |
|
| 22 |
const C_TEAL = 0x3af4c8;
|
| 23 |
const C_BLUE = 0x5b8dee;
|
|
|
|
| 38 |
let _nodes = [];
|
| 39 |
let _links = [];
|
| 40 |
let _boundaryPill = null;
|
| 41 |
+
let _compileController = null;
|
| 42 |
+
let _compileSerial = 0;
|
| 43 |
+
let _proseInput = null;
|
| 44 |
+
let _compileButton = null;
|
| 45 |
+
let _compileStatus = null;
|
| 46 |
+
let _candidateList = null;
|
| 47 |
|
| 48 |
const S = {
|
| 49 |
security: null,
|
|
|
|
| 117 |
_paint();
|
| 118 |
}
|
| 119 |
|
| 120 |
+
function _setCompileStatus(message, tone = "neutral") {
|
| 121 |
+
if (!_compileStatus) return;
|
| 122 |
+
_compileStatus.textContent = message;
|
| 123 |
+
_compileStatus.dataset.claimCompileState = tone;
|
| 124 |
+
_compileStatus.style.color = tone === "error" ? "#ff8b94" :
|
| 125 |
+
(tone === "ready" ? "#3af4c8" : (tone === "loading" ? "#e8c074" : "#9fb1bf"));
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
function _clearCandidates() {
|
| 129 |
+
if (!_candidateList) return;
|
| 130 |
+
while (_candidateList.firstChild) _candidateList.removeChild(_candidateList.firstChild);
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
function _renderCandidates(payload) {
|
| 134 |
+
_clearCandidates();
|
| 135 |
+
const atoms = payload && Array.isArray(payload.atoms) ? payload.atoms : [];
|
| 136 |
+
const contractIntact = payload && payload.semantic_atomization_computed === false &&
|
| 137 |
+
String(payload.decision_state || "").toUpperCase() === "PROPOSAL_ONLY" &&
|
| 138 |
+
payload.effectors_enabled === 0 &&
|
| 139 |
+
payload.method === "VISIBLE-PUNCTUATION-AND-NEWLINE-SPLIT" &&
|
| 140 |
+
Number.isInteger(payload.candidate_count) && payload.candidate_count >= 0 &&
|
| 141 |
+
payload.candidate_count <= 32 && payload.candidate_count === atoms.length;
|
| 142 |
+
|
| 143 |
+
if (!contractIntact) {
|
| 144 |
+
_setCompileStatus("CONTRACT MISMATCH: response was not proposal-only with zero effectors.", "error");
|
| 145 |
+
return;
|
| 146 |
+
}
|
| 147 |
+
|
| 148 |
+
if (!atoms.length) {
|
| 149 |
+
_setCompileStatus("0 structural candidates. No semantic claim was established.", "ready");
|
| 150 |
+
return;
|
| 151 |
+
}
|
| 152 |
+
|
| 153 |
+
let rendered = 0;
|
| 154 |
+
atoms.forEach((atom, index) => {
|
| 155 |
+
const reviewRequired = atom && atom.human_review_required === true;
|
| 156 |
+
const structuralOnly = atom && atom.atomic === false &&
|
| 157 |
+
String(atom.atomization_state || "").toUpperCase() === "STRUCTURAL-SPLIT-ONLY";
|
| 158 |
+
if (!reviewRequired || !structuralOnly || typeof atom.statement !== "string") return;
|
| 159 |
+
|
| 160 |
+
const row = document.createElement("article");
|
| 161 |
+
row.dataset.claimCandidate = String(index + 1);
|
| 162 |
+
row.dataset.reviewRequired = "true";
|
| 163 |
+
Object.assign(row.style, {
|
| 164 |
+
border: "1px solid #263746", borderRadius: "8px", padding: "8px 9px",
|
| 165 |
+
background: "#09121a", display: "grid", gap: "5px",
|
| 166 |
+
});
|
| 167 |
+
|
| 168 |
+
const heading = document.createElement("div");
|
| 169 |
+
heading.textContent = `Candidate ${String(index + 1).padStart(2, "0")} · REVIEW REQUIRED`;
|
| 170 |
+
Object.assign(heading.style, {
|
| 171 |
+
color: "#e8c074", font: "600 10px ui-monospace,Menlo,monospace",
|
| 172 |
+
letterSpacing: ".35px",
|
| 173 |
+
});
|
| 174 |
+
|
| 175 |
+
const statement = document.createElement("div");
|
| 176 |
+
statement.textContent = atom.statement;
|
| 177 |
+
Object.assign(statement.style, {
|
| 178 |
+
color: "#e7eef6", fontSize: "11px", lineHeight: "1.5",
|
| 179 |
+
overflowWrap: "anywhere", whiteSpace: "pre-wrap",
|
| 180 |
+
});
|
| 181 |
+
|
| 182 |
+
const boundary = document.createElement("div");
|
| 183 |
+
boundary.textContent = "STRUCTURAL-SPLIT-ONLY · atomic=false · no evidence attached";
|
| 184 |
+
Object.assign(boundary.style, {
|
| 185 |
+
color: "#778b9b", font: "9px ui-monospace,Menlo,monospace",
|
| 186 |
+
});
|
| 187 |
+
|
| 188 |
+
row.appendChild(heading);
|
| 189 |
+
row.appendChild(statement);
|
| 190 |
+
row.appendChild(boundary);
|
| 191 |
+
_candidateList.appendChild(row);
|
| 192 |
+
rendered += 1;
|
| 193 |
+
});
|
| 194 |
+
|
| 195 |
+
if (rendered !== atoms.length) {
|
| 196 |
+
_clearCandidates();
|
| 197 |
+
_setCompileStatus("CONTRACT MISMATCH: one or more candidates were not structural and review-required.", "error");
|
| 198 |
+
return;
|
| 199 |
+
}
|
| 200 |
+
_setCompileStatus(`${rendered} structural candidate${rendered === 1 ? "" : "s"}. Human review required.`, "ready");
|
| 201 |
+
}
|
| 202 |
+
|
| 203 |
+
function _compileProse() {
|
| 204 |
+
const prose = _proseInput ? _proseInput.value.trim() : "";
|
| 205 |
+
if (!prose) {
|
| 206 |
+
_clearCandidates();
|
| 207 |
+
_setCompileStatus("Enter prose before compiling structural candidates.", "error");
|
| 208 |
+
if (_proseInput) _proseInput.focus();
|
| 209 |
+
return;
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
if (_compileController && _compileController.abort) {
|
| 213 |
+
try { _compileController.abort(); } catch (_) {}
|
| 214 |
+
}
|
| 215 |
+
const ctrl = (typeof window !== "undefined" && "AbortController" in window)
|
| 216 |
+
? new AbortController() : null;
|
| 217 |
+
_compileController = ctrl;
|
| 218 |
+
const serial = ++_compileSerial;
|
| 219 |
+
_clearCandidates();
|
| 220 |
+
_setCompileStatus("Compiling visible punctuation and newline splits…", "loading");
|
| 221 |
+
if (_compileButton) {
|
| 222 |
+
_compileButton.disabled = true;
|
| 223 |
+
_compileButton.textContent = "Compiling…";
|
| 224 |
+
}
|
| 225 |
+
|
| 226 |
+
fetch(ATOMIZE_EP, {
|
| 227 |
+
method: "POST",
|
| 228 |
+
headers: { accept: "application/json", "content-type": "application/json" },
|
| 229 |
+
body: JSON.stringify({ text: prose }),
|
| 230 |
+
signal: ctrl ? ctrl.signal : undefined,
|
| 231 |
+
})
|
| 232 |
+
.then(async (response) => {
|
| 233 |
+
let payload = null;
|
| 234 |
+
try { payload = await response.json(); } catch (_) {}
|
| 235 |
+
if (!response.ok) {
|
| 236 |
+
const error = new Error(`http ${response.status}`);
|
| 237 |
+
error.status = response.status;
|
| 238 |
+
error.payload = payload;
|
| 239 |
+
throw error;
|
| 240 |
+
}
|
| 241 |
+
return payload;
|
| 242 |
+
})
|
| 243 |
+
.then((payload) => {
|
| 244 |
+
if (serial !== _compileSerial) return;
|
| 245 |
+
_compileController = null;
|
| 246 |
+
_renderCandidates(payload);
|
| 247 |
+
})
|
| 248 |
+
.catch((error) => {
|
| 249 |
+
if (error && error.name === "AbortError") return;
|
| 250 |
+
if (serial !== _compileSerial) return;
|
| 251 |
+
_compileController = null;
|
| 252 |
+
_clearCandidates();
|
| 253 |
+
if (error && error.status === 413) {
|
| 254 |
+
_setCompileStatus("413 · INPUT TOO LARGE: reduce the prose and retry.", "error");
|
| 255 |
+
} else if (error && error.status === 422) {
|
| 256 |
+
_setCompileStatus("422 · INVALID INPUT: the atomization contract refused this request.", "error");
|
| 257 |
+
} else if (error && error.status === 503) {
|
| 258 |
+
_setCompileStatus("503 · UNAVAILABLE: the Claim Compiler is not ready.", "error");
|
| 259 |
+
} else {
|
| 260 |
+
_setCompileStatus("UNAVAILABLE: no structural candidates were returned.", "error");
|
| 261 |
+
}
|
| 262 |
+
})
|
| 263 |
+
.finally(() => {
|
| 264 |
+
if (serial !== _compileSerial || !_compileButton) return;
|
| 265 |
+
_compileButton.disabled = false;
|
| 266 |
+
_compileButton.textContent = "Compile candidates";
|
| 267 |
+
});
|
| 268 |
+
}
|
| 269 |
+
|
| 270 |
export function mount(ctx) {
|
| 271 |
_ctx = ctx;
|
| 272 |
_stage = ctx.stage;
|
|
|
|
| 368 |
id: ID,
|
| 369 |
title: TITLE,
|
| 370 |
accent: "#3af4c8",
|
| 371 |
+
startExpanded: true,
|
| 372 |
chips: [
|
| 373 |
{
|
| 374 |
label: "STRUCTURAL-ONLY",
|
|
|
|
| 379 |
],
|
| 380 |
description:
|
| 381 |
"A compact view of the <b>Waqay Security Loop</b> and <b>Claim Integrity</b> " +
|
| 382 |
+
"contracts. It preserves two same-origin GET polls and offers one bounded atomization " +
|
| 383 |
+
"request without invoking evaluation, deploy, rollback, persistence, model, signer, or repository action. " +
|
| 384 |
"<b>LIVE</b> here can only mean a manifest fetch succeeded; it never means effectors are live.",
|
| 385 |
citations:
|
| 386 |
"SZL-native clean-room control plane · read-only contract manifests · " +
|
|
|
|
| 411 |
_show.addField("signature boundary", "signing");
|
| 412 |
_show.addField("contract endpoints", "feeds");
|
| 413 |
_show.addField("allowed output", "output");
|
| 414 |
+
|
| 415 |
+
const compiler = document.createElement("section");
|
| 416 |
+
compiler.dataset.claimCompiler = "structural-only";
|
| 417 |
+
Object.assign(compiler.style, {
|
| 418 |
+
display: "grid", gap: "8px", border: "1px solid #1c3841", borderRadius: "9px",
|
| 419 |
+
padding: "9px", background: "rgba(5,17,22,.88)", minWidth: "0",
|
| 420 |
+
});
|
| 421 |
+
|
| 422 |
+
const compilerTitle = document.createElement("div");
|
| 423 |
+
compilerTitle.textContent = "Claim Compiler · structural proposal";
|
| 424 |
+
Object.assign(compilerTitle.style, {
|
| 425 |
+
color: "#3af4c8", font: "600 11px ui-monospace,Menlo,monospace",
|
| 426 |
+
});
|
| 427 |
+
|
| 428 |
+
const compilerBoundary = document.createElement("div");
|
| 429 |
+
compilerBoundary.textContent =
|
| 430 |
+
"Splits visible punctuation/newlines only. No semantic evaluation, persistence, signing, approval, or effectors.";
|
| 431 |
+
Object.assign(compilerBoundary.style, {
|
| 432 |
+
color: "#9fb1bf", fontSize: "10px", lineHeight: "1.45",
|
| 433 |
+
});
|
| 434 |
+
|
| 435 |
+
const label = document.createElement("label");
|
| 436 |
+
label.htmlFor = `${ID}-prose`;
|
| 437 |
+
label.textContent = "Prose to atomize";
|
| 438 |
+
Object.assign(label.style, { color: "#c9d6df", fontSize: "10px" });
|
| 439 |
+
|
| 440 |
+
_proseInput = document.createElement("textarea");
|
| 441 |
+
_proseInput.id = `${ID}-prose`;
|
| 442 |
+
_proseInput.rows = 5;
|
| 443 |
+
_proseInput.placeholder = "Paste a bounded technical paragraph. No data is stored by this surface.";
|
| 444 |
+
_proseInput.setAttribute("aria-describedby", `${ID}-compile-status`);
|
| 445 |
+
_proseInput.spellcheck = true;
|
| 446 |
+
Object.assign(_proseInput.style, {
|
| 447 |
+
boxSizing: "border-box", width: "100%", minHeight: "96px", resize: "vertical",
|
| 448 |
+
border: "1px solid #2b4050", borderRadius: "8px", padding: "9px",
|
| 449 |
+
background: "#071019", color: "#e7eef6", outline: "none",
|
| 450 |
+
font: "11px/1.5 ui-monospace,Menlo,monospace",
|
| 451 |
+
});
|
| 452 |
+
|
| 453 |
+
_compileButton = document.createElement("button");
|
| 454 |
+
_compileButton.type = "button";
|
| 455 |
+
_compileButton.textContent = "Compile candidates";
|
| 456 |
+
_compileButton.dataset.claimCompileAction = "atomize";
|
| 457 |
+
Object.assign(_compileButton.style, {
|
| 458 |
+
minHeight: "40px", width: "100%", border: "1px solid #3af4c8",
|
| 459 |
+
borderRadius: "8px", background: "#0a241f", color: "#3af4c8",
|
| 460 |
+
cursor: "pointer", font: "600 11px ui-monospace,Menlo,monospace",
|
| 461 |
+
});
|
| 462 |
+
_compileButton.addEventListener("click", _compileProse);
|
| 463 |
+
|
| 464 |
+
_proseInput.addEventListener("keydown", (event) => {
|
| 465 |
+
if ((event.ctrlKey || event.metaKey) && event.key === "Enter") {
|
| 466 |
+
event.preventDefault();
|
| 467 |
+
_compileProse();
|
| 468 |
+
}
|
| 469 |
+
});
|
| 470 |
+
|
| 471 |
+
_compileStatus = document.createElement("div");
|
| 472 |
+
_compileStatus.id = `${ID}-compile-status`;
|
| 473 |
+
_compileStatus.setAttribute("role", "status");
|
| 474 |
+
_compileStatus.setAttribute("aria-live", "polite");
|
| 475 |
+
Object.assign(_compileStatus.style, {
|
| 476 |
+
color: "#9fb1bf", font: "10px/1.45 ui-monospace,Menlo,monospace",
|
| 477 |
+
overflowWrap: "anywhere",
|
| 478 |
+
});
|
| 479 |
+
_setCompileStatus("Not evaluated. Submit prose to request structural candidates.");
|
| 480 |
+
|
| 481 |
+
_candidateList = document.createElement("div");
|
| 482 |
+
_candidateList.dataset.claimCandidateList = "review-required";
|
| 483 |
+
Object.assign(_candidateList.style, {
|
| 484 |
+
display: "grid", gap: "7px", maxHeight: "210px", overflowY: "auto",
|
| 485 |
+
WebkitOverflowScrolling: "touch",
|
| 486 |
+
});
|
| 487 |
+
|
| 488 |
+
compiler.appendChild(compilerTitle);
|
| 489 |
+
compiler.appendChild(compilerBoundary);
|
| 490 |
+
compiler.appendChild(label);
|
| 491 |
+
compiler.appendChild(_proseInput);
|
| 492 |
+
compiler.appendChild(_compileButton);
|
| 493 |
+
compiler.appendChild(_compileStatus);
|
| 494 |
+
compiler.appendChild(_candidateList);
|
| 495 |
+
_show.appendBody(compiler);
|
| 496 |
+
|
| 497 |
+
// Give the operator workflow enough room on laptops while remaining bounded on phones.
|
| 498 |
+
_show.el.style.width = "min(94vw, 460px)";
|
| 499 |
}
|
| 500 |
|
| 501 |
function _field(key, value, color) {
|
|
|
|
| 569 |
}
|
| 570 |
|
| 571 |
export function unmount() {
|
| 572 |
+
_compileSerial += 1;
|
| 573 |
+
if (_compileController && _compileController.abort) {
|
| 574 |
+
try { _compileController.abort(); } catch (_) {}
|
| 575 |
+
}
|
| 576 |
+
_compileController = null;
|
| 577 |
_polls.forEach((p) => { try { p.stop(); } catch (_) {} });
|
| 578 |
_polls = [];
|
| 579 |
try { if (_show) _show.destroy(); } catch (_) {}
|
|
|
|
| 598 |
S.fetch.security = S.fetch.claim = "init";
|
| 599 |
S.mode = S.effectors = S.signing = null;
|
| 600 |
S.verdict = "AWAITING-CONTRACTS";
|
| 601 |
+
_proseInput = _compileButton = _compileStatus = _candidateList = null;
|
| 602 |
}
|
| 603 |
|
| 604 |
export default {
|
| 605 |
id: ID,
|
| 606 |
title: TITLE,
|
| 607 |
+
endpoints: [SECURITY_EP, CLAIM_EP, ATOMIZE_EP],
|
| 608 |
mount,
|
| 609 |
unmount,
|
| 610 |
};
|