Verified the three published hashes reproduce byte for byte before promoting anything, then moved the schema, canonicalizer and vectors into governed assets. history/20260909-initial-exploration/ is untouched and stays the provenance record. - schemas/, informed_decision/, tests/vectors/ populated; the reference canonicalizer's ad-hoc __main__ block replaced by a real `python -m informed_decision` entry point. - tests/test_canonicalize.py — 20 tests, all green. Published vectors, all four isolation properties, canonical-form round-trip, key sorting, and a provenance test asserting the governed fixtures have not drifted from history/. - docs/specs/EvidenceModel.md — the two hashes, the split and why it exists, the four isolation properties, the presentation record, the bundle, and the relationship to audit-core. - pyproject.toml, Makefile. One test of mine was wrong on first run: it scanned for ", " to assert no insignificant whitespace, which fires on prose inside a brief. Replaced with a canonical round-trip comparison, which is the property actually meant. The canonicalizer was correct. EvidenceModel leads with what the model does NOT claim — no proof of comprehension, no proof of reading (deliberately, since the alternative is surveillance), no survival of a compromised surface, and audit-core's inherited bound that a hash chain cannot prove a record was never sent. T06 stays progress: the SCOPE.md rewrite is gated on the T02 ruling. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V3W1dQG7GFFM9d94jFx7iR Assistant: claude-code Assistant-Model: opus Assistant-Process: 1565372@bnt-lap001 Assistant-Session: 16bb2f25-b34c-49ef-8e94-5fec3567a568
150 lines
5.1 KiB
JSON
150 lines
5.1 KiB
JSON
{
|
|
"id": "01K4Q8Z3R7V2N6K9M1P5T8W4XC",
|
|
"version": 2,
|
|
"schema_version": "0.2.0",
|
|
"status": "awaiting_actor",
|
|
"depth": 2,
|
|
"title": "Accept ADR-0042: event-sourced billing ledger",
|
|
"question": "Do you formally accept ADR-0042 as the billing architecture for prod?",
|
|
"requested_act": "accept",
|
|
"binding_level": "aes",
|
|
"locale": "en",
|
|
"created_at": "2026-09-08T14:02:11Z",
|
|
"updated_at": "2026-09-09T07:18:44Z",
|
|
"submitted_at": "2026-09-08T15:10:00Z",
|
|
"due_at": "2026-09-12T16:00:00Z",
|
|
"requester": {
|
|
"id": "01K4Q8A1B2C3D4E5F6G7H8J9K0",
|
|
"kind": "person",
|
|
"display_name": "Lea Hoffmann",
|
|
"role": "staff engineer",
|
|
"identifiers": [
|
|
{ "scheme": "email", "value": "lea.hoffmann@example.com" },
|
|
{ "scheme": "idp:oidc-sub", "value": "auth.example.com|a8f21c" }
|
|
]
|
|
},
|
|
"parties": [
|
|
{
|
|
"id": "01K4Q8MANDATE000000000001",
|
|
"kind": "person",
|
|
"display_name": "Bernd Worsch",
|
|
"role": "principal engineer / ADR acceptor",
|
|
"mandate": {
|
|
"id": "01K4Q8MANDATE00000000000A",
|
|
"scope": "Accept architecture decision records for billing and payments",
|
|
"policy_ref": "https://policy.example.com/adr-acceptance"
|
|
}
|
|
}
|
|
],
|
|
"brief": "Replace nightly batch invoicing with an append-only event ledger. Replay is the source of truth for invoices. Dual-run for 60 days. Rollback: freeze the ledger and revert the read model to the last nightly snapshot.",
|
|
"consequences": "On-call owns replay tooling. Finance reporting moves from SQL warehouse tables to a projection job. No in-place updates of posted invoices.",
|
|
"packet": [
|
|
{
|
|
"id": "01K4Q8DOC0000000000000001",
|
|
"role": "primary",
|
|
"filename": "ADR-0042.md",
|
|
"media_type": "text/markdown",
|
|
"language": "en",
|
|
"bytes": 12880,
|
|
"hash": { "alg": "sha256", "hex": "6b1c0f8a9d2e4c7b8a1f0e3d5c6b7a8f9e0d1c2b3a4f5e6d7c8b9a0f1e2d3c4b" },
|
|
"storage_uri": "s3://decisions/adr/0042.md",
|
|
"version": 2,
|
|
"is_to_be_signed": true,
|
|
"label": "ADR-0042"
|
|
}
|
|
],
|
|
"highlights": [
|
|
{
|
|
"id": "01K4Q8HL00000000000000001",
|
|
"item_id": "01K4Q8DOC0000000000000001",
|
|
"severity": "critical",
|
|
"locator": {
|
|
"kind": "markdown_heading",
|
|
"heading": "Consequences / rollback"
|
|
},
|
|
"title": "Rollback is operationally expensive",
|
|
"note": "Accepting this ADR commits on-call to ledger freeze drills before go-live.",
|
|
"required_ack": true,
|
|
"author_id": "01K4Q8A1B2C3D4E5F6G7H8J9K0",
|
|
"created_at": "2026-09-08T14:20:00Z",
|
|
"source": "requester"
|
|
}
|
|
],
|
|
"route": {
|
|
"mode": "sequential",
|
|
"steps": [
|
|
{
|
|
"id": "01K4Q8STEP000000000000001",
|
|
"ordinal": 1,
|
|
"kind": "review",
|
|
"assignee": {
|
|
"id": "01K4Q8MANDATE000000000002",
|
|
"kind": "role",
|
|
"display_name": "Billing domain reviewer"
|
|
},
|
|
"required_verbs": ["acknowledge"],
|
|
"status": "completed",
|
|
"completed_at": "2026-09-08T17:40:00Z"
|
|
},
|
|
{
|
|
"id": "01K4Q8STEP000000000000002",
|
|
"ordinal": 2,
|
|
"kind": "schlusszeichnung",
|
|
"assignee": {
|
|
"id": "01K4Q8MANDATE000000000001",
|
|
"kind": "person",
|
|
"display_name": "Bernd Worsch"
|
|
},
|
|
"required_verbs": ["accept", "return", "escalate"],
|
|
"min_binding_level": "aes",
|
|
"status": "active",
|
|
"due_at": "2026-09-12T16:00:00Z"
|
|
}
|
|
],
|
|
"current_step_ids": ["01K4Q8STEP000000000000002"]
|
|
},
|
|
"thread": [
|
|
{
|
|
"id": "01K4Q8MSG0000000000000001",
|
|
"author_id": "01K4Q8MANDATE000000000002",
|
|
"body": "Rollback drill date is missing. Acceptable if added before go-live.",
|
|
"created_at": "2026-09-08T17:39:12Z"
|
|
}
|
|
],
|
|
"presentations": [
|
|
{
|
|
"id": "01K4Q8PRES000000000000001",
|
|
"actor_id": "01K4Q8MANDATE000000000001",
|
|
"memo_version": 2,
|
|
"opened_at": "2026-09-09T07:10:00Z",
|
|
"ui_release": "informed-decision@0.3.1",
|
|
"locale": "en",
|
|
"viewport": "brief",
|
|
"packet_hashes": [
|
|
{
|
|
"item_id": "01K4Q8DOC0000000000000001",
|
|
"hash": { "alg": "sha256", "hex": "6b1c0f8a9d2e4c7b8a1f0e3d5c6b7a8f9e0d1c2b3a4f5e6d7c8b9a0f1e2d3c4b" }
|
|
}
|
|
],
|
|
"highlight_ids": ["01K4Q8HL00000000000000001"],
|
|
"highlight_set_hash": { "alg": "sha256", "hex": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" },
|
|
"brief_hash": { "alg": "sha256", "hex": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" },
|
|
"view_hash": { "alg": "sha256", "hex": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" },
|
|
"acked_highlight_ids": ["01K4Q8HL00000000000000001"],
|
|
"auth_context": {
|
|
"method": "passkey",
|
|
"assurance": "substantial",
|
|
"idp": "https://auth.example.com"
|
|
}
|
|
}
|
|
],
|
|
"dispositions": [],
|
|
"relations": [
|
|
{ "kind": "supersedes", "to": "01K4Q8OLDADR0000000000001", "note": "Supersedes ADR-0011 batch invoicing" }
|
|
],
|
|
"legal": {
|
|
"form_requirement": "none",
|
|
"retention_years": 10,
|
|
"classification": "internal"
|
|
}
|
|
}
|