Split public proof requests from Bifrost receipts
This commit is contained in:
parent
5573755a97
commit
16b4a2fc8b
6 changed files with 44 additions and 91 deletions
|
|
@ -11,7 +11,6 @@ use epiphany_core::epiphany_cultmesh_bifrost_body_change_publication_receipt_for
|
|||
use epiphany_core::epiphany_cultmesh_bifrost_collaboration_feedback;
|
||||
use epiphany_core::epiphany_cultmesh_bifrost_github_publication_receipt_for_publication;
|
||||
use epiphany_core::epiphany_cultmesh_bifrost_metrics_receipt_for_map_entry;
|
||||
use epiphany_core::epiphany_cultmesh_bifrost_public_proof_publication_receipt_for_proof;
|
||||
use epiphany_core::epiphany_cultmesh_daemon_poke_intent_from_status;
|
||||
use epiphany_core::epiphany_cultmesh_daemon_poke_receipt_for_intent;
|
||||
use epiphany_core::epiphany_cultmesh_daemon_tool_invocation_intent_from_capability;
|
||||
|
|
@ -66,7 +65,6 @@ use epiphany_core::write_epiphany_cultmesh_bifrost_body_change_publication_recei
|
|||
use epiphany_core::write_epiphany_cultmesh_bifrost_collaboration_feedback;
|
||||
use epiphany_core::write_epiphany_cultmesh_bifrost_github_publication_receipt;
|
||||
use epiphany_core::write_epiphany_cultmesh_bifrost_metrics_receipt;
|
||||
use epiphany_core::write_epiphany_cultmesh_bifrost_public_proof_publication_receipt;
|
||||
use epiphany_core::write_epiphany_cultmesh_daemon_poke_intent;
|
||||
use epiphany_core::write_epiphany_cultmesh_daemon_poke_receipt;
|
||||
use epiphany_core::write_epiphany_cultmesh_daemon_restart_policy;
|
||||
|
|
@ -111,7 +109,6 @@ use epiphany_core::EpiphanyLocalVerseContext;
|
|||
use epiphany_core::EpiphanyServiceExecutionAuditCheck;
|
||||
use epiphany_core::EPIPHANY_CULTMESH_DAEMON_RESTART_POLICY_SCHEMA_VERSION;
|
||||
use epiphany_core::EPIPHANY_CULTMESH_DAEMON_SERVICE_LIFECYCLE_RECEIPT_SCHEMA_VERSION;
|
||||
use epiphany_core::EPIPHANY_CULTMESH_GLOBAL_VERSE_ID;
|
||||
use epiphany_core::EPIPHANY_CULTMESH_INTERNAL_VERSE_ID;
|
||||
use epiphany_core::EPIPHANY_CULTMESH_WORK_LOOP_TELEMETRY_SCHEMA_VERSION;
|
||||
use serde::Serialize;
|
||||
|
|
@ -977,6 +974,18 @@ fn run_cli() -> Result<()> {
|
|||
);
|
||||
}
|
||||
"bifrost-public-proof" | "publish-public-proof" | "public-proof-publication" => {
|
||||
if args.ledger_entry_id.is_some()
|
||||
|| args.review_receipts.is_some()
|
||||
|| args.credit_receipt_ids.is_some()
|
||||
|| args.public_room_id.is_some()
|
||||
|| args.publication_url.is_some()
|
||||
|| args.receipt_id.is_some()
|
||||
|| args.receipt_status.is_some()
|
||||
{
|
||||
anyhow::bail!(
|
||||
"bifrost-public-proof selects a pending public proof only; Bifrost owns ledger, review, credit, destination, publication, and receipt result fields"
|
||||
);
|
||||
}
|
||||
seed_epiphany_local_verse_context(
|
||||
&args.store,
|
||||
args.runtime_id.clone(),
|
||||
|
|
@ -996,91 +1005,33 @@ fn run_cli() -> Result<()> {
|
|||
latest_public_proof
|
||||
.context("bifrost-public-proof requires a repo work public proof in local Verse or --public-proof-id")?
|
||||
};
|
||||
let ledger_entry_id = args
|
||||
.ledger_entry_id
|
||||
.clone()
|
||||
.context("bifrost-public-proof requires --ledger-entry-id")?;
|
||||
let review_receipts = required_list(
|
||||
&args.review_receipts,
|
||||
"bifrost-public-proof requires --review-receipt",
|
||||
)?;
|
||||
let credit_receipts = required_list(
|
||||
&args.credit_receipt_ids,
|
||||
"bifrost-public-proof requires --credit-receipt",
|
||||
)?;
|
||||
let public_room_id = args
|
||||
.public_room_id
|
||||
.clone()
|
||||
.unwrap_or_else(|| "epiphany-global/repo-work/public-proofs".to_string());
|
||||
let publication_url = args.publication_url.clone().unwrap_or_else(|| {
|
||||
format!(
|
||||
"cultmesh://{public_room_id}/{}",
|
||||
selected_public_proof.public_proof_id
|
||||
)
|
||||
});
|
||||
let receipt_id = args.receipt_id.clone().unwrap_or_else(|| {
|
||||
format!(
|
||||
"bifrost-public-proof-publication-{}",
|
||||
selected_public_proof.public_proof_id
|
||||
)
|
||||
});
|
||||
let receipt_status = args
|
||||
.receipt_status
|
||||
.clone()
|
||||
.unwrap_or_else(|| "published-to-public-verse".to_string());
|
||||
let receipt = epiphany_cultmesh_bifrost_public_proof_publication_receipt_for_proof(
|
||||
receipt_id,
|
||||
&selected_public_proof,
|
||||
receipt_status,
|
||||
EPIPHANY_CULTMESH_GLOBAL_VERSE_ID,
|
||||
public_room_id,
|
||||
ledger_entry_id,
|
||||
credit_receipts,
|
||||
review_receipts,
|
||||
publication_url,
|
||||
);
|
||||
let written = write_epiphany_cultmesh_bifrost_public_proof_publication_receipt(
|
||||
&args.store,
|
||||
args.runtime_id.clone(),
|
||||
receipt,
|
||||
)?;
|
||||
let latest = load_latest_epiphany_cultmesh_bifrost_public_proof_publication_receipt(
|
||||
&args.store,
|
||||
args.runtime_id.clone(),
|
||||
)?;
|
||||
if latest.as_ref().map(|receipt| receipt.receipt_id.as_str())
|
||||
!= Some(written.receipt_id.as_str())
|
||||
{
|
||||
anyhow::bail!(
|
||||
"local Verse query lost Bifrost public proof publication receipt after write"
|
||||
);
|
||||
}
|
||||
println!(
|
||||
"{}",
|
||||
serde_json::to_string_pretty(&json!({
|
||||
"schemaVersion": "epiphany.local_verse_bifrost_public_proof_publication.v0",
|
||||
"status": "ok",
|
||||
"status": "pending-bifrost",
|
||||
"store": args.store,
|
||||
"runtimeId": args.runtime_id,
|
||||
"receiptId": written.receipt_id,
|
||||
"publicProofId": written.public_proof_id,
|
||||
"publicProofRef": written.public_proof_ref,
|
||||
"publicProofSha256": written.public_proof_sha256,
|
||||
"item": written.item,
|
||||
"sourceWorkspace": written.source_workspace,
|
||||
"sourceBranch": written.source_branch,
|
||||
"targetPublicVerseId": written.target_public_verse_id,
|
||||
"publicRoomId": written.public_room_id,
|
||||
"publicationUrl": written.publication_url,
|
||||
"ledgerEntryId": written.bifrost_ledger_entry_id,
|
||||
"creditReceiptIds": written.credit_receipt_ids,
|
||||
"reviewReceiptIds": written.reviewer_ids,
|
||||
"receiptId": null,
|
||||
"publicProofId": selected_public_proof.public_proof_id,
|
||||
"publicProofRef": selected_public_proof.public_proof_ref,
|
||||
"publicProofSha256": selected_public_proof.public_proof_sha256,
|
||||
"item": selected_public_proof.item,
|
||||
"sourceWorkspace": selected_public_proof.workspace,
|
||||
"sourceBranch": selected_public_proof.branch,
|
||||
"targetPublicVerseId": null,
|
||||
"publicRoomId": null,
|
||||
"publicationUrl": null,
|
||||
"ledgerEntryId": null,
|
||||
"creditReceiptIds": [],
|
||||
"reviewReceiptIds": [],
|
||||
"responseOwner": "Bifrost",
|
||||
"commands": {
|
||||
"swarmOverview": WRAPPER_OVERVIEW_COMMAND,
|
||||
"bifrostLedger": WRAPPER_BIFROST_LEDGER_COMMAND,
|
||||
"bifrostPublicProof": "epiphany-verse-query bifrost-public-proof --public-proof-id <id> --ledger-entry-id <id> --review-receipt <id> --credit-receipt <id>"
|
||||
},
|
||||
"privateStateExposed": written.private_state_exposed,
|
||||
"privateStateExposed": false,
|
||||
}))?
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,6 +54,14 @@
|
|||
- Forbidden writers: Persona cannot pass or synthesize Imagination response fields.
|
||||
- Negative proof: the full consumer-request/provider-accept/Persona-feedback chain persists no consensus receipt until Imagination answers.
|
||||
|
||||
## Public-proof submission boundary (2026-07-12)
|
||||
|
||||
- Request source: an existing redacted `repo_work_public_proof` document is the complete pending publication cargo.
|
||||
- Consumer command: `bifrost-public-proof` selects that proof and reports `pending-bifrost`; it writes no new receipt.
|
||||
- Bifrost owner: ledger attribution, review and credit receipt binding, public destination, publication URL, publication status, and final receipt.
|
||||
- Forbidden writers: the caller-facing command rejects all Bifrost result fields and leaves publication coordinates null.
|
||||
- Negative check: absence of a pending proof fails without writing a publication receipt; response-shaped fields are rejected before mutation.
|
||||
|
||||
This is the source-grounded map of the live machine. Historical route and
|
||||
bridge anatomy belongs in git history and evidence ledgers, not here.
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@ Single poke, batch poke, and swarm triage now write only `epiphany.cultmesh.daem
|
|||
|
||||
`collaboration-feedback` now writes only bounded Persona feedback after verifying the cited Eve provider receipt exists. It returns `pending-imagination`, leaves consensus receipt/packet/adoption gate null, and rejects caller-supplied consensus receipt id/status, participant ids, or packet reference. The new narrow `epiphany-eve-provider accept` executable owns Eve connection acceptance: it loads the pending intent, verifies the provider cluster owns the target, and writes the connection receipt. Physical proof ran consumer request -> provider acceptance -> Persona feedback and showed no persisted Imagination consensus receipt; counterfeit consensus status was rejected.
|
||||
|
||||
## 2026-07-12 public-proof submission / Bifrost publication split
|
||||
|
||||
`bifrost-public-proof` and its wrapper now select an already persisted redacted repo-work public proof and report `pending-bifrost`. They do not construct or write `gamecult.bifrost.public_proof_publication_receipt`. Caller-supplied ledger attribution, reviewers, credit receipts, public room/destination, publication URL, receipt id, and receipt status are rejected as Bifrost-owned result fields. Output publication and receipt coordinates remain null. The current canonical `state/local-verse.ccmp` contains no repo-work public proof fixture, so the physical negative proof covered refusal before any receipt mutation plus rejection of counterfeit result fields; full behavior remains covered by typed public-proof storage tests and compilation. Next split artifact acceptance and metrics the same way or move their receipt writers into a narrow Bifrost provider executable.
|
||||
|
||||
This is the re-entry rite for `E:\Projects\EpiphanyAgent`: the waking chant for
|
||||
the local machine-spirit before it touches the forge.
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -70,7 +70,7 @@ data_flow:
|
|||
- move historical proof to git, commits, smoke artifacts, or distilled evidence rather than plan prose
|
||||
|
||||
active_subgoals:
|
||||
- Use `notes/conceptual-substitution-audit-2026-07-12.md` as the current authority-corrosion audit. Diagnostics no longer manufacture missing truth. Bifrost publication, daemon tools, Eve connection, daemon poke, and Persona collaboration feedback are requester-only. The generic daemon-status writer is deleted; cluster-daemon owns heartbeat creation. `epiphany-eve-provider` is the narrow provider-side connection receipt writer. Persona feedback requires that real provider receipt, reports `pending-imagination`, and cannot author consensus participants, packet, status, receipt, or adoption gate. Next cut public-proof publication, artifact acceptance, metrics, and audit remaining response writers.
|
||||
- Use `notes/conceptual-substitution-audit-2026-07-12.md` as the current authority-corrosion audit. Diagnostics no longer manufacture missing truth. Bifrost body-change/public-proof submission, daemon tools, Eve connection, daemon poke, and Persona collaboration feedback are requester-only. The public-proof command selects an existing redacted proof, reports `pending-bifrost`, rejects ledger/review/credit/destination/publication/receipt results, and cannot write the publication receipt. Generic daemon-status is deleted; cluster-daemon owns heartbeat creation. `epiphany-eve-provider` owns connection acceptance. Next cut artifact acceptance, metrics, and audit remaining response writers.
|
||||
- `swarm-overview` is an Epiphany-local, renderer-neutral diagnostic projection over provider-owned typed state. It owns no lifecycle, discovery, composition, or mutation authority. Epiphany publishes clean provider-owned Eve surfaces; Odin may discover them; downstream lowerers and compositors remain outside Epiphany's concern.
|
||||
- Idunn owns daemon survival and service lifecycle physiology. Codex/operator sessions may inspect, generate runbooks, and route explicit operator authority, but keeping daemons alive belongs to Idunn-owned service lifecycle receipts, scheduler policy, audits, and aftercare. Do not let Self, diagnostic projections, or ad hoc wrapper summaries become a second daemon-keeper. Global tool readbacks for Self `service-health`, `service-policy-directory`, and `swarm-online-runbook` state `lifecycleOwner=Idunn` and `hostedBody=Epiphany` without service mutation or private-state exposure.
|
||||
- Use `notes/epiphany-cultmesh-dreaming-roadmap.md` as the design authority for distributed Epiphany dreaming. Public dreams are separately authored typed documents distributed through CultMesh/CultNet; private state remains local and cannot be shared by flipping a visibility flag. Foreign dreams are external thought weather until a reviewed local adoption receipt digests them into memory, planning, doctrine, or governance.
|
||||
|
|
|
|||
|
|
@ -1011,24 +1011,14 @@ if ($Mode -eq "bifrost-public-proof") {
|
|||
}
|
||||
$publicProofId = $latestProof
|
||||
}
|
||||
$publicationUrl = $BifrostPublicProofPublicationUrl
|
||||
if ($publicationUrl -eq "") {
|
||||
$publicationUrl = "cultmesh://$BifrostPublicProofRoomId/$publicProofId"
|
||||
}
|
||||
Invoke-Checked `
|
||||
-Label "publish redacted repo proof through Bifrost" `
|
||||
-Label "submit redacted repo proof to Bifrost" `
|
||||
-FilePath $verseQueryExe `
|
||||
-Arguments @(
|
||||
"bifrost-public-proof",
|
||||
"--store", $repoLocalVerseStore,
|
||||
"--runtime-id", $RepoWorkRuntimeId,
|
||||
"--public-proof-id", $publicProofId,
|
||||
"--receipt-id", $BifrostPublicProofPublicationReceiptId,
|
||||
"--ledger-entry-id", $BifrostLedgerEntryId,
|
||||
"--review-receipt", $BifrostPublicProofReviewReceipt,
|
||||
"--credit-receipt", $BifrostPublicProofCreditReceipt,
|
||||
"--public-room-id", $BifrostPublicProofRoomId,
|
||||
"--publication-url", $publicationUrl
|
||||
"--public-proof-id", $publicProofId
|
||||
) `
|
||||
-WorkingDirectory $Root `
|
||||
-StdoutPath $resultPath `
|
||||
|
|
@ -2823,7 +2813,7 @@ if ($resultPath -ne "" -and (Test-Path -LiteralPath $resultPath)) {
|
|||
if ($null -ne $result.reviewReceiptIds -and $result.reviewReceiptIds.Count -gt 0) {
|
||||
$reviewReceipts = ($result.reviewReceiptIds -join ",")
|
||||
}
|
||||
Write-Host "Bifrost public proof: status=$($result.status), item=$($result.item), proof=$($result.publicProofId), receipt=$($result.receiptId), publicVerse=$($result.targetPublicVerseId), room=$($result.publicRoomId), sha256=$($result.publicProofSha256), ledger=$($result.ledgerEntryId), credit=$creditReceipts, review=$reviewReceipts, public=$($result.publicationUrl), privateStateExposed=$($result.privateStateExposed)"
|
||||
Write-Host "Bifrost public proof request: status=$($result.status), item=$($result.item), proof=$($result.publicProofId), sha256=$($result.publicProofSha256), responseOwner=$($result.responseOwner), privateStateExposed=$($result.privateStateExposed)"
|
||||
} elseif ($Mode -eq "bifrost-artifact-acceptance") {
|
||||
$changedPaths = "none"
|
||||
if ($null -ne $result.changedPaths -and $result.changedPaths.Count -gt 0) {
|
||||
|
|
|
|||
Reference in a new issue