Skip to content

Commit 9f26168

Browse files
committed
anchor-self-certify-ref-v1: 4-join shape for anchoring_invariant flip, 1 PASS + 3 FAIL
1 parent d8ada35 commit 9f26168

1 file changed

Lines changed: 133 additions & 0 deletions

File tree

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
{
2+
"spec_version": "anchor-self-certify-ref-v1",
3+
"description": "Reference shape for self-certify + on-chain anchor conformance. Four joins required before anchoring_invariant can flip: signer identity, action_ref recomputation, trail record binding, registry transition. One positive vector; three negatives covering the most common ways an anchor can look valid while failing the governance claim.",
4+
"vectors": [
5+
{
6+
"id": "anchor-self-certify-all-joins-pass",
7+
"description": "Positive baseline: all four joins satisfied. Signer identity resolves to declared agent_id. action_ref recomputes from canonical response (governance block excluded). Trail record binds to same action_ref and exposes accepted anchor. block_time * 1000 < outcome_ts_ms. Registry row flips to anchored.",
8+
"expected": "PASS",
9+
"joins": {
10+
"signer_identity": {
11+
"governance_signing_key": "3d54caa2a1f4b8e7c2d9f0a3b6e1c4f7d2a5b8e3c6f1d4a7b0e3c6f9d2a5b8e1",
12+
"declared_agent_id": "moyan-governance-v1",
13+
"key_resolves_to_agent": true,
14+
"resolution_source": "sixu-ai.net.cn/.well-known/auth.md"
15+
},
16+
"action_ref": {
17+
"canonical_response_hash": "906a51a3be93e9ab5c4911080b2e1dc4ad07bbbc9711aa997f212ea95257008c",
18+
"governance_block_normalization": "excluded_once",
19+
"action_ref_recomputed": "a4f7b2e5c8d1f4a7b0e3c6f9d2a5b8e1c4f7d0a3b6e9c2f5d8a1b4e7c0f3d6b9",
20+
"action_ref_matches_submitted": true
21+
},
22+
"trail_record": {
23+
"trail_id": "e1b4a7c0-f3d6-b9e2-c5a8-f1d4b7e0c3a6",
24+
"action_ref_in_trail": "a4f7b2e5c8d1f4a7b0e3c6f9d2a5b8e1c4f7d0a3b6e9c2f5d8a1b4e7c0f3d6b9",
25+
"anchor_point": {
26+
"method": "on-chain",
27+
"chain": "arbitrum-one",
28+
"tx_hash": "b1e4a7c0f3d6b9e2c5a8f1d4b7e0c3a6f9d2b5e8a1c4f7d0b3e6c9f2a5d8b1e4",
29+
"block_time": 1782680000
30+
},
31+
"trail_binds_to_action_ref": true
32+
},
33+
"registry_transition": {
34+
"outcome_ts_ms": 1782680599000,
35+
"precedence_check": "block_time * 1000 < outcome_ts_ms",
36+
"precedence_check_value": "1782680000000 < 1782680599000",
37+
"precedence_margin_ms": 599000,
38+
"existence_verified": true,
39+
"precedence_verified": true,
40+
"allowed_to_flip": true
41+
}
42+
},
43+
"board_result": {
44+
"displayed_claim_level": "anchor_precedence_verified",
45+
"blocked_reason": null,
46+
"registry_row": "anchored"
47+
}
48+
},
49+
{
50+
"id": "wrong-signing-key-for-declared-identity",
51+
"description": "Signer identity join fails: the governance signing key used for self-certify does not resolve to the declared agent_id. The key is well-formed and the signature is valid — but the key belongs to a different identity. Self-certify creates a candidate record only; the board cannot advance to anchoring_invariant.",
52+
"expected": "FAIL",
53+
"failure_mode": "self_certify_signature_invalid",
54+
"failure_detail": "governance_signing_key resolves to 'other-agent-v1', not 'moyan-governance-v1'. A valid signature from the wrong key is not admission. Identity join fails; remaining joins not evaluated.",
55+
"joins": {
56+
"signer_identity": {
57+
"governance_signing_key": "9f2c5a8b1d4e7f0c3a6b9e2c5f8d1b4e7a0c3f6d9b2e5a8c1f4d7b0e3a6f9c2d5",
58+
"declared_agent_id": "moyan-governance-v1",
59+
"key_resolves_to_agent": false,
60+
"key_resolves_to": "other-agent-v1",
61+
"resolution_source": "sixu-ai.net.cn/.well-known/auth.md"
62+
}
63+
},
64+
"board_result": {
65+
"displayed_claim_level": null,
66+
"blocked_reason": "self_certify_signature_invalid: signing key does not resolve to declared agent_id",
67+
"registry_row": "rejected"
68+
}
69+
},
70+
{
71+
"id": "action-ref-derived-from-wrong-canonical",
72+
"description": "Action_ref join fails: the submitted action_ref was derived from a different canonical response — governance block excluded from a different envelope version. Identity join passes; action_ref recomputation produces a different hash than submitted. Trail cannot be bound.",
73+
"expected": "FAIL",
74+
"failure_mode": "action_ref_mismatch",
75+
"failure_detail": "Submitted action_ref a4f7b2e5... does not recompute from the canonical response with governance block excluded exactly once. Referee derives b7e0c3a6... instead. action_ref join fails; trail_record and registry_transition joins not evaluated.",
76+
"joins": {
77+
"signer_identity": {
78+
"key_resolves_to_agent": true
79+
},
80+
"action_ref": {
81+
"canonical_response_hash": "906a51a3be93e9ab5c4911080b2e1dc4ad07bbbc9711aa997f212ea95257008c",
82+
"governance_block_normalization": "excluded_once",
83+
"action_ref_recomputed": "b7e0c3a6f9d2b5e8a1c4f7d0b3e6c9f2a5d8b1e4a7c0f3d6b9e2c5a8f1d4b7e0",
84+
"action_ref_submitted": "a4f7b2e5c8d1f4a7b0e3c6f9d2a5b8e1c4f7d0a3b6e9c2f5d8a1b4e7c0f3d6b9",
85+
"action_ref_matches_submitted": false
86+
}
87+
},
88+
"board_result": {
89+
"displayed_claim_level": null,
90+
"blocked_reason": "action_ref_mismatch: recomputed hash does not match submitted action_ref",
91+
"registry_row": "rejected"
92+
}
93+
},
94+
{
95+
"id": "valid-trail-block-time-too-late",
96+
"description": "Trail record and signer identity joins pass; precedence fails. tx_hash is real and recomputable. block_time is confirmed. But block_time * 1000 > outcome_ts_ms — the anchor arrived after the outcome. Anchor proves existence; precedence is not established. Registry row stays at anchor_existence_only, not anchor_precedence_verified.",
97+
"expected": "FAIL",
98+
"failure_mode": "anchor_precedence_failed",
99+
"failure_detail": "block_time * 1000 > outcome_ts_ms by 220000ms. The commitment was recorded on-chain after the governed outcome. Existence is independently verifiable from the tx_hash; precedence is not. These are separate invariants — the board must not conflate them.",
100+
"joins": {
101+
"signer_identity": {
102+
"key_resolves_to_agent": true
103+
},
104+
"action_ref": {
105+
"action_ref_matches_submitted": true
106+
},
107+
"trail_record": {
108+
"trail_binds_to_action_ref": true,
109+
"anchor_point": {
110+
"method": "on-chain",
111+
"chain": "arbitrum-one",
112+
"tx_hash": "c3a6f9d2b5e8a1c4f7d0b3e6c9f2a5d8b1e4a7c0f3d6b9e2c5a8f1d4b7e0c3a6",
113+
"block_time": 1782678200
114+
}
115+
},
116+
"registry_transition": {
117+
"outcome_ts_ms": 1782677980000,
118+
"precedence_check": "block_time * 1000 < outcome_ts_ms",
119+
"precedence_check_value": "1782678200000 < 1782677980000",
120+
"precedence_margin_ms": -220000,
121+
"existence_verified": true,
122+
"precedence_verified": false,
123+
"allowed_to_flip": false
124+
}
125+
},
126+
"board_result": {
127+
"displayed_claim_level": "anchor_existence_only",
128+
"blocked_reason": "anchor_precedence_failed: block_time * 1000 > outcome_ts_ms by 220000ms",
129+
"registry_row": "anchor_existence_only"
130+
}
131+
}
132+
]
133+
}

0 commit comments

Comments
 (0)