diff --git a/contracts/cultnet/governance/fork-card-vectors.json b/contracts/cultnet/governance/fork-card-vectors.json index 259f468c..7701ff02 100644 --- a/contracts/cultnet/governance/fork-card-vectors.json +++ b/contracts/cultnet/governance/fork-card-vectors.json @@ -431,7 +431,7 @@ }, { "name": "illegal_i_retraction_with_an_answer_retracted_true", - "status": "pending_eureka_merge_huginn_30_cut-desk-digest-retracted.r2", + "status": "reproduced_on_huginn_main_f0ca504_reported_by_eureka_not_rerun_here", "why": "(i) answer present, retracted true, target Q1.n1", "input": { "fork": "eureka-state:question:Q1", @@ -448,7 +448,7 @@ }, { "name": "illegal_iii_plain_answer_with_a_target_retracted_false", - "status": "pending_eureka_merge_huginn_30_cut-desk-digest-retracted.r2", + "status": "reproduced_on_huginn_main_f0ca504_reported_by_eureka_not_rerun_here", "why": "(iii) the same bytes as (i) with retracted false: another body, so request_id_conflict", "input": { "fork": "eureka-state:question:Q1", @@ -465,8 +465,8 @@ }, { "name": "illegal_i_retraction_with_an_answer_and_no_target_retracted_true", - "status": "pending_eureka_merge_huginn_30_cut-desk-digest-retracted.r2", - "why": "(i) with the target null (the order doc: retracts set or null); Eureka re-derived it with sha256sum (order doc addendum); the fix branch's pinned test does not yet carry it", + "status": "reproduced_on_huginn_main_f0ca504_reported_by_eureka_not_rerun_here", + "why": "(i) with the target null (the order doc: retracts set or null); Eureka re-derived it with sha256sum (order doc addendum)", "input": { "fork": "eureka-state:question:Q1", "options_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", @@ -482,7 +482,7 @@ }, { "name": "illegal_ii_no_answer_no_target_retracted_true", - "status": "pending_eureka_merge_huginn_30_cut-desk-digest-retracted.r2", + "status": "reproduced_on_huginn_main_f0ca504_reported_by_eureka_not_rerun_here", "why": "(ii) no answer, no target, retracted true", "input": { "fork": "eureka-state:question:Q1", diff --git a/contracts/cultnet/governance/fork-card.md b/contracts/cultnet/governance/fork-card.md index fd2c3d55..1f2eba67 100644 --- a/contracts/cultnet/governance/fork-card.md +++ b/contracts/cultnet/governance/fork-card.md @@ -67,7 +67,7 @@ The stamped `authority` field of a stored answer is an **attribution**: the role **The mind's record and this document.** Huginn keeps the answer as its own record kind (`epiphany.pipeline.desk_answer.v2`, key `:desk_answer:.n`, the outcome as one externally tagged value, the fork as `fork`). The second door projects it to this document and nothing else crosses: `answer_id` is the key's `n` part, `fork_id` is the stored `fork`, the tagged outcome flattens into `outcome`, `of`, `retracts` and `code`, and the six refusal codes are spelt as in the schema (snake_case; the record's enum spells them in the mind's own PascalCase). On the wire an answer is named by its `n` alone, always inside the fork whose `fork_id` the document carries; a runtime that holds the full record key converts at the door, in one place. `body_sha256` and any other digest Huginn keeps to decide "same body" stay in the record: Huginn alone decides a replay or a `request_id_conflict` and Bifrost never compares bodies, so no digest is a field of this document. A digest is a valid way to decide it only if it covers `fork_id`, `options_hash`, `answer.choice`, `answer.note`, `retracted`, `retracts` and `answered_at` (every field of the request but `request_id`), is computed by Huginn and never read from a client. -**Huginn's digest, pinned in the vectors (`bodyDigests`; informative, not a wire document).** SHA-256 of one compact JSON object as `serde_json::to_string` writes it (UTF-8, no spaces), lowercase hex, keys in this order, `null` for a missing value, strings verbatim: `fork`, `options_hash`, `answered_at`, `choice`, `note`, `retracts` (the **full stored key** `:desk_answer: