From fff55a829835bd698808e0a85e1733ffddb0ea5a Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sun, 21 Jun 2026 01:16:30 +0100 Subject: [PATCH] Add repo-local Gjallar readback targeting --- notes/epiphany-repo-swarm-mvp-contract.md | 22 ++-- notes/fresh-workspace-handoff.md | 2 +- state/ledgers.msgpack | Bin 360057 -> 360460 bytes state/map.yaml | 5 +- tools/epiphany_local_run.ps1 | 116 ++++++++++++---------- 5 files changed, 83 insertions(+), 62 deletions(-) diff --git a/notes/epiphany-repo-swarm-mvp-contract.md b/notes/epiphany-repo-swarm-mvp-contract.md index cf11f877..823df710 100644 --- a/notes/epiphany-repo-swarm-mvp-contract.md +++ b/notes/epiphany-repo-swarm-mvp-contract.md @@ -1369,16 +1369,20 @@ readback only, not a scheduler, publisher, merge gate, deployment actor, daemon keeper, or Mind admission path. The wrapper mouth now forwards those Rust-owned repo-work map rows instead of -making agents parse JSON artifacts: live wrapper proofs -`local-20260621-004816-315-24fe14d4` (`gjallar`) and -`local-20260621-004815-947-b647d7a9` (`swarm-triage`) print +making agents parse JSON artifacts. `tools/epiphany_local_run.ps1` accepts +`-LocalVerseStore` and `-LocalVerseRuntimeId`, keeps operator run +intent/receipt writes in the operator local Verse, and points `gjallar` / +`swarm-triage` readback at the explicit repo-local Verse store. Live wrapper +proofs `local-20260621-011151-541-70056545` (`gjallar`) and +`local-20260621-011207-755-d65e5c7e` (`swarm-triage`) read the +`repo-planning-brief-family-smoke` repo store and printed actual `repoWorkMapRows`, `repoWorkSemanticRows`, `repoWorkFamilyLensRows`, -`repoWorkPathLensRows`, `repoWorkBranchLensRows`, `repoWorkStageLensRows`, -`repoWorkGateLensRows`, `repoWorkOverviewRows`, and -`repoWorkPublicProofRows` in the one-line operator summary. The live store had -no repo-work rows, so each field rendered `none`, but the agent-friendly mouth -now exposes the row families whenever local Verse has accepted work. PowerShell -does not reinterpret the rows; it only lowers existing Rust TUI arrays. +`repoWorkPathLensRows`, `repoWorkBranchLensRows`, `repoWorkStageLensRows`, and +`repoWorkGateLensRows` in the one-line operator summary. Earlier wrapper proofs +with no explicit repo-local store rendered `none`; that was a targeting wound, +not absence of accepted repo-work. PowerShell does not reinterpret the rows or +own schema registration; it only lowers existing Rust TUI arrays while leaving +repo-work truth in the repo-local CultMesh store. `epiphany-work overview` is the first compact repo work sight/proof surface: diff --git a/notes/fresh-workspace-handoff.md b/notes/fresh-workspace-handoff.md index 498041a2..6704e8ef 100644 --- a/notes/fresh-workspace-handoff.md +++ b/notes/fresh-workspace-handoff.md @@ -159,7 +159,7 @@ remembers doctrine; the branch remembers the blade. - 2026-06-20: Gjallar repo-work map sight now includes semantic stage lenses. `epiphany-verse-query gjallar`, swarm overview, and swarm triage expose `repoWorkMapStageLensRows` plus `REPO-WORK-MAP-STAGE` rows derived from Mind-admitted local Verse map entries, grouping safe families into stages and owning organs such as `imagination-planning` / `Imagination`, `hands-execution-request` / `Hands`, `soul-verification-request` / `Soul`, `bifrost-publication-accounting` / `Bifrost`, and `idunn-deployment` / `Idunn`. Focused smoke `.epiphany-smoke\repo-close-mind-adoption-guard-20260620-232414` proves the stage lens for accepted `repo.markdown_planning_note` work reports `stage=imagination-planning`, `owner=Imagination`, latest item/commit/Mind commit receipt, Bifrost gate, and `privateStateExposed=false`. This is sight only; Gjallar still does not schedule, publish, merge, deploy, keep daemons alive, or admit Mind state. - 2026-06-20: Gjallar repo-work map sight now includes next-publication-gate lenses. `epiphany-verse-query gjallar`, swarm overview, and swarm triage expose `repoWorkMapGateLensRows` plus `REPO-WORK-MAP-GATE` rows derived from the same Mind-admitted local Verse map entries, grouping accepted consequences by publication gate and naming the owning gate organ. Focused smoke `.epiphany-smoke\repo-close-mind-adoption-guard-20260620-233353` proves accepted `repo.markdown_planning_note` work reports `gate=Bifrost`, `owner=Bifrost`, latest item/commit/Mind commit receipt, `sightOnly=true`, `publicationAuthorized=false`, and `privateStateExposed=false`. This is sight only; Bifrost still owns publication/credit/upstream review and Gjallar does not schedule, publish, merge, deploy, keep daemons alive, or admit Mind state. - 2026-06-20: Gjallar repo-work map sight now includes per-entry semantic readback rows. `epiphany-verse-query gjallar`, swarm overview, and swarm triage expose `repoWorkMapSemanticRows` plus `REPO-WORK-MAP-SEMANTIC` rows derived from Mind-admitted local Verse map entries, combining durable modeling summary, safe family, stage owner, publication gate owner, latest commit, and Mind commit receipt for each accepted item. Focused smoke `.epiphany-smoke\repo-close-mind-adoption-guard-20260620-234131` proves accepted `repo.markdown_planning_note` work reports `stage=imagination-planning`, `stageOwner=Imagination`, `gateOwner=Bifrost`, the durable modeling summary, `sightOnly=true`, `publicationAuthorized=false`, and `privateStateExposed=false` while counterfeit Mind adoption is still refused. This is compact meaning readback only; Gjallar still does not schedule, publish, merge, deploy, keep daemons alive, or admit Mind state. -- 2026-06-21: The local wrapper mouth now forwards Rust-owned repo-work map rows for `gjallar` and `swarm-triage`. Live wrapper proofs `local-20260621-004816-315-24fe14d4` and `local-20260621-004815-947-b647d7a9` printed `repoWorkMapRows`, `repoWorkSemanticRows`, family/path/branch/stage/gate lens rows, `repoWorkOverviewRows`, and `repoWorkPublicProofRows` in the one-line operator summary while `privateStateExposed=false`; the current live store had no accepted repo-work rows, so each rendered `none`. PowerShell only lowers existing Rust TUI arrays and does not reinterpret repo-work truth or gain scheduler/publication/Mind authority. +- 2026-06-21: The local wrapper mouth now forwards Rust-owned repo-work map rows for `gjallar` and `swarm-triage` from an explicit repo-local Verse target. `tools/epiphany_local_run.ps1` accepts `-LocalVerseStore` and `-LocalVerseRuntimeId`; operator run intent/receipt documents still write to the operator local Verse, while the readback modes target the requested store/runtime. Live wrapper proofs `local-20260621-011151-541-70056545` and `local-20260621-011207-755-d65e5c7e` pointed at `.epiphany-smoke\repo-planning-brief-family-20260620-235939\repo-body\.epiphany\local-verse.ccmp` with runtime `repo-planning-brief-family-smoke` and printed actual `repoWorkMapRows`, `repoWorkSemanticRows`, family/path/branch/stage/gate lens rows, and `privateStateExposed=false`. Earlier wrapper proofs that rendered `none` were aimed at the wrong operator store/runtime; PowerShell only lowers existing Rust TUI arrays and does not reinterpret repo-work truth or gain scheduler/publication/Mind/Idunn authority. - 2026-06-20: Mind now has explicit repo-work safe-family and requested-path guards before branch-local Hands authority. `adopt --from-plan` treats unsupported plan-derived safe-family labels as refused interpreter decisions, writes `epiphany.repo_work_mind_adoption_decision.v0` with `status=refused-unsupported-safe-family`, keeps `actionItemAccepted=false` and `safeFamilyRecognized=false`, grants no Hands/durable-state/service/publication/cross-body/private-state authority, and writes no normal adoption receipt. It also compares the sorted action-item `requestedPaths` against the sorted plan action `changedPaths`; mismatches write `status=refused-requested-path-mismatch`, keep `safeFamilyRecognized=true` but `requestedPathsMatchPlan=false`, point the next gate at `imagination.replan_with_matching_requested_paths`, and grant no Hands/durable-state/service/publication/cross-body/private-state authority. Focused smokes `.epiphany-smoke\repo-mind-safe-family-guard-20260620-194425` and `.epiphany-smoke\repo-mind-path-guard-20260620-194239` prove both refusal paths; earlier positive smokes `.epiphany-smoke\repo-planning-facets-20260620-190916` and `.epiphany-smoke\closure-model-gate-20260620-190916` prove recognized planning facets and closure model gates still pass. Current remaining repo-swarm MVP organs are deeper interpreter semantics beyond adoption refusal, more useful repo-owned configuration/action families, richer closure depth, and Idunn-owned queue-run service lifecycle under explicit operator authority. - 2026-06-20: Mind now also refuses plan-derived repo work that is not evidence-ready. `derive-plan` embeds verification asks in the Imagination action-item receipt, `adopt --from-plan` records verification asks and planning evidence needs in `epiphany.repo_work_mind_interpretation.v0`, and empty verification asks or evidence needs write `status=refused-missing-evidence-needs` with next gate `imagination.replan_with_explicit_soul_evidence_needs`. The refusal grants no Hands, durable-state, service, publication, cross-body, or private-state authority and writes no adoption receipt. Focused proof `.epiphany-smoke\repo-mind-evidence-guard-20260620-224426` tampers both arrays empty and proves the refusal; regression `.epiphany-smoke\repo-planning-facets-20260620-224428` proves normal planning facets still close through Soul/Modeling/Mind. - 2026-06-20: `repo-eve-surface` is now live as repo-owned Eve/CultUI surface contract cargo. `epiphany-work derive-plan --action-family repo-eve-surface` writes `.epiphany/eve-surfaces/.toml` with safe family `repo.eve_surface`, compact agent TUI and GUI lowering contracts, local/public Verse routing, Odin discovery, provider-owned surface identity, Persona/human collaboration flags, feedback routing to Imagination, and denials for renderer ownership, rendering/state/publication/service/cross-body authority, private Verse rummaging, and private-state exposure. Soul closure assertions inspect schema, family, summary, surface routing, Verse routing, CultUI contracts, collaboration route, authority seals, and private-state seal. Focused smoke `.epiphany-smoke\repo-eve-surface-family-20260620-165927` ran init -> online -> accept -> repo-eve-surface derive-plan -> tick run/adopt/execute/close; Hands committed only `.epiphany/eve-surfaces/repo-eve-surface-family.toml`, Soul passed with `pathScopeMatched=true`, `familyAssertions.status=passed`, `hasCultUiContracts=true`, `hasVerseRouting=true`, `odinDiscoverable=true`, `feedbackRoutesToImagination=true`, `rendererOwnsTruth=false`, `renderingAuthority=false`, `stateAuthority=false`, `publicationAuthority=false`, `serviceLifecycleAuthority=false`, `crossBodyMutationAuthority=false`, `privateVerseRummaging=false`, and `privateStateExposed=false`. Current remaining repo-swarm MVP organs are deeper interpreter/adoption semantics, more useful repo-owned configuration/action families, and Idunn-owned queue-run service lifecycle under explicit operator authority. diff --git a/state/ledgers.msgpack b/state/ledgers.msgpack index ce39ed9f026bd8ab96cbb967db04f7c18e665f55..c622bc275fdf36cb163edfa63432ea176fc583e0 100644 GIT binary patch delta 345 zcmYL@y-EW?6os86i$zL*5G}lrMj=CX*32%%N<=I~5`r4An@ldrnEi8h!wLZvENpDU zwmyPj;Tz-ud;$v_A3;drBq=No7w&h@J?D3}@$$I&wnfT}HxBsqbj7;=d9RRLLb^|r z!t)hrN#Vm4>I5N4BaJmZ3R4vzWCP_R3=v}$_8~GM z!f@k~sOEoE2y5v8|H;CBn15AE>&FhGHe-x4%Il1Jw#{8$=ODr!EE1_>JFe|6&m7yM z9_O^@a^%um_J({mvUVy-5Dm>D$`aUXpR}5^(`=v7^P^T35)6c?D)Z^s+9mrrxh%pT D##(UV delta 53 zcmeBa5c~N@bb|yVw}G*hfko6Y2G-iJ&B~00jEsrRQ<>VQGBE-%h-L<2mhDrSSf5k_ E0MgqK_W%F@ diff --git a/state/map.yaml b/state/map.yaml index 03d3adc5..430f0853 100644 --- a/state/map.yaml +++ b/state/map.yaml @@ -96,6 +96,7 @@ active_subgoals: - Gjallar now derives the first repo-work map semantic lens from Mind-admitted local Verse map rows. `repoWorkMapFamilyLensRows` / `REPO-WORK-MAP-LENS` group accepted repo-work consequences by safe action family, with item count, changed-path count, latest item/commit/Mind commit, Bifrost gate, and `privateStateExposed=false`; proof `.epiphany-smoke\repo-close-mind-adoption-guard-20260620-205055` reran the counterfeit-adoption guard and passed with `gjallarRepoWorkMapFamilyLensCount=1`. This is aggregate sight only, not scheduling, publication, merge, deployment, service lifecycle, or Mind admission authority. - Gjallar now derives a changed-path repo-work map lens from the same Mind-admitted local Verse rows. `repoWorkMapPathLensRows` / `REPO-WORK-MAP-PATH` group accepted consequences by changed repo path, with item count, safe-family list, latest item/commit/Mind commit, Bifrost gate, and `privateStateExposed=false`; proof `.epiphany-smoke\repo-close-mind-adoption-guard-20260620-205740` passed with `gjallarRepoWorkMapPathLensCount=1` beside the family lens. This lets agents see which Body paths have accepted work without opening private receipts or granting Gjallar actuation authority. - Gjallar now derives a branch-workbench repo-work map lens from the same Mind-admitted local Verse rows. `repoWorkMapBranchLensRows` / `REPO-WORK-MAP-BRANCH` group accepted consequences by branch, with item count, changed-path count, safe-family list, latest item/commit/Mind commit, Bifrost gate, and `privateStateExposed=false`; proof `.epiphany-smoke\repo-close-mind-adoption-guard-20260620-210747` passed with `gjallarRepoWorkMapBranchLensCount=1` beside the family/path lenses. This lets agents see which branch owns accepted consequences without opening private receipts or granting Gjallar scheduling, publication, deployment, lifecycle, or Mind admission authority. + - The local wrapper now has an explicit repo-local Verse readback target for Gjallar/swarm-triage. `tools/epiphany_local_run.ps1` accepts `-LocalVerseStore` and `-LocalVerseRuntimeId`; operator intent/receipt documents still write to the operator store, while `gjallar` and `swarm-triage` read compact repo-work map rows from the requested store/runtime. Wrapper proofs `local-20260621-011151-541-70056545` and `local-20260621-011207-755-d65e5c7e` aimed at `.epiphany-smoke\repo-planning-brief-family-20260620-235939\repo-body\.epiphany\local-verse.ccmp` with runtime `repo-planning-brief-family-smoke` and printed real `REPO-WORK-MAP`, `REPO-WORK-MAP-SEMANTIC`, family/path/branch/stage/gate rows with `privateStateExposed=false`. This is sight targeting only; the wrapper does not register repo-work schemas, reinterpret rows, or gain operator, Mind, Bifrost, Idunn, scheduler, publication, deployment, or service authority. - Gjallar/swarm-overview now projects typed repo-work overview history into the compact global sight report, Persona's public Eve surface lowers the same queue for peers, and Self has a first runnable queue surface over it. `epiphany-verse-query gjallar` reads all `epiphany.cultmesh.repo_work_overview.v0` event documents from local Verse, excludes the `latest` mirror, preserves latest scalar fields, emits multi-item `repoWorkOverviewRows`/TUI rows, and publishes bounded priority 35-39 non-mutating `repo-work-overview` action rows with `owner=Gjallar`, `hostedBody=repo-work`, `authorityGate=repo.work.overview`, `mutatesState=false`, `requiresElevatedAuthority=false`, proof-bundle refs, current gate/blocker/next-safe-move, and `privateStateExposed=false`. `epiphany-verse-query eve-surfaces`, `connect-eve`, and globally invokable Persona `eve-connect` tool readbacks expose compact `REPO-WORK-PEER` rows with item, gate, blocker, next safe move, branch, publication/sync state, and private seal for the public Persona surface only. `epiphany-work queue-run` selects current-repo rows at `ready-to-run`, `ready-to-adopt`, or `ready-to-execute`, delegates action to `tick`, refreshes overview after real advancement, and writes `epiphany.repo_work_queue_run_receipt.v0`; wrapper mode `tools/epiphany_local_run.ps1 -Mode repo-work-queue-run` exposes the same surface. Disposable proofs `.epiphany-smoke\gjallar-repo-work-queue-20260620-012027`, `.epiphany-smoke\eve-repo-work-queue-20260620-013322`, `.epiphany-smoke\queue-run-20260620-014314`, and wrapper artifact `local-20260620-014627-174-aada0241` showed two-item queues through sight, public Eve, direct queue-run, and wrapper dry-run without publication, merge, service lifecycle mutation, elevation, cross-repo mutation, or private-state exposure. - Agent memory lifecycle now has a first typed v0 operation surface in `epiphany-core::agent_memory`: `AgentMemoryLifecycleOperation` can revise, retire, crystallize, prune, and merge bounded memory records after role/agent review, and `epiphany-agent-memory-store review-lifecycle|apply-lifecycle` exposes the path at the operator edge. This closes the first explicit lifecycle-operation slice from the swarm-readiness gate; it does not yet make sleep silently mutate identity or project truth. - Persona public speech now has a parent-side eligibility receipt at the Discord/Aquarium mouth edge. `epiphany.persona_speech_audit.v0` records action kind, content fingerprint, opening/topic keys, recent-window counts, repeated opening/topic counts, channel saturation, and allow/block reasons. `epiphany-persona-discord post` blocks repeated public openings before token/webhook work; draft and bubble still emit audit receipts for operator inspection. The compatibility JSON artifact remains for display, but the durable witness is now `epiphany.cultmesh.persona_speech_audit.v0` in CultMesh with latest-key projection through local Verse context. Local MVP Persona bubbles now write that durable witness to `.epiphany-run/cultmesh/local-verse.ccmp`, not a separate mouth-side store. This is posting-edge policy, not a Persona prompt wish. @@ -641,5 +642,5 @@ current_status: - `tools/epiphany_local_run.ps1 -Mode swarm-online-runbook` now emits an explicit Idunn preflight summary before the operator elevation boundary. Its JSON and one-line summary report `preflightStatus`, child artifact present/hash-verified/mismatch/missing counts, aggregate service execution failed/missing check counts, child preflight rows with expected/actual SHA-256s, and private-state exposure. Live proof `local-20260619-025627-410-9724e2f6` generated the non-mutating parent artifact with `preflightStatus=ready-for-elevated-operator`, two child runbooks present, two hashes verified, zero mismatches, zero missing artifacts, eleven failed sealed service checks, zero missing checks, explicit aftercare audits, and `privateStateExposed=false`. The remaining scar is still explicit elevated operator execution followed by complete Idunn audits, not missing parent/child artifact readiness. - 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: Soul closure now emits a typed safe-family planning readback for `repo.planning_brief` work instead of only a generic family-assertions pass bit. The packet `epiphany.repo_work_safe_family_planning_readback.v0` carries candidate next safe-family rows, candidate count, planning requirement flags, Mind/Self/Substrate/Hands/Soul/Bifrost/Idunn gate flags, authority-denial flags, and the private-state seal while granting no Hands, scheduling, publication, deployment, or state-admission authority. Focused proof `.epiphany-smoke\repo-planning-brief-family-20260620-235939` ran init -> online -> accept -> derive-plan -> tick run/adopt/execute/close and passed with `candidateNextSafeFamilyCount=6`, `allExpectedCandidateFamiliesPresent=true`, `allPlanningRequirementsPresent=true`, `allRequiredGatesPresent=true`, `authorityDenied=true`, and `privateStateExposed=false`. - next_action: Continue repo-swarm MVP work from the documented Epiphany Online cut order in `notes/epiphany-repo-swarm-mvp-contract.md`. Typed Gjallar repo-work history/queue sight, peer-readable Persona Eve lowering, Self-owned `epiphany-work queue-run`, bounded `epiphany-swarm run`, execute-to-close scheduler handoff through `close-from-execute`, deterministic `derive-plan` families `append-worklog`, `planning-note`, `checklist-note`, `section-note` / `repo.markdown_managed_section`, `task-card` / `repo.task_card`, `repo-status-section` / `repo.status_section`, `repo-manifest` / `repo.body_manifest`, `repo-tool-capabilities` / `repo.tool_capabilities`, `repo-tool-request` / `repo.tool_request`, `repo-eve-surface` / `repo.eve_surface`, `repo-collaboration-policy` / `repo.collaboration_policy`, `repo-collaboration-topic` / `repo.collaboration_topic`, `repo-consensus-brief` / `repo.consensus_brief`, `repo-planning-brief` / `repo.planning_brief`, `repo-objective-draft` / `repo.objective_draft`, `repo-adoption-request` / `repo.adoption_request`, `repo-scheduling-request` / `repo.scheduling_request`, `repo-work-order` / `repo.work_order`, `repo-verification-request` / `repo.verification_request`, `repo-publication-request` / `repo.publication_request`, `repo-sync-request` / `repo.sync_request`, `repo-maintainer-review-request` / `repo.maintainer_review_request`, `repo-pr-request` / `repo.pr_request`, `repo-credit-request` / `repo.credit_request`, `repo-artifact-acceptance-request` / `repo.artifact_acceptance_request`, `repo-metrics-request` / `repo.metrics_request`, `repo.doctrine_update_request`, `repo.secret_policy_request`, `repo.deployment_config`, and `repo.deployment_request`, typed Imagination action-item receipts over allowlisted safe families, `epiphany.repo_work_mind_interpretation.v0` plus `epiphany.repo_work_mind_adoption_decision.v0` Mind interpreter receipts, explicit safe-family allowlist refusal, explicit requested-path/plan-changed-path mismatch refusal, explicit missing verification/evidence-needs refusal, Soul closure's Mind-adoption proof guard, explicit verification-output source-grounding closure guard, durable repo-work map admission before branch-local Hands consequences reach publication gates, local Verse `epiphany.cultmesh.repo_work_map_entry.v0` Gjallar readback for Mind-admitted map facts, hash-backed local proof bundles with Bifrost/GitHub/credit/PR/upstream-main publication rows, redacted `epiphany-work export-proof` public bundles plus local Verse `epiphany.cultmesh.repo_work_public_proof.v0` Gjallar readback, Bifrost-owned `gamecult.bifrost.public_proof_publication_receipt.v0` closure plus wrapper `bifrost-public-proof` for redacted public proofs, Idunn-hosted non-mutating queue-run lifecycle plan/runbook receipts including native proof `.epiphany-smoke\repo-work-service-lifecycle-20260620-185853`, deployment config/audit/runbook/aftercare CultMesh-ref ingestion plus Gjallar Idunn receipt discovery proof `.epiphany-smoke\repo-deployment-config-family-20260620-223203`, and the speech-audited `epiphany-work persona-intake` mouth plus wrapper `repo-persona-intake` are live with `privateStateExposed=false`; proofs `.epiphany-smoke\fresh-repo-mvp-20260620-180024`, `.epiphany-smoke\swarm-stop-classification-20260620-184717`, `.epiphany-smoke\repo-planning-brief-family-20260620-231539`, `.epiphany-smoke\repo-mind-safe-family-guard-20260620-194425`, `.epiphany-smoke\repo-mind-path-guard-20260620-194239`, `.epiphany-smoke\repo-mind-evidence-guard-20260620-224426`, `.epiphany-smoke\repo-planning-facets-20260620-224428`, `.epiphany-smoke\repo-closure-source-grounding-20260620-230626`, `.epiphany-smoke\repo-doctrine-update-request-family-20260620-192140`, `.epiphany-smoke\repo-secret-policy-request-family-20260620-193046`, `.epiphany-smoke\repo-deployment-config-family-20260620-223203`, `.epiphany-smoke\repo-deployment-request-family-20260620-195605`, `.epiphany-smoke\repo-close-mind-adoption-guard-20260620-201153`, `.epiphany-smoke\repo-close-mind-adoption-guard-20260620-202113`, and `.epiphany-smoke\repo-close-mind-adoption-guard-20260620-203717` show fresh-repo iteration-limit stop classification, empty-queue Gjallar classification, dry-run planning-preview Self classification, family-friendly Imagination safe-family decomposition cargo, Bifrost publication-gate classification, Bifrost/GitHub upstream-sync gate classification, Mind refusal for unsupported safe-family cargo, mismatched requested paths, and missing verification/evidence needs, Soul refusal for proofless verification output under required source grounding, reviewed doctrine/security/deployment config/request cargo, deployment-config audit readiness for Idunn review, deployment execution runbook readiness for explicit operator git-push handoff, deployment aftercare receipt ingestion from local Verse/CultMesh refs, Gjallar Idunn deployment/aftercare receipt rows, closure refusal for counterfeit Mind adoption, durable repo-map admission only after passing closure, local Verse/Gjallar map projection, closure, publication receipts, upstream-main sync, public-proof export, and private-state sealing. The contract note now explicitly answers that Epiphany is headed toward a functional repo swarm but is not fully online until the typed artery runs as a living repo organism. The next cut is deeper interpreter/closure depth or repo-work semantic map readback; Idunn deployment receipt refs are now visible through Gjallar/Odin sight without opening private state. Preserve Idunn service lifecycle ownership and existing CultMesh/Odin/Eve tool directories; service install/start/deployment execution still requires explicit elevated operator authority. + last_completed_repo_swarm_cut: The local wrapper now supports explicit repo-local Verse readback for Gjallar/swarm-triage through `-LocalVerseStore` and `-LocalVerseRuntimeId`. Operator run intent/receipt writes stay in the operator local Verse, while `gjallar` and `swarm-triage` can read actual Mind-admitted repo-work rows from a repo Body's `.epiphany\local-verse.ccmp`. Wrapper proofs `local-20260621-011151-541-70056545` and `local-20260621-011207-755-d65e5c7e` targeted `.epiphany-smoke\repo-planning-brief-family-20260620-235939\repo-body\.epiphany\local-verse.ccmp` with runtime `repo-planning-brief-family-smoke` and printed real `REPO-WORK-MAP`, `REPO-WORK-MAP-SEMANTIC`, family/path/branch/stage/gate rows with `privateStateExposed=false`, confirming earlier wrapper `none` rows were a read-target wound rather than missing repo memory. + next_action: Continue repo-swarm MVP work from the documented Epiphany Online cut order in `notes/epiphany-repo-swarm-mvp-contract.md`. The next useful cut is deeper interpreter/closure depth, another useful repo-owned safe action family, or Idunn-owned queue-run service lifecycle under explicit operator authority, not another display-only wrapper readback. Preserve Idunn service lifecycle ownership, Bifrost publication/upstream-main ownership, Mind durable-state admission, and existing CultMesh/Odin/Eve tool directories; service install/start/deployment execution still requires explicit elevated operator authority. diff --git a/tools/epiphany_local_run.ps1 b/tools/epiphany_local_run.ps1 index 13cde36a..473f7ff4 100644 --- a/tools/epiphany_local_run.ps1 +++ b/tools/epiphany_local_run.ps1 @@ -3,6 +3,9 @@ param( [string]$Mode = "smoke", [string]$Root = (Resolve-Path ".").Path, [string]$Workspace = "", + [Alias("LocalVerseStore")] + [string]$LocalVerseStoreOverride = "", + [string]$LocalVerseRuntimeId = "epiphany-local", [string]$ThreadId = "", [string]$CodexHome = "", [string]$TargetDir = "C:\Users\Meta\.cargo-target-codex", @@ -321,6 +324,17 @@ if (Test-Path -LiteralPath $userCargoExe) { $cargoExe = $userCargoExe } $localVerseStore = Join-Path $Root ".epiphany-run\cultmesh\local-verse.ccmp" +$localVerseReadStore = $localVerseStore +if ($LocalVerseStoreOverride -ne "") { + $localVerseParent = Split-Path -Parent $LocalVerseStoreOverride + if ($localVerseParent -ne "" -and (Test-Path -LiteralPath $localVerseParent)) { + $localVerseReadStore = Join-Path (Resolve-Path $localVerseParent).Path (Split-Path -Leaf $LocalVerseStoreOverride) + } elseif (Test-Path -LiteralPath $LocalVerseStoreOverride) { + $localVerseReadStore = (Resolve-Path $LocalVerseStoreOverride).Path + } else { + $localVerseReadStore = $LocalVerseStoreOverride + } +} $repoLocalVerseStore = Join-Path $Workspace ".epiphany\local-verse.ccmp" $operatorRunStore = $localVerseStore $operatorSnapshotStore = $localVerseStore @@ -403,7 +417,7 @@ function Assert-SwarmBrakeAllowsLiveRun { -Arguments @( "seed", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath (Join-Path $artifactRoot "swarm-brake-preflight-seed.stdout.json") ` @@ -416,7 +430,7 @@ function Assert-SwarmBrakeAllowsLiveRun { -Arguments @( "query", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath $brakeContextPath ` @@ -513,7 +527,7 @@ function Write-AgentStateSoaToLocalVerse { -Arguments @( "agent-state", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--agent-store", $agentStore ) ` -WorkingDirectory $Root ` @@ -528,7 +542,7 @@ $noEphemeralValue = $effectiveNoEphemeral.ToString().ToLowerInvariant() $operatorRunIntentArgs = @( "intent", "--store", $operatorRunStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--run-id", $runId, "--mode", $Mode, "--root", $Root, @@ -564,7 +578,7 @@ if ($shouldReadLocalVerse -and $Mode -ne "status" -and $Mode -ne "mvp") { -Arguments @( "seed-compact", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath (Join-Path $artifactRoot "local-verse-seed.stdout.json") ` @@ -601,7 +615,7 @@ if ($Mode -eq "status" -or $Mode -eq "mvp") { -Arguments @( "seed-compact", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath (Join-Path $artifactRoot "local-verse-seed.stdout.json") ` @@ -614,7 +628,7 @@ if ($Mode -eq "status" -or $Mode -eq "mvp") { -Arguments @( "from-status", "--store", $operatorSnapshotStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--snapshot-id", $operatorSnapshotId, "--source-mode", "status", "--input", $statusJson @@ -634,7 +648,7 @@ if ($Mode -eq "agent-state-soa") { -Arguments @( "agent-state-report", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath $resultPath ` @@ -649,7 +663,7 @@ if ($Mode -eq "swarm-poke-down") { -Arguments @( "poke-down-daemons", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath $resultPath ` @@ -663,8 +677,8 @@ if ($Mode -eq "swarm-triage") { -FilePath $verseQueryExe ` -Arguments @( "swarm-triage", - "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--store", $localVerseReadStore, + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath $resultPath ` @@ -679,7 +693,7 @@ if ($Mode -eq "swarm-status") { -Arguments @( "swarm-status", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath $resultPath ` @@ -694,7 +708,7 @@ if ($Mode -eq "cluster-topology") { -Arguments @( "cluster-topology", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath $resultPath ` @@ -709,7 +723,7 @@ if ($Mode -eq "eve-surfaces") { -Arguments @( "eve-surfaces", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath $resultPath ` @@ -721,7 +735,7 @@ if ($Mode -eq "eve-connect") { $connectArgs = @( "connect-eve", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) if ($EveAdvertisementId -ne "") { $connectArgs += @("--advertisement-id", $EveAdvertisementId) @@ -744,7 +758,7 @@ if ($Mode -eq "collaboration-feedback") { -Arguments @( "connect-eve", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--target-cluster-id", $EveTargetClusterId ) ` -WorkingDirectory $Root ` @@ -758,7 +772,7 @@ if ($Mode -eq "collaboration-feedback") { -Arguments @( "collaboration-feedback", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--eve-connection-receipt-id", "eve-connection-receipt", "--collaboration-topic", $CollaborationTopic, "--feedback-summary", $CollaborationFeedbackSummary, @@ -777,7 +791,7 @@ if ($Mode -eq "bifrost-publication") { -Arguments @( "bifrost-publication", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--target-repository", $BifrostTargetRepository, "--target-branch", $BifrostTargetBranch, "--change-summary", $BifrostChangeSummary, @@ -860,7 +874,7 @@ if ($Mode -eq "bifrost-ledger") { -Arguments @( "bifrost-ledger", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath $resultPath ` @@ -875,7 +889,7 @@ if ($Mode -eq "receipt-directory") { -Arguments @( "receipt-directory", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath $resultPath ` @@ -890,7 +904,7 @@ if ($Mode -eq "tool-directory") { -Arguments @( "tool-directory", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath $resultPath ` @@ -902,7 +916,7 @@ if ($Mode -eq "tool-invoke") { $toolInvokeArgs = @( "invoke-tool", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--capability-id", $ToolCapabilityId, "--requesting-agent-id", $ToolRequestingAgentId, "--source-cluster-id", $ToolRequestingClusterId @@ -936,8 +950,8 @@ if ($Mode -eq "swarm-overview" -or $Mode -eq "gjallar") { -FilePath $verseQueryExe ` -Arguments @( $overviewCommand, - "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--store", $localVerseReadStore, + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath $resultPath ` @@ -959,7 +973,7 @@ if ($Mode -eq "swarm-online-runbook") { -Arguments @( "swarm-overview", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath $overviewPath ` @@ -1152,7 +1166,7 @@ if ($Mode -eq "swarm-online-runbook") { status = "ok" preflightStatus = $preflightStatus store = $localVerseStore - runtimeId = "epiphany-local" + runtimeId = $LocalVerseRuntimeId runbookPath = $runbookPath artifactSha256 = $runbookSha256 elevatedCommand = $elevatedCommand @@ -1188,7 +1202,7 @@ if ($Mode -eq "service-policy-directory") { -Arguments @( "service-policy-directory", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath $resultPath ` @@ -1200,7 +1214,7 @@ if ($Mode -eq "service-plan") { $planArgs = @( "service-plan", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $ServiceId, @@ -1223,7 +1237,7 @@ if ($Mode -eq "service-launch") { $launchArgs = @( "service-launch", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $ServiceId, @@ -1247,7 +1261,7 @@ if ($Mode -eq "service-runbook") { $runbookArgs = @( "service-runbook", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $ServiceId, @@ -1276,7 +1290,7 @@ if ($Mode -eq "cluster-service-runbook") { $runbookArgs = @( "cluster-service-runbook", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $clusterServiceId, @@ -1307,7 +1321,7 @@ if ($Mode -eq "cluster-service-install-plan" -or $Mode -eq "cluster-service-inst $installArgs = @( "cluster-service-install-plan", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $clusterServiceId, @@ -1346,7 +1360,7 @@ if ($Mode -eq "cluster-service-audit") { $auditArgs = @( "cluster-service-audit", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $clusterServiceId @@ -1377,7 +1391,7 @@ if ($Mode -eq "cluster-service-start-plan" -or $Mode -eq "cluster-service-stop-p $controlArgs = @( "cluster-service-$control", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $clusterServiceId @@ -1503,7 +1517,7 @@ if ($Mode -eq "cluster-service-execution-runbook") { $runbookReceiptArgs = @( "cluster-service-execution-runbook", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $clusterServiceId, @@ -1530,7 +1544,7 @@ if ($Mode -eq "cluster-service-execution-readiness") { $readinessArgs = @( "cluster-service-execution-readiness", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $clusterServiceId @@ -1559,7 +1573,7 @@ if ($Mode -eq "cluster-service-execution-audit") { $auditArgs = @( "cluster-service-execution-audit", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $clusterServiceId @@ -1666,7 +1680,7 @@ if ($Mode -eq "service-execution-runbook") { $runbookReceiptArgs = @( "service-execution-runbook", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $ServiceId, @@ -1697,7 +1711,7 @@ if ($Mode -eq "service-install-plan" -or $Mode -eq "service-install-execute") { $installArgs = @( "windows-service-install", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $ServiceId, @@ -1731,7 +1745,7 @@ if ($Mode -eq "service-status") { $statusArgs = @( "windows-service-status", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $ServiceId @@ -1756,7 +1770,7 @@ if ($Mode -eq "service-tick") { -Arguments @( "tick", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId ) ` @@ -1770,7 +1784,7 @@ if ($Mode -eq "service-reconcile") { $reconcileArgs = @( "windows-service-reconcile", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $ServiceId, @@ -1793,7 +1807,7 @@ if ($Mode -eq "service-execution-readiness") { $readinessArgs = @( "windows-service-execution-readiness", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $ServiceId @@ -1815,7 +1829,7 @@ if ($Mode -eq "service-execution-audit") { $auditArgs = @( "windows-service-execution-audit", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $ServiceId @@ -1839,7 +1853,7 @@ if ($Mode -eq "service-start-plan" -or $Mode -eq "service-stop-plan" -or $Mode - $controlArgs = @( "windows-service-$control", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $SchedulerId, "--service-id", $ServiceId @@ -1959,7 +1973,7 @@ if ($Mode -eq "repo-work-service-plan" -or $Mode -eq "repo-work-service-runbook" $serviceCommandArgs = @( "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--daemon-id", $DaemonId, "--scheduler-id", $repoWorkSchedulerId, "--service-id", $repoWorkServiceId, @@ -2067,7 +2081,7 @@ if ($Mode -eq "mvp") { "bubble", "--artifact-dir", $PersonaArtifactDir, "--cultmesh-store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--content", $PersonaInput, "--source", "epiphany/local-mvp", "--status", "ready", @@ -2126,7 +2140,7 @@ if (($Mode -eq "plan" -or $liveRuntimeMode) -and (Test-Path -LiteralPath $coordi -Arguments @( "coordinator-receipt", "--store", $localVerseStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--run-id", $runId, "--artifact-root", (Join-Path $dogfoodRoot "coordinator"), "--coordinator-summary", $coordinatorSummaryPath, @@ -2196,6 +2210,8 @@ $summary = @" - operatorSnapshotStore: $operatorSnapshotStore - localVerseBinary: $verseQueryExe - localVerseStore: $localVerseStore +- localVerseReadStore: $localVerseReadStore +- localVerseRuntimeId: $LocalVerseRuntimeId - coordinatorBinary: $coordinatorExe - runtimeStore: $runtimeStore - modelRuntimeBinary: $modelRuntimeExe @@ -2768,7 +2784,7 @@ if ($resultPath -ne "" -and (Test-Path -LiteralPath $resultPath)) { $operatorRunReceiptArgs = @( "receipt", "--store", $operatorRunStore, - "--runtime-id", "epiphany-local", + "--runtime-id", $LocalVerseRuntimeId, "--run-id", $runId, "--mode", $Mode, "--status", "completed", @@ -2794,7 +2810,7 @@ if ($shouldReadLocalVerse) { -Arguments @( "query", "--store", $localVerseStore, - "--runtime-id", "epiphany-local" + "--runtime-id", $LocalVerseRuntimeId ) ` -WorkingDirectory $Root ` -StdoutPath (Join-Path $artifactRoot "local-verse-context.json") `