diff --git a/epiphany-core/src/bin/epiphany-verse-query.rs b/epiphany-core/src/bin/epiphany-verse-query.rs index 1919ee0f..fbc5cf8c 100644 --- a/epiphany-core/src/bin/epiphany-verse-query.rs +++ b/epiphany-core/src/bin/epiphany-verse-query.rs @@ -2592,7 +2592,7 @@ fn run_cli() -> Result<()> { write_epiphany_cultmesh_agent_state_soa_summary(&args.store, agent_state_summary)?; let context = query_epiphany_local_verse_context(&args.store, args.runtime_id.clone())?; if context - .latest_bifrost_body_change_publication_intent + .arrival_latest_bifrost_body_change_publication_intent .is_none() || context.eve_surface_states.len() != context.odin_advertisements.len() || context.daemon_statuses.len() != context.cluster_topology.len() @@ -2604,10 +2604,14 @@ fn run_cli() -> Result<()> { .as_ref() .is_some_and(|brake| brake.private_state_exposed) || context - .latest_bifrost_body_change_publication_receipt + .arrival_latest_bifrost_body_change_publication_receipt .is_some() - || context.latest_bifrost_github_publication_receipt.is_some() - || context.latest_bifrost_collaboration_feedback.is_none() + || context + .arrival_latest_bifrost_github_publication_receipt + .is_some() + || context + .arrival_latest_bifrost_collaboration_feedback + .is_none() || context.latest_imagination_consensus_receipt.is_some() || context.latest_work_loop_summary.is_none() || context.latest_agent_state_soa_summary.is_none() @@ -2914,10 +2918,10 @@ fn run_cli() -> Result<()> { "latestToolInvocationReceipt": context.latest_daemon_tool_invocation_receipt.as_ref().map(|receipt| receipt.receipt_id.clone()), "latestDaemonPokeIntent": context.latest_daemon_poke_intent.as_ref().map(|intent| intent.intent_id.clone()), "latestDaemonPokeReceipt": context.latest_daemon_poke_receipt.as_ref().map(|receipt| receipt.receipt_id.clone()), - "arrivalLatestBifrostPublicationIntent": context.latest_bifrost_body_change_publication_intent.as_ref().map(|intent| intent.intent_id.clone()), - "arrivalLatestBifrostPublicationReceipt": context.latest_bifrost_body_change_publication_receipt.as_ref().map(|receipt| receipt.receipt_id.clone()), - "arrivalLatestBifrostGithubReceipt": context.latest_bifrost_github_publication_receipt.as_ref().map(|receipt| receipt.receipt_id.clone()), - "arrivalLatestBifrostCollaborationFeedback": context.latest_bifrost_collaboration_feedback.as_ref().map(|feedback| feedback.feedback_id.clone()), + "arrivalLatestBifrostPublicationIntent": context.arrival_latest_bifrost_body_change_publication_intent.as_ref().map(|intent| intent.intent_id.clone()), + "arrivalLatestBifrostPublicationReceipt": context.arrival_latest_bifrost_body_change_publication_receipt.as_ref().map(|receipt| receipt.receipt_id.clone()), + "arrivalLatestBifrostGithubReceipt": context.arrival_latest_bifrost_github_publication_receipt.as_ref().map(|receipt| receipt.receipt_id.clone()), + "arrivalLatestBifrostCollaborationFeedback": context.arrival_latest_bifrost_collaboration_feedback.as_ref().map(|feedback| feedback.feedback_id.clone()), "latestImaginationConsensusReceipt": context.latest_imagination_consensus_receipt.as_ref().map(|receipt| receipt.receipt_id.clone()), "latestWorkLoopTelemetry": context.latest_work_loop_summary.as_ref().map(|summary| summary.telemetry_id.clone()), "latestAgentStateSoaSummary": context.latest_agent_state_soa_summary.as_ref().map(|summary| summary.summary_id.clone()), @@ -6776,17 +6780,17 @@ fn receipt_directory_report( owner: "Bifrost".to_string(), document_kind: "gamecult.bifrost.github_publication_receipt.v0".to_string(), latest_id: context - .latest_bifrost_github_publication_receipt + .arrival_latest_bifrost_github_publication_receipt .as_ref() .map(|receipt| receipt.receipt_id.clone()) .unwrap_or_else(|| "missing".to_string()), status: context - .latest_bifrost_github_publication_receipt + .arrival_latest_bifrost_github_publication_receipt .as_ref() .map(|receipt| receipt.publication_status.clone()) .unwrap_or_else(|| "missing".to_string()), route: context - .latest_bifrost_github_publication_receipt + .arrival_latest_bifrost_github_publication_receipt .as_ref() .map(|receipt| receipt.pull_request_url.clone()) .unwrap_or_else(|| "none".to_string()), @@ -6796,9 +6800,11 @@ fn receipt_directory_report( artifact_ref: "none".to_string(), artifact_status: "none".to_string(), artifact_sha256: "none".to_string(), - present: context.latest_bifrost_github_publication_receipt.is_some(), + present: context + .arrival_latest_bifrost_github_publication_receipt + .is_some(), private_state_exposed: context - .latest_bifrost_github_publication_receipt + .arrival_latest_bifrost_github_publication_receipt .as_ref() .map(|receipt| receipt.private_state_exposed) .unwrap_or(false), @@ -6812,17 +6818,17 @@ fn receipt_directory_report( owner: "Bifrost".to_string(), document_kind: "gamecult.bifrost.public_proof_publication_receipt.v0".to_string(), latest_id: context - .latest_bifrost_public_proof_publication_receipt + .arrival_latest_bifrost_public_proof_publication_receipt .as_ref() .map(|receipt| receipt.receipt_id.clone()) .unwrap_or_else(|| "missing".to_string()), status: context - .latest_bifrost_public_proof_publication_receipt + .arrival_latest_bifrost_public_proof_publication_receipt .as_ref() .map(|receipt| receipt.status.clone()) .unwrap_or_else(|| "missing".to_string()), route: context - .latest_bifrost_public_proof_publication_receipt + .arrival_latest_bifrost_public_proof_publication_receipt .as_ref() .map(|receipt| receipt.publication_url.clone()) .unwrap_or_else(|| "none".to_string()), @@ -6830,12 +6836,12 @@ fn receipt_directory_report( service_route: "none".to_string(), follow_up_command: WRAPPER_BIFROST_LEDGER_COMMAND.to_string(), artifact_ref: context - .latest_bifrost_public_proof_publication_receipt + .arrival_latest_bifrost_public_proof_publication_receipt .as_ref() .map(|receipt| receipt.public_proof_ref.clone()) .unwrap_or_else(|| "none".to_string()), artifact_status: context - .latest_bifrost_public_proof_publication_receipt + .arrival_latest_bifrost_public_proof_publication_receipt .as_ref() .map(|receipt| { if receipt.public_proof_ref == "none" { @@ -6846,15 +6852,15 @@ fn receipt_directory_report( }) .unwrap_or_else(|| "none".to_string()), artifact_sha256: context - .latest_bifrost_public_proof_publication_receipt + .arrival_latest_bifrost_public_proof_publication_receipt .as_ref() .map(|receipt| receipt.public_proof_sha256.clone()) .unwrap_or_else(|| "none".to_string()), present: context - .latest_bifrost_public_proof_publication_receipt + .arrival_latest_bifrost_public_proof_publication_receipt .is_some(), private_state_exposed: context - .latest_bifrost_public_proof_publication_receipt + .arrival_latest_bifrost_public_proof_publication_receipt .as_ref() .map(|receipt| receipt.private_state_exposed) .unwrap_or(false), diff --git a/epiphany-core/src/cultmesh_integration.rs b/epiphany-core/src/cultmesh_integration.rs index ce3f3020..40f6c933 100644 --- a/epiphany-core/src/cultmesh_integration.rs +++ b/epiphany-core/src/cultmesh_integration.rs @@ -2426,15 +2426,15 @@ pub struct EpiphanyLocalVerseContext { Option, pub latest_daemon_tool_invocation_receipt: Option, - pub latest_bifrost_body_change_publication_intent: + pub arrival_latest_bifrost_body_change_publication_intent: Option, - pub latest_bifrost_body_change_publication_receipt: + pub arrival_latest_bifrost_body_change_publication_receipt: Option, - pub latest_bifrost_github_publication_receipt: + pub arrival_latest_bifrost_github_publication_receipt: Option, - pub latest_bifrost_public_proof_publication_receipt: + pub arrival_latest_bifrost_public_proof_publication_receipt: Option, - pub latest_bifrost_collaboration_feedback: + pub arrival_latest_bifrost_collaboration_feedback: Option, pub latest_imagination_consensus_receipt: Option, @@ -6098,15 +6098,15 @@ pub fn query_epiphany_local_verse_context( .get(EPIPHANY_CULTMESH_DAEMON_TOOL_INVOCATION_INTENT_LATEST_KEY)?, latest_daemon_tool_invocation_receipt: node .get(EPIPHANY_CULTMESH_DAEMON_TOOL_INVOCATION_RECEIPT_LATEST_KEY)?, - latest_bifrost_body_change_publication_intent: node + arrival_latest_bifrost_body_change_publication_intent: node .get(EPIPHANY_CULTMESH_BIFROST_BODY_CHANGE_PUBLICATION_INTENT_LATEST_KEY)?, - latest_bifrost_body_change_publication_receipt: node + arrival_latest_bifrost_body_change_publication_receipt: node .get(EPIPHANY_CULTMESH_BIFROST_BODY_CHANGE_PUBLICATION_RECEIPT_LATEST_KEY)?, - latest_bifrost_github_publication_receipt: node + arrival_latest_bifrost_github_publication_receipt: node .get(EPIPHANY_CULTMESH_BIFROST_GITHUB_PUBLICATION_RECEIPT_LATEST_KEY)?, - latest_bifrost_public_proof_publication_receipt: node + arrival_latest_bifrost_public_proof_publication_receipt: node .get(EPIPHANY_CULTMESH_BIFROST_PUBLIC_PROOF_PUBLICATION_RECEIPT_LATEST_KEY)?, - latest_bifrost_collaboration_feedback: node + arrival_latest_bifrost_collaboration_feedback: node .get(EPIPHANY_CULTMESH_BIFROST_COLLABORATION_FEEDBACK_LATEST_KEY)?, latest_imagination_consensus_receipt: node .get(EPIPHANY_CULTMESH_IMAGINATION_CONSENSUS_RECEIPT_LATEST_KEY)?, @@ -9883,7 +9883,7 @@ mod tests { let context = query_epiphany_local_verse_context(&store, "epiphany-test")?; assert_eq!( context - .latest_bifrost_collaboration_feedback + .arrival_latest_bifrost_collaboration_feedback .as_ref() .map(|feedback| feedback.requested_consensus_route.as_str()), Some("imagination.consensus_discovery") diff --git a/epiphany-core/src/prompt_context.rs b/epiphany-core/src/prompt_context.rs index c6d422bb..b3177197 100644 --- a/epiphany-core/src/prompt_context.rs +++ b/epiphany-core/src/prompt_context.rs @@ -208,7 +208,7 @@ pub fn render_epiphany_prompt_context(input: &EpiphanyPromptContextInput) -> Str if let Some(intent) = input .local_verse - .latest_bifrost_body_change_publication_intent + .arrival_latest_bifrost_body_change_publication_intent .as_ref() { lines.push("## Bifrost Publication Gate".to_string()); @@ -224,7 +224,7 @@ pub fn render_epiphany_prompt_context(input: &EpiphanyPromptContextInput) -> Str )); if let Some(receipt) = input .local_verse - .latest_bifrost_body_change_publication_receipt + .arrival_latest_bifrost_body_change_publication_receipt .as_ref() .filter(|receipt| receipt.intent_id == intent.intent_id) { @@ -238,7 +238,7 @@ pub fn render_epiphany_prompt_context(input: &EpiphanyPromptContextInput) -> Str )); if let Some(github) = input .local_verse - .latest_bifrost_github_publication_receipt + .arrival_latest_bifrost_github_publication_receipt .as_ref() .filter(|github| github.bifrost_publication_receipt_id == receipt.receipt_id) { @@ -664,7 +664,7 @@ mod tests { .intent_id = "another-eve-intent".to_string(); prompt_input .local_verse - .latest_bifrost_body_change_publication_receipt + .arrival_latest_bifrost_body_change_publication_receipt .as_mut() .expect("Bifrost receipt remains available for mismatch probe") .intent_id = "another-bifrost-intent".to_string(); diff --git a/notes/conceptual-substitution-audit-2026-07-12.md b/notes/conceptual-substitution-audit-2026-07-12.md index 9d49813b..529e2a9e 100644 --- a/notes/conceptual-substitution-audit-2026-07-12.md +++ b/notes/conceptual-substitution-audit-2026-07-12.md @@ -948,6 +948,12 @@ and JSON surface: provider-derived IDs use `arrival_latest_*` and while locally ordered Imagination consensus retains its legitimate `latest` name. +`EpiphanyCultMeshContext` now completes the correction: its five provider +mirror fields use `arrival_latest_bifrost_*`, and prompt-context plus Verse +consumers read those names directly. The only remaining Bifrost `LATEST_KEY` +identifiers describe persisted `/latest` compatibility keys, not chronology +claims in typed runtime state. + The same inspection found 33 consecutive duplicate `#[cfg(test)]` attributes on provider constructors/writers and their re-exports. One gate already makes each item test-only; the second owned nothing. The duplicates are removed. diff --git a/notes/fresh-workspace-handoff.md b/notes/fresh-workspace-handoff.md index 4842e6cd..efd26e38 100644 --- a/notes/fresh-workspace-handoff.md +++ b/notes/fresh-workspace-handoff.md @@ -292,6 +292,8 @@ persisted `/latest` key spelling is retained as external storage compatibility, not interpreted as provider chronology. The Bifrost ledger report also uses `arrival_latest_*` typed fields and `arrivalLatestBifrost*` JSON keys; no old report aliases remain. +`EpiphanyCultMeshContext`, prompt assembly, and Verse consumers now also use +`arrival_latest_bifrost_*`; only persisted key constants retain `LATEST_KEY`. The latest structural count is 32 closure family branches, 744 remaining substring assertions in the closure region, and 1,284 lines in diff --git a/state/ledgers.msgpack b/state/ledgers.msgpack index 2efd63d9..739e4442 100644 Binary files a/state/ledgers.msgpack and b/state/ledgers.msgpack differ diff --git a/state/map.yaml b/state/map.yaml index 9cda9669..5b977655 100644 --- a/state/map.yaml +++ b/state/map.yaml @@ -660,4 +660,4 @@ current_status: - Service lifecycle receipt history is now event-only: `load_epiphany_cultmesh_daemon_service_lifecycle_receipts` filters out the `epiphany-local/daemon-service-lifecycle-receipt/latest` mirror, while `load_latest_epiphany_cultmesh_daemon_service_lifecycle_receipt` remains the latest-state reader. Focused unit test `service_lifecycle_receipt_history_excludes_latest_mirror` proves two per-receipt writes return exactly two history records and latest points at the second. Fresh smoke `verse-query-lifecycle-history-filter-smoke` and live overview/triage `local-20260618-145632-497-efac6f0d` / `local-20260618-145632-321-867947af` prove compact swarm sights still expose service lifecycle attention plus the present elevated runbook artifact without daemon pokes or service mutation. Do not use a broad unscoped cargo test filter for this check on Windows; it fans out across bin harnesses and hit a broken pipe during this pass. - `epiphany-verse-query seed-compact` is the compact seed receipt for wrappers and read-only rites. The older `seed` command still prints the full local Verse context for explicit debugging, but compact wrapper modes now avoid full `seed`/final `query` readback after the combined overview proof exposed Windows debug stack overflow from full-context serialization pressure. last_completed_repo_swarm_cut: Huginn live-fire has crossed the first real repo Body from Persona pressure to branch-local Hands commit and Soul/Mind closure, and now has repeatable closure and redacted-public-proof mouths. On `E:\Projects\Huginn` branch `epiphany/huginn/first-awakening`, `tools/epiphany_local_run.ps1 -Mode repo-persona-intake` accepted item `huginn-inspection-readback-livefire`, Weksa/Persona intake remained sealed, and `epiphany-work derive-plan` lowered it to model-authored safe family `repo.status_section` for `README.md` only. `tools/epiphany_local_run.ps1 -Mode repo-swarm-run` advanced four bounded pulses: run-from-plan, adopt-from-plan, execute-from-plan, and close-from-execute. Huginn commit `e9b07c38fceabbdc89ea35c2156326c80c0393a2` updated only `README.md`; closure receipt `.epiphany\work\work-close-huginn-inspection-readback-livefire.json` records status `closed`, Soul verdict `passed`, Mind state commit `repo-work-close-huginn-inspection-readback-livefire-mind-commit`, safe family `repo.status_section`, path scope `README.md`, Bifrost publication gate, and `privateStateExposed=false`. Verification also ran Huginn's TypeScript compiler through concrete Node path: `C:\Program Files\nodejs\node.exe E:\Projects\Huginn\node_modules\typescript\bin\tsc -p tsconfig.json` passed. Native verifier `epiphany-repo-livefire-closure-smoke --workspace E:\Projects\Huginn --item huginn-inspection-readback-livefire --expected-path README.md --expected-family repo.status_section --expected-gate awaiting-publication --expected-blocker bifrost-publication-missing` checks closure receipt, Mind map entry, overview gate/blocker, authority seals, and `git show` changed paths, returning `status=ok`, `soulVerdict=passed`, `publicationGate=Bifrost`, and `privateStateExposed=false`. Wrapper `tools/epiphany_local_run.ps1 -Mode repo-livefire-closure -Workspace E:\Projects\Huginn -RepoWorkItem huginn-inspection-readback-livefire -SkipBuild` exposes the same read-only proof through the local operator mouth; artifact `local-20260621-190156-803-2f85ba15` printed commit, path, gate, blocker, Soul verdict, Mind commit receipt, and `privateStateExposed=False` without push, merge, publication, or target mutation. New wrapper `tools/epiphany_local_run.ps1 -Mode repo-work-public-proof -Workspace E:\Projects\Huginn -RepoWorkItem huginn-inspection-readback-livefire -SkipBuild` exports the redacted proof bundle and repo-local Verse index without publishing; artifact `local-20260621-190645-345-4555b1dc` wrote `.epiphany\public\proof-bundles\repo-work-public-proof-huginn-inspection-readback-livefire.json`, proof id `repo-work-public-proof-huginn-inspection-readback-livefire`, SHA-256 `857545b199f3e37eb06c2e757e5cfc201958e46667bb1f8403fd333a22620f63`, nine artifact rows, zero publication rows, and `privateStateExposed=False`. swarm overview readback `local-20260621-190701-140-b9519ec6` sees the `REPO-WORK-PUBLIC-PROOF` row and action row from Huginn's repo-local Verse with the same SHA-256 while Bifrost publication remains missing. Launcher compact modes are now named compact operator-context modes instead of read-only modes, and `bifrost-public-proof` summaries print item, target public Verse, room, proof SHA-256, review receipts, and credit receipts so publication receipts are auditable without claiming upstream sync. - next_action: Continue the conceptual-substitution pass. Ten high-authority closure families, including publication and sync requests, are typed and guarded against regaining substring authority; sync has an explicit malicious push-grant fixture. The closure region still has 32 family branches and 667 substring assertions; closure contracts remain a parent-private lexical facade over external_governance and operations authority domains. External governance production anatomy is 668 lines and its counterfeit fixtures live in a dedicated private test include. Do not substitute a blind struct forest for coherent ownership. Provider chronology is explicitly external: Bifrost receipt contracts lack provider timestamp/revision, so Epiphany mirrors know only arrival order; all seven loader APIs, typed report fields, and JSON report keys now say arrival latest and no misleading aliases remain. Thirty-three duplicate test gates around provider writers/re-exports are removed while single test-only gates remain. Prioritize consequence-bearing request families and continue auditing evidence/security mirrors and adapters for borrowed authority. + next_action: Continue the conceptual-substitution pass. Ten high-authority closure families, including publication and sync requests, are typed and guarded against regaining substring authority; sync has an explicit malicious push-grant fixture. The closure region still has 32 family branches and 667 substring assertions; closure contracts remain a parent-private lexical facade over external_governance and operations authority domains. External governance production anatomy is 668 lines and its counterfeit fixtures live in a dedicated private test include. Do not substitute a blind struct forest for coherent ownership. Provider chronology is explicitly external: Bifrost receipt contracts lack provider timestamp/revision, so Epiphany mirrors know only arrival order; loader APIs, CultMesh context fields, prompt consumers, typed report fields, and JSON report keys now say arrival latest. Only persisted LATEST_KEY constants retain external storage vocabulary. Thirty-three duplicate test gates around provider writers/re-exports are removed while single test-only gates remain. Prioritize consequence-bearing request families and continue auditing evidence/security mirrors and adapters for borrowed authority.