@plasius/learning 0.2.16 → 0.2.17
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 +15 -1
- package/dist/index.cjs +286 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.js +285 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -62,6 +62,7 @@ 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,
|
|
66
67
|
DANCE_ROVER_MISSION_ONE_AUTHORING_V1,
|
|
67
68
|
JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1,
|
|
@@ -130,6 +131,9 @@ const vibeBugDetective = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
|
130
131
|
const vibeIdeaStudio = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
131
132
|
(module) => module.slug === "vibe-idea-studio",
|
|
132
133
|
);
|
|
134
|
+
const adventureMissionPlanner = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
135
|
+
(module) => module.slug === "adventure-mission-planner",
|
|
136
|
+
);
|
|
133
137
|
|
|
134
138
|
if (
|
|
135
139
|
!roadHopper ||
|
|
@@ -147,7 +151,8 @@ if (
|
|
|
147
151
|
!rainbowRescueRover ||
|
|
148
152
|
!vibeGameRemixLab ||
|
|
149
153
|
!vibeBugDetective ||
|
|
150
|
-
!vibeIdeaStudio
|
|
154
|
+
!vibeIdeaStudio ||
|
|
155
|
+
!adventureMissionPlanner
|
|
151
156
|
) {
|
|
152
157
|
throw new Error("Junior Coder module is missing");
|
|
153
158
|
}
|
|
@@ -216,6 +221,10 @@ assertValidMissionAuthoringBundle(
|
|
|
216
221
|
VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1,
|
|
217
222
|
vibeIdeaStudio,
|
|
218
223
|
);
|
|
224
|
+
assertValidMissionAuthoringBundle(
|
|
225
|
+
ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1,
|
|
226
|
+
adventureMissionPlanner,
|
|
227
|
+
);
|
|
219
228
|
```
|
|
220
229
|
|
|
221
230
|
## Contract rules
|
|
@@ -268,6 +277,10 @@ assertValidMissionAuthoringBundle(
|
|
|
268
277
|
- Vibe Idea Studio binds supplied child-safe idea, audience and acceptance-test
|
|
269
278
|
cards to one permitted template. The learner predicts, reviews and controls
|
|
270
279
|
the exact prototype diff before deterministic tests decide completion.
|
|
280
|
+
- Adventure Mission Planner documents semantic structure, validation, arrays,
|
|
281
|
+
state, private simulated local save and an equivalent accessible summary.
|
|
282
|
+
The learner reviews the exact persistence diff; no form transmits data and
|
|
283
|
+
no network, real location or personal information enters the preview.
|
|
271
284
|
|
|
272
285
|
See [the foundation design](docs/design/junior-coder-catalog-foundation.md),
|
|
273
286
|
[the uniform pricing design](docs/design/junior-coder-uniform-pricing.md),
|
|
@@ -282,6 +295,7 @@ and [TDR 0008](docs/tdrs/tdr-0008-obstacle-explorer-sensing-watchdog-and-fail-sa
|
|
|
282
295
|
See also [TDR 0010](docs/tdrs/tdr-0010-vibe-game-remix-bounded-suggestion-authoring.md).
|
|
283
296
|
See also [TDR 0011](docs/tdrs/tdr-0011-vibe-bug-detective-evidence-led-repair.md).
|
|
284
297
|
See also [TDR 0012](docs/tdrs/tdr-0012-vibe-idea-studio-bounded-goal-prototyping.md).
|
|
298
|
+
See also [TDR 0013](docs/tdrs/tdr-0013-adventure-mission-planner-private-persistence.md).
|
|
285
299
|
|
|
286
300
|
## Development
|
|
287
301
|
|
package/dist/index.cjs
CHANGED
|
@@ -20,6 +20,7 @@ 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,
|
|
24
25
|
DANCE_ROVER_MISSION_ONE_AUTHORING_V1: () => DANCE_ROVER_MISSION_ONE_AUTHORING_V1,
|
|
25
26
|
JUNIOR_CODER_MISSION_STAGE_ORDER_V1: () => JUNIOR_CODER_MISSION_STAGE_ORDER_V1,
|
|
@@ -5487,6 +5488,290 @@ var VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1 = {
|
|
|
5487
5488
|
]
|
|
5488
5489
|
}
|
|
5489
5490
|
};
|
|
5491
|
+
var ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1 = {
|
|
5492
|
+
version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
|
|
5493
|
+
moduleId: "junior-coder.adventure-mission-planner",
|
|
5494
|
+
moduleVersion: "1.1.0",
|
|
5495
|
+
missionId: "adventure-mission-planner-mission-1",
|
|
5496
|
+
learner: {
|
|
5497
|
+
estimatedMinutes: 20,
|
|
5498
|
+
stages: [
|
|
5499
|
+
{
|
|
5500
|
+
kind: "learn",
|
|
5501
|
+
instruction: "Read how semantic headings, labelled mission fields, arrays, state and the five documented functions build an accessible fictional planner.",
|
|
5502
|
+
artifactIds: ["adventure-mission-planner-m1-guide"]
|
|
5503
|
+
},
|
|
5504
|
+
{
|
|
5505
|
+
kind: "predict",
|
|
5506
|
+
instruction: "Predict what will still be available after the private preview restarts when local save is disabled.",
|
|
5507
|
+
artifactIds: ["adventure-mission-planner-m1-test-card"]
|
|
5508
|
+
},
|
|
5509
|
+
{
|
|
5510
|
+
kind: "build",
|
|
5511
|
+
instruction: "Change only the supplied planner settings and keep the fictional mission free of names, contact details and real locations.",
|
|
5512
|
+
artifactIds: ["adventure-mission-planner-m1-code"]
|
|
5513
|
+
},
|
|
5514
|
+
{
|
|
5515
|
+
kind: "run",
|
|
5516
|
+
instruction: "Use the action-icon Run button to render the semantic private planner preview and its text equivalent.",
|
|
5517
|
+
artifactIds: ["adventure-mission-planner-m1-code"]
|
|
5518
|
+
},
|
|
5519
|
+
{
|
|
5520
|
+
kind: "assess",
|
|
5521
|
+
instruction: "Run deterministic structure, validation, array, state, local-save and accessibility checks.",
|
|
5522
|
+
artifactIds: []
|
|
5523
|
+
},
|
|
5524
|
+
{
|
|
5525
|
+
kind: "inspect",
|
|
5526
|
+
instruction: "Compare the observed restart result with the selected persistence goal and highlighted setting.",
|
|
5527
|
+
artifactIds: ["adventure-mission-planner-m1-code"]
|
|
5528
|
+
},
|
|
5529
|
+
{
|
|
5530
|
+
kind: "fix",
|
|
5531
|
+
instruction: "Review and accept or reject the exact local-save change yourself, then rerun every check.",
|
|
5532
|
+
artifactIds: ["adventure-mission-planner-m1-code"]
|
|
5533
|
+
},
|
|
5534
|
+
{
|
|
5535
|
+
kind: "explain",
|
|
5536
|
+
instruction: "Explain how semantic labels, validation and private local save make the planner easier and safer to use.",
|
|
5537
|
+
artifactIds: []
|
|
5538
|
+
},
|
|
5539
|
+
{
|
|
5540
|
+
kind: "reward",
|
|
5541
|
+
instruction: "Collect the evidence-bound planner badge after the score reaches 80 and every privacy and accessibility check passes.",
|
|
5542
|
+
artifactIds: []
|
|
5543
|
+
}
|
|
5544
|
+
],
|
|
5545
|
+
readinessChecks: [
|
|
5546
|
+
{
|
|
5547
|
+
id: "adventure-mission-planner-m1-label-check",
|
|
5548
|
+
prompt: "Find the visible heading, mission title, day and validation message that a screen reader must also announce.",
|
|
5549
|
+
scored: false
|
|
5550
|
+
}
|
|
5551
|
+
],
|
|
5552
|
+
artifacts: [
|
|
5553
|
+
{
|
|
5554
|
+
id: "adventure-mission-planner-m1-code",
|
|
5555
|
+
kind: "starter-code",
|
|
5556
|
+
audience: "learner",
|
|
5557
|
+
solutionBearing: false
|
|
5558
|
+
},
|
|
5559
|
+
{
|
|
5560
|
+
id: "adventure-mission-planner-m1-guide",
|
|
5561
|
+
kind: "starter-assets",
|
|
5562
|
+
audience: "learner",
|
|
5563
|
+
solutionBearing: false
|
|
5564
|
+
},
|
|
5565
|
+
{
|
|
5566
|
+
id: "adventure-mission-planner-m1-test-card",
|
|
5567
|
+
kind: "sample-data",
|
|
5568
|
+
audience: "learner",
|
|
5569
|
+
solutionBearing: false
|
|
5570
|
+
}
|
|
5571
|
+
],
|
|
5572
|
+
goals: [
|
|
5573
|
+
{
|
|
5574
|
+
id: "adventure-mission-planner-m1-starts",
|
|
5575
|
+
statement: "The semantic planner structure, labelled validation message and fictional mission array are valid and start.",
|
|
5576
|
+
visibility: "visible",
|
|
5577
|
+
criterionIds: ["adventure-mission-planner-build"],
|
|
5578
|
+
completionRequired: true,
|
|
5579
|
+
aiRequired: false
|
|
5580
|
+
},
|
|
5581
|
+
{
|
|
5582
|
+
id: "adventure-mission-planner-m1-behaviour",
|
|
5583
|
+
statement: "The planner state contains the supplied fictional mission and its approved private local save survives a simulated restart.",
|
|
5584
|
+
visibility: "visible",
|
|
5585
|
+
criterionIds: [
|
|
5586
|
+
"adventure-mission-planner-goal-one",
|
|
5587
|
+
"adventure-mission-planner-goal-two",
|
|
5588
|
+
"adventure-mission-planner-goal-three"
|
|
5589
|
+
],
|
|
5590
|
+
completionRequired: true,
|
|
5591
|
+
aiRequired: false
|
|
5592
|
+
},
|
|
5593
|
+
{
|
|
5594
|
+
id: "adventure-mission-planner-m1-accessible-private",
|
|
5595
|
+
statement: "The planner keeps an accessible text summary and uses only private simulated local save with no network or personal data.",
|
|
5596
|
+
visibility: "visible",
|
|
5597
|
+
criterionIds: ["adventure-mission-planner-safety"],
|
|
5598
|
+
completionRequired: true,
|
|
5599
|
+
aiRequired: false
|
|
5600
|
+
}
|
|
5601
|
+
],
|
|
5602
|
+
interactions: [
|
|
5603
|
+
{
|
|
5604
|
+
id: "adventure-mission-planner-m1-editor",
|
|
5605
|
+
description: "Edit the documented planner settings.",
|
|
5606
|
+
primaryMode: "text",
|
|
5607
|
+
alternativeIds: []
|
|
5608
|
+
},
|
|
5609
|
+
{
|
|
5610
|
+
id: "adventure-mission-planner-m1-run",
|
|
5611
|
+
description: "Run the private semantic planner preview.",
|
|
5612
|
+
primaryMode: "pointer",
|
|
5613
|
+
alternativeIds: ["adventure-mission-planner-m1-keyboard-run"]
|
|
5614
|
+
},
|
|
5615
|
+
{
|
|
5616
|
+
id: "adventure-mission-planner-m1-review",
|
|
5617
|
+
description: "Read the labelled removed and added local-save lines and choose Accept or Reject.",
|
|
5618
|
+
primaryMode: "text",
|
|
5619
|
+
alternativeIds: []
|
|
5620
|
+
}
|
|
5621
|
+
],
|
|
5622
|
+
accessibilityAlternatives: [
|
|
5623
|
+
{
|
|
5624
|
+
id: "adventure-mission-planner-m1-keyboard-run",
|
|
5625
|
+
modes: ["keyboard", "text", "reduced-motion"],
|
|
5626
|
+
equivalentOutcome: true,
|
|
5627
|
+
description: "Press Enter or Space on the action-icon button and use the same text planner summary without motion or drag."
|
|
5628
|
+
}
|
|
5629
|
+
],
|
|
5630
|
+
evidenceRequirements: [
|
|
5631
|
+
{
|
|
5632
|
+
id: "adventure-mission-planner-m1-assessment",
|
|
5633
|
+
goalIds: [
|
|
5634
|
+
"adventure-mission-planner-m1-starts",
|
|
5635
|
+
"adventure-mission-planner-m1-behaviour",
|
|
5636
|
+
"adventure-mission-planner-m1-accessible-private"
|
|
5637
|
+
],
|
|
5638
|
+
kind: "assessment-result",
|
|
5639
|
+
retention: "entitlement",
|
|
5640
|
+
containsPersonalData: false
|
|
5641
|
+
},
|
|
5642
|
+
{
|
|
5643
|
+
id: "adventure-mission-planner-m1-explanation",
|
|
5644
|
+
goalIds: ["adventure-mission-planner-m1-accessible-private"],
|
|
5645
|
+
kind: "learner-explanation",
|
|
5646
|
+
retention: "attempt",
|
|
5647
|
+
containsPersonalData: false
|
|
5648
|
+
}
|
|
5649
|
+
],
|
|
5650
|
+
sideAdventures: [
|
|
5651
|
+
{
|
|
5652
|
+
id: "adventure-mission-planner-m1-remix",
|
|
5653
|
+
prompt: "Add one supplied fictional mission and describe the validation and accessible summary it needs.",
|
|
5654
|
+
completionRequired: false
|
|
5655
|
+
}
|
|
5656
|
+
],
|
|
5657
|
+
rewardBindings: [
|
|
5658
|
+
{
|
|
5659
|
+
id: "adventure-mission-planner-m1-badge",
|
|
5660
|
+
badgeId: "adventure-mission-planner-mission-complete",
|
|
5661
|
+
goalIds: [
|
|
5662
|
+
"adventure-mission-planner-m1-starts",
|
|
5663
|
+
"adventure-mission-planner-m1-behaviour",
|
|
5664
|
+
"adventure-mission-planner-m1-accessible-private"
|
|
5665
|
+
],
|
|
5666
|
+
deterministic: true,
|
|
5667
|
+
random: false,
|
|
5668
|
+
tokenConvertible: false
|
|
5669
|
+
}
|
|
5670
|
+
],
|
|
5671
|
+
functionReference: [
|
|
5672
|
+
{
|
|
5673
|
+
id: "adventure-mission-planner-function-heading",
|
|
5674
|
+
signature: "setPlannerHeading(heading)",
|
|
5675
|
+
summary: "Chooses one supplied fictional heading for the semantic planner.",
|
|
5676
|
+
parameters: [{ name: "heading", type: "text", description: "Use Moonbase Missions, Forest Rescue Plans or Ocean Quest Board." }],
|
|
5677
|
+
effect: "Updates the visible and screen-reader planner heading in the private preview.",
|
|
5678
|
+
example: 'setPlannerHeading("Moonbase Missions");'
|
|
5679
|
+
},
|
|
5680
|
+
{
|
|
5681
|
+
id: "adventure-mission-planner-function-mission",
|
|
5682
|
+
signature: "addMission(title, day)",
|
|
5683
|
+
summary: "Adds one supplied fictional mission to the in-memory mission array.",
|
|
5684
|
+
parameters: [
|
|
5685
|
+
{ name: "title", type: "text", description: "Use a supplied fictional mission title." },
|
|
5686
|
+
{ name: "day", type: "text", description: "Use Saturday, Sunday or School holiday." }
|
|
5687
|
+
],
|
|
5688
|
+
effect: "Adds one validated fictional item to private preview state without sending a form.",
|
|
5689
|
+
example: 'addMission("Find the moon crystal", "Saturday");'
|
|
5690
|
+
},
|
|
5691
|
+
{
|
|
5692
|
+
id: "adventure-mission-planner-function-validation",
|
|
5693
|
+
signature: "showValidationMessage(message)",
|
|
5694
|
+
summary: "Chooses one supplied child-readable form validation message.",
|
|
5695
|
+
parameters: [{ name: "message", type: "text", description: "Use Choose a day, Add a mission title or Mission ready!" }],
|
|
5696
|
+
effect: "Shows the message visibly and in the accessible text summary.",
|
|
5697
|
+
example: 'showValidationMessage("Mission ready!");'
|
|
5698
|
+
},
|
|
5699
|
+
{
|
|
5700
|
+
id: "adventure-mission-planner-function-save",
|
|
5701
|
+
signature: "enableLocalSave(enabled)",
|
|
5702
|
+
summary: "Turns the private simulated local-save behaviour on or off.",
|
|
5703
|
+
parameters: [{ name: "enabled", type: "Boolean", description: "Use true or false." }],
|
|
5704
|
+
effect: "Controls only the bounded simulated restart; it never writes Plasius or server storage.",
|
|
5705
|
+
example: "enableLocalSave(true);"
|
|
5706
|
+
},
|
|
5707
|
+
{
|
|
5708
|
+
id: "adventure-mission-planner-function-summary",
|
|
5709
|
+
signature: "setAccessibleSummary(enabled)",
|
|
5710
|
+
summary: "Keeps an equivalent text summary beside the visual planner.",
|
|
5711
|
+
parameters: [{ name: "enabled", type: "Boolean", description: "Use true to keep the equivalent summary." }],
|
|
5712
|
+
effect: "Controls the private preview text equivalent used by assistive technology and reduced-motion routes.",
|
|
5713
|
+
example: "setAccessibleSummary(true);"
|
|
5714
|
+
}
|
|
5715
|
+
],
|
|
5716
|
+
boundedSuggestion: {
|
|
5717
|
+
id: "adventure-mission-planner-m1-local-save-diff",
|
|
5718
|
+
source: "authored-fallback",
|
|
5719
|
+
intent: "Make the fictional mission survive the simulated private restart.",
|
|
5720
|
+
constraints: [
|
|
5721
|
+
"Change exactly one documented local-save setting.",
|
|
5722
|
+
"Preserve the supplied semantic heading, fictional mission, validation and accessible summary.",
|
|
5723
|
+
"Do not add network, external scripts, transmitting forms, trackers, personal data or server storage."
|
|
5724
|
+
],
|
|
5725
|
+
permittedArtifactId: "adventure-mission-planner-m1-code",
|
|
5726
|
+
originalSnippet: "enableLocalSave(false);",
|
|
5727
|
+
replacementSnippet: "enableLocalSave(true);",
|
|
5728
|
+
explanationPrompt: "Did the mission survive the simulated restart, and which accessibility and privacy evidence stayed unchanged?",
|
|
5729
|
+
aiOptional: false,
|
|
5730
|
+
learnerApprovalRequired: true,
|
|
5731
|
+
alternatives: ["accept", "reject"]
|
|
5732
|
+
}
|
|
5733
|
+
},
|
|
5734
|
+
facilitator: {
|
|
5735
|
+
artifacts: [
|
|
5736
|
+
{
|
|
5737
|
+
id: "adventure-mission-planner-m1-answer-key",
|
|
5738
|
+
kind: "answer-key",
|
|
5739
|
+
audience: "facilitator",
|
|
5740
|
+
solutionBearing: true
|
|
5741
|
+
},
|
|
5742
|
+
{
|
|
5743
|
+
id: "adventure-mission-planner-m1-protected-tests",
|
|
5744
|
+
kind: "protected-test",
|
|
5745
|
+
audience: "facilitator",
|
|
5746
|
+
solutionBearing: true
|
|
5747
|
+
},
|
|
5748
|
+
{
|
|
5749
|
+
id: "adventure-mission-planner-m1-safety-notes",
|
|
5750
|
+
kind: "facilitator-note",
|
|
5751
|
+
audience: "facilitator",
|
|
5752
|
+
solutionBearing: true
|
|
5753
|
+
}
|
|
5754
|
+
],
|
|
5755
|
+
protectedGoals: [
|
|
5756
|
+
{
|
|
5757
|
+
id: "adventure-mission-planner-m1-protected-boundary",
|
|
5758
|
+
statement: "The planner rejects arbitrary text, personal data, scripts, network calls, transmitting forms, tracking and persistence outside the bounded simulator.",
|
|
5759
|
+
visibility: "protected",
|
|
5760
|
+
criterionIds: [
|
|
5761
|
+
"adventure-mission-planner-edge-one",
|
|
5762
|
+
"adventure-mission-planner-edge-two"
|
|
5763
|
+
],
|
|
5764
|
+
completionRequired: false,
|
|
5765
|
+
aiRequired: false
|
|
5766
|
+
}
|
|
5767
|
+
],
|
|
5768
|
+
prompts: [
|
|
5769
|
+
"Ask the learner to name the semantic heading, validation message and text-equivalent evidence before discussing local save.",
|
|
5770
|
+
"Use only fictional supplied content; redirect names, contacts and real locations to the safe cards.",
|
|
5771
|
+
"Reject must preserve source, and provider failure must never block the deterministic authored path."
|
|
5772
|
+
]
|
|
5773
|
+
}
|
|
5774
|
+
};
|
|
5490
5775
|
var ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1 = {
|
|
5491
5776
|
version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
|
|
5492
5777
|
moduleId: "junior-coder.road-hopper-rally",
|
|
@@ -5836,6 +6121,7 @@ ${summary}`);
|
|
|
5836
6121
|
}
|
|
5837
6122
|
// Annotate the CommonJS export names for ESM import in node:
|
|
5838
6123
|
0 && (module.exports = {
|
|
6124
|
+
ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1,
|
|
5839
6125
|
BEACON_BOT_MISSION_ONE_AUTHORING_V1,
|
|
5840
6126
|
DANCE_ROVER_MISSION_ONE_AUTHORING_V1,
|
|
5841
6127
|
JUNIOR_CODER_MISSION_STAGE_ORDER_V1,
|