Carry Mind admission receipts into Soul

This commit is contained in:
Meta Vens 2026-08-07 03:42:52 +01:00
commit e515ffbcaf
5 changed files with 170 additions and 18 deletions

View file

@ -146,6 +146,49 @@ pub fn append_verification_hands_receipt_context(
crate::runtime_repo_frontier_route(runtime_store_path, &verification_request.route_id)
.map_err(|error| format!("failed to reload Soul frontier route: {error}"))?
.ok_or_else(|| "Soul frontier route disappeared after request commit".to_string())?;
let admission_receipt = crate::runtime_repo_model_admission_receipt(
runtime_store_path,
&route.admission_receipt_id,
)
.map_err(|error| format!("failed to load Mind RepoModel admission receipt for Soul: {error}"))?
.ok_or_else(|| "Soul frontier route has no persisted Mind admission receipt".to_string())?;
let admission_review = crate::runtime_repo_model_admission_review(
runtime_store_path,
&admission_receipt.review_id,
)
.map_err(|error| format!("failed to load Mind RepoModel admission review for Soul: {error}"))?
.ok_or_else(|| "Soul frontier admission receipt has no persisted Mind review".to_string())?;
let admission_result_id = admission_receipt
.result_id
.as_deref()
.ok_or_else(|| "Soul frontier admission receipt is not bound to a Modeling result".to_string())?;
let modeling_acceptances = state
.acceptance_receipts
.iter()
.filter(|receipt| {
receipt.role_id == "modeling"
&& receipt.surface == "roleAccept"
&& receipt.status == "accepted"
&& receipt.result_id == admission_result_id
})
.collect::<Vec<_>>();
if modeling_acceptances.len() != 1 {
return Err(
"Soul frontier requires exactly one Modeling acceptance bound to its Mind admission"
.to_string(),
);
}
let modeling_acceptance = modeling_acceptances[0];
let state_commit_id = format!("mind-commit-{}", modeling_acceptance.id);
let state_commit = crate::runtime_mind_state_commit_receipt(runtime_store_path, &state_commit_id)
.map_err(|error| format!("failed to load Mind state commit receipt for Soul: {error}"))?
.ok_or_else(|| "Soul frontier Modeling acceptance has no Mind state commit receipt".to_string())?;
let gateway_review = crate::runtime_mind_gateway_review(
runtime_store_path,
&state_commit.gateway_id,
)
.map_err(|error| format!("failed to load Mind gateway review for Soul: {error}"))?
.ok_or_else(|| "Soul frontier Mind state commit has no gateway review".to_string())?;
let telemetry = work_loop_telemetry_from_hands_chain(
&chain,
runtime_store_path,
@ -171,6 +214,62 @@ pub fn append_verification_hands_receipt_context(
route.question,
route.gap,
));
context.push_str("mindAdmissionChain:\n");
context.push_str(&format!(
"- modelingAcceptance: id={} resultId={} jobId={} acceptedAt={}\n",
modeling_acceptance.id,
modeling_acceptance.result_id,
modeling_acceptance.job_id,
modeling_acceptance.accepted_at,
));
context.push_str(&format!(
"- gatewayReview: schemaVersion={} gatewayId={} sourceKind={} sourceRoleId={} decision={:?} allowedEffects={} refusedEffects={}\n",
gateway_review.schema_version,
gateway_review.gateway_id,
gateway_review.source_kind,
gateway_review.source_role_id,
gateway_review.decision,
gateway_review.allowed_effects.join(" | "),
gateway_review.refused_effects.join(" | "),
));
context.push_str(&format!(
"- stateCommit: schemaVersion={} receiptId={} gatewayId={} stateRevision={} changedFields={} committedAt={}\n",
state_commit.schema_version,
state_commit.receipt_id,
state_commit.gateway_id,
state_commit.state_revision,
state_commit.changed_fields.join(" | "),
state_commit.committed_at,
));
context.push_str(&format!(
"- repoModelAdmissionReview: schemaVersion={} reviewId={} resultId={} jobId={} patchId={} patchSha256={} baseRevision={} baseHash={} decision={:?} evidenceIds={} reviewedAt={}\n",
admission_review.schema_version,
admission_review.review_id,
admission_review.result_id.as_deref().unwrap_or(""),
admission_review.job_id.as_deref().unwrap_or(""),
admission_review.patch_id,
admission_review.patch_sha256,
admission_review.base_revision,
admission_review.base_hash,
admission_review.decision,
admission_review.evidence_ids.join(" | "),
admission_review.reviewed_at,
));
context.push_str(&format!(
"- repoModelAdmissionReceipt: schemaVersion={} receiptId={} reviewId={} resultId={} patchId={} patchSha256={} previousRevision={} previousHash={} admittedRevision={} admittedHash={} admittedAt={} proposalModelingRequestId={}\n",
admission_receipt.schema_version,
admission_receipt.receipt_id,
admission_receipt.review_id,
admission_receipt.result_id.as_deref().unwrap_or(""),
admission_receipt.patch_id,
admission_receipt.patch_sha256,
admission_receipt.previous_revision,
admission_receipt.previous_hash,
admission_receipt.admitted_revision,
admission_receipt.admitted_hash,
admission_receipt.admitted_at,
admission_receipt.proposal_modeling_request_id,
));
if let Some(plan) = route.adopted_plan.as_ref() {
context.push_str(&format!(
"adoptedCandidateSha256: {}\nadoptedAction: {}\nadoptedCommand: {}\nadoptedChecks: {}\nadoptedStopConditions: {}\nadoptedRollbackSteps: {}\nadoptedCommitMessage: {}\n",
@ -1483,8 +1582,8 @@ mod tests {
objective: Some("Verify Hands receipts.".to_string()),
acceptance_receipts: vec![EpiphanyAcceptanceReceipt {
id: "accept-modeling-context".to_string(),
result_id: "result-modeling-context".to_string(),
job_id: "modeling-job-context".to_string(),
result_id: "context-route-result".to_string(),
job_id: "context-route-job".to_string(),
binding_id: "modeling-checkpoint-worker".to_string(),
surface: "roleAccept".to_string(),
role_id: "modeling".to_string(),
@ -1496,6 +1595,28 @@ mod tests {
}],
..Default::default()
};
let gateway_review = crate::MindGatewayReview {
schema_version: crate::MIND_GATEWAY_REVIEW_SCHEMA_VERSION.to_string(),
gateway_id: "mind-context-route-admission".to_string(),
source_kind: "modelingFinding".to_string(),
source_role_id: "modeling".to_string(),
decision: crate::MindGatewayDecision::Accept,
allowed_effects: vec!["acceptanceReceipts".to_string()],
refused_effects: Vec::new(),
reasons: vec!["Fixture Mind admission".to_string()],
contract: "Fixture Mind gateway review".to_string(),
};
crate::put_mind_gateway_review(&runtime_store, &gateway_review)?;
crate::put_mind_state_commit_receipt(
&runtime_store,
&crate::mind_state_commit_receipt(
"mind-commit-accept-modeling-context".to_string(),
&gateway_review,
state.revision,
vec!["AcceptanceReceipts".to_string()],
"2026-06-12T00:00:03Z".to_string(),
),
)?;
let context = append_verification_hands_receipt_context(
"<epiphany_dynamic_context></epiphany_dynamic_context>".to_string(),
&runtime_store,
@ -1509,6 +1630,10 @@ mod tests {
assert!(context.contains("hands-commit-context"));
assert!(context.contains("verificationRequestId:"));
assert!(context.contains("frontierRouteId:"));
assert!(context.contains("mindAdmissionChain:"));
assert!(context.contains("mind-commit-accept-modeling-context"));
assert!(context.contains("context-route-admission"));
assert!(context.contains("context-route-proposal"));
assert!(context.contains("Does verification see the exact receipts?"));
assert!(context.contains("Unrouted consequences are invalid."));
assert!(context.contains("resolvedReceiptPayloads"));

View file

@ -1061,6 +1061,8 @@ pub use runtime_spine::runtime_job_snapshot;
pub use runtime_spine::runtime_latest_hands_receipt_chain_after;
pub use runtime_spine::runtime_mind_gateway_review;
pub use runtime_spine::runtime_mind_state_commit_receipt;
pub use runtime_spine::runtime_repo_model_admission_receipt;
pub use runtime_spine::runtime_repo_model_admission_review;
pub use runtime_spine::runtime_modeling_semantic_projection_input;
pub use runtime_spine::runtime_registered_document_types;
pub use runtime_spine::runtime_reorient_worker_result;

View file

@ -3504,6 +3504,26 @@ pub fn commit_repo_model_admission(
Ok(receipt)
}
pub fn runtime_repo_model_admission_review(
runtime_store: impl AsRef<Path>,
review_id: &str,
) -> Result<Option<RepoModelAdmissionReview>> {
validate_non_empty(review_id, "repo model admission review id")?;
let mut cache = runtime_spine_cache(runtime_store)?;
cache.pull_all_backing_stores()?;
cache.get::<RepoModelAdmissionReview>(review_id)
}
pub fn runtime_repo_model_admission_receipt(
runtime_store: impl AsRef<Path>,
receipt_id: &str,
) -> Result<Option<RepoModelAdmissionReceipt>> {
validate_non_empty(receipt_id, "repo model admission receipt id")?;
let mut cache = runtime_spine_cache(runtime_store)?;
cache.pull_all_backing_stores()?;
cache.get::<RepoModelAdmissionReceipt>(receipt_id)
}
fn put_immutable_planning_entry<T: cultcache_rs::DatabaseEntry + PartialEq + Clone>(
store_path: &Path,
key: &str,

View file

@ -8,7 +8,7 @@ CultMesh projects inspectable surfaces. Codex remains only as the retained
OpenAI-compatible authentication and model-transport boundary.
The local `codex/epiphany-shakedown-live` branch has a focused, tested
Hands-to-Soul routing repair pending commit and publication.
Mind-to-Soul launch-context repair pending commit and publication.
Current host authority:
@ -41,7 +41,8 @@ Current host authority:
admits them through packaged `apply-snapshot` as transport-only state. The
provider is ready with no pending failures and exposes no private state.
The active authenticated shakedown release contains the native Hands actuator.
The active authenticated shakedown release contains the native Hands actuator
and native Hands-to-Soul routing.
Older runtime and resident stores are non-authoritative.
The current live readiness result is mixed:
@ -50,11 +51,15 @@ The current live readiness result is mixed:
Mind admitted it and emitted a scoped Hands gate.
- The packaged Hands actuator recorded native typed patch, command, and commit
receipts for a real pushed consequence.
- Coordinator routing now treats a complete native Hands receipt chain after
the latest accepted boundary as implementation evidence. The preserved live
state selects `launchVerification`; the legacy thread-state audit is no
longer the sole routing signal.
- Soul has not yet returned an admitted verdict for this receipt chain.
- Coordinator routing treats a complete native Hands receipt chain after the
latest accepted boundary as implementation evidence. The legacy thread-state
audit is no longer the sole routing signal.
- Soul inspected the live Hands chain and returned an admitted
`needs-evidence` verdict: the consequence is concrete, but Self omitted the
actual Mind proposal/admission/state-commit bodies from the launch packet.
- Launch assembly now resolves the route's exact RepoModel admission receipt,
its Mind review, the bound Modeling acceptance, its Mind gateway review, and
its Mind state commit. Soul launch fails closed if that chain is incomplete.
- Resident artifact retention is unbounded. Durable Windows supervision,
crash/reboot recovery, session closure, long-duration resource behavior, and
Linux/Yggdrasil cognition remain unproven.
@ -76,11 +81,11 @@ The current live readiness result is mixed:
## Next action
Commit and publish the Hands-to-Soul routing repair, package the exact release,
then launch Soul against the preserved native Hands consequence and require an
admitted verdict grounded in its complete receipt chain. After that, continue
the organ matrix, retention, supervised recovery, session closure,
long-duration resource, and Linux/Yggdrasil proofs.
Commit and publish the Mind-to-Soul context repair, package the exact release,
then run a fresh proposal-to-Modeling-to-Mind-to-Hands-to-Soul circuit and
require Soul to judge both the admission and consequence receipt bodies. After
that, continue the organ matrix, retention, supervised recovery, session
closure, long-duration resource, and Linux/Yggdrasil proofs.
## Immediate Re-entry Instruction

View file

@ -34,9 +34,9 @@ invariants:
- Evidence and git retain history; this map retains only state that changes future decisions.
current_status:
summary: Epiphany is awake enough for supervised Starfire shakedown, not deployment-ready. The live typed path has reached proposal-bound Modeling, Mind admission, a scoped Hands gate, and native Hands patch, command, and commit receipts for a real pushed consequence. Coordinator routing now recognizes a complete native Hands receipt chain after the latest accepted Modeling or Verification boundary and selects Soul verification. Soul has not yet returned an admitted verdict for this consequence. Resident artifact growth remains unbounded, durable Windows supervision and crash/reboot recovery are unproven, and no Linux or Yggdrasil cognition run has been performed.
summary: Epiphany is awake enough for supervised Starfire shakedown, not deployment-ready. The live typed path reached proposal-bound Modeling, Mind admission, a scoped Hands gate, native Hands receipts, and an admitted Soul needs-evidence verdict. Soul verified the Hands consequence but correctly refused the end-to-end claim because Self's launch packet omitted the Mind admission bodies. Launch assembly is being repaired to carry the exact route-bound RepoModel review and receipt, Modeling acceptance, Mind gateway review, and Mind state commit beside the Hands chain. Resident artifact growth remains unbounded, durable Windows supervision and crash/reboot recovery are unproven, and no Linux or Yggdrasil cognition run has been performed.
operational_state:
local_worktree: hands_to_soul_routing_repair_under_verification
local_worktree: mind_to_soul_context_repair_under_verification
operator_wireguard: restored
yggdrasil: canonical_small_public_crossing_body
starfire: temporary_epiphany_cognition_body
@ -52,8 +52,8 @@ current_status:
bifrost_feedback_crossing: authenticated_transport_only
yggdrasil_epiphany_services: absent
resident_physiology: heartbeat_and_self_running
unresolved_authority: Soul has not yet verified the complete native Hands consequence chain in the live coordinated run; deployment authority remains absent.
next_action: Commit and publish the Hands-to-Soul routing repair, package the exact release, launch Soul against the preserved live consequence, and require an admitted verdict grounded in the complete receipt chain.
unresolved_authority: The full route remains unproven until a fresh Soul launch receives and judges both the route-bound Mind admission chain and the native Hands consequence chain; deployment authority remains absent.
next_action: Commit and publish the Mind-to-Soul context repair, then run a fresh exact-release proposal-to-Soul circuit and require a verdict grounded in both admission and consequence receipts.
active_subgoals:
- Prove Persona, Self, Eyes, Modeling, Imagination, Hands, Soul, Mind, Continuity, and nervous-system behavior individually.