@plasius/learning 0.2.6 → 0.2.7

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/README.md CHANGED
@@ -65,6 +65,7 @@ import {
65
65
  JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1,
66
66
  METEOR_SHIELD_MISSION_ONE_AUTHORING_V1,
67
67
  PADDLE_PULSE_MISSION_ONE_AUTHORING_V1,
68
+ PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1,
68
69
  RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1,
69
70
  ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1,
70
71
  ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1,
@@ -90,6 +91,9 @@ const meteorShield = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
90
91
  const rescueCrewCommander = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
91
92
  (module) => module.slug === "rescue-crew-commander",
92
93
  );
94
+ const pixelTrailChallenge = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
95
+ (module) => module.slug === "pixel-trail-challenge",
96
+ );
93
97
 
94
98
  if (
95
99
  !roadHopper ||
@@ -97,7 +101,8 @@ if (
97
101
  !skywing ||
98
102
  !paddlePulse ||
99
103
  !meteorShield ||
100
- !rescueCrewCommander
104
+ !rescueCrewCommander ||
105
+ !pixelTrailChallenge
101
106
  ) {
102
107
  throw new Error("Junior Coder module is missing");
103
108
  }
@@ -126,6 +131,10 @@ assertValidMissionAuthoringBundle(
126
131
  RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1,
127
132
  rescueCrewCommander,
128
133
  );
134
+ assertValidMissionAuthoringBundle(
135
+ PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1,
136
+ pixelTrailChallenge,
137
+ );
129
138
  ```
130
139
 
131
140
  ## Contract rules
package/dist/index.cjs CHANGED
@@ -28,6 +28,7 @@ __export(index_exports, {
28
28
  METEOR_SHIELD_MISSION_ONE_AUTHORING_V1: () => METEOR_SHIELD_MISSION_ONE_AUTHORING_V1,
29
29
  MISSION_AUTHORING_CONTRACT_VERSION_V1: () => MISSION_AUTHORING_CONTRACT_VERSION_V1,
30
30
  PADDLE_PULSE_MISSION_ONE_AUTHORING_V1: () => PADDLE_PULSE_MISSION_ONE_AUTHORING_V1,
31
+ PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1: () => PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1,
31
32
  RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1: () => RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1,
32
33
  ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1: () => ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1,
33
34
  ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1: () => ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1,
@@ -1785,6 +1786,226 @@ var PADDLE_PULSE_MISSION_ONE_AUTHORING_V1 = {
1785
1786
  ]
1786
1787
  }
1787
1788
  };
1789
+ var PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1 = {
1790
+ version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
1791
+ moduleId: "junior-coder.pixel-trail-challenge",
1792
+ moduleVersion: "1.1.0",
1793
+ missionId: "pixel-trail-challenge-mission-1",
1794
+ learner: {
1795
+ estimatedMinutes: 20,
1796
+ stages: [
1797
+ {
1798
+ kind: "learn",
1799
+ instruction: "Read what set_direction(), set_trail_limit() and place_energy_orb() do in the private Python preview.",
1800
+ artifactIds: ["pixel-trail-challenge-m1-art"]
1801
+ },
1802
+ {
1803
+ kind: "predict",
1804
+ instruction: "Predict the next grid square and how the trail list will change after one move.",
1805
+ artifactIds: []
1806
+ },
1807
+ {
1808
+ kind: "build",
1809
+ instruction: "Adjust the three documented Python calls so the pixel follows a safe trail toward the energy orb.",
1810
+ artifactIds: ["pixel-trail-challenge-m1-code"]
1811
+ },
1812
+ {
1813
+ kind: "run",
1814
+ instruction: "Use the Run action button to start the private grid preview.",
1815
+ artifactIds: ["pixel-trail-challenge-m1-code"]
1816
+ },
1817
+ {
1818
+ kind: "assess",
1819
+ instruction: "Run the visible and protected deterministic trail checks.",
1820
+ artifactIds: []
1821
+ },
1822
+ {
1823
+ kind: "inspect",
1824
+ instruction: "Compare the highlighted Python line with the first goal that did not pass.",
1825
+ artifactIds: []
1826
+ },
1827
+ {
1828
+ kind: "fix",
1829
+ instruction: "Change one direction, trail or orb setting, run again and inspect the position and list-length telemetry.",
1830
+ artifactIds: ["pixel-trail-challenge-m1-code"]
1831
+ },
1832
+ {
1833
+ kind: "explain",
1834
+ instruction: "Explain how the direction changed the position and why the trail list kept only recent squares.",
1835
+ artifactIds: []
1836
+ },
1837
+ {
1838
+ kind: "reward",
1839
+ instruction: "Collect the evidence-bound badge when the score and private-runtime safety check pass.",
1840
+ artifactIds: []
1841
+ }
1842
+ ],
1843
+ readinessChecks: [
1844
+ {
1845
+ id: "pixel-trail-challenge-m1-find-direction",
1846
+ prompt: "Point to the Python call that chooses the pixel's next direction.",
1847
+ scored: false
1848
+ }
1849
+ ],
1850
+ artifacts: [
1851
+ {
1852
+ id: "pixel-trail-challenge-m1-code",
1853
+ kind: "starter-code",
1854
+ audience: "learner",
1855
+ solutionBearing: false
1856
+ },
1857
+ {
1858
+ id: "pixel-trail-challenge-m1-art",
1859
+ kind: "starter-assets",
1860
+ audience: "learner",
1861
+ solutionBearing: false
1862
+ },
1863
+ {
1864
+ id: "pixel-trail-challenge-m1-printable",
1865
+ kind: "printable",
1866
+ audience: "learner",
1867
+ solutionBearing: false
1868
+ }
1869
+ ],
1870
+ goals: [
1871
+ {
1872
+ id: "pixel-trail-challenge-m1-starts",
1873
+ statement: "The Python settings are valid and the private grid preview starts.",
1874
+ visibility: "visible",
1875
+ criterionIds: ["pixel-trail-challenge-build"],
1876
+ completionRequired: true,
1877
+ aiRequired: false
1878
+ },
1879
+ {
1880
+ id: "pixel-trail-challenge-m1-safe-trail",
1881
+ statement: "The pixel moves in the chosen direction, keeps a bounded trail list and reaches the energy orb.",
1882
+ visibility: "visible",
1883
+ criterionIds: [
1884
+ "pixel-trail-challenge-goal-one",
1885
+ "pixel-trail-challenge-goal-two"
1886
+ ],
1887
+ completionRequired: true,
1888
+ aiRequired: false
1889
+ },
1890
+ {
1891
+ id: "pixel-trail-challenge-m1-private-runtime",
1892
+ statement: "The program stays inside the private Python worker and host-provided grid API.",
1893
+ visibility: "visible",
1894
+ criterionIds: ["pixel-trail-challenge-safety"],
1895
+ completionRequired: true,
1896
+ aiRequired: false
1897
+ }
1898
+ ],
1899
+ interactions: [
1900
+ {
1901
+ id: "pixel-trail-challenge-m1-run-control",
1902
+ description: "Start the private Python grid simulation.",
1903
+ primaryMode: "pointer",
1904
+ alternativeIds: ["pixel-trail-challenge-m1-keyboard-run"]
1905
+ },
1906
+ {
1907
+ id: "pixel-trail-challenge-m1-direction-control",
1908
+ description: "Change the active movement direction with labelled arrow controls or arrow keys.",
1909
+ primaryMode: "keyboard",
1910
+ alternativeIds: []
1911
+ },
1912
+ {
1913
+ id: "pixel-trail-challenge-m1-trail-motion",
1914
+ description: "Observe the pixel, recent trail squares and energy orb on the grid.",
1915
+ primaryMode: "motion",
1916
+ alternativeIds: ["pixel-trail-challenge-m1-telemetry"]
1917
+ }
1918
+ ],
1919
+ accessibilityAlternatives: [
1920
+ {
1921
+ id: "pixel-trail-challenge-m1-keyboard-run",
1922
+ modes: ["keyboard"],
1923
+ equivalentOutcome: true,
1924
+ description: "Press Enter or Space on the play-icon Run button to start the same preview."
1925
+ },
1926
+ {
1927
+ id: "pixel-trail-challenge-m1-telemetry",
1928
+ modes: ["text", "shape", "reduced-motion"],
1929
+ equivalentOutcome: true,
1930
+ description: "Read row, column, direction, trail length and orb status without animation or colour dependence."
1931
+ }
1932
+ ],
1933
+ evidenceRequirements: [
1934
+ {
1935
+ id: "pixel-trail-challenge-m1-assessment",
1936
+ goalIds: [
1937
+ "pixel-trail-challenge-m1-starts",
1938
+ "pixel-trail-challenge-m1-safe-trail",
1939
+ "pixel-trail-challenge-m1-private-runtime"
1940
+ ],
1941
+ kind: "assessment-result",
1942
+ retention: "entitlement",
1943
+ containsPersonalData: false
1944
+ },
1945
+ {
1946
+ id: "pixel-trail-challenge-m1-explanation",
1947
+ goalIds: ["pixel-trail-challenge-m1-safe-trail"],
1948
+ kind: "learner-explanation",
1949
+ retention: "attempt",
1950
+ containsPersonalData: false
1951
+ }
1952
+ ],
1953
+ sideAdventures: [
1954
+ {
1955
+ id: "pixel-trail-challenge-m1-remix",
1956
+ prompt: "Invent an original energy-orb symbol and describe a new safe grid rule for collecting it.",
1957
+ completionRequired: false
1958
+ }
1959
+ ],
1960
+ rewardBindings: [
1961
+ {
1962
+ id: "pixel-trail-challenge-m1-badge",
1963
+ badgeId: "pixel-trail-challenge-mission-complete",
1964
+ goalIds: [
1965
+ "pixel-trail-challenge-m1-starts",
1966
+ "pixel-trail-challenge-m1-safe-trail",
1967
+ "pixel-trail-challenge-m1-private-runtime"
1968
+ ],
1969
+ deterministic: true,
1970
+ random: false,
1971
+ tokenConvertible: false
1972
+ }
1973
+ ]
1974
+ },
1975
+ facilitator: {
1976
+ artifacts: [
1977
+ {
1978
+ id: "pixel-trail-challenge-m1-answer-key",
1979
+ kind: "answer-key",
1980
+ audience: "facilitator",
1981
+ solutionBearing: true
1982
+ },
1983
+ {
1984
+ id: "pixel-trail-challenge-m1-protected-tests",
1985
+ kind: "protected-test",
1986
+ audience: "facilitator",
1987
+ solutionBearing: true
1988
+ }
1989
+ ],
1990
+ protectedGoals: [
1991
+ {
1992
+ id: "pixel-trail-challenge-m1-protected-resilience",
1993
+ statement: "The worker rejects invalid directions, clamps trail capacity and terminates bounded grid simulations before list or collision abuse.",
1994
+ visibility: "protected",
1995
+ criterionIds: [
1996
+ "pixel-trail-challenge-edge-one",
1997
+ "pixel-trail-challenge-edge-two"
1998
+ ],
1999
+ completionRequired: false,
2000
+ aiRequired: false
2001
+ }
2002
+ ],
2003
+ prompts: [
2004
+ "Ask the learner to predict the next row and column before suggesting a Python edit.",
2005
+ "Use the function reference and visible telemetry; never reveal protected coordinates, numeric targets or expected source fragments."
2006
+ ]
2007
+ }
2008
+ };
1788
2009
  var RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1 = {
1789
2010
  version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
1790
2011
  moduleId: "junior-coder.rescue-crew-commander",
@@ -2588,6 +2809,7 @@ ${summary}`);
2588
2809
  METEOR_SHIELD_MISSION_ONE_AUTHORING_V1,
2589
2810
  MISSION_AUTHORING_CONTRACT_VERSION_V1,
2590
2811
  PADDLE_PULSE_MISSION_ONE_AUTHORING_V1,
2812
+ PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1,
2591
2813
  RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1,
2592
2814
  ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1,
2593
2815
  ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1,