@plasius/learning 0.2.9 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -455,6 +455,12 @@ declare const STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1: MissionAuthoringB
455
455
  * otherwise.
456
456
  */
457
457
  declare const BEACON_BOT_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
458
+ /**
459
+ * First Servo Creature robotics mission. The learner creates a bounded pose,
460
+ * mood and interaction sequence in the simulator. Physical servo power and
461
+ * movement remain unavailable until the exact reference build is bench tested.
462
+ */
463
+ declare const SERVO_CREATURE_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
458
464
  /**
459
465
  * Original first mission for Rescue Crew Commander. The learner arranges a
460
466
  * typed visual program and can inspect its synchronized JavaScript projection,
@@ -475,4 +481,4 @@ declare function validateLearningPath(path: LearningPathVersionV1): LearningVali
475
481
  /** Fail fast when a path is not safe to publish or consume. */
476
482
  declare function assertValidLearningPath(path: LearningPathVersionV1): void;
477
483
 
478
- export { type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, type CommercialStateV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, type HardwareItemV1, type HardwareModeV1, type HardwareRequirementManifestV1, type HardwareVerificationStatusV1, JUNIOR_CODER_MISSION_STAGE_ORDER_V1, JUNIOR_CODER_MODULE_PRICE_V1_1, JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1, type LearnerMissionAuthoringV1, type LearningGoalV1, type LearningModuleVersionV1, type LearningPathVersionV1, type LearningValidationIssueV1, METEOR_SHIELD_MISSION_ONE_AUTHORING_V1, MISSION_AUTHORING_CONTRACT_VERSION_V1, type MissionAccessibilityAlternativeV1, type MissionArtifactKindV1, type MissionArtifactReferenceV1, type MissionAuthoringBundleV1, type MissionAuthoringGoalV1, type MissionAuthoringValidationIssueV1, type MissionEvidenceKindV1, type MissionEvidenceRequirementV1, type MissionEvidenceRetentionV1, type MissionFunctionParameterV1, type MissionFunctionReferenceV1, type MissionHardwareAcquisitionScopeV1, type MissionHardwareComponentDisclosureV1, type MissionHardwareDisclosureV1, type MissionInteractionModeV1, type MissionInteractionRequirementV1, type MissionPhysicalSafeguardsV1, type MissionReadinessCheckV1, type MissionRewardBindingV1, type MissionSideAdventureV1, type MissionStageCardV1, type MissionStageKindV1, type MissionV1, type ModuleAgentDefinitionV1, type ModuleAgentFeedbackV1, type ModuleAgentRoleV1, type ModuleCategoryV1, type ModuleEntitlementV1, type ModulePricingV1, type ModuleReferencePriceV1, PADDLE_PULSE_MISSION_ONE_AUTHORING_V1, PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1, type PublishedStaticProjectSnapshotV1, RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, type ScoreBandV1, assertValidLearningPath, assertValidMissionAuthoringBundle, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle };
484
+ export { type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, type CommercialStateV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, type HardwareItemV1, type HardwareModeV1, type HardwareRequirementManifestV1, type HardwareVerificationStatusV1, JUNIOR_CODER_MISSION_STAGE_ORDER_V1, JUNIOR_CODER_MODULE_PRICE_V1_1, JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1, type LearnerMissionAuthoringV1, type LearningGoalV1, type LearningModuleVersionV1, type LearningPathVersionV1, type LearningValidationIssueV1, METEOR_SHIELD_MISSION_ONE_AUTHORING_V1, MISSION_AUTHORING_CONTRACT_VERSION_V1, type MissionAccessibilityAlternativeV1, type MissionArtifactKindV1, type MissionArtifactReferenceV1, type MissionAuthoringBundleV1, type MissionAuthoringGoalV1, type MissionAuthoringValidationIssueV1, type MissionEvidenceKindV1, type MissionEvidenceRequirementV1, type MissionEvidenceRetentionV1, type MissionFunctionParameterV1, type MissionFunctionReferenceV1, type MissionHardwareAcquisitionScopeV1, type MissionHardwareComponentDisclosureV1, type MissionHardwareDisclosureV1, type MissionInteractionModeV1, type MissionInteractionRequirementV1, type MissionPhysicalSafeguardsV1, type MissionReadinessCheckV1, type MissionRewardBindingV1, type MissionSideAdventureV1, type MissionStageCardV1, type MissionStageKindV1, type MissionV1, type ModuleAgentDefinitionV1, type ModuleAgentFeedbackV1, type ModuleAgentRoleV1, type ModuleCategoryV1, type ModuleEntitlementV1, type ModulePricingV1, type ModuleReferencePriceV1, PADDLE_PULSE_MISSION_ONE_AUTHORING_V1, PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1, type PublishedStaticProjectSnapshotV1, RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, SERVO_CREATURE_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, type ScoreBandV1, assertValidLearningPath, assertValidMissionAuthoringBundle, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle };
package/dist/index.d.ts CHANGED
@@ -455,6 +455,12 @@ declare const STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1: MissionAuthoringB
455
455
  * otherwise.
456
456
  */
457
457
  declare const BEACON_BOT_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
458
+ /**
459
+ * First Servo Creature robotics mission. The learner creates a bounded pose,
460
+ * mood and interaction sequence in the simulator. Physical servo power and
461
+ * movement remain unavailable until the exact reference build is bench tested.
462
+ */
463
+ declare const SERVO_CREATURE_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
458
464
  /**
459
465
  * Original first mission for Rescue Crew Commander. The learner arranges a
460
466
  * typed visual program and can inspect its synchronized JavaScript projection,
@@ -475,4 +481,4 @@ declare function validateLearningPath(path: LearningPathVersionV1): LearningVali
475
481
  /** Fail fast when a path is not safe to publish or consume. */
476
482
  declare function assertValidLearningPath(path: LearningPathVersionV1): void;
477
483
 
478
- export { type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, type CommercialStateV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, type HardwareItemV1, type HardwareModeV1, type HardwareRequirementManifestV1, type HardwareVerificationStatusV1, JUNIOR_CODER_MISSION_STAGE_ORDER_V1, JUNIOR_CODER_MODULE_PRICE_V1_1, JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1, type LearnerMissionAuthoringV1, type LearningGoalV1, type LearningModuleVersionV1, type LearningPathVersionV1, type LearningValidationIssueV1, METEOR_SHIELD_MISSION_ONE_AUTHORING_V1, MISSION_AUTHORING_CONTRACT_VERSION_V1, type MissionAccessibilityAlternativeV1, type MissionArtifactKindV1, type MissionArtifactReferenceV1, type MissionAuthoringBundleV1, type MissionAuthoringGoalV1, type MissionAuthoringValidationIssueV1, type MissionEvidenceKindV1, type MissionEvidenceRequirementV1, type MissionEvidenceRetentionV1, type MissionFunctionParameterV1, type MissionFunctionReferenceV1, type MissionHardwareAcquisitionScopeV1, type MissionHardwareComponentDisclosureV1, type MissionHardwareDisclosureV1, type MissionInteractionModeV1, type MissionInteractionRequirementV1, type MissionPhysicalSafeguardsV1, type MissionReadinessCheckV1, type MissionRewardBindingV1, type MissionSideAdventureV1, type MissionStageCardV1, type MissionStageKindV1, type MissionV1, type ModuleAgentDefinitionV1, type ModuleAgentFeedbackV1, type ModuleAgentRoleV1, type ModuleCategoryV1, type ModuleEntitlementV1, type ModulePricingV1, type ModuleReferencePriceV1, PADDLE_PULSE_MISSION_ONE_AUTHORING_V1, PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1, type PublishedStaticProjectSnapshotV1, RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, type ScoreBandV1, assertValidLearningPath, assertValidMissionAuthoringBundle, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle };
484
+ export { type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, type CommercialStateV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, type HardwareItemV1, type HardwareModeV1, type HardwareRequirementManifestV1, type HardwareVerificationStatusV1, JUNIOR_CODER_MISSION_STAGE_ORDER_V1, JUNIOR_CODER_MODULE_PRICE_V1_1, JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1, type LearnerMissionAuthoringV1, type LearningGoalV1, type LearningModuleVersionV1, type LearningPathVersionV1, type LearningValidationIssueV1, METEOR_SHIELD_MISSION_ONE_AUTHORING_V1, MISSION_AUTHORING_CONTRACT_VERSION_V1, type MissionAccessibilityAlternativeV1, type MissionArtifactKindV1, type MissionArtifactReferenceV1, type MissionAuthoringBundleV1, type MissionAuthoringGoalV1, type MissionAuthoringValidationIssueV1, type MissionEvidenceKindV1, type MissionEvidenceRequirementV1, type MissionEvidenceRetentionV1, type MissionFunctionParameterV1, type MissionFunctionReferenceV1, type MissionHardwareAcquisitionScopeV1, type MissionHardwareComponentDisclosureV1, type MissionHardwareDisclosureV1, type MissionInteractionModeV1, type MissionInteractionRequirementV1, type MissionPhysicalSafeguardsV1, type MissionReadinessCheckV1, type MissionRewardBindingV1, type MissionSideAdventureV1, type MissionStageCardV1, type MissionStageKindV1, type MissionV1, type ModuleAgentDefinitionV1, type ModuleAgentFeedbackV1, type ModuleAgentRoleV1, type ModuleCategoryV1, type ModuleEntitlementV1, type ModulePricingV1, type ModuleReferencePriceV1, PADDLE_PULSE_MISSION_ONE_AUTHORING_V1, PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1, type PublishedStaticProjectSnapshotV1, RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, SERVO_CREATURE_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, type ScoreBandV1, assertValidLearningPath, assertValidMissionAuthoringBundle, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle };
package/dist/index.js CHANGED
@@ -2675,6 +2675,395 @@ var BEACON_BOT_MISSION_ONE_AUTHORING_V1 = {
2675
2675
  }
2676
2676
  }
2677
2677
  };
2678
+ var SERVO_CREATURE_MISSION_ONE_AUTHORING_V1 = {
2679
+ version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
2680
+ moduleId: "junior-coder.servo-creature",
2681
+ moduleVersion: "1.1.0",
2682
+ missionId: "servo-creature-mission-1",
2683
+ learner: {
2684
+ estimatedMinutes: 20,
2685
+ stages: [
2686
+ {
2687
+ kind: "learn",
2688
+ instruction: "Read what setServoAngle(), waitMs(), repeatMovement(), setCreatureMood() and readTouchSensor() do in the private Servo Creature simulator.",
2689
+ artifactIds: ["servo-creature-m1-art"]
2690
+ },
2691
+ {
2692
+ kind: "predict",
2693
+ instruction: "Predict the creature's labelled angle, mood, repeat count and simulated touch response before the sequence runs.",
2694
+ artifactIds: []
2695
+ },
2696
+ {
2697
+ kind: "build",
2698
+ instruction: "Adjust the five documented C++-style calls to create one bounded creature movement sequence.",
2699
+ artifactIds: ["servo-creature-m1-code"]
2700
+ },
2701
+ {
2702
+ kind: "run",
2703
+ instruction: "Use the Run action button to start the private Servo Creature simulator.",
2704
+ artifactIds: ["servo-creature-m1-code"]
2705
+ },
2706
+ {
2707
+ kind: "assess",
2708
+ instruction: "Run the visible and protected deterministic pose, mood and interaction checks.",
2709
+ artifactIds: []
2710
+ },
2711
+ {
2712
+ kind: "inspect",
2713
+ instruction: "Compare the highlighted C++-style line with the first movement goal that did not pass.",
2714
+ artifactIds: []
2715
+ },
2716
+ {
2717
+ kind: "fix",
2718
+ instruction: "Change one angle, wait, repeat, mood or simulated touch call, then rerun and inspect the text telemetry.",
2719
+ artifactIds: ["servo-creature-m1-code"]
2720
+ },
2721
+ {
2722
+ kind: "explain",
2723
+ instruction: "Explain how the bounded calls created a safe movement and how the simulated interaction changed the creature's response.",
2724
+ artifactIds: []
2725
+ },
2726
+ {
2727
+ kind: "reward",
2728
+ instruction: "Collect the simulated badge when the score and private-runtime safety check pass; physical completion remains adult-only.",
2729
+ artifactIds: []
2730
+ }
2731
+ ],
2732
+ readinessChecks: [
2733
+ {
2734
+ id: "servo-creature-m1-find-angle-limit",
2735
+ prompt: "Find the documented safe minimum and maximum angle before changing the creature's pose.",
2736
+ scored: false
2737
+ }
2738
+ ],
2739
+ artifacts: [
2740
+ {
2741
+ id: "servo-creature-m1-code",
2742
+ kind: "starter-code",
2743
+ audience: "learner",
2744
+ solutionBearing: false
2745
+ },
2746
+ {
2747
+ id: "servo-creature-m1-art",
2748
+ kind: "starter-assets",
2749
+ audience: "learner",
2750
+ solutionBearing: false
2751
+ },
2752
+ {
2753
+ id: "servo-creature-m1-printable",
2754
+ kind: "printable",
2755
+ audience: "learner",
2756
+ solutionBearing: false
2757
+ }
2758
+ ],
2759
+ goals: [
2760
+ {
2761
+ id: "servo-creature-m1-starts",
2762
+ statement: "The documented C++-style settings are valid and the private simulator starts.",
2763
+ visibility: "visible",
2764
+ criterionIds: ["servo-creature-build"],
2765
+ completionRequired: true,
2766
+ aiRequired: false
2767
+ },
2768
+ {
2769
+ id: "servo-creature-m1-movement-sequence",
2770
+ statement: "The creature completes a bounded angle, timing, mood and interaction sequence.",
2771
+ visibility: "visible",
2772
+ criterionIds: ["servo-creature-goal-one", "servo-creature-goal-two"],
2773
+ completionRequired: true,
2774
+ aiRequired: false
2775
+ },
2776
+ {
2777
+ id: "servo-creature-m1-private-runtime",
2778
+ statement: "The program stays inside the private simulator and never accesses physical hardware, the network or browser storage.",
2779
+ visibility: "visible",
2780
+ criterionIds: ["servo-creature-safety"],
2781
+ completionRequired: true,
2782
+ aiRequired: false
2783
+ }
2784
+ ],
2785
+ interactions: [
2786
+ {
2787
+ id: "servo-creature-m1-run-control",
2788
+ description: "Start the private Servo Creature movement simulation.",
2789
+ primaryMode: "pointer",
2790
+ alternativeIds: ["servo-creature-m1-keyboard-run"]
2791
+ },
2792
+ {
2793
+ id: "servo-creature-m1-code-control",
2794
+ description: "Edit the documented angle, timing, repeat, mood and interaction calls.",
2795
+ primaryMode: "keyboard",
2796
+ alternativeIds: []
2797
+ },
2798
+ {
2799
+ id: "servo-creature-m1-pose-motion",
2800
+ description: "Observe the bounded creature pose and movement sequence.",
2801
+ primaryMode: "motion",
2802
+ alternativeIds: ["servo-creature-m1-telemetry"]
2803
+ }
2804
+ ],
2805
+ accessibilityAlternatives: [
2806
+ {
2807
+ id: "servo-creature-m1-keyboard-run",
2808
+ modes: ["keyboard"],
2809
+ equivalentOutcome: true,
2810
+ description: "Press Enter or Space on the play-icon Run button to start the same simulator."
2811
+ },
2812
+ {
2813
+ id: "servo-creature-m1-telemetry",
2814
+ modes: ["text", "shape", "symbol", "reduced-motion"],
2815
+ equivalentOutcome: true,
2816
+ description: "Read the angle, mood, repeat count, elapsed milliseconds and touch state without animation."
2817
+ }
2818
+ ],
2819
+ evidenceRequirements: [
2820
+ {
2821
+ id: "servo-creature-m1-assessment",
2822
+ goalIds: [
2823
+ "servo-creature-m1-starts",
2824
+ "servo-creature-m1-movement-sequence",
2825
+ "servo-creature-m1-private-runtime"
2826
+ ],
2827
+ kind: "assessment-result",
2828
+ retention: "entitlement",
2829
+ containsPersonalData: false
2830
+ },
2831
+ {
2832
+ id: "servo-creature-m1-explanation",
2833
+ goalIds: ["servo-creature-m1-movement-sequence"],
2834
+ kind: "learner-explanation",
2835
+ retention: "attempt",
2836
+ containsPersonalData: false
2837
+ }
2838
+ ],
2839
+ sideAdventures: [
2840
+ {
2841
+ id: "servo-creature-m1-remix",
2842
+ prompt: "Invent an original creature mood and describe a text or symbol cue that makes its pose understandable without movement.",
2843
+ completionRequired: false
2844
+ }
2845
+ ],
2846
+ rewardBindings: [
2847
+ {
2848
+ id: "servo-creature-m1-simulated-badge",
2849
+ badgeId: "servo-creature-mission-complete",
2850
+ goalIds: [
2851
+ "servo-creature-m1-starts",
2852
+ "servo-creature-m1-movement-sequence",
2853
+ "servo-creature-m1-private-runtime"
2854
+ ],
2855
+ deterministic: true,
2856
+ random: false,
2857
+ tokenConvertible: false
2858
+ }
2859
+ ],
2860
+ functionReference: [
2861
+ {
2862
+ id: "servo-creature-function-angle",
2863
+ signature: "setServoAngle(degrees)",
2864
+ summary: "Chooses one safe labelled creature pose in the private simulator.",
2865
+ parameters: [
2866
+ {
2867
+ name: "degrees",
2868
+ type: "whole number",
2869
+ description: "A bounded angle from 30 to 150 degrees."
2870
+ }
2871
+ ],
2872
+ effect: "Updates the simulator's labelled angle and pose cue without generating PWM or accessing a physical servo.",
2873
+ example: "setServoAngle(90);"
2874
+ },
2875
+ {
2876
+ id: "servo-creature-function-wait",
2877
+ signature: "waitMs(duration)",
2878
+ summary: "Adds one safe wait to the simulated movement timeline.",
2879
+ parameters: [
2880
+ {
2881
+ name: "duration",
2882
+ type: "whole number",
2883
+ description: "A bounded number of milliseconds from 100 to 1000."
2884
+ }
2885
+ ],
2886
+ effect: "Advances simulated elapsed time; it never blocks the website or holds a physical servo under load.",
2887
+ example: "waitMs(300);"
2888
+ },
2889
+ {
2890
+ id: "servo-creature-function-repeat",
2891
+ signature: "repeatMovement(count)",
2892
+ summary: "Repeats the current simulated pose a safe number of times.",
2893
+ parameters: [
2894
+ {
2895
+ name: "count",
2896
+ type: "whole number",
2897
+ description: "A bounded repeat count from 1 to 4."
2898
+ }
2899
+ ],
2900
+ effect: "Adds a fixed number of labelled pose steps to the private simulator timeline.",
2901
+ example: "repeatMovement(3);"
2902
+ },
2903
+ {
2904
+ id: "servo-creature-function-mood",
2905
+ signature: "setCreatureMood(mood)",
2906
+ summary: "Chooses the creature's labelled expression for the simulated pose.",
2907
+ parameters: [
2908
+ {
2909
+ name: "mood",
2910
+ type: "string",
2911
+ description: "Use calm, curious or happy."
2912
+ }
2913
+ ],
2914
+ effect: "Updates the simulator's text and symbol mood cue without moving physical parts.",
2915
+ example: 'setCreatureMood("curious");'
2916
+ },
2917
+ {
2918
+ id: "servo-creature-function-touch",
2919
+ signature: "readTouchSensor()",
2920
+ summary: "Reads the simulator's fictional touch state for one interaction response.",
2921
+ parameters: [],
2922
+ effect: "Returns touched or clear from simulator state only; it cannot access a physical sensor.",
2923
+ example: "const touchState = readTouchSensor();"
2924
+ }
2925
+ ]
2926
+ },
2927
+ facilitator: {
2928
+ artifacts: [
2929
+ {
2930
+ id: "servo-creature-m1-answer-key",
2931
+ kind: "answer-key",
2932
+ audience: "facilitator",
2933
+ solutionBearing: true
2934
+ },
2935
+ {
2936
+ id: "servo-creature-m1-protected-tests",
2937
+ kind: "protected-test",
2938
+ audience: "facilitator",
2939
+ solutionBearing: true
2940
+ },
2941
+ {
2942
+ id: "servo-creature-m1-adult-hardware-guide",
2943
+ kind: "facilitator-note",
2944
+ audience: "facilitator",
2945
+ solutionBearing: true
2946
+ }
2947
+ ],
2948
+ protectedGoals: [
2949
+ {
2950
+ id: "servo-creature-m1-protected-resilience",
2951
+ statement: "The simulator rejects unsupported moods, out-of-range angles, excessive waits or repeats and any physical-hardware request.",
2952
+ visibility: "protected",
2953
+ criterionIds: ["servo-creature-edge-one", "servo-creature-edge-two"],
2954
+ completionRequired: false,
2955
+ aiRequired: false
2956
+ }
2957
+ ],
2958
+ prompts: [
2959
+ "Ask the learner to predict the labelled pose timeline before suggesting one bounded change.",
2960
+ "Use the function reference and visible telemetry; never provide servo wiring, power or movement advice to a learner.",
2961
+ "Physical export stays unavailable until an adult acknowledges the exact manifest and every servo power component has verified bench-test evidence."
2962
+ ]
2963
+ },
2964
+ hardware: {
2965
+ requirementsVersion: "1.0.0",
2966
+ hardwareIncluded: false,
2967
+ completePathItemIds: [
2968
+ "pico-2-w",
2969
+ "breadboard",
2970
+ "usb-data-cable",
2971
+ "jumper-wires",
2972
+ "micro-servo",
2973
+ "servo-power"
2974
+ ],
2975
+ incrementalItemIds: ["micro-servo", "servo-power"],
2976
+ components: [
2977
+ {
2978
+ itemId: "pico-2-w",
2979
+ quantity: 1,
2980
+ acquisitionScope: "complete-path",
2981
+ verificationStatus: "pending-bench-test",
2982
+ compatibilityClaimed: false,
2983
+ physicalCompletionEligible: false
2984
+ },
2985
+ {
2986
+ itemId: "breadboard",
2987
+ quantity: 1,
2988
+ acquisitionScope: "complete-path",
2989
+ verificationStatus: "pending-bench-test",
2990
+ compatibilityClaimed: false,
2991
+ physicalCompletionEligible: false
2992
+ },
2993
+ {
2994
+ itemId: "usb-data-cable",
2995
+ quantity: 1,
2996
+ acquisitionScope: "complete-path",
2997
+ verificationStatus: "pending-bench-test",
2998
+ compatibilityClaimed: false,
2999
+ physicalCompletionEligible: false
3000
+ },
3001
+ {
3002
+ itemId: "jumper-wires",
3003
+ quantity: 12,
3004
+ acquisitionScope: "complete-path",
3005
+ verificationStatus: "pending-bench-test",
3006
+ compatibilityClaimed: false,
3007
+ physicalCompletionEligible: false
3008
+ },
3009
+ {
3010
+ itemId: "micro-servo",
3011
+ quantity: 1,
3012
+ acquisitionScope: "incremental",
3013
+ verificationStatus: "pending-bench-test",
3014
+ compatibilityClaimed: false,
3015
+ physicalCompletionEligible: false
3016
+ },
3017
+ {
3018
+ itemId: "servo-power",
3019
+ quantity: 1,
3020
+ acquisitionScope: "incremental",
3021
+ verificationStatus: "pending-bench-test",
3022
+ compatibilityClaimed: false,
3023
+ physicalCompletionEligible: false
3024
+ }
3025
+ ],
3026
+ safeguards: {
3027
+ adultAssemblyRequired: true,
3028
+ adultAcknowledgementRequiredForExport: true,
3029
+ websiteMayControlHardware: false,
3030
+ simulatorCompletionAvailable: true,
3031
+ simulatedBadgeId: "servo-creature-mission-complete",
3032
+ physicalBadgeId: "servo-creature-physical-builder",
3033
+ physicalBadgeRequiresAdultSignoff: true,
3034
+ adultAssemblySteps: [
3035
+ "Confirm the exact servo, external supply and connector identities against the requirements manifest.",
3036
+ "Assemble and inspect the disconnected signal and common-ground wiring before learner use.",
3037
+ "Secure the creature linkage, lift or restrain moving parts and complete the adult bench-test record."
3038
+ ],
3039
+ powerRequirements: [
3040
+ "Use an external regulated servo supply sized for the verified servo; do not power the servo from a Pico GPIO pin.",
3041
+ "Connect one common signal ground between the verified servo supply and Pico only as shown in the adult guide.",
3042
+ "Disconnect every power source before changing wiring or creature linkages."
3043
+ ],
3044
+ cableRequirements: [
3045
+ "One known data-capable USB cable compatible with the Pico 2 W.",
3046
+ "Insulated jumper leads and a verified servo connector arrangement documented by the adult guide."
3047
+ ],
3048
+ softwarePrerequisites: [
3049
+ "Supported Pico SDK toolchain on Raspberry Pi OS or a documented desktop environment.",
3050
+ "Known-good Servo Creature recovery firmware with adult-owned neutral-pose and stop behaviour."
3051
+ ],
3052
+ warnings: [
3053
+ "Hardware is not included with the module.",
3054
+ "No listed servo or power arrangement currently claims compatibility or physical-completion eligibility.",
3055
+ "Pinch points, stalled servos and unsuitable power supplies can cause heat or movement; adult assembly and testing are mandatory.",
3056
+ "The simulator and simulated badge remain available without physical equipment."
3057
+ ],
3058
+ unrelatedHardwareNotRequired: [
3059
+ "Camera Module 3 or Raspberry Pi Zero 2 W",
3060
+ "motor driver, motors or rover chassis",
3061
+ "physical touch or IR sensor",
3062
+ "LED or infrared beacon parts"
3063
+ ]
3064
+ }
3065
+ }
3066
+ };
2678
3067
  var RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1 = {
2679
3068
  version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
2680
3069
  moduleId: "junior-coder.rescue-crew-commander",
@@ -3482,6 +3871,7 @@ export {
3482
3871
  RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1,
3483
3872
  ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1,
3484
3873
  ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1,
3874
+ SERVO_CREATURE_MISSION_ONE_AUTHORING_V1,
3485
3875
  SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1,
3486
3876
  STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1,
3487
3877
  assertValidLearningPath,