@plasius/learning 0.2.5 → 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 +25 -1
- package/dist/index.cjs +450 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -1
- package/dist/index.d.ts +13 -1
- package/dist/index.js +448 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -65,6 +65,8 @@ 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,
|
|
69
|
+
RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1,
|
|
68
70
|
ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1,
|
|
69
71
|
ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1,
|
|
70
72
|
SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1,
|
|
@@ -86,8 +88,22 @@ const paddlePulse = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
|
86
88
|
const meteorShield = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
87
89
|
(module) => module.slug === "meteor-shield",
|
|
88
90
|
);
|
|
91
|
+
const rescueCrewCommander = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
92
|
+
(module) => module.slug === "rescue-crew-commander",
|
|
93
|
+
);
|
|
94
|
+
const pixelTrailChallenge = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
95
|
+
(module) => module.slug === "pixel-trail-challenge",
|
|
96
|
+
);
|
|
89
97
|
|
|
90
|
-
if (
|
|
98
|
+
if (
|
|
99
|
+
!roadHopper ||
|
|
100
|
+
!robotMaze ||
|
|
101
|
+
!skywing ||
|
|
102
|
+
!paddlePulse ||
|
|
103
|
+
!meteorShield ||
|
|
104
|
+
!rescueCrewCommander ||
|
|
105
|
+
!pixelTrailChallenge
|
|
106
|
+
) {
|
|
91
107
|
throw new Error("Junior Coder module is missing");
|
|
92
108
|
}
|
|
93
109
|
|
|
@@ -111,6 +127,14 @@ assertValidMissionAuthoringBundle(
|
|
|
111
127
|
METEOR_SHIELD_MISSION_ONE_AUTHORING_V1,
|
|
112
128
|
meteorShield,
|
|
113
129
|
);
|
|
130
|
+
assertValidMissionAuthoringBundle(
|
|
131
|
+
RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1,
|
|
132
|
+
rescueCrewCommander,
|
|
133
|
+
);
|
|
134
|
+
assertValidMissionAuthoringBundle(
|
|
135
|
+
PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1,
|
|
136
|
+
pixelTrailChallenge,
|
|
137
|
+
);
|
|
114
138
|
```
|
|
115
139
|
|
|
116
140
|
## Contract rules
|
package/dist/index.cjs
CHANGED
|
@@ -28,6 +28,8 @@ __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,
|
|
32
|
+
RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1: () => RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1,
|
|
31
33
|
ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1: () => ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1,
|
|
32
34
|
ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1: () => ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1,
|
|
33
35
|
SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1: () => SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1,
|
|
@@ -1784,6 +1786,452 @@ var PADDLE_PULSE_MISSION_ONE_AUTHORING_V1 = {
|
|
|
1784
1786
|
]
|
|
1785
1787
|
}
|
|
1786
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
|
+
};
|
|
2009
|
+
var RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1 = {
|
|
2010
|
+
version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
|
|
2011
|
+
moduleId: "junior-coder.rescue-crew-commander",
|
|
2012
|
+
moduleVersion: "1.1.0",
|
|
2013
|
+
missionId: "rescue-crew-commander-mission-1",
|
|
2014
|
+
learner: {
|
|
2015
|
+
estimatedMinutes: 20,
|
|
2016
|
+
stages: [
|
|
2017
|
+
{
|
|
2018
|
+
kind: "learn",
|
|
2019
|
+
instruction: "Meet the helper, job, route and priority blocks and read what each block does in the synchronized JavaScript view.",
|
|
2020
|
+
artifactIds: ["rescue-crew-commander-m1-art"]
|
|
2021
|
+
},
|
|
2022
|
+
{
|
|
2023
|
+
kind: "predict",
|
|
2024
|
+
instruction: "Predict which helper will act first and which safe route it will follow.",
|
|
2025
|
+
artifactIds: []
|
|
2026
|
+
},
|
|
2027
|
+
{
|
|
2028
|
+
kind: "build",
|
|
2029
|
+
instruction: "Arrange the visual blocks to give each helper one safe rescue job.",
|
|
2030
|
+
artifactIds: ["rescue-crew-commander-m1-program"]
|
|
2031
|
+
},
|
|
2032
|
+
{
|
|
2033
|
+
kind: "run",
|
|
2034
|
+
instruction: "Use the Run action button to watch the crew follow the typed visual program.",
|
|
2035
|
+
artifactIds: ["rescue-crew-commander-m1-program"]
|
|
2036
|
+
},
|
|
2037
|
+
{
|
|
2038
|
+
kind: "assess",
|
|
2039
|
+
instruction: "Run the visible and protected deterministic crew checks.",
|
|
2040
|
+
artifactIds: []
|
|
2041
|
+
},
|
|
2042
|
+
{
|
|
2043
|
+
kind: "inspect",
|
|
2044
|
+
instruction: "Compare the highlighted block with the first goal that did not pass and inspect the matching JavaScript line.",
|
|
2045
|
+
artifactIds: []
|
|
2046
|
+
},
|
|
2047
|
+
{
|
|
2048
|
+
kind: "fix",
|
|
2049
|
+
instruction: "Move or replace one job, route or priority block, then run the mission again.",
|
|
2050
|
+
artifactIds: ["rescue-crew-commander-m1-program"]
|
|
2051
|
+
},
|
|
2052
|
+
{
|
|
2053
|
+
kind: "explain",
|
|
2054
|
+
instruction: "Explain how job order and priority changed the crew state and rescue result.",
|
|
2055
|
+
artifactIds: []
|
|
2056
|
+
},
|
|
2057
|
+
{
|
|
2058
|
+
kind: "reward",
|
|
2059
|
+
instruction: "Collect the evidence-bound badge when the score and private-simulator safety check pass.",
|
|
2060
|
+
artifactIds: []
|
|
2061
|
+
}
|
|
2062
|
+
],
|
|
2063
|
+
readinessChecks: [
|
|
2064
|
+
{
|
|
2065
|
+
id: "rescue-crew-commander-m1-find-priority",
|
|
2066
|
+
prompt: "Point to the block that decides which helper acts first.",
|
|
2067
|
+
scored: false
|
|
2068
|
+
}
|
|
2069
|
+
],
|
|
2070
|
+
artifacts: [
|
|
2071
|
+
{
|
|
2072
|
+
id: "rescue-crew-commander-m1-program",
|
|
2073
|
+
kind: "starter-code",
|
|
2074
|
+
audience: "learner",
|
|
2075
|
+
solutionBearing: false
|
|
2076
|
+
},
|
|
2077
|
+
{
|
|
2078
|
+
id: "rescue-crew-commander-m1-art",
|
|
2079
|
+
kind: "starter-assets",
|
|
2080
|
+
audience: "learner",
|
|
2081
|
+
solutionBearing: false
|
|
2082
|
+
},
|
|
2083
|
+
{
|
|
2084
|
+
id: "rescue-crew-commander-m1-printable",
|
|
2085
|
+
kind: "printable",
|
|
2086
|
+
audience: "learner",
|
|
2087
|
+
solutionBearing: false
|
|
2088
|
+
}
|
|
2089
|
+
],
|
|
2090
|
+
goals: [
|
|
2091
|
+
{
|
|
2092
|
+
id: "rescue-crew-commander-m1-starts",
|
|
2093
|
+
statement: "The typed visual program is structurally valid and starts.",
|
|
2094
|
+
visibility: "visible",
|
|
2095
|
+
criterionIds: ["rescue-crew-commander-build"],
|
|
2096
|
+
completionRequired: true,
|
|
2097
|
+
aiRequired: false
|
|
2098
|
+
},
|
|
2099
|
+
{
|
|
2100
|
+
id: "rescue-crew-commander-m1-safe-jobs",
|
|
2101
|
+
statement: "Every helper receives one suitable job and the highest-priority rescue starts first.",
|
|
2102
|
+
visibility: "visible",
|
|
2103
|
+
criterionIds: [
|
|
2104
|
+
"rescue-crew-commander-goal-one",
|
|
2105
|
+
"rescue-crew-commander-goal-two"
|
|
2106
|
+
],
|
|
2107
|
+
completionRequired: true,
|
|
2108
|
+
aiRequired: false
|
|
2109
|
+
},
|
|
2110
|
+
{
|
|
2111
|
+
id: "rescue-crew-commander-m1-private-runtime",
|
|
2112
|
+
statement: "The crew stays inside the private simulator and follows only host-provided actions.",
|
|
2113
|
+
visibility: "visible",
|
|
2114
|
+
criterionIds: ["rescue-crew-commander-safety"],
|
|
2115
|
+
completionRequired: true,
|
|
2116
|
+
aiRequired: false
|
|
2117
|
+
}
|
|
2118
|
+
],
|
|
2119
|
+
interactions: [
|
|
2120
|
+
{
|
|
2121
|
+
id: "rescue-crew-commander-m1-reorder-blocks",
|
|
2122
|
+
description: "Change the order of typed job, route and priority blocks.",
|
|
2123
|
+
primaryMode: "drag",
|
|
2124
|
+
alternativeIds: ["rescue-crew-commander-m1-button-reorder"]
|
|
2125
|
+
},
|
|
2126
|
+
{
|
|
2127
|
+
id: "rescue-crew-commander-m1-run-control",
|
|
2128
|
+
description: "Start the private rescue-crew simulation.",
|
|
2129
|
+
primaryMode: "pointer",
|
|
2130
|
+
alternativeIds: ["rescue-crew-commander-m1-keyboard-run"]
|
|
2131
|
+
},
|
|
2132
|
+
{
|
|
2133
|
+
id: "rescue-crew-commander-m1-crew-motion",
|
|
2134
|
+
description: "Observe helpers change state and follow their assigned routes.",
|
|
2135
|
+
primaryMode: "motion",
|
|
2136
|
+
alternativeIds: ["rescue-crew-commander-m1-status-view"]
|
|
2137
|
+
}
|
|
2138
|
+
],
|
|
2139
|
+
accessibilityAlternatives: [
|
|
2140
|
+
{
|
|
2141
|
+
id: "rescue-crew-commander-m1-button-reorder",
|
|
2142
|
+
modes: ["keyboard", "pointer"],
|
|
2143
|
+
equivalentOutcome: true,
|
|
2144
|
+
description: "Use labelled Move up and Move down buttons instead of dragging a visual block."
|
|
2145
|
+
},
|
|
2146
|
+
{
|
|
2147
|
+
id: "rescue-crew-commander-m1-keyboard-run",
|
|
2148
|
+
modes: ["keyboard"],
|
|
2149
|
+
equivalentOutcome: true,
|
|
2150
|
+
description: "Press Enter or Space on the play-icon Run button to start the same preview."
|
|
2151
|
+
},
|
|
2152
|
+
{
|
|
2153
|
+
id: "rescue-crew-commander-m1-status-view",
|
|
2154
|
+
modes: ["text", "symbol", "reduced-motion"],
|
|
2155
|
+
equivalentOutcome: true,
|
|
2156
|
+
description: "Read each helper's job, route, priority and state from the status list without animation or colour dependence."
|
|
2157
|
+
}
|
|
2158
|
+
],
|
|
2159
|
+
evidenceRequirements: [
|
|
2160
|
+
{
|
|
2161
|
+
id: "rescue-crew-commander-m1-assessment",
|
|
2162
|
+
goalIds: [
|
|
2163
|
+
"rescue-crew-commander-m1-starts",
|
|
2164
|
+
"rescue-crew-commander-m1-safe-jobs",
|
|
2165
|
+
"rescue-crew-commander-m1-private-runtime"
|
|
2166
|
+
],
|
|
2167
|
+
kind: "assessment-result",
|
|
2168
|
+
retention: "entitlement",
|
|
2169
|
+
containsPersonalData: false
|
|
2170
|
+
},
|
|
2171
|
+
{
|
|
2172
|
+
id: "rescue-crew-commander-m1-explanation",
|
|
2173
|
+
goalIds: ["rescue-crew-commander-m1-safe-jobs"],
|
|
2174
|
+
kind: "learner-explanation",
|
|
2175
|
+
retention: "attempt",
|
|
2176
|
+
containsPersonalData: false
|
|
2177
|
+
}
|
|
2178
|
+
],
|
|
2179
|
+
sideAdventures: [
|
|
2180
|
+
{
|
|
2181
|
+
id: "rescue-crew-commander-m1-remix",
|
|
2182
|
+
prompt: "Invent an original helper role and explain which safe route and priority it should receive.",
|
|
2183
|
+
completionRequired: false
|
|
2184
|
+
}
|
|
2185
|
+
],
|
|
2186
|
+
rewardBindings: [
|
|
2187
|
+
{
|
|
2188
|
+
id: "rescue-crew-commander-m1-badge",
|
|
2189
|
+
badgeId: "rescue-crew-commander-mission-complete",
|
|
2190
|
+
goalIds: [
|
|
2191
|
+
"rescue-crew-commander-m1-starts",
|
|
2192
|
+
"rescue-crew-commander-m1-safe-jobs",
|
|
2193
|
+
"rescue-crew-commander-m1-private-runtime"
|
|
2194
|
+
],
|
|
2195
|
+
deterministic: true,
|
|
2196
|
+
random: false,
|
|
2197
|
+
tokenConvertible: false
|
|
2198
|
+
}
|
|
2199
|
+
]
|
|
2200
|
+
},
|
|
2201
|
+
facilitator: {
|
|
2202
|
+
artifacts: [
|
|
2203
|
+
{
|
|
2204
|
+
id: "rescue-crew-commander-m1-answer-key",
|
|
2205
|
+
kind: "answer-key",
|
|
2206
|
+
audience: "facilitator",
|
|
2207
|
+
solutionBearing: true
|
|
2208
|
+
},
|
|
2209
|
+
{
|
|
2210
|
+
id: "rescue-crew-commander-m1-protected-tests",
|
|
2211
|
+
kind: "protected-test",
|
|
2212
|
+
audience: "facilitator",
|
|
2213
|
+
solutionBearing: true
|
|
2214
|
+
}
|
|
2215
|
+
],
|
|
2216
|
+
protectedGoals: [
|
|
2217
|
+
{
|
|
2218
|
+
id: "rescue-crew-commander-m1-protected-resilience",
|
|
2219
|
+
statement: "The interpreter rejects unknown blocks, duplicate assignments and programs over the action limit.",
|
|
2220
|
+
visibility: "protected",
|
|
2221
|
+
criterionIds: [
|
|
2222
|
+
"rescue-crew-commander-edge-one",
|
|
2223
|
+
"rescue-crew-commander-edge-two"
|
|
2224
|
+
],
|
|
2225
|
+
completionRequired: false,
|
|
2226
|
+
aiRequired: false
|
|
2227
|
+
}
|
|
2228
|
+
],
|
|
2229
|
+
prompts: [
|
|
2230
|
+
"Ask the learner which helper should act first before suggesting a block change.",
|
|
2231
|
+
"Use the block reference, status list and visible goal; never reveal the protected assignment order or expected block sequence."
|
|
2232
|
+
]
|
|
2233
|
+
}
|
|
2234
|
+
};
|
|
1787
2235
|
var METEOR_SHIELD_MISSION_ONE_AUTHORING_V1 = {
|
|
1788
2236
|
version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
|
|
1789
2237
|
moduleId: "junior-coder.meteor-shield",
|
|
@@ -2361,6 +2809,8 @@ ${summary}`);
|
|
|
2361
2809
|
METEOR_SHIELD_MISSION_ONE_AUTHORING_V1,
|
|
2362
2810
|
MISSION_AUTHORING_CONTRACT_VERSION_V1,
|
|
2363
2811
|
PADDLE_PULSE_MISSION_ONE_AUTHORING_V1,
|
|
2812
|
+
PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1,
|
|
2813
|
+
RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1,
|
|
2364
2814
|
ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1,
|
|
2365
2815
|
ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1,
|
|
2366
2816
|
SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1,
|