use star::autonomy::{ ActionAuthority, ActionBroker, AutonomousKernel, CognitiveOperator, Goal, OperatorContext, OperatorProposal, OperatorRegistry, ResourceBudget, }; use star::environment::hidden_rule::{ HiddenRuleAction, HiddenRuleEnvironment, HiddenRuleObservation, }; struct InspectOperator; impl CognitiveOperator for InspectOperator { fn id(&self) -> &str { "inspect-hidden-rule" } fn propose( &mut self, context: &OperatorContext<'_, HiddenRuleEnvironment>, ) -> Option> { if context.observation.clue.is_some() || !context.available_actions.contains(&HiddenRuleAction::Inspect) { return None; } Some(OperatorProposal { action: HiddenRuleAction::Inspect, authority: ActionAuthority::Observe, rationale: "acquire information before committing to a candidate".into(), predicted_effect: "reduce epistemic uncertainty about the hidden rule".into(), expected_utility: 3.0, requested_discharge: 1.0, compute_cost: 1, declared_action_cost: 1, }) } } struct ApplyClueOperator; impl CognitiveOperator for ApplyClueOperator { fn id(&self) -> &str { "apply-observed-clue" } fn propose( &mut self, context: &OperatorContext<'_, HiddenRuleEnvironment>, ) -> Option> { let clue = context.observation.clue?; if context.observation.candidate == Some(clue) { return None; } let action = HiddenRuleAction::Set(clue); if !context.available_actions.contains(&action) { return None; } Some(OperatorProposal { action, authority: ActionAuthority::ReversibleSandbox, rationale: "apply the independently observed rule clue".into(), predicted_effect: "move the candidate state toward the verified target".into(), expected_utility: 2.0, requested_discharge: 1.0, compute_cost: 1, declared_action_cost: 1, }) } } struct SubmitVerifiedCandidateOperator; impl CognitiveOperator for SubmitVerifiedCandidateOperator { fn id(&self) -> &str { "submit-verified-candidate" } fn propose( &mut self, context: &OperatorContext<'_, HiddenRuleEnvironment>, ) -> Option> { let HiddenRuleObservation { clue, candidate, submitted, } = *context.observation; if submitted || clue.is_none() || candidate != clue { return None; } if !context.available_actions.contains(&HiddenRuleAction::Submit) { return None; } Some(OperatorProposal { action: HiddenRuleAction::Submit, authority: ActionAuthority::ReversibleSandbox, rationale: "submit only after the candidate matches observed evidence".into(), predicted_effect: "satisfy the externally verified objective".into(), expected_utility: 1.0, requested_discharge: 1.0, compute_cost: 1, declared_action_cost: 1, }) } } fn registry() -> OperatorRegistry { let mut registry = OperatorRegistry::new(); registry.register(InspectOperator).unwrap(); registry.register(ApplyClueOperator).unwrap(); registry.register(SubmitVerifiedCandidateOperator).unwrap(); registry } fn main() { const SEEDS: u64 = 64; let mut solved = 0_u64; let mut total_steps = 0_u64; let mut denied_actions = 0_u64; let mut accepted_discharge = 0.0_f64; for seed in 0..SEEDS { let mut kernel = AutonomousKernel::new( Goal::external(seed + 1, "infer and satisfy the hidden rule"), registry(), ActionBroker::sandbox_only(), ResourceBudget::new(4, 4, 4), ); let mut environment = HiddenRuleEnvironment::new(); let report = kernel.run_episode(&mut environment, seed); if report.solved { solved += 1; } total_steps += report.usage.steps; denied_actions += report.denied_actions; accepted_discharge += report .records .iter() .map(|record| record.accepted_discharge as f64) .sum::(); } let report = serde_json::json!({ "experiment": "A1 bounded autonomous kernel foundation", "classification": if solved == SEEDS && denied_actions == 0 { "FOUNDATION_PASS" } else { "FOUNDATION_REJECTED" }, "claim_boundary": "contract and deterministic closed-loop foundation only; not an AGI or cross-domain transfer result", "seeds": SEEDS, "solved": solved, "solve_rate": solved as f64 / SEEDS as f64, "mean_steps": total_steps as f64 / SEEDS as f64, "denied_actions": denied_actions, "total_independently_accepted_discharge": accepted_discharge, "live_chat_wiring": false, "automatic_ontology_promotion": false, "self_edit_authority": false }); println!("{}", serde_json::to_string_pretty(&report).unwrap()); assert_eq!(solved, SEEDS); assert_eq!(total_steps, SEEDS * 3); assert_eq!(denied_actions, 0); }