@plasius/learning 0.2.16 → 0.2.18
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 +29 -1
- package/dist/index.cjs +569 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -4
- package/dist/index.d.ts +7 -4
- package/dist/index.js +567 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -62,7 +62,9 @@ the exact catalog module that owns its rubric, mission and badges.
|
|
|
62
62
|
|
|
63
63
|
```ts
|
|
64
64
|
import {
|
|
65
|
+
ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1,
|
|
65
66
|
BEACON_BOT_MISSION_ONE_AUTHORING_V1,
|
|
67
|
+
CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1,
|
|
66
68
|
DANCE_ROVER_MISSION_ONE_AUTHORING_V1,
|
|
67
69
|
JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1,
|
|
68
70
|
METEOR_SHIELD_MISSION_ONE_AUTHORING_V1,
|
|
@@ -130,6 +132,12 @@ const vibeBugDetective = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
|
130
132
|
const vibeIdeaStudio = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
131
133
|
(module) => module.slug === "vibe-idea-studio",
|
|
132
134
|
);
|
|
135
|
+
const adventureMissionPlanner = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
136
|
+
(module) => module.slug === "adventure-mission-planner",
|
|
137
|
+
);
|
|
138
|
+
const creatureCareDashboard = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
139
|
+
(module) => module.slug === "creature-care-dashboard",
|
|
140
|
+
);
|
|
133
141
|
|
|
134
142
|
if (
|
|
135
143
|
!roadHopper ||
|
|
@@ -147,7 +155,9 @@ if (
|
|
|
147
155
|
!rainbowRescueRover ||
|
|
148
156
|
!vibeGameRemixLab ||
|
|
149
157
|
!vibeBugDetective ||
|
|
150
|
-
!vibeIdeaStudio
|
|
158
|
+
!vibeIdeaStudio ||
|
|
159
|
+
!adventureMissionPlanner ||
|
|
160
|
+
!creatureCareDashboard
|
|
151
161
|
) {
|
|
152
162
|
throw new Error("Junior Coder module is missing");
|
|
153
163
|
}
|
|
@@ -216,6 +226,14 @@ assertValidMissionAuthoringBundle(
|
|
|
216
226
|
VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1,
|
|
217
227
|
vibeIdeaStudio,
|
|
218
228
|
);
|
|
229
|
+
assertValidMissionAuthoringBundle(
|
|
230
|
+
ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1,
|
|
231
|
+
adventureMissionPlanner,
|
|
232
|
+
);
|
|
233
|
+
assertValidMissionAuthoringBundle(
|
|
234
|
+
CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1,
|
|
235
|
+
creatureCareDashboard,
|
|
236
|
+
);
|
|
219
237
|
```
|
|
220
238
|
|
|
221
239
|
## Contract rules
|
|
@@ -268,6 +286,14 @@ assertValidMissionAuthoringBundle(
|
|
|
268
286
|
- Vibe Idea Studio binds supplied child-safe idea, audience and acceptance-test
|
|
269
287
|
cards to one permitted template. The learner predicts, reviews and controls
|
|
270
288
|
the exact prototype diff before deterministic tests decide completion.
|
|
289
|
+
- Adventure Mission Planner documents semantic structure, validation, arrays,
|
|
290
|
+
state, private simulated local save and an equivalent accessible summary.
|
|
291
|
+
The learner reviews the exact persistence diff; no form transmits data and
|
|
292
|
+
no network, real location or personal information enters the preview.
|
|
293
|
+
- Creature Care Dashboard documents components, events, bounded timers, status
|
|
294
|
+
displays, responsive layouts and equivalent reduced-motion feedback. The
|
|
295
|
+
learner controls the exact accessibility diff; no network, real schedule,
|
|
296
|
+
background task or personal information enters the preview.
|
|
271
297
|
|
|
272
298
|
See [the foundation design](docs/design/junior-coder-catalog-foundation.md),
|
|
273
299
|
[the uniform pricing design](docs/design/junior-coder-uniform-pricing.md),
|
|
@@ -282,6 +308,8 @@ and [TDR 0008](docs/tdrs/tdr-0008-obstacle-explorer-sensing-watchdog-and-fail-sa
|
|
|
282
308
|
See also [TDR 0010](docs/tdrs/tdr-0010-vibe-game-remix-bounded-suggestion-authoring.md).
|
|
283
309
|
See also [TDR 0011](docs/tdrs/tdr-0011-vibe-bug-detective-evidence-led-repair.md).
|
|
284
310
|
See also [TDR 0012](docs/tdrs/tdr-0012-vibe-idea-studio-bounded-goal-prototyping.md).
|
|
311
|
+
See also [TDR 0013](docs/tdrs/tdr-0013-adventure-mission-planner-private-persistence.md).
|
|
312
|
+
See also [TDR 0014](docs/tdrs/tdr-0014-creature-care-dashboard-bounded-timers-and-motion.md).
|
|
285
313
|
|
|
286
314
|
## Development
|
|
287
315
|
|
package/dist/index.cjs
CHANGED
|
@@ -20,7 +20,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/index.ts
|
|
21
21
|
var index_exports = {};
|
|
22
22
|
__export(index_exports, {
|
|
23
|
+
ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1: () => ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1,
|
|
23
24
|
BEACON_BOT_MISSION_ONE_AUTHORING_V1: () => BEACON_BOT_MISSION_ONE_AUTHORING_V1,
|
|
25
|
+
CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1: () => CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1,
|
|
24
26
|
DANCE_ROVER_MISSION_ONE_AUTHORING_V1: () => DANCE_ROVER_MISSION_ONE_AUTHORING_V1,
|
|
25
27
|
JUNIOR_CODER_MISSION_STAGE_ORDER_V1: () => JUNIOR_CODER_MISSION_STAGE_ORDER_V1,
|
|
26
28
|
JUNIOR_CODER_MODULE_PRICE_V1_1: () => JUNIOR_CODER_MODULE_PRICE_V1_1,
|
|
@@ -5487,6 +5489,571 @@ var VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1 = {
|
|
|
5487
5489
|
]
|
|
5488
5490
|
}
|
|
5489
5491
|
};
|
|
5492
|
+
var CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1 = {
|
|
5493
|
+
version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
|
|
5494
|
+
moduleId: "junior-coder.creature-care-dashboard",
|
|
5495
|
+
moduleVersion: "1.1.0",
|
|
5496
|
+
missionId: "creature-care-dashboard-mission-1",
|
|
5497
|
+
learner: {
|
|
5498
|
+
estimatedMinutes: 20,
|
|
5499
|
+
stages: [
|
|
5500
|
+
{
|
|
5501
|
+
kind: "learn",
|
|
5502
|
+
instruction: "Read how components, events, status displays, timers, responsive layout and reduced motion build an accessible fictional creature dashboard.",
|
|
5503
|
+
artifactIds: ["creature-care-dashboard-m1-guide"]
|
|
5504
|
+
},
|
|
5505
|
+
{
|
|
5506
|
+
kind: "predict",
|
|
5507
|
+
instruction: "Predict which parts of the status card should update and which movement should stop when reduced motion is enabled.",
|
|
5508
|
+
artifactIds: ["creature-care-dashboard-m1-status-cards"]
|
|
5509
|
+
},
|
|
5510
|
+
{
|
|
5511
|
+
kind: "build",
|
|
5512
|
+
instruction: "Change only the supplied creature, care status, timer, layout and reduced-motion settings.",
|
|
5513
|
+
artifactIds: ["creature-care-dashboard-m1-code"]
|
|
5514
|
+
},
|
|
5515
|
+
{
|
|
5516
|
+
kind: "run",
|
|
5517
|
+
instruction: "Use the action-icon Run button to update the private dashboard preview and its equivalent text status.",
|
|
5518
|
+
artifactIds: ["creature-care-dashboard-m1-code"]
|
|
5519
|
+
},
|
|
5520
|
+
{
|
|
5521
|
+
kind: "assess",
|
|
5522
|
+
instruction: "Run deterministic component, event, timer, status, responsive-layout and accessibility checks.",
|
|
5523
|
+
artifactIds: []
|
|
5524
|
+
},
|
|
5525
|
+
{
|
|
5526
|
+
kind: "inspect",
|
|
5527
|
+
instruction: "Compare the observed dashboard state with the selected status card and highlighted reduced-motion setting.",
|
|
5528
|
+
artifactIds: ["creature-care-dashboard-m1-code"]
|
|
5529
|
+
},
|
|
5530
|
+
{
|
|
5531
|
+
kind: "fix",
|
|
5532
|
+
instruction: "Review and accept or reject the exact reduced-motion change yourself, then rerun every check.",
|
|
5533
|
+
artifactIds: ["creature-care-dashboard-m1-code"]
|
|
5534
|
+
},
|
|
5535
|
+
{
|
|
5536
|
+
kind: "explain",
|
|
5537
|
+
instruction: "Explain how events update component state, how the timer stays bounded and why reduced motion matters.",
|
|
5538
|
+
artifactIds: []
|
|
5539
|
+
},
|
|
5540
|
+
{
|
|
5541
|
+
kind: "reward",
|
|
5542
|
+
instruction: "Collect the evidence-bound care badge after the score reaches 80 and every privacy and accessibility check passes.",
|
|
5543
|
+
artifactIds: []
|
|
5544
|
+
}
|
|
5545
|
+
],
|
|
5546
|
+
readinessChecks: [
|
|
5547
|
+
{
|
|
5548
|
+
id: "creature-care-dashboard-m1-status-check",
|
|
5549
|
+
prompt: "Find the creature card, care status, timer and text summary that must all describe the same private state.",
|
|
5550
|
+
scored: false
|
|
5551
|
+
}
|
|
5552
|
+
],
|
|
5553
|
+
artifacts: [
|
|
5554
|
+
{
|
|
5555
|
+
id: "creature-care-dashboard-m1-code",
|
|
5556
|
+
kind: "starter-code",
|
|
5557
|
+
audience: "learner",
|
|
5558
|
+
solutionBearing: false
|
|
5559
|
+
},
|
|
5560
|
+
{
|
|
5561
|
+
id: "creature-care-dashboard-m1-guide",
|
|
5562
|
+
kind: "starter-assets",
|
|
5563
|
+
audience: "learner",
|
|
5564
|
+
solutionBearing: false
|
|
5565
|
+
},
|
|
5566
|
+
{
|
|
5567
|
+
id: "creature-care-dashboard-m1-status-cards",
|
|
5568
|
+
kind: "sample-data",
|
|
5569
|
+
audience: "learner",
|
|
5570
|
+
solutionBearing: false
|
|
5571
|
+
}
|
|
5572
|
+
],
|
|
5573
|
+
goals: [
|
|
5574
|
+
{
|
|
5575
|
+
id: "creature-care-dashboard-m1-starts",
|
|
5576
|
+
statement: "The responsive creature-card component, labelled status display and bounded timer state are valid and start.",
|
|
5577
|
+
visibility: "visible",
|
|
5578
|
+
criterionIds: ["creature-care-dashboard-build"],
|
|
5579
|
+
completionRequired: true,
|
|
5580
|
+
aiRequired: false
|
|
5581
|
+
},
|
|
5582
|
+
{
|
|
5583
|
+
id: "creature-care-dashboard-m1-behaviour",
|
|
5584
|
+
statement: "A supplied event updates the fictional creature status and timer while the responsive dashboard keeps one consistent state.",
|
|
5585
|
+
visibility: "visible",
|
|
5586
|
+
criterionIds: [
|
|
5587
|
+
"creature-care-dashboard-goal-one",
|
|
5588
|
+
"creature-care-dashboard-goal-two",
|
|
5589
|
+
"creature-care-dashboard-goal-three"
|
|
5590
|
+
],
|
|
5591
|
+
completionRequired: true,
|
|
5592
|
+
aiRequired: false
|
|
5593
|
+
},
|
|
5594
|
+
{
|
|
5595
|
+
id: "creature-care-dashboard-m1-accessible-private",
|
|
5596
|
+
statement: "The dashboard enables reduced motion, keeps an equivalent text status and uses no network, personal data or real schedule.",
|
|
5597
|
+
visibility: "visible",
|
|
5598
|
+
criterionIds: ["creature-care-dashboard-safety"],
|
|
5599
|
+
completionRequired: true,
|
|
5600
|
+
aiRequired: false
|
|
5601
|
+
}
|
|
5602
|
+
],
|
|
5603
|
+
interactions: [
|
|
5604
|
+
{
|
|
5605
|
+
id: "creature-care-dashboard-m1-editor",
|
|
5606
|
+
description: "Edit the five documented dashboard calls using keyboard or pointer controls.",
|
|
5607
|
+
primaryMode: "keyboard",
|
|
5608
|
+
alternativeIds: []
|
|
5609
|
+
},
|
|
5610
|
+
{
|
|
5611
|
+
id: "creature-care-dashboard-m1-run",
|
|
5612
|
+
description: "Activate the labelled action-icon Run control.",
|
|
5613
|
+
primaryMode: "pointer",
|
|
5614
|
+
alternativeIds: ["creature-care-dashboard-m1-keyboard-run"]
|
|
5615
|
+
},
|
|
5616
|
+
{
|
|
5617
|
+
id: "creature-care-dashboard-m1-review",
|
|
5618
|
+
description: "Review and accept or reject the exact labelled diff.",
|
|
5619
|
+
primaryMode: "keyboard",
|
|
5620
|
+
alternativeIds: []
|
|
5621
|
+
}
|
|
5622
|
+
],
|
|
5623
|
+
accessibilityAlternatives: [
|
|
5624
|
+
{
|
|
5625
|
+
id: "creature-care-dashboard-m1-keyboard-run",
|
|
5626
|
+
description: "Focus the Run action button and press Enter or Space to produce the same dashboard and text telemetry.",
|
|
5627
|
+
modes: ["keyboard"],
|
|
5628
|
+
equivalentOutcome: true
|
|
5629
|
+
}
|
|
5630
|
+
],
|
|
5631
|
+
evidenceRequirements: [
|
|
5632
|
+
{
|
|
5633
|
+
id: "creature-care-dashboard-m1-assessment",
|
|
5634
|
+
goalIds: [
|
|
5635
|
+
"creature-care-dashboard-m1-starts",
|
|
5636
|
+
"creature-care-dashboard-m1-behaviour",
|
|
5637
|
+
"creature-care-dashboard-m1-accessible-private"
|
|
5638
|
+
],
|
|
5639
|
+
kind: "assessment-result",
|
|
5640
|
+
retention: "entitlement",
|
|
5641
|
+
containsPersonalData: false
|
|
5642
|
+
},
|
|
5643
|
+
{
|
|
5644
|
+
id: "creature-care-dashboard-m1-explanation",
|
|
5645
|
+
goalIds: ["creature-care-dashboard-m1-accessible-private"],
|
|
5646
|
+
kind: "learner-explanation",
|
|
5647
|
+
retention: "attempt",
|
|
5648
|
+
containsPersonalData: false
|
|
5649
|
+
}
|
|
5650
|
+
],
|
|
5651
|
+
sideAdventures: [
|
|
5652
|
+
{
|
|
5653
|
+
id: "creature-care-dashboard-m1-remix",
|
|
5654
|
+
prompt: "Choose another supplied creature, status and responsive layout while preserving the timer and reduced-motion evidence.",
|
|
5655
|
+
completionRequired: false
|
|
5656
|
+
}
|
|
5657
|
+
],
|
|
5658
|
+
rewardBindings: [
|
|
5659
|
+
{
|
|
5660
|
+
id: "creature-care-dashboard-m1-badge",
|
|
5661
|
+
badgeId: "creature-care-dashboard-mission-complete",
|
|
5662
|
+
goalIds: [
|
|
5663
|
+
"creature-care-dashboard-m1-starts",
|
|
5664
|
+
"creature-care-dashboard-m1-behaviour",
|
|
5665
|
+
"creature-care-dashboard-m1-accessible-private"
|
|
5666
|
+
],
|
|
5667
|
+
deterministic: true,
|
|
5668
|
+
random: false,
|
|
5669
|
+
tokenConvertible: false
|
|
5670
|
+
}
|
|
5671
|
+
],
|
|
5672
|
+
functionReference: [
|
|
5673
|
+
{
|
|
5674
|
+
id: "creature-care-dashboard-function-creature",
|
|
5675
|
+
signature: "chooseCreature(creature)",
|
|
5676
|
+
summary: "Chooses one supplied fictional creature for the main component card.",
|
|
5677
|
+
parameters: [{ name: "creature", type: "text", description: "Use Moon Moth, Cloud Cat or Pebble Dragon." }],
|
|
5678
|
+
effect: "Updates the creature card heading, illustration label and equivalent text status.",
|
|
5679
|
+
example: 'chooseCreature("Moon Moth");'
|
|
5680
|
+
},
|
|
5681
|
+
{
|
|
5682
|
+
id: "creature-care-dashboard-function-status",
|
|
5683
|
+
signature: "setCareStatus(status)",
|
|
5684
|
+
summary: "Chooses one supplied care state for the fictional creature.",
|
|
5685
|
+
parameters: [{ name: "status", type: "text", description: "Use Resting, Ready to play or Snack time." }],
|
|
5686
|
+
effect: "Updates the visible component status and accessible live-status text.",
|
|
5687
|
+
example: 'setCareStatus("Ready to play");'
|
|
5688
|
+
},
|
|
5689
|
+
{
|
|
5690
|
+
id: "creature-care-dashboard-function-timer",
|
|
5691
|
+
signature: "setCareTimer(seconds)",
|
|
5692
|
+
summary: "Sets a short simulated care timer from a supplied safe value.",
|
|
5693
|
+
parameters: [{ name: "seconds", type: "number", description: "Use 5, 10 or 15 simulated seconds." }],
|
|
5694
|
+
effect: "Updates bounded timer state and text telemetry without scheduling background work.",
|
|
5695
|
+
example: "setCareTimer(10);"
|
|
5696
|
+
},
|
|
5697
|
+
{
|
|
5698
|
+
id: "creature-care-dashboard-function-layout",
|
|
5699
|
+
signature: "setDashboardLayout(layout)",
|
|
5700
|
+
summary: "Chooses one supplied responsive card arrangement.",
|
|
5701
|
+
parameters: [{ name: "layout", type: "text", description: "Use single, cosy-grid or wide-grid." }],
|
|
5702
|
+
effect: "Changes the simulated preview layout while keeping the same reading and keyboard order.",
|
|
5703
|
+
example: 'setDashboardLayout("cosy-grid");'
|
|
5704
|
+
},
|
|
5705
|
+
{
|
|
5706
|
+
id: "creature-care-dashboard-function-motion",
|
|
5707
|
+
signature: "setReducedMotion(enabled)",
|
|
5708
|
+
summary: "Turns the reduced-motion presentation on or off.",
|
|
5709
|
+
parameters: [{ name: "enabled", type: "Boolean", description: "Use true to stop decorative movement." }],
|
|
5710
|
+
effect: "Disables decorative preview animation while preserving status, timer and event feedback.",
|
|
5711
|
+
example: "setReducedMotion(true);"
|
|
5712
|
+
}
|
|
5713
|
+
],
|
|
5714
|
+
boundedSuggestion: {
|
|
5715
|
+
id: "creature-care-dashboard-m1-reduced-motion-diff",
|
|
5716
|
+
source: "authored-fallback",
|
|
5717
|
+
intent: "Keep the fictional care dashboard understandable without decorative movement.",
|
|
5718
|
+
constraints: [
|
|
5719
|
+
"Change exactly one documented reduced-motion setting.",
|
|
5720
|
+
"Preserve the supplied creature, status, timer, responsive layout and text telemetry.",
|
|
5721
|
+
"Do not add network, external scripts, trackers, personal data, real schedules or background tasks."
|
|
5722
|
+
],
|
|
5723
|
+
permittedArtifactId: "creature-care-dashboard-m1-code",
|
|
5724
|
+
originalSnippet: "setReducedMotion(false);",
|
|
5725
|
+
replacementSnippet: "setReducedMotion(true);",
|
|
5726
|
+
explanationPrompt: "Which decorative movement stopped, and which event, timer and text evidence stayed available?",
|
|
5727
|
+
aiOptional: false,
|
|
5728
|
+
learnerApprovalRequired: true,
|
|
5729
|
+
alternatives: ["accept", "reject"]
|
|
5730
|
+
}
|
|
5731
|
+
},
|
|
5732
|
+
facilitator: {
|
|
5733
|
+
artifacts: [
|
|
5734
|
+
{
|
|
5735
|
+
id: "creature-care-dashboard-m1-answer-key",
|
|
5736
|
+
kind: "answer-key",
|
|
5737
|
+
audience: "facilitator",
|
|
5738
|
+
solutionBearing: true
|
|
5739
|
+
},
|
|
5740
|
+
{
|
|
5741
|
+
id: "creature-care-dashboard-m1-protected-tests",
|
|
5742
|
+
kind: "protected-test",
|
|
5743
|
+
audience: "facilitator",
|
|
5744
|
+
solutionBearing: true
|
|
5745
|
+
},
|
|
5746
|
+
{
|
|
5747
|
+
id: "creature-care-dashboard-m1-safety-notes",
|
|
5748
|
+
kind: "facilitator-note",
|
|
5749
|
+
audience: "facilitator",
|
|
5750
|
+
solutionBearing: true
|
|
5751
|
+
}
|
|
5752
|
+
],
|
|
5753
|
+
protectedGoals: [
|
|
5754
|
+
{
|
|
5755
|
+
id: "creature-care-dashboard-m1-protected-boundary",
|
|
5756
|
+
statement: "The dashboard rejects arbitrary text, personal data, real schedules, scripts, network calls, tracking, unbounded timers and inaccessible motion-only feedback.",
|
|
5757
|
+
visibility: "protected",
|
|
5758
|
+
criterionIds: [
|
|
5759
|
+
"creature-care-dashboard-edge-one",
|
|
5760
|
+
"creature-care-dashboard-edge-two"
|
|
5761
|
+
],
|
|
5762
|
+
completionRequired: false,
|
|
5763
|
+
aiRequired: false
|
|
5764
|
+
}
|
|
5765
|
+
],
|
|
5766
|
+
prompts: [
|
|
5767
|
+
"Ask the learner to identify the component state, event result, timer and text-equivalent evidence before discussing reduced motion.",
|
|
5768
|
+
"Use only the supplied fictional creature and status cards; redirect names, real schedules and personal details to safe choices.",
|
|
5769
|
+
"Reject must preserve source, and provider failure must never block the deterministic authored path."
|
|
5770
|
+
]
|
|
5771
|
+
}
|
|
5772
|
+
};
|
|
5773
|
+
var ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1 = {
|
|
5774
|
+
version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
|
|
5775
|
+
moduleId: "junior-coder.adventure-mission-planner",
|
|
5776
|
+
moduleVersion: "1.1.0",
|
|
5777
|
+
missionId: "adventure-mission-planner-mission-1",
|
|
5778
|
+
learner: {
|
|
5779
|
+
estimatedMinutes: 20,
|
|
5780
|
+
stages: [
|
|
5781
|
+
{
|
|
5782
|
+
kind: "learn",
|
|
5783
|
+
instruction: "Read how semantic headings, labelled mission fields, arrays, state and the five documented functions build an accessible fictional planner.",
|
|
5784
|
+
artifactIds: ["adventure-mission-planner-m1-guide"]
|
|
5785
|
+
},
|
|
5786
|
+
{
|
|
5787
|
+
kind: "predict",
|
|
5788
|
+
instruction: "Predict what will still be available after the private preview restarts when local save is disabled.",
|
|
5789
|
+
artifactIds: ["adventure-mission-planner-m1-test-card"]
|
|
5790
|
+
},
|
|
5791
|
+
{
|
|
5792
|
+
kind: "build",
|
|
5793
|
+
instruction: "Change only the supplied planner settings and keep the fictional mission free of names, contact details and real locations.",
|
|
5794
|
+
artifactIds: ["adventure-mission-planner-m1-code"]
|
|
5795
|
+
},
|
|
5796
|
+
{
|
|
5797
|
+
kind: "run",
|
|
5798
|
+
instruction: "Use the action-icon Run button to render the semantic private planner preview and its text equivalent.",
|
|
5799
|
+
artifactIds: ["adventure-mission-planner-m1-code"]
|
|
5800
|
+
},
|
|
5801
|
+
{
|
|
5802
|
+
kind: "assess",
|
|
5803
|
+
instruction: "Run deterministic structure, validation, array, state, local-save and accessibility checks.",
|
|
5804
|
+
artifactIds: []
|
|
5805
|
+
},
|
|
5806
|
+
{
|
|
5807
|
+
kind: "inspect",
|
|
5808
|
+
instruction: "Compare the observed restart result with the selected persistence goal and highlighted setting.",
|
|
5809
|
+
artifactIds: ["adventure-mission-planner-m1-code"]
|
|
5810
|
+
},
|
|
5811
|
+
{
|
|
5812
|
+
kind: "fix",
|
|
5813
|
+
instruction: "Review and accept or reject the exact local-save change yourself, then rerun every check.",
|
|
5814
|
+
artifactIds: ["adventure-mission-planner-m1-code"]
|
|
5815
|
+
},
|
|
5816
|
+
{
|
|
5817
|
+
kind: "explain",
|
|
5818
|
+
instruction: "Explain how semantic labels, validation and private local save make the planner easier and safer to use.",
|
|
5819
|
+
artifactIds: []
|
|
5820
|
+
},
|
|
5821
|
+
{
|
|
5822
|
+
kind: "reward",
|
|
5823
|
+
instruction: "Collect the evidence-bound planner badge after the score reaches 80 and every privacy and accessibility check passes.",
|
|
5824
|
+
artifactIds: []
|
|
5825
|
+
}
|
|
5826
|
+
],
|
|
5827
|
+
readinessChecks: [
|
|
5828
|
+
{
|
|
5829
|
+
id: "adventure-mission-planner-m1-label-check",
|
|
5830
|
+
prompt: "Find the visible heading, mission title, day and validation message that a screen reader must also announce.",
|
|
5831
|
+
scored: false
|
|
5832
|
+
}
|
|
5833
|
+
],
|
|
5834
|
+
artifacts: [
|
|
5835
|
+
{
|
|
5836
|
+
id: "adventure-mission-planner-m1-code",
|
|
5837
|
+
kind: "starter-code",
|
|
5838
|
+
audience: "learner",
|
|
5839
|
+
solutionBearing: false
|
|
5840
|
+
},
|
|
5841
|
+
{
|
|
5842
|
+
id: "adventure-mission-planner-m1-guide",
|
|
5843
|
+
kind: "starter-assets",
|
|
5844
|
+
audience: "learner",
|
|
5845
|
+
solutionBearing: false
|
|
5846
|
+
},
|
|
5847
|
+
{
|
|
5848
|
+
id: "adventure-mission-planner-m1-test-card",
|
|
5849
|
+
kind: "sample-data",
|
|
5850
|
+
audience: "learner",
|
|
5851
|
+
solutionBearing: false
|
|
5852
|
+
}
|
|
5853
|
+
],
|
|
5854
|
+
goals: [
|
|
5855
|
+
{
|
|
5856
|
+
id: "adventure-mission-planner-m1-starts",
|
|
5857
|
+
statement: "The semantic planner structure, labelled validation message and fictional mission array are valid and start.",
|
|
5858
|
+
visibility: "visible",
|
|
5859
|
+
criterionIds: ["adventure-mission-planner-build"],
|
|
5860
|
+
completionRequired: true,
|
|
5861
|
+
aiRequired: false
|
|
5862
|
+
},
|
|
5863
|
+
{
|
|
5864
|
+
id: "adventure-mission-planner-m1-behaviour",
|
|
5865
|
+
statement: "The planner state contains the supplied fictional mission and its approved private local save survives a simulated restart.",
|
|
5866
|
+
visibility: "visible",
|
|
5867
|
+
criterionIds: [
|
|
5868
|
+
"adventure-mission-planner-goal-one",
|
|
5869
|
+
"adventure-mission-planner-goal-two",
|
|
5870
|
+
"adventure-mission-planner-goal-three"
|
|
5871
|
+
],
|
|
5872
|
+
completionRequired: true,
|
|
5873
|
+
aiRequired: false
|
|
5874
|
+
},
|
|
5875
|
+
{
|
|
5876
|
+
id: "adventure-mission-planner-m1-accessible-private",
|
|
5877
|
+
statement: "The planner keeps an accessible text summary and uses only private simulated local save with no network or personal data.",
|
|
5878
|
+
visibility: "visible",
|
|
5879
|
+
criterionIds: ["adventure-mission-planner-safety"],
|
|
5880
|
+
completionRequired: true,
|
|
5881
|
+
aiRequired: false
|
|
5882
|
+
}
|
|
5883
|
+
],
|
|
5884
|
+
interactions: [
|
|
5885
|
+
{
|
|
5886
|
+
id: "adventure-mission-planner-m1-editor",
|
|
5887
|
+
description: "Edit the documented planner settings.",
|
|
5888
|
+
primaryMode: "text",
|
|
5889
|
+
alternativeIds: []
|
|
5890
|
+
},
|
|
5891
|
+
{
|
|
5892
|
+
id: "adventure-mission-planner-m1-run",
|
|
5893
|
+
description: "Run the private semantic planner preview.",
|
|
5894
|
+
primaryMode: "pointer",
|
|
5895
|
+
alternativeIds: ["adventure-mission-planner-m1-keyboard-run"]
|
|
5896
|
+
},
|
|
5897
|
+
{
|
|
5898
|
+
id: "adventure-mission-planner-m1-review",
|
|
5899
|
+
description: "Read the labelled removed and added local-save lines and choose Accept or Reject.",
|
|
5900
|
+
primaryMode: "text",
|
|
5901
|
+
alternativeIds: []
|
|
5902
|
+
}
|
|
5903
|
+
],
|
|
5904
|
+
accessibilityAlternatives: [
|
|
5905
|
+
{
|
|
5906
|
+
id: "adventure-mission-planner-m1-keyboard-run",
|
|
5907
|
+
modes: ["keyboard", "text", "reduced-motion"],
|
|
5908
|
+
equivalentOutcome: true,
|
|
5909
|
+
description: "Press Enter or Space on the action-icon button and use the same text planner summary without motion or drag."
|
|
5910
|
+
}
|
|
5911
|
+
],
|
|
5912
|
+
evidenceRequirements: [
|
|
5913
|
+
{
|
|
5914
|
+
id: "adventure-mission-planner-m1-assessment",
|
|
5915
|
+
goalIds: [
|
|
5916
|
+
"adventure-mission-planner-m1-starts",
|
|
5917
|
+
"adventure-mission-planner-m1-behaviour",
|
|
5918
|
+
"adventure-mission-planner-m1-accessible-private"
|
|
5919
|
+
],
|
|
5920
|
+
kind: "assessment-result",
|
|
5921
|
+
retention: "entitlement",
|
|
5922
|
+
containsPersonalData: false
|
|
5923
|
+
},
|
|
5924
|
+
{
|
|
5925
|
+
id: "adventure-mission-planner-m1-explanation",
|
|
5926
|
+
goalIds: ["adventure-mission-planner-m1-accessible-private"],
|
|
5927
|
+
kind: "learner-explanation",
|
|
5928
|
+
retention: "attempt",
|
|
5929
|
+
containsPersonalData: false
|
|
5930
|
+
}
|
|
5931
|
+
],
|
|
5932
|
+
sideAdventures: [
|
|
5933
|
+
{
|
|
5934
|
+
id: "adventure-mission-planner-m1-remix",
|
|
5935
|
+
prompt: "Add one supplied fictional mission and describe the validation and accessible summary it needs.",
|
|
5936
|
+
completionRequired: false
|
|
5937
|
+
}
|
|
5938
|
+
],
|
|
5939
|
+
rewardBindings: [
|
|
5940
|
+
{
|
|
5941
|
+
id: "adventure-mission-planner-m1-badge",
|
|
5942
|
+
badgeId: "adventure-mission-planner-mission-complete",
|
|
5943
|
+
goalIds: [
|
|
5944
|
+
"adventure-mission-planner-m1-starts",
|
|
5945
|
+
"adventure-mission-planner-m1-behaviour",
|
|
5946
|
+
"adventure-mission-planner-m1-accessible-private"
|
|
5947
|
+
],
|
|
5948
|
+
deterministic: true,
|
|
5949
|
+
random: false,
|
|
5950
|
+
tokenConvertible: false
|
|
5951
|
+
}
|
|
5952
|
+
],
|
|
5953
|
+
functionReference: [
|
|
5954
|
+
{
|
|
5955
|
+
id: "adventure-mission-planner-function-heading",
|
|
5956
|
+
signature: "setPlannerHeading(heading)",
|
|
5957
|
+
summary: "Chooses one supplied fictional heading for the semantic planner.",
|
|
5958
|
+
parameters: [{ name: "heading", type: "text", description: "Use Moonbase Missions, Forest Rescue Plans or Ocean Quest Board." }],
|
|
5959
|
+
effect: "Updates the visible and screen-reader planner heading in the private preview.",
|
|
5960
|
+
example: 'setPlannerHeading("Moonbase Missions");'
|
|
5961
|
+
},
|
|
5962
|
+
{
|
|
5963
|
+
id: "adventure-mission-planner-function-mission",
|
|
5964
|
+
signature: "addMission(title, day)",
|
|
5965
|
+
summary: "Adds one supplied fictional mission to the in-memory mission array.",
|
|
5966
|
+
parameters: [
|
|
5967
|
+
{ name: "title", type: "text", description: "Use a supplied fictional mission title." },
|
|
5968
|
+
{ name: "day", type: "text", description: "Use Saturday, Sunday or School holiday." }
|
|
5969
|
+
],
|
|
5970
|
+
effect: "Adds one validated fictional item to private preview state without sending a form.",
|
|
5971
|
+
example: 'addMission("Find the moon crystal", "Saturday");'
|
|
5972
|
+
},
|
|
5973
|
+
{
|
|
5974
|
+
id: "adventure-mission-planner-function-validation",
|
|
5975
|
+
signature: "showValidationMessage(message)",
|
|
5976
|
+
summary: "Chooses one supplied child-readable form validation message.",
|
|
5977
|
+
parameters: [{ name: "message", type: "text", description: "Use Choose a day, Add a mission title or Mission ready!" }],
|
|
5978
|
+
effect: "Shows the message visibly and in the accessible text summary.",
|
|
5979
|
+
example: 'showValidationMessage("Mission ready!");'
|
|
5980
|
+
},
|
|
5981
|
+
{
|
|
5982
|
+
id: "adventure-mission-planner-function-save",
|
|
5983
|
+
signature: "enableLocalSave(enabled)",
|
|
5984
|
+
summary: "Turns the private simulated local-save behaviour on or off.",
|
|
5985
|
+
parameters: [{ name: "enabled", type: "Boolean", description: "Use true or false." }],
|
|
5986
|
+
effect: "Controls only the bounded simulated restart; it never writes Plasius or server storage.",
|
|
5987
|
+
example: "enableLocalSave(true);"
|
|
5988
|
+
},
|
|
5989
|
+
{
|
|
5990
|
+
id: "adventure-mission-planner-function-summary",
|
|
5991
|
+
signature: "setAccessibleSummary(enabled)",
|
|
5992
|
+
summary: "Keeps an equivalent text summary beside the visual planner.",
|
|
5993
|
+
parameters: [{ name: "enabled", type: "Boolean", description: "Use true to keep the equivalent summary." }],
|
|
5994
|
+
effect: "Controls the private preview text equivalent used by assistive technology and reduced-motion routes.",
|
|
5995
|
+
example: "setAccessibleSummary(true);"
|
|
5996
|
+
}
|
|
5997
|
+
],
|
|
5998
|
+
boundedSuggestion: {
|
|
5999
|
+
id: "adventure-mission-planner-m1-local-save-diff",
|
|
6000
|
+
source: "authored-fallback",
|
|
6001
|
+
intent: "Make the fictional mission survive the simulated private restart.",
|
|
6002
|
+
constraints: [
|
|
6003
|
+
"Change exactly one documented local-save setting.",
|
|
6004
|
+
"Preserve the supplied semantic heading, fictional mission, validation and accessible summary.",
|
|
6005
|
+
"Do not add network, external scripts, transmitting forms, trackers, personal data or server storage."
|
|
6006
|
+
],
|
|
6007
|
+
permittedArtifactId: "adventure-mission-planner-m1-code",
|
|
6008
|
+
originalSnippet: "enableLocalSave(false);",
|
|
6009
|
+
replacementSnippet: "enableLocalSave(true);",
|
|
6010
|
+
explanationPrompt: "Did the mission survive the simulated restart, and which accessibility and privacy evidence stayed unchanged?",
|
|
6011
|
+
aiOptional: false,
|
|
6012
|
+
learnerApprovalRequired: true,
|
|
6013
|
+
alternatives: ["accept", "reject"]
|
|
6014
|
+
}
|
|
6015
|
+
},
|
|
6016
|
+
facilitator: {
|
|
6017
|
+
artifacts: [
|
|
6018
|
+
{
|
|
6019
|
+
id: "adventure-mission-planner-m1-answer-key",
|
|
6020
|
+
kind: "answer-key",
|
|
6021
|
+
audience: "facilitator",
|
|
6022
|
+
solutionBearing: true
|
|
6023
|
+
},
|
|
6024
|
+
{
|
|
6025
|
+
id: "adventure-mission-planner-m1-protected-tests",
|
|
6026
|
+
kind: "protected-test",
|
|
6027
|
+
audience: "facilitator",
|
|
6028
|
+
solutionBearing: true
|
|
6029
|
+
},
|
|
6030
|
+
{
|
|
6031
|
+
id: "adventure-mission-planner-m1-safety-notes",
|
|
6032
|
+
kind: "facilitator-note",
|
|
6033
|
+
audience: "facilitator",
|
|
6034
|
+
solutionBearing: true
|
|
6035
|
+
}
|
|
6036
|
+
],
|
|
6037
|
+
protectedGoals: [
|
|
6038
|
+
{
|
|
6039
|
+
id: "adventure-mission-planner-m1-protected-boundary",
|
|
6040
|
+
statement: "The planner rejects arbitrary text, personal data, scripts, network calls, transmitting forms, tracking and persistence outside the bounded simulator.",
|
|
6041
|
+
visibility: "protected",
|
|
6042
|
+
criterionIds: [
|
|
6043
|
+
"adventure-mission-planner-edge-one",
|
|
6044
|
+
"adventure-mission-planner-edge-two"
|
|
6045
|
+
],
|
|
6046
|
+
completionRequired: false,
|
|
6047
|
+
aiRequired: false
|
|
6048
|
+
}
|
|
6049
|
+
],
|
|
6050
|
+
prompts: [
|
|
6051
|
+
"Ask the learner to name the semantic heading, validation message and text-equivalent evidence before discussing local save.",
|
|
6052
|
+
"Use only fictional supplied content; redirect names, contacts and real locations to the safe cards.",
|
|
6053
|
+
"Reject must preserve source, and provider failure must never block the deterministic authored path."
|
|
6054
|
+
]
|
|
6055
|
+
}
|
|
6056
|
+
};
|
|
5490
6057
|
var ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1 = {
|
|
5491
6058
|
version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
|
|
5492
6059
|
moduleId: "junior-coder.road-hopper-rally",
|
|
@@ -5836,7 +6403,9 @@ ${summary}`);
|
|
|
5836
6403
|
}
|
|
5837
6404
|
// Annotate the CommonJS export names for ESM import in node:
|
|
5838
6405
|
0 && (module.exports = {
|
|
6406
|
+
ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1,
|
|
5839
6407
|
BEACON_BOT_MISSION_ONE_AUTHORING_V1,
|
|
6408
|
+
CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1,
|
|
5840
6409
|
DANCE_ROVER_MISSION_ONE_AUTHORING_V1,
|
|
5841
6410
|
JUNIOR_CODER_MISSION_STAGE_ORDER_V1,
|
|
5842
6411
|
JUNIOR_CODER_MODULE_PRICE_V1_1,
|