Add provenance schema contract for v0.3.0

This commit is contained in:
2026-07-17 18:14:17 -07:00
parent 41ee044899
commit 9087ad4789
145 changed files with 31699 additions and 30 deletions
@@ -0,0 +1,57 @@
{
"vector_version": "1.0",
"backup_manifest": {
"schema_version": "1.0",
"application_version": "0.3.0",
"project_id": "project_01J00000000000000000000001",
"created_at": "2026-07-17T18:42:10.123Z",
"source_chain_head": "sha256:51935af27a4c989a014d975eab929f41fccafadedfbf1baafa15e3ce2a27a66d",
"sqlite_snapshot": {
"path": "database-snapshot/state.sqlite",
"sha256": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
"size": 4096,
"sqlite_version": "3.46.0",
"database_schema_version": 1,
"completed_at": "2026-07-17T18:42:10.123Z"
},
"files": [
{
"path": "project.json",
"sha256": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
"size": 256
}
],
"protected": false,
"recovery_key_envelope_path": null
},
"release_manifest": {
"schema_version": "1.0",
"application_version": "0.3.0",
"release_id": "release_01J0000000000000000000000E",
"project_id": "project_01J00000000000000000000001",
"version": "1.0.0",
"created_at": "2026-07-17T18:43:11.456Z",
"source_commit": "0123456789abcdef0123456789abcdef01234567",
"source_chain_head": "sha256:51935af27a4c989a014d975eab929f41fccafadedfbf1baafa15e3ce2a27a66d",
"source_manuscript": {
"path": "manuscript/final-manuscript.md",
"sha256": "sha256:4444444444444444444444444444444444444444444444444444444444444444"
},
"sanitized": false,
"files": [
{
"path": "manuscript/final-manuscript.md",
"sha256": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
"size": 1024
},
{
"path": "evidence/creative-process-report.md",
"sha256": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
"size": 512
}
],
"release_files_merkle_root": "sha256:b773ac929d720839a617ec0f9d6e39ad5401fa7795e21f799302658de8db9cda",
"merkle_algorithm": "thinkloom-release-merkle-v1"
},
"binding_rule": "Backup and release inventories bind the same frozen authoritative chain head while remaining distinct artifact classes."
}
@@ -0,0 +1,73 @@
{
"vector_version": "1.0",
"algorithm": "Unicode NFC followed by RFC 8785 JSON Canonicalization Scheme and SHA-256 over UTF-8 bytes",
"cases": [
{
"id": "rfc8785-key-order",
"input": {
"z": 1,
"a": 2,
"nested": {
"beta": true,
"alpha": false
}
},
"canonical_json": "{\"a\":2,\"nested\":{\"alpha\":false,\"beta\":true},\"z\":1}",
"utf8_sha256": "sha256:f0d2d7ce87541c9b5d9c16a557f162a766ce865ae322a1ce512f89835e344479"
},
{
"id": "thinkloom-nfc",
"input": {
"text": "Café",
"é": "normalize keys and values"
},
"canonical_json": "{\"text\":\"Café\",\"é\":\"normalize keys and values\"}",
"utf8_sha256": "sha256:7c5f79c29886fc66ff5a0529755d07fe905f178131f264a95b4ff44d91214e4c"
},
{
"id": "rfc8785-numbers",
"input": {
"numbers": [
333333333.3333333,
1e+30,
4.5,
0.002,
1e-27
]
},
"canonical_json": "{\"numbers\":[333333333.3333333,1e+30,4.5,0.002,1e-27]}",
"utf8_sha256": "sha256:7c892d3452ad85ad65857a43e8dcac93b79475d2334fc3e85bac5c599142c158"
},
{
"id": "thinkloom-timestamp-and-path",
"input": {
"timestamp": "2026-07-17T18:42:10.123Z",
"path": "records/invocations/request.json"
},
"canonical_json": "{\"path\":\"records/invocations/request.json\",\"timestamp\":\"2026-07-17T18:42:10.123Z\"}",
"utf8_sha256": "sha256:97f1f02f62ecbbe8b80ede4e48655f5d8774fd6022bba1f6d2c421eca9975068"
}
],
"rejected_inputs": [
{
"id": "non-finite-number",
"description": "NaN and infinity are not JSON and MUST be rejected before canonicalization."
},
{
"id": "undefined-value",
"description": "Undefined values MUST be rejected rather than silently omitted."
},
{
"id": "nfc-key-collision",
"description": "Distinct source keys that normalize to the same NFC key MUST be rejected."
},
{
"id": "unpaired-surrogate",
"description": "I-JSON prohibits unpaired Unicode surrogate code units."
},
{
"id": "non-json-runtime-types",
"description": "BigInt, symbols, functions, sparse arrays, and non-plain objects MUST be rejected."
}
]
}
@@ -0,0 +1,49 @@
{
"vector_version": "1.0",
"segments": [
{
"jsonl": "{\"actor\":{\"actor_id\":null,\"type\":\"user\"},\"client_action_id\":\"client-action-0001\",\"event_hash\":\"sha256:3a087877f4878483805f517ef0ebd108476e31ed68162504da4fad12d6d9eff4\",\"event_id\":\"event_01J00000000000000000000003\",\"event_sequence\":1,\"event_type\":\"PROJECT_CREATED\",\"inputs\":[],\"metadata\":{\"summary\":\"Created project\"},\"outputs\":[{\"path\":\"manuscript/revisions/revision.json\",\"range\":{\"coordinate_system\":\"utf8_byte\",\"document_revision_id\":\"revision_01J0000000000000000000000A\",\"end\":12,\"preimage_sha256\":\"sha256:1111111111111111111111111111111111111111111111111111111111111111\",\"schema_version\":\"1.0\",\"start\":0,\"text_fragment_id\":\"fragment_01J0000000000000000000000C\"},\"record_id\":\"record_01J00000000000000000000005\",\"record_type\":\"manuscript_revision\",\"revision_id\":\"revision_01J0000000000000000000000A\",\"schema_version\":\"1.0\",\"sha256\":\"sha256:2222222222222222222222222222222222222222222222222222222222222222\"}],\"previous_event_hash\":null,\"project_id\":\"project_01J00000000000000000000001\",\"provider\":null,\"relationships\":{\"invocation_id\":null,\"parent_event_ids\":[]},\"schema_version\":\"1.0\",\"timestamp\":\"2026-07-17T18:42:10.123Z\"}\n{\"actor\":{\"actor_id\":null,\"type\":\"user\"},\"client_action_id\":\"client-action-0001\",\"event_hash\":\"sha256:eb03e514fa6fcfcd291357668559b24387a84256fc39d6fb0621529003d0988e\",\"event_id\":\"event_01J00000000000000000000004\",\"event_sequence\":2,\"event_type\":\"IDEA_ACCEPTED\",\"inputs\":[],\"metadata\":{\"summary\":\"Created project\"},\"outputs\":[{\"path\":\"manuscript/revisions/revision.json\",\"range\":{\"coordinate_system\":\"utf8_byte\",\"document_revision_id\":\"revision_01J0000000000000000000000A\",\"end\":12,\"preimage_sha256\":\"sha256:1111111111111111111111111111111111111111111111111111111111111111\",\"schema_version\":\"1.0\",\"start\":0,\"text_fragment_id\":\"fragment_01J0000000000000000000000C\"},\"record_id\":\"record_01J00000000000000000000005\",\"record_type\":\"manuscript_revision\",\"revision_id\":\"revision_01J0000000000000000000000A\",\"schema_version\":\"1.0\",\"sha256\":\"sha256:2222222222222222222222222222222222222222222222222222222222222222\"}],\"previous_event_hash\":\"sha256:3a087877f4878483805f517ef0ebd108476e31ed68162504da4fad12d6d9eff4\",\"project_id\":\"project_01J00000000000000000000001\",\"provider\":null,\"relationships\":{\"invocation_id\":null,\"parent_event_ids\":[]},\"schema_version\":\"1.0\",\"timestamp\":\"2026-07-17T18:43:11.456Z\"}\n",
"manifest": {
"schema_version": "1.0",
"project_id": "project_01J00000000000000000000001",
"segment_number": 1,
"previous_segment_file_hash": null,
"first_event_hash": "sha256:3a087877f4878483805f517ef0ebd108476e31ed68162504da4fad12d6d9eff4",
"final_event_hash": "sha256:eb03e514fa6fcfcd291357668559b24387a84256fc39d6fb0621529003d0988e",
"first_event_sequence": 1,
"final_event_sequence": 2,
"event_count": 2,
"byte_length": 2323,
"segment_file_hash": "sha256:b37546669da485b3f5c8dad3c26b36ee8992ac8127e8f99d6a5ee8cdb1fa2d81",
"sealed_at": "2026-07-17T18:42:10.123Z"
}
},
{
"jsonl": "{\"actor\":{\"actor_id\":null,\"type\":\"user\"},\"client_action_id\":\"client-action-0001\",\"event_hash\":\"sha256:51935af27a4c989a014d975eab929f41fccafadedfbf1baafa15e3ce2a27a66d\",\"event_id\":\"event_01J0000000000000000000000T\",\"event_sequence\":3,\"event_type\":\"MANUSCRIPT_EDITED\",\"inputs\":[],\"metadata\":{\"summary\":\"Created project\"},\"outputs\":[{\"path\":\"manuscript/revisions/revision.json\",\"range\":{\"coordinate_system\":\"utf8_byte\",\"document_revision_id\":\"revision_01J0000000000000000000000A\",\"end\":12,\"preimage_sha256\":\"sha256:1111111111111111111111111111111111111111111111111111111111111111\",\"schema_version\":\"1.0\",\"start\":0,\"text_fragment_id\":\"fragment_01J0000000000000000000000C\"},\"record_id\":\"record_01J00000000000000000000005\",\"record_type\":\"manuscript_revision\",\"revision_id\":\"revision_01J0000000000000000000000A\",\"schema_version\":\"1.0\",\"sha256\":\"sha256:2222222222222222222222222222222222222222222222222222222222222222\"}],\"previous_event_hash\":\"sha256:eb03e514fa6fcfcd291357668559b24387a84256fc39d6fb0621529003d0988e\",\"project_id\":\"project_01J00000000000000000000001\",\"provider\":null,\"relationships\":{\"invocation_id\":null,\"parent_event_ids\":[]},\"schema_version\":\"1.0\",\"timestamp\":\"2026-07-17T18:44:12.789Z\"}\n",
"manifest": {
"schema_version": "1.0",
"project_id": "project_01J00000000000000000000001",
"segment_number": 2,
"previous_segment_file_hash": "sha256:b37546669da485b3f5c8dad3c26b36ee8992ac8127e8f99d6a5ee8cdb1fa2d81",
"first_event_hash": "sha256:51935af27a4c989a014d975eab929f41fccafadedfbf1baafa15e3ce2a27a66d",
"final_event_hash": "sha256:51935af27a4c989a014d975eab929f41fccafadedfbf1baafa15e3ce2a27a66d",
"first_event_sequence": 3,
"final_event_sequence": 3,
"event_count": 1,
"byte_length": 1199,
"segment_file_hash": "sha256:194195fb37a089af86334695f45de5efce45eccc651c6257d63a9f3cc6a81b51",
"sealed_at": "2026-07-17T18:45:13.012Z"
}
}
],
"chain_head": {
"schema_version": "1.0",
"project_id": "project_01J00000000000000000000001",
"active_segment_number": 2,
"event_id": "event_01J0000000000000000000000T",
"event_sequence": 3,
"event_hash": "sha256:51935af27a4c989a014d975eab929f41fccafadedfbf1baafa15e3ce2a27a66d",
"updated_at": "2026-07-17T18:45:13.012Z"
},
"cross_segment_rule": "A sealed segment names the prior segment file digest, and event hash linkage remains contiguous across the boundary."
}
@@ -0,0 +1,59 @@
{
"vector_version": "1.0",
"input_orders": [
[
{
"from": "idea_01J00000000000000000000009",
"to": "revision_01J0000000000000000000000B",
"relation": "influenced"
},
{
"from": "turn_01J00000000000000000000007",
"to": "idea_01J00000000000000000000009",
"relation": "suggested"
}
],
[
{
"from": "turn_01J00000000000000000000007",
"to": "idea_01J00000000000000000000009",
"relation": "suggested"
},
{
"from": "idea_01J00000000000000000000009",
"to": "revision_01J0000000000000000000000B",
"relation": "influenced"
}
]
],
"deterministic_content": [
{
"from": "idea_01J00000000000000000000009",
"to": "revision_01J0000000000000000000000B",
"relation": "influenced"
},
{
"from": "turn_01J00000000000000000000007",
"to": "idea_01J00000000000000000000009",
"relation": "suggested"
}
],
"configuration": {
"sort": "canonical-json-code-unit",
"graph_version": 1
},
"manifest": {
"schema_version": "1.0",
"index_type": "contribution_graph",
"source_chain_head": "sha256:51935af27a4c989a014d975eab929f41fccafadedfbf1baafa15e3ce2a27a66d",
"source_event_count": 3,
"generator": {
"name": "thinkloom-indexer",
"version": "1.0.0",
"configuration_sha256": "sha256:730664bcc17657f08ea3a55a96513b183fe957d598f8b00cea3ff981a099890d"
},
"content_sha256": "sha256:70ce92437e823653cb88cdc3ed8adaeb7bc48172ad526758720238149d6dcb79",
"generated_at": "2026-07-17T18:42:10.123Z"
},
"determinism_rule": "Input order does not affect canonical derived content; volatile generation metadata is outside content_sha256."
}
@@ -0,0 +1,145 @@
{
"vector_version": "1.0",
"event_hash_identity": "Canonical event object excluding only event_hash; previous_event_hash remains included.",
"sequence_rule": "Committed event_sequence values begin at 1 and are contiguous with no reuse.",
"jsonl_rule": "Each canonical event is UTF-8 without BOM followed by exactly one LF byte (0x0A).",
"events": [
{
"schema_version": "1.0",
"event_id": "event_01J00000000000000000000003",
"event_sequence": 1,
"client_action_id": "client-action-0001",
"project_id": "project_01J00000000000000000000001",
"timestamp": "2026-07-17T18:42:10.123Z",
"event_type": "PROJECT_CREATED",
"actor": {
"type": "user",
"actor_id": null
},
"provider": null,
"inputs": [],
"outputs": [
{
"schema_version": "1.0",
"record_id": "record_01J00000000000000000000005",
"record_type": "manuscript_revision",
"sha256": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
"path": "manuscript/revisions/revision.json",
"revision_id": "revision_01J0000000000000000000000A",
"range": {
"schema_version": "1.0",
"document_revision_id": "revision_01J0000000000000000000000A",
"coordinate_system": "utf8_byte",
"start": 0,
"end": 12,
"preimage_sha256": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"text_fragment_id": "fragment_01J0000000000000000000000C"
}
}
],
"relationships": {
"parent_event_ids": [],
"invocation_id": null
},
"metadata": {
"summary": "Created project"
},
"previous_event_hash": null,
"event_hash": "sha256:3a087877f4878483805f517ef0ebd108476e31ed68162504da4fad12d6d9eff4"
},
{
"schema_version": "1.0",
"event_id": "event_01J00000000000000000000004",
"event_sequence": 2,
"client_action_id": "client-action-0001",
"project_id": "project_01J00000000000000000000001",
"timestamp": "2026-07-17T18:43:11.456Z",
"event_type": "IDEA_ACCEPTED",
"actor": {
"type": "user",
"actor_id": null
},
"provider": null,
"inputs": [],
"outputs": [
{
"schema_version": "1.0",
"record_id": "record_01J00000000000000000000005",
"record_type": "manuscript_revision",
"sha256": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
"path": "manuscript/revisions/revision.json",
"revision_id": "revision_01J0000000000000000000000A",
"range": {
"schema_version": "1.0",
"document_revision_id": "revision_01J0000000000000000000000A",
"coordinate_system": "utf8_byte",
"start": 0,
"end": 12,
"preimage_sha256": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"text_fragment_id": "fragment_01J0000000000000000000000C"
}
}
],
"relationships": {
"parent_event_ids": [],
"invocation_id": null
},
"metadata": {
"summary": "Created project"
},
"previous_event_hash": "sha256:3a087877f4878483805f517ef0ebd108476e31ed68162504da4fad12d6d9eff4",
"event_hash": "sha256:eb03e514fa6fcfcd291357668559b24387a84256fc39d6fb0621529003d0988e"
},
{
"schema_version": "1.0",
"event_id": "event_01J0000000000000000000000T",
"event_sequence": 3,
"client_action_id": "client-action-0001",
"project_id": "project_01J00000000000000000000001",
"timestamp": "2026-07-17T18:44:12.789Z",
"event_type": "MANUSCRIPT_EDITED",
"actor": {
"type": "user",
"actor_id": null
},
"provider": null,
"inputs": [],
"outputs": [
{
"schema_version": "1.0",
"record_id": "record_01J00000000000000000000005",
"record_type": "manuscript_revision",
"sha256": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
"path": "manuscript/revisions/revision.json",
"revision_id": "revision_01J0000000000000000000000A",
"range": {
"schema_version": "1.0",
"document_revision_id": "revision_01J0000000000000000000000A",
"coordinate_system": "utf8_byte",
"start": 0,
"end": 12,
"preimage_sha256": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"text_fragment_id": "fragment_01J0000000000000000000000C"
}
}
],
"relationships": {
"parent_event_ids": [],
"invocation_id": null
},
"metadata": {
"summary": "Created project"
},
"previous_event_hash": "sha256:eb03e514fa6fcfcd291357668559b24387a84256fc39d6fb0621529003d0988e",
"event_hash": "sha256:51935af27a4c989a014d975eab929f41fccafadedfbf1baafa15e3ce2a27a66d"
}
],
"canonical_jsonl": "{\"actor\":{\"actor_id\":null,\"type\":\"user\"},\"client_action_id\":\"client-action-0001\",\"event_hash\":\"sha256:3a087877f4878483805f517ef0ebd108476e31ed68162504da4fad12d6d9eff4\",\"event_id\":\"event_01J00000000000000000000003\",\"event_sequence\":1,\"event_type\":\"PROJECT_CREATED\",\"inputs\":[],\"metadata\":{\"summary\":\"Created project\"},\"outputs\":[{\"path\":\"manuscript/revisions/revision.json\",\"range\":{\"coordinate_system\":\"utf8_byte\",\"document_revision_id\":\"revision_01J0000000000000000000000A\",\"end\":12,\"preimage_sha256\":\"sha256:1111111111111111111111111111111111111111111111111111111111111111\",\"schema_version\":\"1.0\",\"start\":0,\"text_fragment_id\":\"fragment_01J0000000000000000000000C\"},\"record_id\":\"record_01J00000000000000000000005\",\"record_type\":\"manuscript_revision\",\"revision_id\":\"revision_01J0000000000000000000000A\",\"schema_version\":\"1.0\",\"sha256\":\"sha256:2222222222222222222222222222222222222222222222222222222222222222\"}],\"previous_event_hash\":null,\"project_id\":\"project_01J00000000000000000000001\",\"provider\":null,\"relationships\":{\"invocation_id\":null,\"parent_event_ids\":[]},\"schema_version\":\"1.0\",\"timestamp\":\"2026-07-17T18:42:10.123Z\"}\n{\"actor\":{\"actor_id\":null,\"type\":\"user\"},\"client_action_id\":\"client-action-0001\",\"event_hash\":\"sha256:eb03e514fa6fcfcd291357668559b24387a84256fc39d6fb0621529003d0988e\",\"event_id\":\"event_01J00000000000000000000004\",\"event_sequence\":2,\"event_type\":\"IDEA_ACCEPTED\",\"inputs\":[],\"metadata\":{\"summary\":\"Created project\"},\"outputs\":[{\"path\":\"manuscript/revisions/revision.json\",\"range\":{\"coordinate_system\":\"utf8_byte\",\"document_revision_id\":\"revision_01J0000000000000000000000A\",\"end\":12,\"preimage_sha256\":\"sha256:1111111111111111111111111111111111111111111111111111111111111111\",\"schema_version\":\"1.0\",\"start\":0,\"text_fragment_id\":\"fragment_01J0000000000000000000000C\"},\"record_id\":\"record_01J00000000000000000000005\",\"record_type\":\"manuscript_revision\",\"revision_id\":\"revision_01J0000000000000000000000A\",\"schema_version\":\"1.0\",\"sha256\":\"sha256:2222222222222222222222222222222222222222222222222222222222222222\"}],\"previous_event_hash\":\"sha256:3a087877f4878483805f517ef0ebd108476e31ed68162504da4fad12d6d9eff4\",\"project_id\":\"project_01J00000000000000000000001\",\"provider\":null,\"relationships\":{\"invocation_id\":null,\"parent_event_ids\":[]},\"schema_version\":\"1.0\",\"timestamp\":\"2026-07-17T18:43:11.456Z\"}\n{\"actor\":{\"actor_id\":null,\"type\":\"user\"},\"client_action_id\":\"client-action-0001\",\"event_hash\":\"sha256:51935af27a4c989a014d975eab929f41fccafadedfbf1baafa15e3ce2a27a66d\",\"event_id\":\"event_01J0000000000000000000000T\",\"event_sequence\":3,\"event_type\":\"MANUSCRIPT_EDITED\",\"inputs\":[],\"metadata\":{\"summary\":\"Created project\"},\"outputs\":[{\"path\":\"manuscript/revisions/revision.json\",\"range\":{\"coordinate_system\":\"utf8_byte\",\"document_revision_id\":\"revision_01J0000000000000000000000A\",\"end\":12,\"preimage_sha256\":\"sha256:1111111111111111111111111111111111111111111111111111111111111111\",\"schema_version\":\"1.0\",\"start\":0,\"text_fragment_id\":\"fragment_01J0000000000000000000000C\"},\"record_id\":\"record_01J00000000000000000000005\",\"record_type\":\"manuscript_revision\",\"revision_id\":\"revision_01J0000000000000000000000A\",\"schema_version\":\"1.0\",\"sha256\":\"sha256:2222222222222222222222222222222222222222222222222222222222222222\"}],\"previous_event_hash\":\"sha256:eb03e514fa6fcfcd291357668559b24387a84256fc39d6fb0621529003d0988e\",\"project_id\":\"project_01J00000000000000000000001\",\"provider\":null,\"relationships\":{\"invocation_id\":null,\"parent_event_ids\":[]},\"schema_version\":\"1.0\",\"timestamp\":\"2026-07-17T18:44:12.789Z\"}\n",
"canonical_jsonl_sha256": "sha256:1ac3e55684b2a501777c01d9338bf8de10853d320ddfa0c0a030b846317888a2",
"rejected_boundary_variants": [
"CRLF line endings",
"missing final LF",
"blank records",
"UTF-8 BOM"
]
}
@@ -0,0 +1,101 @@
{
"vector_version": "1.0",
"plaintext_identity_fields": [
"schema_version",
"record_id",
"record_type",
"payload"
],
"plaintext_identity": {
"schema_version": "1.0",
"record_id": "record_01J00000000000000000000005",
"record_type": "invocation_request",
"payload": {
"purpose": "draft_from_selected_ideas"
}
},
"canonical_plaintext_identity": "{\"payload\":{\"purpose\":\"draft_from_selected_ideas\"},\"record_id\":\"record_01J00000000000000000000005\",\"record_type\":\"invocation_request\",\"schema_version\":\"1.0\"}",
"plaintext_sha256": "sha256:97154eddff15ab6607181e55945547fdbbc5bde02b1e5123eade7a69509f00c5",
"device_key_envelope": {
"schema_version": "1.0",
"envelope_id": "record_01J00000000000000000000005",
"key_id": "key_01J0000000000000000000000G",
"envelope_type": "device",
"algorithm": "xchacha20-poly1305",
"key_derivation": null,
"nonce": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"wrapped_key": "d3JhcHBlZC1wcm9qZWN0LWtleQ==",
"ciphertext_sha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"created_at": "2026-07-17T18:42:10.123Z"
},
"recovery_key_envelope": {
"schema_version": "1.0",
"envelope_id": "record_01J0000000000000000000000S",
"key_id": "key_01J0000000000000000000000G",
"envelope_type": "recovery",
"algorithm": "xchacha20-poly1305",
"key_derivation": {
"algorithm": "argon2id",
"memory_kib": 65536,
"iterations": 3,
"parallelism": 1,
"salt": "c2FsdC1mb3ItdGhpbmtsb29t"
},
"nonce": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"wrapped_key": "d3JhcHBlZC1wcm9qZWN0LWtleQ==",
"ciphertext_sha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"created_at": "2026-07-17T18:42:10.123Z"
},
"project_key_manifest": {
"schema_version": "1.0",
"project_id": "project_01J00000000000000000000001",
"key_id": "key_01J0000000000000000000000G",
"algorithm": "xchacha20-poly1305",
"device_envelope_path": "provenance/keys/device-envelope.json",
"recovery_envelope_path": "provenance/keys/recovery-envelope.json",
"recovery_verified_at": "2026-07-17T18:42:10.123Z",
"created_at": "2026-07-17T18:42:10.123Z"
},
"initial_envelope": {
"schema_version": "1.0",
"project_id": "project_01J00000000000000000000001",
"record_id": "record_01J00000000000000000000005",
"record_type": "invocation_request",
"protection": "protected",
"plaintext_sha256": "sha256:97154eddff15ab6607181e55945547fdbbc5bde02b1e5123eade7a69509f00c5",
"payload": null,
"encryption": {
"algorithm": "xchacha20-poly1305",
"key_id": "key_01J0000000000000000000000G",
"nonce": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"ciphertext": "ZW5jcnlwdGVkLXJlY29yZA==",
"ciphertext_sha256": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
}
},
"rotated_envelope": {
"schema_version": "1.0",
"project_id": "project_01J00000000000000000000001",
"record_id": "record_01J00000000000000000000005",
"record_type": "invocation_request",
"protection": "protected",
"plaintext_sha256": "sha256:97154eddff15ab6607181e55945547fdbbc5bde02b1e5123eade7a69509f00c5",
"payload": null,
"encryption": {
"algorithm": "xchacha20-poly1305",
"key_id": "key_01J0000000000000000000000V",
"nonce": "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
"ciphertext": "cm90YXRlZC1jaXBoZXJ0ZXh0",
"ciphertext_sha256": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
}
},
"invariant": "Key rotation changes encryption metadata and ciphertext but preserves record_id and plaintext_sha256.",
"excluded_from_plaintext_identity": [
"project_id",
"protection",
"plaintext_sha256",
"encryption",
"path",
"nonce",
"ciphertext"
]
}
@@ -0,0 +1,26 @@
{
"vector_version": "1.0",
"algorithm_id": "thinkloom-release-merkle-v1",
"ordering": "Sort entries by raw UTF-8 path bytes in ascending order.",
"leaf": "SHA-256(UTF8('thinkloom-release-leaf-v1\\0') || UTF8(path) || 0x00 || UTF8(decimal size) || 0x00 || raw 32-byte file SHA-256 digest)",
"node": "SHA-256(UTF8('thinkloom-release-node-v1\\0') || raw left digest || raw right digest); duplicate the final node when a level has odd cardinality.",
"empty": "SHA-256(UTF8('thinkloom-release-empty-v1\\0'))",
"entries": [
{
"path": "manuscript/final-manuscript.md",
"sha256": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
"size": 1024
},
{
"path": "evidence/creative-process-report.md",
"sha256": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
"size": 512
}
],
"root": "sha256:b773ac929d720839a617ec0f9d6e39ad5401fa7795e21f799302658de8db9cda",
"excluded_paths": [
"release-manifest.json",
"release-files.sha256"
],
"self_reference_rule": "The manifest and any flat digest file that contains the root MUST NOT be Merkle leaves."
}
@@ -0,0 +1,188 @@
{
"vector_version": "1.0",
"default_mode": "minimal",
"minimal": {
"policy": {
"schema_version": "1.0",
"policy_id": "policy_01J0000000000000000000000H",
"project_id": "project_01J00000000000000000000001",
"retention_mode": "minimal",
"encryption_mode": "none",
"default_export_profile": "sanitized",
"effective_at": "2026-07-17T18:42:10.123Z"
},
"invocation_request": {
"schema_version": "1.0",
"invocation_id": "invocation_01J00000000000000000000008",
"project_id": "project_01J00000000000000000000001",
"purpose": "draft_from_selected_ideas",
"initiated_by_event_id": "event_01J00000000000000000000003",
"retention_mode": "minimal",
"provider": {
"provider_id": "ollama",
"model_id": "llama3.2",
"processing_mode": "local"
},
"model_configuration_sha256": "sha256:8888888888888888888888888888888888888888888888888888888888888888",
"prompt_template": {
"schema_version": "1.0",
"template_id": "template_01J0000000000000000000000F",
"version": 1,
"path": "records/prompt-templates/drafting/template.json",
"template_sha256": "sha256:7777777777777777777777777777777777777777777777777777777777777777"
},
"messages": [],
"context_references": [
{
"schema_version": "1.0",
"record_id": "record_01J00000000000000000000005",
"record_type": "manuscript_revision",
"sha256": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
"path": "manuscript/revisions/revision.json",
"revision_id": "revision_01J0000000000000000000000A",
"range": {
"schema_version": "1.0",
"document_revision_id": "revision_01J0000000000000000000000A",
"coordinate_system": "utf8_byte",
"start": 0,
"end": 12,
"preimage_sha256": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"text_fragment_id": "fragment_01J0000000000000000000000C"
}
}
],
"manuscript_revision_id": "revision_01J0000000000000000000000A",
"idea_revision_ids": [
"revision_01J0000000000000000000000B"
],
"conversation_head": "turn_01J00000000000000000000007",
"submitted_at": "2026-07-17T18:42:10.123Z",
"redactions": []
},
"invocation_response": {
"schema_version": "1.0",
"record_id": "record_01J00000000000000000000005",
"invocation_id": "invocation_01J00000000000000000000008",
"retention_mode": "minimal",
"content_type": "draft_preview",
"retained_text": null,
"finish_reason": "stop",
"usage": {
"input_tokens": 120,
"output_tokens": 14
},
"provider_metadata": null,
"validation": {
"schema_valid": true,
"repair_attempted": false
},
"content_sha256": "sha256:9999999999999999999999999999999999999999999999999999999999999999",
"created_at": "2026-07-17T18:43:11.456Z"
},
"prohibited_durable_fields": [
"complete provider-facing prompt",
"complete supplied context",
"unaccepted raw response",
"provider transport metadata",
"audio bytes or references"
]
},
"full_private": {
"policy": {
"schema_version": "1.0",
"policy_id": "policy_01J0000000000000000000000H",
"project_id": "project_01J00000000000000000000001",
"retention_mode": "full_private",
"encryption_mode": "protected",
"default_export_profile": "sanitized",
"effective_at": "2026-07-17T18:42:10.123Z"
},
"invocation_request": {
"schema_version": "1.0",
"invocation_id": "invocation_01J00000000000000000000008",
"project_id": "project_01J00000000000000000000001",
"purpose": "draft_from_selected_ideas",
"initiated_by_event_id": "event_01J00000000000000000000003",
"retention_mode": "full_private",
"provider": {
"provider_id": "ollama",
"model_id": "llama3.2",
"processing_mode": "local"
},
"model_configuration_sha256": "sha256:8888888888888888888888888888888888888888888888888888888888888888",
"prompt_template": {
"schema_version": "1.0",
"template_id": "template_01J0000000000000000000000F",
"version": 1,
"path": "records/prompt-templates/drafting/template.json",
"template_sha256": "sha256:7777777777777777777777777777777777777777777777777777777777777777"
},
"messages": [
{
"role": "user",
"content": "Use the selected ideas to draft a passage."
}
],
"context_references": [
{
"schema_version": "1.0",
"record_id": "record_01J00000000000000000000005",
"record_type": "manuscript_revision",
"sha256": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
"path": "manuscript/revisions/revision.json",
"revision_id": "revision_01J0000000000000000000000A",
"range": {
"schema_version": "1.0",
"document_revision_id": "revision_01J0000000000000000000000A",
"coordinate_system": "utf8_byte",
"start": 0,
"end": 12,
"preimage_sha256": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"text_fragment_id": "fragment_01J0000000000000000000000C"
}
}
],
"manuscript_revision_id": "revision_01J0000000000000000000000A",
"idea_revision_ids": [
"revision_01J0000000000000000000000B"
],
"conversation_head": "turn_01J00000000000000000000007",
"submitted_at": "2026-07-17T18:42:10.123Z",
"redactions": [
{
"category": "personal_identifier",
"replacement": "[redacted]"
}
]
},
"invocation_response": {
"schema_version": "1.0",
"record_id": "record_01J00000000000000000000005",
"invocation_id": "invocation_01J00000000000000000000008",
"retention_mode": "full_private",
"content_type": "draft_preview",
"retained_text": "Attention is personal in experience and public in consequence.",
"finish_reason": "stop",
"usage": {
"input_tokens": 120,
"output_tokens": 14
},
"provider_metadata": {
"request_id": "local-0001",
"load_duration_milliseconds": 120
},
"validation": {
"schema_valid": true,
"repair_attempted": false
},
"content_sha256": "sha256:9999999999999999999999999999999999999999999999999999999999999999",
"created_at": "2026-07-17T18:43:11.456Z"
},
"requirements": [
"protected records",
"verified recovery envelope",
"authorized verification for plaintext evidence"
]
},
"policy_change_rule": "Changes are prospective. Reducing retention does not delete prior records; deletion requires emergency purge."
}
@@ -0,0 +1,41 @@
{
"vector_version": "1.0",
"source_chain_head_before": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
"source_chain_head_after": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
"source_record_count": 7,
"exported_record_count": 3,
"manifest": {
"schema_version": "1.0",
"export_id": "record_01J00000000000000000000005",
"project_id": "project_01J00000000000000000000001",
"source_chain_head": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
"profile": "sanitized",
"omission_rules": [
{
"category": "private_conversation",
"action": "exclude",
"count": 2
},
{
"category": "personal_identifier",
"action": "redact",
"count": 1
},
{
"category": "provider_detail",
"action": "summarize",
"count": 1
}
],
"rules_sha256": "sha256:352ccc3dde25000a1d6dd006a4c0376f73b7805736232b09458696928d3036f6",
"files": [
{
"path": "final-manuscript.md",
"sha256": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
"size": 1024
}
],
"created_at": "2026-07-17T18:43:11.456Z"
},
"non_mutation_rule": "Sanitization creates a disclosure-bearing export and never rewrites the project or source chain."
}
@@ -0,0 +1,129 @@
{
"vector_version": "1.0",
"prompt_template": {
"identity": {
"schema_version": "1.0",
"template_id": "template_01J0000000000000000000000F",
"version": 1,
"purpose": "draft_from_selected_ideas",
"canonical_template_body": "Use {{context}} to draft a passage.",
"variables": {
"context": {
"description": "Selected idea context",
"required": true
}
},
"creation_application_version": "0.3.0",
"retention_classification": "project_record",
"created_at": "2026-07-17T18:42:10.123Z"
},
"digest": "sha256:73055322741f5a248ae79ca2c38f699e40da7b5b5576f83a615a9816ddab8ba3",
"complete_record": {
"schema_version": "1.0",
"template_id": "template_01J0000000000000000000000F",
"version": 1,
"purpose": "draft_from_selected_ideas",
"canonical_template_body": "Use {{context}} to draft a passage.",
"variables": {
"context": {
"description": "Selected idea context",
"required": true
}
},
"creation_application_version": "0.3.0",
"retention_classification": "project_record",
"created_at": "2026-07-17T18:42:10.123Z",
"template_sha256": "sha256:73055322741f5a248ae79ca2c38f699e40da7b5b5576f83a615a9816ddab8ba3"
},
"excluded_fields": [
"template_sha256"
]
},
"provenance_event": {
"identity": {
"schema_version": "1.0",
"event_id": "event_01J00000000000000000000003",
"event_sequence": 1,
"client_action_id": "client-action-0001",
"project_id": "project_01J00000000000000000000001",
"timestamp": "2026-07-17T18:42:10.123Z",
"event_type": "PROJECT_CREATED",
"actor": {
"type": "user",
"actor_id": null
},
"provider": null,
"inputs": [],
"outputs": [
{
"schema_version": "1.0",
"record_id": "record_01J00000000000000000000005",
"record_type": "manuscript_revision",
"sha256": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
"path": "manuscript/revisions/revision.json",
"revision_id": "revision_01J0000000000000000000000A",
"range": {
"schema_version": "1.0",
"document_revision_id": "revision_01J0000000000000000000000A",
"coordinate_system": "utf8_byte",
"start": 0,
"end": 12,
"preimage_sha256": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
"text_fragment_id": "fragment_01J0000000000000000000000C"
}
}
],
"relationships": {
"parent_event_ids": [],
"invocation_id": null
},
"metadata": {
"summary": "Created project"
},
"previous_event_hash": null
},
"digest": "sha256:3a087877f4878483805f517ef0ebd108476e31ed68162504da4fad12d6d9eff4",
"excluded_fields": [
"event_hash"
]
},
"protected_record": {
"identity": {
"schema_version": "1.0",
"record_id": "record_01J00000000000000000000005",
"record_type": "invocation_request",
"payload": {
"purpose": "draft_from_selected_ideas"
}
},
"digest": "sha256:97154eddff15ab6607181e55945547fdbbc5bde02b1e5123eade7a69509f00c5",
"excluded_fields": [
"project_id",
"protection",
"plaintext_sha256",
"encryption",
"path",
"nonce",
"ciphertext"
]
},
"release_manifest": {
"merkle_identity": [
{
"path": "manuscript/final-manuscript.md",
"sha256": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
"size": 1024
},
{
"path": "evidence/creative-process-report.md",
"sha256": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
"size": 512
}
],
"digest": "sha256:b773ac929d720839a617ec0f9d6e39ad5401fa7795e21f799302658de8db9cda",
"excluded_paths": [
"release-manifest.json",
"release-files.sha256"
]
}
}
@@ -0,0 +1,35 @@
{
"vector_version": "1.0",
"timestamps": {
"accepted": [
"2026-07-17T18:42:10.123Z",
"2026-07-17T18:43:11.456Z",
"2000-01-01T00:00:00.000Z"
],
"rejected": [
"2026-07-17T18:42:10Z",
"2026-07-17T18:42:10.12Z",
"2026-07-17T18:42:10.1234Z",
"2026-07-17T11:42:10.123-07:00",
"not-a-timestamp"
]
},
"repository_paths": {
"accepted": [
"project.json",
"records/invocations/request.json",
"manuscript/Café.md"
],
"rejected": [
"",
"/absolute/path",
"C:/absolute/path",
"records\\request.json",
".",
"..",
"records/../outside.json",
"records/./alias.json"
]
},
"normalization_rule": "Paths use NFC, forward slashes, repository-relative spelling, and no dot segments."
}
@@ -0,0 +1,124 @@
{
"vector_version": "1.0",
"reports": [
{
"schema_version": "1.0",
"verification_id": "record_01J0000000000000000000000W",
"project_id": "project_01J00000000000000000000001",
"status": "VERIFIED",
"verified_through_event_id": "event_01J00000000000000000000003",
"verified_chain_head": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
"checked_segments": 1,
"checked_events": 1,
"checked_records": 4,
"findings": [],
"verifier_version": "1.0.0",
"completed_at": "2026-07-17T18:43:11.456Z"
},
{
"schema_version": "1.0",
"verification_id": "record_01J0000000000000000000000X",
"project_id": "project_01J00000000000000000000001",
"status": "VERIFIED_WITH_WARNINGS",
"verified_through_event_id": "event_01J00000000000000000000003",
"verified_chain_head": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
"checked_segments": 1,
"checked_events": 1,
"checked_records": 4,
"findings": [
{
"severity": "WARNING",
"code": "INDEX_STALE",
"message": "Contribution index is stale.",
"authoritative_evidence_affected": false,
"path": "provenance/indexes/contribution-graph.json",
"event_id": null
}
],
"verifier_version": "1.0.0",
"completed_at": "2026-07-17T18:43:11.456Z"
},
{
"schema_version": "1.0",
"verification_id": "record_01J0000000000000000000000Y",
"project_id": "project_01J00000000000000000000001",
"status": "INCOMPLETE",
"verified_through_event_id": "event_01J00000000000000000000003",
"verified_chain_head": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
"checked_segments": 1,
"checked_events": 1,
"checked_records": 4,
"findings": [
{
"severity": "INFO",
"code": "OPTIONAL_BINARY_MISSING",
"message": "An optional release binary is unavailable.",
"authoritative_evidence_affected": false,
"path": "provenance/indexes/contribution-graph.json",
"event_id": null
}
],
"verifier_version": "1.0.0",
"completed_at": "2026-07-17T18:43:11.456Z"
},
{
"schema_version": "1.0",
"verification_id": "record_01J0000000000000000000000Z",
"project_id": "project_01J00000000000000000000001",
"status": "FAILED",
"verified_through_event_id": "event_01J00000000000000000000003",
"verified_chain_head": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
"checked_segments": 1,
"checked_events": 1,
"checked_records": 4,
"findings": [
{
"severity": "ERROR",
"code": "EVENT_HASH_MISMATCH",
"message": "An event digest does not match canonical content.",
"authoritative_evidence_affected": true,
"path": "provenance/indexes/contribution-graph.json",
"event_id": null
}
],
"verifier_version": "1.0.0",
"completed_at": "2026-07-17T18:43:11.456Z"
},
{
"schema_version": "1.0",
"verification_id": "record_01J00000000000000000000000",
"project_id": "project_01J00000000000000000000001",
"status": "UNSAFE",
"verified_through_event_id": "event_01J00000000000000000000003",
"verified_chain_head": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
"checked_segments": 1,
"checked_events": 1,
"checked_records": 4,
"findings": [
{
"severity": "CRITICAL",
"code": "CHAIN_RECONSTITUTED",
"message": "The chain cannot establish ordinary continuity.",
"authoritative_evidence_affected": true,
"path": "provenance/indexes/contribution-graph.json",
"event_id": null
}
],
"verifier_version": "1.0.0",
"completed_at": "2026-07-17T18:43:11.456Z"
}
],
"required_statuses": [
"VERIFIED",
"VERIFIED_WITH_WARNINGS",
"INCOMPLETE",
"FAILED",
"UNSAFE"
],
"required_severities": [
"INFO",
"WARNING",
"ERROR",
"CRITICAL"
]
}