% SUBGRAPH 60: DERIVED REASONING LAYER % subdomain: ontology closure, schema introspection, recommendation risk/reroute % 60.1 Type hierarchy and class closure. ClassAncestor(child_class, parent_class) :- Edge(child_class, "food/subclass_of", parent_class). ClassAncestor(child_class, ancestor_class) :- Edge(child_class, "food/subclass_of", parent_class), ClassAncestor(parent_class, ancestor_class). EntityClass(entity_id, class_id) :- Edge(entity_id, "food/instance_of", class_id). EntityClass(entity_id, ancestor_class) :- Edge(entity_id, "food/instance_of", class_id), ClassAncestor(class_id, ancestor_class). % 60.2 Bootstrap predicate metadata introspection via Smeta/Ometa. PredicateSubjectMeta(predicate_id, subject_type, subject_cardinality) :- Smeta@(cid=subject_meta_id, liquid/subject_meta=predicate_id), TypeAndCardinality(subject_meta_id, subject_type, subject_cardinality). PredicateObjectMeta(predicate_id, object_type, object_cardinality) :- Ometa@(cid=object_meta_id, liquid/object_meta=predicate_id), TypeAndCardinality(object_meta_id, object_type, object_cardinality). PredicateSchemaNodeAligned(predicate_id, domain_class_id, range_class_id) :- Edge(predicate_id, "meta/domain_class", domain_class_id), Edge(predicate_id, "meta/range_class", range_class_id), PredicateSubjectMeta(predicate_id, "liquid/node", subject_cardinality), PredicateObjectMeta(predicate_id, "liquid/node", object_cardinality). % 60.3 Profile and rule projection. ProfileGoal(profile_id, goal_id) :- GoalAssignment@(goal/profile=profile_id, goal/goal=goal_id). ProfileConstraint(profile_id, constraint_id) :- ConstraintAssertion@(cst/profile=profile_id, cst/constraint=constraint_id). ConstraintRule(constraint_id, rule_id) :- Edge(constraint_id, "food/derived_from", rule_id). ProfileRule(profile_id, rule_id) :- ProfileConstraint(profile_id, constraint_id), ConstraintRule(constraint_id, rule_id). ProfileContext(profile_id, factor_id, value_id) :- ContextFact@(ctx/profile=profile_id, ctx/factor=factor_id, ctx/value=value_id). ProfileRequiredCertification(profile_id, certification_id) :- ProfileRule(profile_id, rule_id), Edge(rule_id, "food/requires_certification", certification_id). ProfileRequiredCertification(profile_id, certification_id) :- ProfileRule(profile_id, certification_id), EntityClass(certification_id, "class/Certification"). % 60.4 Candidate fit and conflict derivations. GoalCandidate(profile_id, subject_id, goal_id) :- ProfileGoal(profile_id, goal_id), Suitability@(suit/subject=subject_id, suit/rule=goal_id, suit/status="suit/allowed"). ProfileRuleDisallow(profile_id, subject_id, rule_id) :- ProfileRule(profile_id, rule_id), Suitability@(suit/subject=subject_id, suit/rule=rule_id, suit/status="suit/disallowed"). ProfileAllergenConflict(profile_id, subject_id, allergen_id) :- ProfileRule(profile_id, allergen_id), AllergenStatus@(alg/subject=subject_id, alg/allergen=allergen_id, alg/status="adisposition/contains"). ProfileAllergenCaution(profile_id, subject_id, allergen_id) :- ProfileRule(profile_id, allergen_id), AllergenStatus@(alg/subject=subject_id, alg/allergen=allergen_id, alg/status="adisposition/may_contain"). % 60.5 Active plan and recommendation graph projections. ActivePlan(profile_id, plan_id) :- Edge(plan_id, "food/targets_profile", profile_id), PlanWindow@(pw/plan=plan_id, pw/status="plan_status/active"). RecommendationRecord(recommendation_id, plan_id, target_id, recommendation_type_id, role_id) :- PlanRecommendation@( prec/id=recommendation_id, prec/plan=plan_id, prec/target=target_id, prec/recommendation_type=recommendation_type_id, prec/role=role_id ). RecommendationWithRationale(recommendation_id) :- PlanRecommendation@(prec/id=recommendation_id, prec/rationale=rationale_text). RecommendationWithActionCta(recommendation_id) :- PlanRecommendation@(prec/id=recommendation_id, prec/action_cta=action_cta_text). PlanHasRecommendationRole(plan_id, role_id) :- RecommendationRecord(recommendation_id, plan_id, target_id, recommendation_type_id, role_id), RecommendationWithRationale(recommendation_id), RecommendationWithActionCta(recommendation_id). PlanHasPrimaryRecommendation(plan_id) :- PlanHasRecommendationRole(plan_id, "rec_role/primary"). PlanHasFallbackRecommendation(plan_id) :- PlanHasRecommendationRole(plan_id, "rec_role/fallback"). RecommendationContractComplete(plan_id) :- PlanHasPrimaryRecommendation(plan_id), PlanHasFallbackRecommendation(plan_id). % Project compound recommendation rows into explicit query predicates. RecommendationEntityClass(recommendation_id, "class/PlanRecommendation") :- RecommendationRecord(recommendation_id, plan_id, target_id, recommendation_type_id, role_id). RecommendationForPlan(recommendation_id, plan_id) :- RecommendationRecord(recommendation_id, plan_id, target_id, recommendation_type_id, role_id). RecommendationTarget(recommendation_id, target_id) :- RecommendationRecord(recommendation_id, plan_id, target_id, recommendation_type_id, role_id). RecommendationType(recommendation_id, recommendation_type_id) :- RecommendationRecord(recommendation_id, plan_id, target_id, recommendation_type_id, role_id). RecommendationRole(recommendation_id, role_id) :- RecommendationRecord(recommendation_id, plan_id, target_id, recommendation_type_id, role_id). RecommendationConcept(recommendation_id, target_id) :- RecommendationRecord(recommendation_id, plan_id, target_id, "recommendation_type/concept", role_id). RecommendationMealTemplate(recommendation_id, target_id) :- RecommendationRecord(recommendation_id, plan_id, target_id, "recommendation_type/meal_template", role_id). PlanRecommendationTarget(profile_id, plan_id, recommendation_id, role_id, target_id) :- ActivePlan(profile_id, plan_id), RecommendationRecord(recommendation_id, plan_id, target_id, recommendation_type_id, role_id). RecommendationContextFit(profile_id, recommendation_id, target_id, context_value_id) :- PlanRecommendationTarget(profile_id, plan_id, recommendation_id, role_id, target_id), ProfileContext(profile_id, context_factor_id, context_value_id), Edge(target_id, "food/available_in_access", context_value_id). RecommendationCertificationFit(profile_id, recommendation_id, target_id, certification_id) :- PlanRecommendationTarget(profile_id, plan_id, recommendation_id, role_id, target_id), ProfileRequiredCertification(profile_id, certification_id), Edge(target_id, "food/certified_as", certification_id). RecommendationEvidence(recommendation_id, basis_id, evidence_id) :- RecommendationBasis@(rb/recommendation=recommendation_id, rb/basis=basis_id, rb/evidence=evidence_id). PlanWindowTriggeredByDisruption(profile_id, plan_id, checkin_id, disruption_id) :- ActivePlan(profile_id, plan_id), PlanWindow@(pw/plan=plan_id, pw/trigger_checkin=checkin_id), Edge(checkin_id, "food/reports_disruption", disruption_id). PlanWindowTriggeredByDisruption(profile_id, plan_id, checkin_id, disruption_id) :- ActivePlan(profile_id, plan_id), PlanWindow@(pw/plan=plan_id, pw/trigger_checkin=checkin_id), CheckInDerivedDisruption(profile_id, plan_id, checkin_id, disruption_id). RerouteRecommendationAfterDisruption(profile_id, plan_id, recommendation_id, disruption_id) :- PlanWindowTriggeredByDisruption(profile_id, plan_id, checkin_id, disruption_id), RecommendationRecord(recommendation_id, plan_id, target_id, recommendation_type_id, "rec_role/reroute"). % 60.6 Risk and reroute triggers. RecommendationAtRisk(profile_id, recommendation_id, target_id) :- PlanRecommendationTarget(profile_id, plan_id, recommendation_id, role_id, target_id), ProfileAllergenConflict(profile_id, target_id, allergen_id). RecommendationAtRisk(profile_id, recommendation_id, target_id) :- PlanRecommendationTarget(profile_id, plan_id, recommendation_id, role_id, target_id), ProfileAllergenCaution(profile_id, target_id, allergen_id). RecommendationNeedsReroute(profile_id, plan_id, recommendation_id) :- PlanRecommendationTarget(profile_id, plan_id, recommendation_id, role_id, target_id), ProfileRuleDisallow(profile_id, target_id, rule_id). RecommendationNeedsReroute(profile_id, plan_id, recommendation_id) :- PlanRecommendationTarget(profile_id, plan_id, recommendation_id, role_id, target_id), RecommendationAtRisk(profile_id, recommendation_id, target_id). % 60.7 Backlog-aligned intent, entitlement, and trust signals. CheckInIntentSignal(profile_id, plan_id, checkin_id, intent_id) :- Edge(checkin_id, "food/targets_profile", profile_id), Edge(checkin_id, "food/for_plan", plan_id), Edge(checkin_id, "food/has_intent", intent_id). CheckInScheduleChangeSignal(profile_id, plan_id, checkin_id, change_kind_id) :- Edge(checkin_id, "food/targets_profile", profile_id), Edge(checkin_id, "food/for_plan", plan_id), Edge(checkin_id, "food/reports_schedule_change", change_kind_id). CheckInScheduleChangeSignal(profile_id, plan_id, checkin_id, change_kind_id) :- ScheduleChangeReport@( sc/profile=profile_id, sc/plan=plan_id, sc/checkin=checkin_id, sc/change_kind=change_kind_id ). CheckInDerivedDisruption(profile_id, plan_id, checkin_id, disruption_id) :- CheckInScheduleChangeSignal(profile_id, plan_id, checkin_id, change_kind_id), Edge(change_kind_id, "food/derived_from", disruption_id), EntityClass(disruption_id, "class/DisruptionKind"). RecommendationIssueSignal(profile_id, plan_id, checkin_id, issue_id) :- Edge(checkin_id, "food/targets_profile", profile_id), Edge(checkin_id, "food/for_plan", plan_id), Edge(checkin_id, "food/reports_recommendation_issue", issue_id). RecommendationNeedsReroute(profile_id, plan_id, recommendation_id) :- RecommendationIssueSignal(profile_id, plan_id, checkin_id, issue_id), RecommendationForPlan(recommendation_id, plan_id). RecommendationNeedsReroute(profile_id, plan_id, recommendation_id) :- CheckInScheduleChangeSignal(profile_id, plan_id, checkin_id, change_kind_id), RecommendationForPlan(recommendation_id, plan_id). PlanActivePreShiftWindow(plan_id, window_id) :- PlanWindow@(pw/id=window_id, pw/plan=plan_id, pw/window_kind="decision_window/pre_shift_prep", pw/status="plan_status/active"). PreShiftFallbackCoverageSignal(profile_id, plan_id, window_id) :- ActivePlan(profile_id, plan_id), PlanActivePreShiftWindow(plan_id, window_id), RecommendationContractComplete(plan_id). ProfileEntitlement(profile_id, entitlement_state_id) :- Edge(profile_id, "food/has_entitlement_state", entitlement_state_id). ProfileEntitlement(profile_id, entitlement_state_id) :- EntitlementSnapshot@(ent/profile=profile_id, ent/state=entitlement_state_id). ProfileShiftSeason(profile_id, shift_season_id) :- Edge(profile_id, "food/in_shift_season", shift_season_id). ProfileShiftSeason(profile_id, shift_season_id) :- ContextFact@(ctx/profile=profile_id, ctx/value=shift_season_id), EntityClass(shift_season_id, "class/ShiftSeason"). ObservedWeightMilestone(profile_id, milestone_id, checkpoint_id) :- MilestoneCheckpoint@(mcp/id=checkpoint_id, mcp/profile=profile_id, mcp/milestone=milestone_id). JourneySummaryNonScaleWin(profile_id, summary_id, win_id) :- JourneySummary@(cid=summary_id, summary/profile=profile_id), Edge(summary_id, "food/highlights_non_scale_win", win_id). JourneySummaryTone(profile_id, summary_id, tone_id) :- JourneySummary@(cid=summary_id, summary/profile=profile_id), Edge(summary_id, "food/has_journey_tone", tone_id). JourneyEventTone(profile_id, journey_event_id, tone_id) :- JourneyEvent@(je/id=journey_event_id, je/profile=profile_id, je/tone=tone_id). ProfileRiskSignal(profile_id, risk_id) :- Edge(checkin_id, "food/targets_profile", profile_id), Edge(checkin_id, "food/reports_disruption", disruption_id), Edge(disruption_id, "food/derived_from", risk_id), EntityClass(risk_id, "class/RiskKind"). ProfileRiskSignal(profile_id, risk_id) :- CheckInDerivedDisruption(profile_id, plan_id, checkin_id, disruption_id), Edge(disruption_id, "food/derived_from", risk_id), EntityClass(risk_id, "class/RiskKind"). LibraryContentRiskMatch(profile_id, content_id, risk_id) :- ProfileRiskSignal(profile_id, risk_id), Edge(content_id, "food/addresses_risk", risk_id), EntityClass(content_id, "class/LibraryContent"). LibraryContentSeasonMatch(profile_id, content_id, shift_season_id) :- ProfileShiftSeason(profile_id, shift_season_id), Edge(content_id, "food/ranked_for_shift_season", shift_season_id), EntityClass(content_id, "class/LibraryContent"). ProfileLibraryContentCandidate(profile_id, content_id, risk_id, shift_season_id) :- LibraryContentRiskMatch(profile_id, content_id, risk_id), LibraryContentSeasonMatch(profile_id, content_id, shift_season_id). ProfileAnalyticsEvent(profile_id, event_id, event_type_id) :- AnalyticsEventRecord@(aev/id=event_id, aev/profile=profile_id, aev/event_type=event_type_id). CanonicalAnalyticsEvent(profile_id, event_id, event_type_id) :- ProfileAnalyticsEvent(profile_id, event_id, event_type_id), EntityClass(event_type_id, "class/AnalyticsEventType"). ProfileExperimentVariant(profile_id, variant_id) :- Edge(profile_id, "food/has_experiment_variant", variant_id). ProfileExperimentVariant(profile_id, variant_id) :- ExperimentAssignment@(exp/profile=profile_id, exp/variant=variant_id).