diff --git a/epiphany-core/src/bin/epiphany_work/closure_contracts/external_governance.rs b/epiphany-core/src/bin/epiphany_work/closure_contracts/external_governance.rs index 6a874374..9fb195a6 100644 --- a/epiphany-core/src/bin/epiphany_work/closure_contracts/external_governance.rs +++ b/epiphany-core/src/bin/epiphany_work/closure_contracts/external_governance.rs @@ -664,270 +664,5 @@ impl RepoSyncRequest { #[derive(Debug, Deserialize)] struct RepoSyncAuthority { branch_local_only:bool, merge_authorized:bool, push_authorized:bool, upstream_sync_authorized:bool, github_publication_authorized:bool, credit_ledger_authorized:bool, hands_action_authorized:bool, service_lifecycle_authority:bool, cross_body_mutation_authorized:bool, private_verse_rummaging:bool, operator_or_maintainer_authority_required:bool } pub(super) fn parse_repo_sync_request(text:&str)->Result{toml::from_str(text).context("sync request is not valid typed TOML")} -#[cfg(test)] -mod tool_request_tests { - use super::*; - #[test] - fn comment_cannot_counterfeit_direct_execution_seal() { - let text = r#" -schema_version = "epiphany.repo_tool_request.v0" -safe_action_family = "repo.tool_request" -summary = "summary" -private_state_exposed = false -[request] -target_directory = "gamecult-local/daemon-tool-directory" -target_capability = "daemon-tool-capability:selected-by-review" -operation = "submitTypedToolIntent" -[cultmesh] -intent_contract = "epiphany.cultmesh.daemon_tool_invocation_intent.v0" -receipt_contract = "epiphany.cultmesh.daemon_tool_invocation_receipt.v0" -host_daemon_owns_execution = true -requester_owns_request = false -requires_host_liveness_ready = true -requires_cultmesh_receipts = true -[odin] -discoverable = true -preserves_provider_ownership = true -private_verse_passthrough = false -[authority] -# direct_tool_execution = false -direct_tool_execution = true -arbitrary_shell_authority = false -hands_action_authority = false -state_commit_authority = false -publication_authority = false -service_lifecycle_authority = false -cross_body_mutation_authority = false -private_verse_rummaging = false -"#; - let request = parse_repo_tool_request(text).expect("fixture is typed TOML"); - assert!(request.authority.direct_tool_execution); - assert!(!request.has_authority_seals()); - } - - #[test] - fn metrics_comment_cannot_counterfeit_spend_seal() { - let text = r#" -schema_version = "epiphany.repo_metrics_request.v0" -safe_action_family = "repo.metrics_request" -summary = "summary" -private_state_exposed = false -[request] -status = "awaiting-metrics-review" -requested_owner = "Bifrost/Maintainer" -requested_effect = "record-compute-review-and-artifact-accounting" -publication_request_ref = "publication" -credit_request_ref = "credit" -artifact_acceptance_request_ref = "artifact" -[antecedents] -closure_review_required = true -soul_verdict_required = true -mind_commit_required = true -public_proof_required = true -accepted_artifact_required = true -credit_request_required = true -[required_receipts] -closure_review = "epiphany.repo_work_closure_review.v0" -soul_verdict = "epiphany.soul.verification_verdict" -mind_commit = "epiphany.mind.state_commit_receipt" -public_proof = "epiphany.repo_work_public_proof_bundle.v0" -accepted_artifact = "gamecult.artifact.acceptance_receipt.v0" -model_spend = "gamecult.metrics.model_spend_receipt.v0" -review_load = "gamecult.metrics.review_load_receipt.v0" -credit_readback = "gamecult.bifrost.credit_readback_receipt.v0" -[metrics_packet] -requires_model_call_count = true -requires_token_or_cost_summary = true -requires_review_minutes_or_count = true -requires_accepted_artifact_ref = true -requires_public_proof_ref = true -requires_credit_readback_ref = true -requires_private_state_redaction_check = true -[authority] -branch_local_only = true -metrics_ledger_authorized = false -# spend_authorized = false -spend_authorized = true -review_load_authorized = false -credit_ledger_authorized = false -github_pr_authorized = false -merge_authorized = false -publication_authorized = false -upstream_sync_authorized = false -hands_action_authorized = false -service_lifecycle_authority = false -cross_body_mutation_authorized = false -private_verse_rummaging = false -bifrost_or_maintainer_metrics_authority_required = true -"#; - let request = parse_repo_metrics_request(text).expect("fixture is typed TOML"); - assert!(!request.has_authority_seals()); - } - - #[test] - fn artifact_comment_cannot_counterfeit_acceptance_seal() { - let text = r#" -schema_version = "epiphany.repo_artifact_acceptance_request.v0" -safe_action_family = "repo.artifact_acceptance_request" -summary = "summary" -private_state_exposed = false -[request] -status = "awaiting-artifact-acceptance-review" -requested_owner = "Maintainer/Bifrost" -requested_effect = "record-accepted-artifact-for-reviewed-branch-work" -verification_request_ref = "verification" -maintainer_review_request_ref = "review" -publication_request_ref = "publication" -[antecedents] -closure_review_required = true -soul_verdict_required = true -mind_commit_required = true -public_proof_required = true -maintainer_review_required = true -hands_commit_required = true -[required_receipts] -closure_review = "epiphany.repo_work_closure_review.v0" -soul_verdict = "epiphany.soul.verification_verdict" -mind_commit = "epiphany.mind.state_commit_receipt" -public_proof = "epiphany.repo_work_public_proof_bundle.v0" -maintainer_review = "gamecult.maintainer.review_receipt.v0" -hands_commit = "epiphany.hands.commit_receipt" -accepted_artifact = "gamecult.artifact.acceptance_receipt.v0" -[artifact_packet] -requires_artifact_ref = true -requires_commit_sha = true -requires_changed_path_list = true -requires_review_verdict = true -requires_public_proof_ref = true -requires_acceptance_rationale = true -requires_private_state_redaction_check = true -[authority] -branch_local_only = true -# artifact_acceptance_authorized = false -artifact_acceptance_authorized = true -credit_ledger_authorized = false -github_pr_authorized = false -merge_authorized = false -publication_authorized = false -upstream_sync_authorized = false -hands_action_authorized = false -service_lifecycle_authority = false -cross_body_mutation_authorized = false -private_verse_rummaging = false -maintainer_or_bifrost_acceptance_authority_required = true -"#; - let request = parse_repo_artifact_acceptance_request(text).expect("fixture is typed TOML"); - assert!(!request.has_authority_seals()); - } - - #[test] - fn credit_comment_cannot_counterfeit_ledger_seal() { - let text = r#" -schema_version = "epiphany.repo_credit_request.v0" -safe_action_family = "repo.credit_request" -summary = "summary" -private_state_exposed = false -[request] -status = "awaiting-bifrost-credit-review" -requested_owner = "Bifrost" -requested_effect = "record-credit-for-redacted-proof-and-accepted-artifact" -publication_request_ref = "publication" -maintainer_review_request_ref = "review" -pr_request_ref = "pr" -[antecedents] -closure_review_required = true -soul_verdict_required = true -mind_commit_required = true -public_proof_required = true -maintainer_review_required = true -accepted_artifact_required = true -authorship_context_required = true -[required_receipts] -closure_review = "epiphany.repo_work_closure_review.v0" -soul_verdict = "epiphany.soul.verification_verdict" -mind_commit = "epiphany.mind.state_commit_receipt" -public_proof = "epiphany.repo_work_public_proof_bundle.v0" -maintainer_review = "gamecult.maintainer.review_receipt.v0" -accepted_artifact = "gamecult.artifact.acceptance_receipt.v0" -credit_ledger = "gamecult.bifrost.credit_receipt.v0" -credit_readback = "gamecult.bifrost.credit_readback_receipt.v0" -[credit_packet] -requires_author_identity = true -requires_reviewer_identity = true -requires_accepted_artifact_ref = true -requires_public_proof_ref = true -requires_changed_path_list = true -requires_credit_ledger_target = true -requires_private_state_redaction_check = true -[authority] -branch_local_only = true -# credit_ledger_authorized = false -credit_ledger_authorized = true -bifrost_publication_authorized = false -github_pr_authorized = false -merge_authorized = false -publication_authorized = false -upstream_sync_authorized = false -hands_action_authorized = false -service_lifecycle_authority = false -cross_body_mutation_authorized = false -private_verse_rummaging = false -bifrost_credit_authority_required = true -"#; - let request = parse_repo_credit_request(text).expect("fixture is typed TOML"); - assert!(!request.has_authority_seals()); - } - - #[test] - fn publication_comment_cannot_counterfeit_bifrost_seal() { - let text = r#" -schema_version = "epiphany.repo_publication_request.v0" -safe_action_family = "repo.publication_request" -summary = "summary" -private_state_exposed = false -[request] -status = "awaiting-bifrost-review" -requested_owner = "Bifrost" -requested_effect = "publish-redacted-proof-and-route-maintainer-review" -verification_request_ref = "verification" -[antecedents] -closure_review_required = true -soul_verdict_required = true -mind_commit_required = true -public_proof_export_required = true -private_state_redaction_required = true -[required_receipts] -closure_review = "epiphany.repo_work_closure_review.v0" -soul_verdict = "epiphany.soul.verification_verdict" -mind_commit = "epiphany.mind.state_commit_receipt" -public_proof = "epiphany.repo_work_public_proof_bundle.v0" -bifrost_publication = "gamecult.bifrost.public_proof_publication_receipt.v0" -github_publication = "gamecult.github.publication_receipt.v0" -credit_ledger = "gamecult.bifrost.credit_receipt.v0" -upstream_sync = "epiphany.repo_work_upstream_main_sync.v0" -[public_export] -redacted_only = true -raw_receipts_allowed = false -private_paths_allowed = false -worker_thought_allowed = false -operator_context_allowed = false -credit_required = true -[authority] -branch_local_only = true -# bifrost_publication_authorized = false -bifrost_publication_authorized = true -github_publication_authorized = false -credit_ledger_authorized = false -merge_authorized = false -upstream_sync_authorized = false -hands_action_authorized = false -service_lifecycle_authority = false -cross_body_mutation_authorized = false -private_verse_rummaging = false -maintainer_review_required = true -"#; - let request = parse_repo_publication_request(text).expect("fixture is typed TOML"); - assert!(!request.has_authority_seals()); - } -} +include!("external_governance_tests.rs"); diff --git a/epiphany-core/src/bin/epiphany_work/closure_contracts/external_governance_tests.rs b/epiphany-core/src/bin/epiphany_work/closure_contracts/external_governance_tests.rs new file mode 100644 index 00000000..640d3e87 --- /dev/null +++ b/epiphany-core/src/bin/epiphany_work/closure_contracts/external_governance_tests.rs @@ -0,0 +1,267 @@ +#[cfg(test)] +mod external_governance_tests { + use super::*; + + #[test] + fn comment_cannot_counterfeit_direct_execution_seal() { + let text = r#" +schema_version = "epiphany.repo_tool_request.v0" +safe_action_family = "repo.tool_request" +summary = "summary" +private_state_exposed = false +[request] +target_directory = "gamecult-local/daemon-tool-directory" +target_capability = "daemon-tool-capability:selected-by-review" +operation = "submitTypedToolIntent" +[cultmesh] +intent_contract = "epiphany.cultmesh.daemon_tool_invocation_intent.v0" +receipt_contract = "epiphany.cultmesh.daemon_tool_invocation_receipt.v0" +host_daemon_owns_execution = true +requester_owns_request = false +requires_host_liveness_ready = true +requires_cultmesh_receipts = true +[odin] +discoverable = true +preserves_provider_ownership = true +private_verse_passthrough = false +[authority] +# direct_tool_execution = false +direct_tool_execution = true +arbitrary_shell_authority = false +hands_action_authority = false +state_commit_authority = false +publication_authority = false +service_lifecycle_authority = false +cross_body_mutation_authority = false +private_verse_rummaging = false +"#; + let request = parse_repo_tool_request(text).expect("fixture is typed TOML"); + assert!(request.authority.direct_tool_execution); + assert!(!request.has_authority_seals()); + } + + #[test] + fn metrics_comment_cannot_counterfeit_spend_seal() { + let text = r#" +schema_version = "epiphany.repo_metrics_request.v0" +safe_action_family = "repo.metrics_request" +summary = "summary" +private_state_exposed = false +[request] +status = "awaiting-metrics-review" +requested_owner = "Bifrost/Maintainer" +requested_effect = "record-compute-review-and-artifact-accounting" +publication_request_ref = "publication" +credit_request_ref = "credit" +artifact_acceptance_request_ref = "artifact" +[antecedents] +closure_review_required = true +soul_verdict_required = true +mind_commit_required = true +public_proof_required = true +accepted_artifact_required = true +credit_request_required = true +[required_receipts] +closure_review = "epiphany.repo_work_closure_review.v0" +soul_verdict = "epiphany.soul.verification_verdict" +mind_commit = "epiphany.mind.state_commit_receipt" +public_proof = "epiphany.repo_work_public_proof_bundle.v0" +accepted_artifact = "gamecult.artifact.acceptance_receipt.v0" +model_spend = "gamecult.metrics.model_spend_receipt.v0" +review_load = "gamecult.metrics.review_load_receipt.v0" +credit_readback = "gamecult.bifrost.credit_readback_receipt.v0" +[metrics_packet] +requires_model_call_count = true +requires_token_or_cost_summary = true +requires_review_minutes_or_count = true +requires_accepted_artifact_ref = true +requires_public_proof_ref = true +requires_credit_readback_ref = true +requires_private_state_redaction_check = true +[authority] +branch_local_only = true +metrics_ledger_authorized = false +# spend_authorized = false +spend_authorized = true +review_load_authorized = false +credit_ledger_authorized = false +github_pr_authorized = false +merge_authorized = false +publication_authorized = false +upstream_sync_authorized = false +hands_action_authorized = false +service_lifecycle_authority = false +cross_body_mutation_authorized = false +private_verse_rummaging = false +bifrost_or_maintainer_metrics_authority_required = true +"#; + let request = parse_repo_metrics_request(text).expect("fixture is typed TOML"); + assert!(!request.has_authority_seals()); + } + + #[test] + fn artifact_comment_cannot_counterfeit_acceptance_seal() { + let text = r#" +schema_version = "epiphany.repo_artifact_acceptance_request.v0" +safe_action_family = "repo.artifact_acceptance_request" +summary = "summary" +private_state_exposed = false +[request] +status = "awaiting-artifact-acceptance-review" +requested_owner = "Maintainer/Bifrost" +requested_effect = "record-accepted-artifact-for-reviewed-branch-work" +verification_request_ref = "verification" +maintainer_review_request_ref = "review" +publication_request_ref = "publication" +[antecedents] +closure_review_required = true +soul_verdict_required = true +mind_commit_required = true +public_proof_required = true +maintainer_review_required = true +hands_commit_required = true +[required_receipts] +closure_review = "epiphany.repo_work_closure_review.v0" +soul_verdict = "epiphany.soul.verification_verdict" +mind_commit = "epiphany.mind.state_commit_receipt" +public_proof = "epiphany.repo_work_public_proof_bundle.v0" +maintainer_review = "gamecult.maintainer.review_receipt.v0" +hands_commit = "epiphany.hands.commit_receipt" +accepted_artifact = "gamecult.artifact.acceptance_receipt.v0" +[artifact_packet] +requires_artifact_ref = true +requires_commit_sha = true +requires_changed_path_list = true +requires_review_verdict = true +requires_public_proof_ref = true +requires_acceptance_rationale = true +requires_private_state_redaction_check = true +[authority] +branch_local_only = true +# artifact_acceptance_authorized = false +artifact_acceptance_authorized = true +credit_ledger_authorized = false +github_pr_authorized = false +merge_authorized = false +publication_authorized = false +upstream_sync_authorized = false +hands_action_authorized = false +service_lifecycle_authority = false +cross_body_mutation_authorized = false +private_verse_rummaging = false +maintainer_or_bifrost_acceptance_authority_required = true +"#; + let request = parse_repo_artifact_acceptance_request(text).expect("fixture is typed TOML"); + assert!(!request.has_authority_seals()); + } + + #[test] + fn credit_comment_cannot_counterfeit_ledger_seal() { + let text = r#" +schema_version = "epiphany.repo_credit_request.v0" +safe_action_family = "repo.credit_request" +summary = "summary" +private_state_exposed = false +[request] +status = "awaiting-bifrost-credit-review" +requested_owner = "Bifrost" +requested_effect = "record-credit-for-redacted-proof-and-accepted-artifact" +publication_request_ref = "publication" +maintainer_review_request_ref = "review" +pr_request_ref = "pr" +[antecedents] +closure_review_required = true +soul_verdict_required = true +mind_commit_required = true +public_proof_required = true +maintainer_review_required = true +accepted_artifact_required = true +authorship_context_required = true +[required_receipts] +closure_review = "epiphany.repo_work_closure_review.v0" +soul_verdict = "epiphany.soul.verification_verdict" +mind_commit = "epiphany.mind.state_commit_receipt" +public_proof = "epiphany.repo_work_public_proof_bundle.v0" +maintainer_review = "gamecult.maintainer.review_receipt.v0" +accepted_artifact = "gamecult.artifact.acceptance_receipt.v0" +credit_ledger = "gamecult.bifrost.credit_receipt.v0" +credit_readback = "gamecult.bifrost.credit_readback_receipt.v0" +[credit_packet] +requires_author_identity = true +requires_reviewer_identity = true +requires_accepted_artifact_ref = true +requires_public_proof_ref = true +requires_changed_path_list = true +requires_credit_ledger_target = true +requires_private_state_redaction_check = true +[authority] +branch_local_only = true +# credit_ledger_authorized = false +credit_ledger_authorized = true +bifrost_publication_authorized = false +github_pr_authorized = false +merge_authorized = false +publication_authorized = false +upstream_sync_authorized = false +hands_action_authorized = false +service_lifecycle_authority = false +cross_body_mutation_authorized = false +private_verse_rummaging = false +bifrost_credit_authority_required = true +"#; + let request = parse_repo_credit_request(text).expect("fixture is typed TOML"); + assert!(!request.has_authority_seals()); + } + + #[test] + fn publication_comment_cannot_counterfeit_bifrost_seal() { + let text = r#" +schema_version = "epiphany.repo_publication_request.v0" +safe_action_family = "repo.publication_request" +summary = "summary" +private_state_exposed = false +[request] +status = "awaiting-bifrost-review" +requested_owner = "Bifrost" +requested_effect = "publish-redacted-proof-and-route-maintainer-review" +verification_request_ref = "verification" +[antecedents] +closure_review_required = true +soul_verdict_required = true +mind_commit_required = true +public_proof_export_required = true +private_state_redaction_required = true +[required_receipts] +closure_review = "epiphany.repo_work_closure_review.v0" +soul_verdict = "epiphany.soul.verification_verdict" +mind_commit = "epiphany.mind.state_commit_receipt" +public_proof = "epiphany.repo_work_public_proof_bundle.v0" +bifrost_publication = "gamecult.bifrost.public_proof_publication_receipt.v0" +github_publication = "gamecult.github.publication_receipt.v0" +credit_ledger = "gamecult.bifrost.credit_receipt.v0" +upstream_sync = "epiphany.repo_work_upstream_main_sync.v0" +[public_export] +redacted_only = true +raw_receipts_allowed = false +private_paths_allowed = false +worker_thought_allowed = false +operator_context_allowed = false +credit_required = true +[authority] +branch_local_only = true +# bifrost_publication_authorized = false +bifrost_publication_authorized = true +github_publication_authorized = false +credit_ledger_authorized = false +merge_authorized = false +upstream_sync_authorized = false +hands_action_authorized = false +service_lifecycle_authority = false +cross_body_mutation_authorized = false +private_verse_rummaging = false +maintainer_review_required = true +"#; + let request = parse_repo_publication_request(text).expect("fixture is typed TOML"); + assert!(!request.has_authority_seals()); + } +} diff --git a/notes/conceptual-substitution-audit-2026-07-12.md b/notes/conceptual-substitution-audit-2026-07-12.md index a0bbd3be..1f62ae90 100644 --- a/notes/conceptual-substitution-audit-2026-07-12.md +++ b/notes/conceptual-substitution-audit-2026-07-12.md @@ -910,6 +910,14 @@ Ten high-authority families are now typed; 667 substring assertions remain in the measured closure region. External governance is 933 lines and remains a bounded physical domain rather than returning to the facade slab. +## Verification fixtures separated from governance anatomy + +External governance carried 267 lines of counterfeit fixtures inline under the +misleading name `tool_request_tests`. They now live in +`external_governance_tests.rs` and retain lexical access through a test-only +include. Production governance is 668 lines; the five counterfeit-seal tests +remain intact without widening visibility or creating a test API. + ## Unresolved: provider receipts without chronology Bifrost body-change/GitHub publication receipts are externally owned and their diff --git a/notes/fresh-workspace-handoff.md b/notes/fresh-workspace-handoff.md index 36e26f9d..c6b04698 100644 --- a/notes/fresh-workspace-handoff.md +++ b/notes/fresh-workspace-handoff.md @@ -275,6 +275,10 @@ Sync-request closure is now typed within external governance and guarded against substring fallback. Current count: ten typed high-authority families and 667 remaining closure substring assertions. +External-governance counterfeit fixtures now live in the dedicated lexical +`external_governance_tests.rs`; production contract anatomy is 668 lines and +the five semantic counterfeit tests remain private and passing. + The latest structural count is 32 closure family branches, 744 remaining substring assertions in the closure region, and 1,284 lines in `closure_contracts.rs`. Do not blindly generate a struct forest for every diff --git a/state/ledgers.msgpack b/state/ledgers.msgpack index 94c55d6e..1a47942d 100644 Binary files a/state/ledgers.msgpack and b/state/ledgers.msgpack differ diff --git a/state/map.yaml b/state/map.yaml index 26c8aa4c..3535dd75 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. 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. Do not substitute a blind struct forest for coherent ownership. Prioritize consequence-bearing request families, collapse shared syntax only when a named invariant earns it, and leave presentation-only markdown checks out of policy machinery. Repo-personality and verse-query smoke recursive deletion are canonically confined; 32 timestamped smokes have no recursive-delete path; all ten generated UUID temp leaves across binaries and coordinator tests require exclusive creation before cleanup. Continue auditing remaining reset helpers for provenance substituted for resolved scope. Operational/evidence/self-state and operator mirrors follow owned clocks; identity chains are typed; scheduling/runbook selection do not parse prose; writerless readiness-review is deleted. Bifrost provider receipts still need provider chronology. 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. 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; its 267 lines of counterfeit fixtures live in a dedicated private test include. Do not substitute a blind struct forest for coherent ownership. Prioritize consequence-bearing request families, collapse shared syntax only when a named invariant earns it, and leave presentation-only markdown checks out of policy machinery. Repo-personality and verse-query smoke recursive deletion are canonically confined; 32 timestamped smokes have no recursive-delete path; all ten generated UUID temp leaves across binaries and coordinator tests require exclusive creation before cleanup. Continue auditing remaining reset helpers for provenance substituted for resolved scope. Operational/evidence/self-state and operator mirrors follow owned clocks; identity chains are typed; scheduling/runbook selection do not parse prose; writerless readiness-review is deleted. Bifrost provider receipts still need provider chronology. Continue auditing evidence/security mirrors and adapters for borrowed authority.