@plasius/learning 0.2.15 → 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 +28 -1
- package/dist/index.cjs +574 -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 +572 -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,
|
|
@@ -78,6 +79,7 @@ import {
|
|
|
78
79
|
STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1,
|
|
79
80
|
VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1,
|
|
80
81
|
VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1,
|
|
82
|
+
VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1,
|
|
81
83
|
assertValidMissionAuthoringBundle,
|
|
82
84
|
} from "@plasius/learning";
|
|
83
85
|
|
|
@@ -126,6 +128,12 @@ const vibeGameRemixLab = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
|
126
128
|
const vibeBugDetective = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
127
129
|
(module) => module.slug === "vibe-bug-detective",
|
|
128
130
|
);
|
|
131
|
+
const vibeIdeaStudio = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
132
|
+
(module) => module.slug === "vibe-idea-studio",
|
|
133
|
+
);
|
|
134
|
+
const adventureMissionPlanner = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
135
|
+
(module) => module.slug === "adventure-mission-planner",
|
|
136
|
+
);
|
|
129
137
|
|
|
130
138
|
if (
|
|
131
139
|
!roadHopper ||
|
|
@@ -142,7 +150,9 @@ if (
|
|
|
142
150
|
!obstacleExplorer ||
|
|
143
151
|
!rainbowRescueRover ||
|
|
144
152
|
!vibeGameRemixLab ||
|
|
145
|
-
!vibeBugDetective
|
|
153
|
+
!vibeBugDetective ||
|
|
154
|
+
!vibeIdeaStudio ||
|
|
155
|
+
!adventureMissionPlanner
|
|
146
156
|
) {
|
|
147
157
|
throw new Error("Junior Coder module is missing");
|
|
148
158
|
}
|
|
@@ -207,6 +217,14 @@ assertValidMissionAuthoringBundle(
|
|
|
207
217
|
VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1,
|
|
208
218
|
vibeBugDetective,
|
|
209
219
|
);
|
|
220
|
+
assertValidMissionAuthoringBundle(
|
|
221
|
+
VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1,
|
|
222
|
+
vibeIdeaStudio,
|
|
223
|
+
);
|
|
224
|
+
assertValidMissionAuthoringBundle(
|
|
225
|
+
ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1,
|
|
226
|
+
adventureMissionPlanner,
|
|
227
|
+
);
|
|
210
228
|
```
|
|
211
229
|
|
|
212
230
|
## Contract rules
|
|
@@ -256,6 +274,13 @@ assertValidMissionAuthoringBundle(
|
|
|
256
274
|
- Vibe Bug Detective starts from visible failing evidence, binds one authored
|
|
257
275
|
repair to the current goal and permitted artifact, and requires learner
|
|
258
276
|
prediction, explicit accept/reject and deterministic regression reruns.
|
|
277
|
+
- Vibe Idea Studio binds supplied child-safe idea, audience and acceptance-test
|
|
278
|
+
cards to one permitted template. The learner predicts, reviews and controls
|
|
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.
|
|
259
284
|
|
|
260
285
|
See [the foundation design](docs/design/junior-coder-catalog-foundation.md),
|
|
261
286
|
[the uniform pricing design](docs/design/junior-coder-uniform-pricing.md),
|
|
@@ -269,6 +294,8 @@ See [the foundation design](docs/design/junior-coder-catalog-foundation.md),
|
|
|
269
294
|
and [TDR 0008](docs/tdrs/tdr-0008-obstacle-explorer-sensing-watchdog-and-fail-safe-authoring.md).
|
|
270
295
|
See also [TDR 0010](docs/tdrs/tdr-0010-vibe-game-remix-bounded-suggestion-authoring.md).
|
|
271
296
|
See also [TDR 0011](docs/tdrs/tdr-0011-vibe-bug-detective-evidence-led-repair.md).
|
|
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).
|
|
272
299
|
|
|
273
300
|
## Development
|
|
274
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,
|
|
@@ -41,6 +42,7 @@ __export(index_exports, {
|
|
|
41
42
|
STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1: () => STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1,
|
|
42
43
|
VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1: () => VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1,
|
|
43
44
|
VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1: () => VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1,
|
|
45
|
+
VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1: () => VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1,
|
|
44
46
|
assertValidLearningPath: () => assertValidLearningPath,
|
|
45
47
|
assertValidMissionAuthoringBundle: () => assertValidMissionAuthoringBundle,
|
|
46
48
|
calculateAssessment: () => calculateAssessment,
|
|
@@ -5200,6 +5202,576 @@ var VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1 = {
|
|
|
5200
5202
|
]
|
|
5201
5203
|
}
|
|
5202
5204
|
};
|
|
5205
|
+
var VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1 = {
|
|
5206
|
+
version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
|
|
5207
|
+
moduleId: "junior-coder.vibe-idea-studio",
|
|
5208
|
+
moduleVersion: "1.1.0",
|
|
5209
|
+
missionId: "vibe-idea-studio-mission-1",
|
|
5210
|
+
learner: {
|
|
5211
|
+
estimatedMinutes: 20,
|
|
5212
|
+
stages: [
|
|
5213
|
+
{
|
|
5214
|
+
kind: "learn",
|
|
5215
|
+
instruction: "Read how choosePrototype(), setStarCount() and setSuccessMessage() shape the bounded rescue-card template.",
|
|
5216
|
+
artifactIds: ["vibe-idea-studio-m1-guide"]
|
|
5217
|
+
},
|
|
5218
|
+
{
|
|
5219
|
+
kind: "predict",
|
|
5220
|
+
instruction: "Choose one idea, audience and acceptance test card, then predict what the one-line prototype change will show.",
|
|
5221
|
+
artifactIds: ["vibe-idea-studio-m1-idea-cards"]
|
|
5222
|
+
},
|
|
5223
|
+
{
|
|
5224
|
+
kind: "build",
|
|
5225
|
+
instruction: "Open the supplied template and keep every change inside its documented prototype settings artifact.",
|
|
5226
|
+
artifactIds: ["vibe-idea-studio-m1-code"]
|
|
5227
|
+
},
|
|
5228
|
+
{
|
|
5229
|
+
kind: "run",
|
|
5230
|
+
instruction: "Use the Run action button to preview the current rescue card in the private JavaScript simulator.",
|
|
5231
|
+
artifactIds: ["vibe-idea-studio-m1-code"]
|
|
5232
|
+
},
|
|
5233
|
+
{
|
|
5234
|
+
kind: "assess",
|
|
5235
|
+
instruction: "Run deterministic checks against the selected goal and acceptance test before viewing a suggestion.",
|
|
5236
|
+
artifactIds: []
|
|
5237
|
+
},
|
|
5238
|
+
{
|
|
5239
|
+
kind: "inspect",
|
|
5240
|
+
instruction: "Compare the exact one-line diff with your prediction, chosen goal and failed acceptance-test evidence.",
|
|
5241
|
+
artifactIds: ["vibe-idea-studio-m1-code"]
|
|
5242
|
+
},
|
|
5243
|
+
{
|
|
5244
|
+
kind: "fix",
|
|
5245
|
+
instruction: "Accept or reject the immutable prototype change yourself, then rerun the preview and tests.",
|
|
5246
|
+
artifactIds: ["vibe-idea-studio-m1-code"]
|
|
5247
|
+
},
|
|
5248
|
+
{
|
|
5249
|
+
kind: "explain",
|
|
5250
|
+
instruction: "Explain how the final evidence proves the prototype meets the selected idea, audience and success test.",
|
|
5251
|
+
artifactIds: []
|
|
5252
|
+
},
|
|
5253
|
+
{
|
|
5254
|
+
kind: "reward",
|
|
5255
|
+
instruction: "Collect the evidence-bound badge after the deterministic score reaches 80 and every safety check passes.",
|
|
5256
|
+
artifactIds: []
|
|
5257
|
+
}
|
|
5258
|
+
],
|
|
5259
|
+
readinessChecks: [
|
|
5260
|
+
{
|
|
5261
|
+
id: "vibe-idea-studio-m1-match-test",
|
|
5262
|
+
prompt: "Match the three-star acceptance test to the documented setting that controls star count.",
|
|
5263
|
+
scored: false
|
|
5264
|
+
}
|
|
5265
|
+
],
|
|
5266
|
+
artifacts: [
|
|
5267
|
+
{
|
|
5268
|
+
id: "vibe-idea-studio-m1-code",
|
|
5269
|
+
kind: "starter-code",
|
|
5270
|
+
audience: "learner",
|
|
5271
|
+
solutionBearing: false
|
|
5272
|
+
},
|
|
5273
|
+
{
|
|
5274
|
+
id: "vibe-idea-studio-m1-guide",
|
|
5275
|
+
kind: "starter-assets",
|
|
5276
|
+
audience: "learner",
|
|
5277
|
+
solutionBearing: false
|
|
5278
|
+
},
|
|
5279
|
+
{
|
|
5280
|
+
id: "vibe-idea-studio-m1-idea-cards",
|
|
5281
|
+
kind: "printable",
|
|
5282
|
+
audience: "learner",
|
|
5283
|
+
solutionBearing: false
|
|
5284
|
+
}
|
|
5285
|
+
],
|
|
5286
|
+
goals: [
|
|
5287
|
+
{
|
|
5288
|
+
id: "vibe-idea-studio-m1-starts",
|
|
5289
|
+
statement: "The supplied JavaScript rescue-card template remains structurally valid and starts.",
|
|
5290
|
+
visibility: "visible",
|
|
5291
|
+
criterionIds: ["vibe-idea-studio-build"],
|
|
5292
|
+
completionRequired: true,
|
|
5293
|
+
aiRequired: false
|
|
5294
|
+
},
|
|
5295
|
+
{
|
|
5296
|
+
id: "vibe-idea-studio-m1-prototype-goal",
|
|
5297
|
+
statement: "The prototype is a space rescue card for a friendly robot crew with three stars and a visible success message.",
|
|
5298
|
+
visibility: "visible",
|
|
5299
|
+
criterionIds: [
|
|
5300
|
+
"vibe-idea-studio-goal-one",
|
|
5301
|
+
"vibe-idea-studio-goal-two",
|
|
5302
|
+
"vibe-idea-studio-goal-three"
|
|
5303
|
+
],
|
|
5304
|
+
completionRequired: true,
|
|
5305
|
+
aiRequired: false
|
|
5306
|
+
},
|
|
5307
|
+
{
|
|
5308
|
+
id: "vibe-idea-studio-m1-private-boundary",
|
|
5309
|
+
statement: "The prototype stays inside the selected template, permitted artifact and private sandbox.",
|
|
5310
|
+
visibility: "visible",
|
|
5311
|
+
criterionIds: ["vibe-idea-studio-safety"],
|
|
5312
|
+
completionRequired: true,
|
|
5313
|
+
aiRequired: false
|
|
5314
|
+
}
|
|
5315
|
+
],
|
|
5316
|
+
interactions: [
|
|
5317
|
+
{
|
|
5318
|
+
id: "vibe-idea-studio-m1-idea-cards",
|
|
5319
|
+
description: "Choose one bounded idea, audience and acceptance-test card.",
|
|
5320
|
+
primaryMode: "pointer",
|
|
5321
|
+
alternativeIds: ["vibe-idea-studio-m1-keyboard-cards"]
|
|
5322
|
+
},
|
|
5323
|
+
{
|
|
5324
|
+
id: "vibe-idea-studio-m1-run-control",
|
|
5325
|
+
description: "Start the private rescue-card preview.",
|
|
5326
|
+
primaryMode: "pointer",
|
|
5327
|
+
alternativeIds: ["vibe-idea-studio-m1-keyboard-run"]
|
|
5328
|
+
},
|
|
5329
|
+
{
|
|
5330
|
+
id: "vibe-idea-studio-m1-diff-review",
|
|
5331
|
+
description: "Read the labelled removed and added star-count lines before deciding.",
|
|
5332
|
+
primaryMode: "text",
|
|
5333
|
+
alternativeIds: []
|
|
5334
|
+
},
|
|
5335
|
+
{
|
|
5336
|
+
id: "vibe-idea-studio-m1-accept-control",
|
|
5337
|
+
description: "Approve the exact immutable prototype change.",
|
|
5338
|
+
primaryMode: "pointer",
|
|
5339
|
+
alternativeIds: ["vibe-idea-studio-m1-keyboard-review"]
|
|
5340
|
+
},
|
|
5341
|
+
{
|
|
5342
|
+
id: "vibe-idea-studio-m1-reject-control",
|
|
5343
|
+
description: "Reject the suggestion and preserve the current source.",
|
|
5344
|
+
primaryMode: "pointer",
|
|
5345
|
+
alternativeIds: ["vibe-idea-studio-m1-keyboard-review"]
|
|
5346
|
+
}
|
|
5347
|
+
],
|
|
5348
|
+
accessibilityAlternatives: [
|
|
5349
|
+
{
|
|
5350
|
+
id: "vibe-idea-studio-m1-keyboard-cards",
|
|
5351
|
+
modes: ["keyboard", "text"],
|
|
5352
|
+
equivalentOutcome: true,
|
|
5353
|
+
description: "Use labelled radio-card controls with arrow keys and Space to choose the same bounded goal."
|
|
5354
|
+
},
|
|
5355
|
+
{
|
|
5356
|
+
id: "vibe-idea-studio-m1-keyboard-run",
|
|
5357
|
+
modes: ["keyboard"],
|
|
5358
|
+
equivalentOutcome: true,
|
|
5359
|
+
description: "Press Enter or Space on the play-icon Run button to start the same preview."
|
|
5360
|
+
},
|
|
5361
|
+
{
|
|
5362
|
+
id: "vibe-idea-studio-m1-keyboard-review",
|
|
5363
|
+
modes: ["keyboard", "text", "reduced-motion"],
|
|
5364
|
+
equivalentOutcome: true,
|
|
5365
|
+
description: "Read the labelled diff and acceptance evidence, then focus Accept or Reject and press Enter or Space."
|
|
5366
|
+
}
|
|
5367
|
+
],
|
|
5368
|
+
evidenceRequirements: [
|
|
5369
|
+
{
|
|
5370
|
+
id: "vibe-idea-studio-m1-assessment",
|
|
5371
|
+
goalIds: [
|
|
5372
|
+
"vibe-idea-studio-m1-starts",
|
|
5373
|
+
"vibe-idea-studio-m1-prototype-goal",
|
|
5374
|
+
"vibe-idea-studio-m1-private-boundary"
|
|
5375
|
+
],
|
|
5376
|
+
kind: "assessment-result",
|
|
5377
|
+
retention: "entitlement",
|
|
5378
|
+
containsPersonalData: false
|
|
5379
|
+
},
|
|
5380
|
+
{
|
|
5381
|
+
id: "vibe-idea-studio-m1-explanation",
|
|
5382
|
+
goalIds: ["vibe-idea-studio-m1-prototype-goal"],
|
|
5383
|
+
kind: "learner-explanation",
|
|
5384
|
+
retention: "attempt",
|
|
5385
|
+
containsPersonalData: false
|
|
5386
|
+
}
|
|
5387
|
+
],
|
|
5388
|
+
sideAdventures: [
|
|
5389
|
+
{
|
|
5390
|
+
id: "vibe-idea-studio-m1-test-inventor",
|
|
5391
|
+
prompt: "Write one new bounded audience card and one matching acceptance test without changing the template boundary.",
|
|
5392
|
+
completionRequired: false
|
|
5393
|
+
}
|
|
5394
|
+
],
|
|
5395
|
+
rewardBindings: [
|
|
5396
|
+
{
|
|
5397
|
+
id: "vibe-idea-studio-m1-badge",
|
|
5398
|
+
badgeId: "vibe-idea-studio-mission-complete",
|
|
5399
|
+
goalIds: [
|
|
5400
|
+
"vibe-idea-studio-m1-starts",
|
|
5401
|
+
"vibe-idea-studio-m1-prototype-goal",
|
|
5402
|
+
"vibe-idea-studio-m1-private-boundary"
|
|
5403
|
+
],
|
|
5404
|
+
deterministic: true,
|
|
5405
|
+
random: false,
|
|
5406
|
+
tokenConvertible: false
|
|
5407
|
+
}
|
|
5408
|
+
],
|
|
5409
|
+
functionReference: [
|
|
5410
|
+
{
|
|
5411
|
+
id: "vibe-idea-studio-function-prototype",
|
|
5412
|
+
signature: "choosePrototype(kind)",
|
|
5413
|
+
summary: "Chooses one supplied, age-appropriate interactive prototype template.",
|
|
5414
|
+
parameters: [{ name: "kind", type: "text", description: "Use rescue-card, creature-card or mission-sign." }],
|
|
5415
|
+
effect: "Changes only the labelled template in the private preview.",
|
|
5416
|
+
example: 'choosePrototype("rescue-card");'
|
|
5417
|
+
},
|
|
5418
|
+
{
|
|
5419
|
+
id: "vibe-idea-studio-function-stars",
|
|
5420
|
+
signature: "setStarCount(count)",
|
|
5421
|
+
summary: "Chooses how many decorative success stars appear on the card.",
|
|
5422
|
+
parameters: [{ name: "count", type: "whole number", description: "A bounded count from 1 to 4." }],
|
|
5423
|
+
effect: "Changes only the visible star count in the private preview.",
|
|
5424
|
+
example: "setStarCount(3);"
|
|
5425
|
+
},
|
|
5426
|
+
{
|
|
5427
|
+
id: "vibe-idea-studio-function-message",
|
|
5428
|
+
signature: "setSuccessMessage(message)",
|
|
5429
|
+
summary: "Chooses one supplied child-safe success message.",
|
|
5430
|
+
parameters: [{ name: "message", type: "text", description: "Use Mission ready!, Great teamwork! or Rescue complete!" }],
|
|
5431
|
+
effect: "Changes only the fictional card message and never sends or stores text.",
|
|
5432
|
+
example: 'setSuccessMessage("Mission ready!");'
|
|
5433
|
+
}
|
|
5434
|
+
],
|
|
5435
|
+
boundedSuggestion: {
|
|
5436
|
+
id: "vibe-idea-studio-m1-authored-star-diff",
|
|
5437
|
+
source: "authored-fallback",
|
|
5438
|
+
intent: "Meet the selected acceptance test by showing three stars.",
|
|
5439
|
+
constraints: [
|
|
5440
|
+
"Change exactly one documented star-count setting.",
|
|
5441
|
+
"Preserve the selected prototype and supplied success message.",
|
|
5442
|
+
"Do not add free-form content, network, storage, DOM, account or hardware access."
|
|
5443
|
+
],
|
|
5444
|
+
permittedArtifactId: "vibe-idea-studio-m1-code",
|
|
5445
|
+
originalSnippet: "setStarCount(2);",
|
|
5446
|
+
replacementSnippet: "setStarCount(3);",
|
|
5447
|
+
explanationPrompt: "Did the accepted change satisfy the three-star acceptance test, and which evidence proves it?",
|
|
5448
|
+
aiOptional: false,
|
|
5449
|
+
learnerApprovalRequired: true,
|
|
5450
|
+
alternatives: ["accept", "reject"]
|
|
5451
|
+
}
|
|
5452
|
+
},
|
|
5453
|
+
facilitator: {
|
|
5454
|
+
artifacts: [
|
|
5455
|
+
{
|
|
5456
|
+
id: "vibe-idea-studio-m1-answer-key",
|
|
5457
|
+
kind: "answer-key",
|
|
5458
|
+
audience: "facilitator",
|
|
5459
|
+
solutionBearing: true
|
|
5460
|
+
},
|
|
5461
|
+
{
|
|
5462
|
+
id: "vibe-idea-studio-m1-protected-tests",
|
|
5463
|
+
kind: "protected-test",
|
|
5464
|
+
audience: "facilitator",
|
|
5465
|
+
solutionBearing: true
|
|
5466
|
+
},
|
|
5467
|
+
{
|
|
5468
|
+
id: "vibe-idea-studio-m1-safety-notes",
|
|
5469
|
+
kind: "facilitator-note",
|
|
5470
|
+
audience: "facilitator",
|
|
5471
|
+
solutionBearing: true
|
|
5472
|
+
}
|
|
5473
|
+
],
|
|
5474
|
+
protectedGoals: [
|
|
5475
|
+
{
|
|
5476
|
+
id: "vibe-idea-studio-m1-protected-boundaries",
|
|
5477
|
+
statement: "The sandbox rejects free-form prompts, personal data, disallowed messages, extra statements, network access and changes outside the approved diff.",
|
|
5478
|
+
visibility: "protected",
|
|
5479
|
+
criterionIds: ["vibe-idea-studio-edge-one", "vibe-idea-studio-edge-two"],
|
|
5480
|
+
completionRequired: false,
|
|
5481
|
+
aiRequired: false
|
|
5482
|
+
}
|
|
5483
|
+
],
|
|
5484
|
+
prompts: [
|
|
5485
|
+
"Ask the learner to name the idea, audience and acceptance test before revealing the authored diff.",
|
|
5486
|
+
"Keep choices bound to supplied child-safe cards, the current rubric and permitted artifact; never invite free-form chat.",
|
|
5487
|
+
"A rejection must preserve source, and AI/provider failure must never block deterministic prototype completion."
|
|
5488
|
+
]
|
|
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
|
+
};
|
|
5203
5775
|
var ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1 = {
|
|
5204
5776
|
version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
|
|
5205
5777
|
moduleId: "junior-coder.road-hopper-rally",
|
|
@@ -5549,6 +6121,7 @@ ${summary}`);
|
|
|
5549
6121
|
}
|
|
5550
6122
|
// Annotate the CommonJS export names for ESM import in node:
|
|
5551
6123
|
0 && (module.exports = {
|
|
6124
|
+
ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1,
|
|
5552
6125
|
BEACON_BOT_MISSION_ONE_AUTHORING_V1,
|
|
5553
6126
|
DANCE_ROVER_MISSION_ONE_AUTHORING_V1,
|
|
5554
6127
|
JUNIOR_CODER_MISSION_STAGE_ORDER_V1,
|
|
@@ -5570,6 +6143,7 @@ ${summary}`);
|
|
|
5570
6143
|
STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1,
|
|
5571
6144
|
VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1,
|
|
5572
6145
|
VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1,
|
|
6146
|
+
VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1,
|
|
5573
6147
|
assertValidLearningPath,
|
|
5574
6148
|
assertValidMissionAuthoringBundle,
|
|
5575
6149
|
calculateAssessment,
|