@plasius/learning 0.2.3 → 0.2.5

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
@@ -377,6 +377,17 @@ declare const ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1
377
377
  * flight controls without exposing protected numeric targets or source answers.
378
378
  */
379
379
  declare const SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
380
+ /**
381
+ * Original first mission for Paddle Pulse. Learners tune documented paddle
382
+ * and ball controls without receiving protected collision targets or answers.
383
+ */
384
+ declare const PADDLE_PULSE_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
385
+ /**
386
+ * Original first mission for Meteor Shield. Learners tune documented targeting,
387
+ * energy and timing controls without receiving protected resource targets or
388
+ * projectile answers.
389
+ */
390
+ declare const METEOR_SHIELD_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
380
391
  /** Original first-mission exemplar; no protected content appears in learner data. */
381
392
  declare const ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
382
393
 
@@ -385,4 +396,4 @@ declare function validateLearningPath(path: LearningPathVersionV1): LearningVali
385
396
  /** Fail fast when a path is not safe to publish or consume. */
386
397
  declare function assertValidLearningPath(path: LearningPathVersionV1): void;
387
398
 
388
- export { type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, 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, MISSION_AUTHORING_CONTRACT_VERSION_V1, type MissionAccessibilityAlternativeV1, type MissionArtifactKindV1, type MissionArtifactReferenceV1, type MissionAuthoringBundleV1, type MissionAuthoringGoalV1, type MissionAuthoringValidationIssueV1, type MissionEvidenceKindV1, type MissionEvidenceRequirementV1, type MissionEvidenceRetentionV1, type MissionInteractionModeV1, type MissionInteractionRequirementV1, 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, type PublishedStaticProjectSnapshotV1, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, type ScoreBandV1, assertValidLearningPath, assertValidMissionAuthoringBundle, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle };
399
+ export { type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, 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 MissionInteractionModeV1, type MissionInteractionRequirementV1, 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, type PublishedStaticProjectSnapshotV1, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, type ScoreBandV1, assertValidLearningPath, assertValidMissionAuthoringBundle, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle };
package/dist/index.d.ts CHANGED
@@ -377,6 +377,17 @@ declare const ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1
377
377
  * flight controls without exposing protected numeric targets or source answers.
378
378
  */
379
379
  declare const SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
380
+ /**
381
+ * Original first mission for Paddle Pulse. Learners tune documented paddle
382
+ * and ball controls without receiving protected collision targets or answers.
383
+ */
384
+ declare const PADDLE_PULSE_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
385
+ /**
386
+ * Original first mission for Meteor Shield. Learners tune documented targeting,
387
+ * energy and timing controls without receiving protected resource targets or
388
+ * projectile answers.
389
+ */
390
+ declare const METEOR_SHIELD_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
380
391
  /** Original first-mission exemplar; no protected content appears in learner data. */
381
392
  declare const ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
382
393
 
@@ -385,4 +396,4 @@ declare function validateLearningPath(path: LearningPathVersionV1): LearningVali
385
396
  /** Fail fast when a path is not safe to publish or consume. */
386
397
  declare function assertValidLearningPath(path: LearningPathVersionV1): void;
387
398
 
388
- export { type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, 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, MISSION_AUTHORING_CONTRACT_VERSION_V1, type MissionAccessibilityAlternativeV1, type MissionArtifactKindV1, type MissionArtifactReferenceV1, type MissionAuthoringBundleV1, type MissionAuthoringGoalV1, type MissionAuthoringValidationIssueV1, type MissionEvidenceKindV1, type MissionEvidenceRequirementV1, type MissionEvidenceRetentionV1, type MissionInteractionModeV1, type MissionInteractionRequirementV1, 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, type PublishedStaticProjectSnapshotV1, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, type ScoreBandV1, assertValidLearningPath, assertValidMissionAuthoringBundle, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle };
399
+ export { type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, 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 MissionInteractionModeV1, type MissionInteractionRequirementV1, 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, type PublishedStaticProjectSnapshotV1, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, type ScoreBandV1, assertValidLearningPath, assertValidMissionAuthoringBundle, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle };
package/dist/index.js CHANGED
@@ -1522,6 +1522,446 @@ var SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1 = {
1522
1522
  ]
1523
1523
  }
1524
1524
  };
1525
+ var PADDLE_PULSE_MISSION_ONE_AUTHORING_V1 = {
1526
+ version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
1527
+ moduleId: "junior-coder.paddle-pulse",
1528
+ moduleVersion: "1.1.0",
1529
+ missionId: "paddle-pulse-mission-1",
1530
+ learner: {
1531
+ estimatedMinutes: 20,
1532
+ stages: [
1533
+ {
1534
+ kind: "learn",
1535
+ instruction: "Read how paddle width, ball speed and bounce angle change an energy-ball rally.",
1536
+ artifactIds: ["paddle-pulse-m1-art"]
1537
+ },
1538
+ {
1539
+ kind: "predict",
1540
+ instruction: "Predict which direction the energy ball will travel after it reaches the paddle.",
1541
+ artifactIds: []
1542
+ },
1543
+ {
1544
+ kind: "build",
1545
+ instruction: "Adjust the three documented settings in the starter JavaScript.",
1546
+ artifactIds: ["paddle-pulse-m1-code"]
1547
+ },
1548
+ {
1549
+ kind: "run",
1550
+ instruction: "Use the Run action button to start the private energy-court preview.",
1551
+ artifactIds: ["paddle-pulse-m1-code"]
1552
+ },
1553
+ {
1554
+ kind: "assess",
1555
+ instruction: "Run the visible and protected deterministic rally checks.",
1556
+ artifactIds: []
1557
+ },
1558
+ {
1559
+ kind: "inspect",
1560
+ instruction: "Compare the highlighted setting with the first goal that did not pass.",
1561
+ artifactIds: []
1562
+ },
1563
+ {
1564
+ kind: "fix",
1565
+ instruction: "Change one setting, run again and observe the bounce telemetry.",
1566
+ artifactIds: ["paddle-pulse-m1-code"]
1567
+ },
1568
+ {
1569
+ kind: "explain",
1570
+ instruction: "Explain how paddle width and bounce angle changed the energy ball path.",
1571
+ artifactIds: []
1572
+ },
1573
+ {
1574
+ kind: "reward",
1575
+ instruction: "Collect the evidence-bound badge when the score and safety check pass.",
1576
+ artifactIds: []
1577
+ }
1578
+ ],
1579
+ readinessChecks: [
1580
+ {
1581
+ id: "paddle-pulse-m1-find-angle",
1582
+ prompt: "Point to the setting that changes the direction of the bounce.",
1583
+ scored: false
1584
+ }
1585
+ ],
1586
+ artifacts: [
1587
+ {
1588
+ id: "paddle-pulse-m1-code",
1589
+ kind: "starter-code",
1590
+ audience: "learner",
1591
+ solutionBearing: false
1592
+ },
1593
+ {
1594
+ id: "paddle-pulse-m1-art",
1595
+ kind: "starter-assets",
1596
+ audience: "learner",
1597
+ solutionBearing: false
1598
+ },
1599
+ {
1600
+ id: "paddle-pulse-m1-printable",
1601
+ kind: "printable",
1602
+ audience: "learner",
1603
+ solutionBearing: false
1604
+ }
1605
+ ],
1606
+ goals: [
1607
+ {
1608
+ id: "paddle-pulse-m1-starts",
1609
+ statement: "The JavaScript settings are valid and the private preview starts.",
1610
+ visibility: "visible",
1611
+ criterionIds: ["paddle-pulse-build"],
1612
+ completionRequired: true,
1613
+ aiRequired: false
1614
+ },
1615
+ {
1616
+ id: "paddle-pulse-m1-controlled-bounce",
1617
+ statement: "The paddle returns the energy ball toward the target wall with a controllable angle.",
1618
+ visibility: "visible",
1619
+ criterionIds: [
1620
+ "paddle-pulse-goal-one",
1621
+ "paddle-pulse-goal-two"
1622
+ ],
1623
+ completionRequired: true,
1624
+ aiRequired: false
1625
+ },
1626
+ {
1627
+ id: "paddle-pulse-m1-private-runtime",
1628
+ statement: "The game stays inside the private educational preview boundary.",
1629
+ visibility: "visible",
1630
+ criterionIds: ["paddle-pulse-safety"],
1631
+ completionRequired: true,
1632
+ aiRequired: false
1633
+ }
1634
+ ],
1635
+ interactions: [
1636
+ {
1637
+ id: "paddle-pulse-m1-run-control",
1638
+ description: "Start the private energy-court simulation.",
1639
+ primaryMode: "pointer",
1640
+ alternativeIds: ["paddle-pulse-m1-keyboard-run"]
1641
+ },
1642
+ {
1643
+ id: "paddle-pulse-m1-paddle-control",
1644
+ description: "Move the paddle left or right during practice.",
1645
+ primaryMode: "keyboard",
1646
+ alternativeIds: []
1647
+ },
1648
+ {
1649
+ id: "paddle-pulse-m1-ball-motion",
1650
+ description: "Observe the energy ball moving and bouncing across the court.",
1651
+ primaryMode: "motion",
1652
+ alternativeIds: ["paddle-pulse-m1-telemetry"]
1653
+ }
1654
+ ],
1655
+ accessibilityAlternatives: [
1656
+ {
1657
+ id: "paddle-pulse-m1-keyboard-run",
1658
+ modes: ["keyboard"],
1659
+ equivalentOutcome: true,
1660
+ description: "Press Enter or Space on the play-icon Run button to start the same preview."
1661
+ },
1662
+ {
1663
+ id: "paddle-pulse-m1-telemetry",
1664
+ modes: ["text", "reduced-motion"],
1665
+ equivalentOutcome: true,
1666
+ description: "Use position, direction and target-status text instead of ball animation."
1667
+ }
1668
+ ],
1669
+ evidenceRequirements: [
1670
+ {
1671
+ id: "paddle-pulse-m1-assessment",
1672
+ goalIds: [
1673
+ "paddle-pulse-m1-starts",
1674
+ "paddle-pulse-m1-controlled-bounce",
1675
+ "paddle-pulse-m1-private-runtime"
1676
+ ],
1677
+ kind: "assessment-result",
1678
+ retention: "entitlement",
1679
+ containsPersonalData: false
1680
+ },
1681
+ {
1682
+ id: "paddle-pulse-m1-explanation",
1683
+ goalIds: ["paddle-pulse-m1-controlled-bounce"],
1684
+ kind: "learner-explanation",
1685
+ retention: "attempt",
1686
+ containsPersonalData: false
1687
+ }
1688
+ ],
1689
+ sideAdventures: [
1690
+ {
1691
+ id: "paddle-pulse-m1-remix",
1692
+ prompt: "Invent an original energy power-up and describe one bounded setting it would change.",
1693
+ completionRequired: false
1694
+ }
1695
+ ],
1696
+ rewardBindings: [
1697
+ {
1698
+ id: "paddle-pulse-m1-badge",
1699
+ badgeId: "paddle-pulse-mission-complete",
1700
+ goalIds: [
1701
+ "paddle-pulse-m1-starts",
1702
+ "paddle-pulse-m1-controlled-bounce",
1703
+ "paddle-pulse-m1-private-runtime"
1704
+ ],
1705
+ deterministic: true,
1706
+ random: false,
1707
+ tokenConvertible: false
1708
+ }
1709
+ ]
1710
+ },
1711
+ facilitator: {
1712
+ artifacts: [
1713
+ {
1714
+ id: "paddle-pulse-m1-answer-key",
1715
+ kind: "answer-key",
1716
+ audience: "facilitator",
1717
+ solutionBearing: true
1718
+ },
1719
+ {
1720
+ id: "paddle-pulse-m1-protected-tests",
1721
+ kind: "protected-test",
1722
+ audience: "facilitator",
1723
+ solutionBearing: true
1724
+ }
1725
+ ],
1726
+ protectedGoals: [
1727
+ {
1728
+ id: "paddle-pulse-m1-protected-resilience",
1729
+ statement: "The runtime clamps unsafe settings and terminates bounded collision simulations.",
1730
+ visibility: "protected",
1731
+ criterionIds: [
1732
+ "paddle-pulse-edge-one",
1733
+ "paddle-pulse-edge-two"
1734
+ ],
1735
+ completionRequired: false,
1736
+ aiRequired: false
1737
+ }
1738
+ ],
1739
+ prompts: [
1740
+ "Ask the learner which setting changes direction before suggesting a code edit.",
1741
+ "Use visible telemetry and the function reference; never reveal protected numeric targets or expected source fragments."
1742
+ ]
1743
+ }
1744
+ };
1745
+ var METEOR_SHIELD_MISSION_ONE_AUTHORING_V1 = {
1746
+ version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
1747
+ moduleId: "junior-coder.meteor-shield",
1748
+ moduleVersion: "1.1.0",
1749
+ missionId: "meteor-shield-mission-1",
1750
+ learner: {
1751
+ estimatedMinutes: 20,
1752
+ stages: [
1753
+ {
1754
+ kind: "learn",
1755
+ instruction: "Read how target column, shield energy and launch delay change a rescue defence.",
1756
+ artifactIds: ["meteor-shield-m1-art"]
1757
+ },
1758
+ {
1759
+ kind: "predict",
1760
+ instruction: "Predict which rescue base the shield will protect first.",
1761
+ artifactIds: []
1762
+ },
1763
+ {
1764
+ kind: "build",
1765
+ instruction: "Adjust the three documented settings in the starter JavaScript.",
1766
+ artifactIds: ["meteor-shield-m1-code"]
1767
+ },
1768
+ {
1769
+ kind: "run",
1770
+ instruction: "Use the Run action button to start the private meteor-wave preview.",
1771
+ artifactIds: ["meteor-shield-m1-code"]
1772
+ },
1773
+ {
1774
+ kind: "assess",
1775
+ instruction: "Run the visible and protected deterministic defence checks.",
1776
+ artifactIds: []
1777
+ },
1778
+ {
1779
+ kind: "inspect",
1780
+ instruction: "Compare the highlighted setting with the first goal that did not pass.",
1781
+ artifactIds: []
1782
+ },
1783
+ {
1784
+ kind: "fix",
1785
+ instruction: "Change one setting, run again and observe the energy and target telemetry.",
1786
+ artifactIds: ["meteor-shield-m1-code"]
1787
+ },
1788
+ {
1789
+ kind: "explain",
1790
+ instruction: "Explain how targeting and launch timing affected the remaining shield energy.",
1791
+ artifactIds: []
1792
+ },
1793
+ {
1794
+ kind: "reward",
1795
+ instruction: "Collect the evidence-bound badge when the score and safety check pass.",
1796
+ artifactIds: []
1797
+ }
1798
+ ],
1799
+ readinessChecks: [
1800
+ {
1801
+ id: "meteor-shield-m1-find-energy",
1802
+ prompt: "Point to the setting that limits how many shields can launch.",
1803
+ scored: false
1804
+ }
1805
+ ],
1806
+ artifacts: [
1807
+ {
1808
+ id: "meteor-shield-m1-code",
1809
+ kind: "starter-code",
1810
+ audience: "learner",
1811
+ solutionBearing: false
1812
+ },
1813
+ {
1814
+ id: "meteor-shield-m1-art",
1815
+ kind: "starter-assets",
1816
+ audience: "learner",
1817
+ solutionBearing: false
1818
+ },
1819
+ {
1820
+ id: "meteor-shield-m1-printable",
1821
+ kind: "printable",
1822
+ audience: "learner",
1823
+ solutionBearing: false
1824
+ }
1825
+ ],
1826
+ goals: [
1827
+ {
1828
+ id: "meteor-shield-m1-starts",
1829
+ statement: "The JavaScript settings are valid and the private preview starts.",
1830
+ visibility: "visible",
1831
+ criterionIds: ["meteor-shield-build"],
1832
+ completionRequired: true,
1833
+ aiRequired: false
1834
+ },
1835
+ {
1836
+ id: "meteor-shield-m1-resource-defence",
1837
+ statement: "A shield launches toward the selected meteor while keeping enough energy for the next wave.",
1838
+ visibility: "visible",
1839
+ criterionIds: [
1840
+ "meteor-shield-goal-one",
1841
+ "meteor-shield-goal-two"
1842
+ ],
1843
+ completionRequired: true,
1844
+ aiRequired: false
1845
+ },
1846
+ {
1847
+ id: "meteor-shield-m1-private-runtime",
1848
+ statement: "The game stays inside the private educational preview boundary.",
1849
+ visibility: "visible",
1850
+ criterionIds: ["meteor-shield-safety"],
1851
+ completionRequired: true,
1852
+ aiRequired: false
1853
+ }
1854
+ ],
1855
+ interactions: [
1856
+ {
1857
+ id: "meteor-shield-m1-run-control",
1858
+ description: "Start the private meteor-wave simulation.",
1859
+ primaryMode: "pointer",
1860
+ alternativeIds: ["meteor-shield-m1-keyboard-run"]
1861
+ },
1862
+ {
1863
+ id: "meteor-shield-m1-target-control",
1864
+ description: "Move the targeting reticle between rescue columns and launch a shield.",
1865
+ primaryMode: "keyboard",
1866
+ alternativeIds: []
1867
+ },
1868
+ {
1869
+ id: "meteor-shield-m1-wave-motion",
1870
+ description: "Observe meteors and shield pulses crossing the rescue zone.",
1871
+ primaryMode: "motion",
1872
+ alternativeIds: ["meteor-shield-m1-telemetry"]
1873
+ }
1874
+ ],
1875
+ accessibilityAlternatives: [
1876
+ {
1877
+ id: "meteor-shield-m1-keyboard-run",
1878
+ modes: ["keyboard"],
1879
+ equivalentOutcome: true,
1880
+ description: "Press Enter or Space on the play-icon Run button to start the same preview."
1881
+ },
1882
+ {
1883
+ id: "meteor-shield-m1-telemetry",
1884
+ modes: ["text", "reduced-motion"],
1885
+ equivalentOutcome: true,
1886
+ description: "Use target column, wave, distance and energy text instead of projectile animation."
1887
+ }
1888
+ ],
1889
+ evidenceRequirements: [
1890
+ {
1891
+ id: "meteor-shield-m1-assessment",
1892
+ goalIds: [
1893
+ "meteor-shield-m1-starts",
1894
+ "meteor-shield-m1-resource-defence",
1895
+ "meteor-shield-m1-private-runtime"
1896
+ ],
1897
+ kind: "assessment-result",
1898
+ retention: "entitlement",
1899
+ containsPersonalData: false
1900
+ },
1901
+ {
1902
+ id: "meteor-shield-m1-explanation",
1903
+ goalIds: ["meteor-shield-m1-resource-defence"],
1904
+ kind: "learner-explanation",
1905
+ retention: "attempt",
1906
+ containsPersonalData: false
1907
+ }
1908
+ ],
1909
+ sideAdventures: [
1910
+ {
1911
+ id: "meteor-shield-m1-remix",
1912
+ prompt: "Invent an original rescue-base signal and describe the safe game event that activates it.",
1913
+ completionRequired: false
1914
+ }
1915
+ ],
1916
+ rewardBindings: [
1917
+ {
1918
+ id: "meteor-shield-m1-badge",
1919
+ badgeId: "meteor-shield-mission-complete",
1920
+ goalIds: [
1921
+ "meteor-shield-m1-starts",
1922
+ "meteor-shield-m1-resource-defence",
1923
+ "meteor-shield-m1-private-runtime"
1924
+ ],
1925
+ deterministic: true,
1926
+ random: false,
1927
+ tokenConvertible: false
1928
+ }
1929
+ ]
1930
+ },
1931
+ facilitator: {
1932
+ artifacts: [
1933
+ {
1934
+ id: "meteor-shield-m1-answer-key",
1935
+ kind: "answer-key",
1936
+ audience: "facilitator",
1937
+ solutionBearing: true
1938
+ },
1939
+ {
1940
+ id: "meteor-shield-m1-protected-tests",
1941
+ kind: "protected-test",
1942
+ audience: "facilitator",
1943
+ solutionBearing: true
1944
+ }
1945
+ ],
1946
+ protectedGoals: [
1947
+ {
1948
+ id: "meteor-shield-m1-protected-resilience",
1949
+ statement: "The runtime clamps unsafe resources and terminates bounded projectile simulations.",
1950
+ visibility: "protected",
1951
+ criterionIds: [
1952
+ "meteor-shield-edge-one",
1953
+ "meteor-shield-edge-two"
1954
+ ],
1955
+ completionRequired: false,
1956
+ aiRequired: false
1957
+ }
1958
+ ],
1959
+ prompts: [
1960
+ "Ask the learner which setting controls a limited resource before suggesting a code edit.",
1961
+ "Use visible telemetry and the function reference; never reveal protected numeric targets or expected source fragments."
1962
+ ]
1963
+ }
1964
+ };
1525
1965
  var ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1 = {
1526
1966
  version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
1527
1967
  moduleId: "junior-coder.road-hopper-rally",
@@ -1875,7 +2315,9 @@ export {
1875
2315
  JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT,
1876
2316
  JUNIOR_CODER_ROBOT_RESCUE_PATH_V1,
1877
2317
  JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1,
2318
+ METEOR_SHIELD_MISSION_ONE_AUTHORING_V1,
1878
2319
  MISSION_AUTHORING_CONTRACT_VERSION_V1,
2320
+ PADDLE_PULSE_MISSION_ONE_AUTHORING_V1,
1879
2321
  ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1,
1880
2322
  ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1,
1881
2323
  SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1,