@plasius/learning 0.2.17 → 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 CHANGED
@@ -64,6 +64,7 @@ the exact catalog module that owns its rubric, mission and badges.
64
64
  import {
65
65
  ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1,
66
66
  BEACON_BOT_MISSION_ONE_AUTHORING_V1,
67
+ CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1,
67
68
  DANCE_ROVER_MISSION_ONE_AUTHORING_V1,
68
69
  JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1,
69
70
  METEOR_SHIELD_MISSION_ONE_AUTHORING_V1,
@@ -134,6 +135,9 @@ const vibeIdeaStudio = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
134
135
  const adventureMissionPlanner = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
135
136
  (module) => module.slug === "adventure-mission-planner",
136
137
  );
138
+ const creatureCareDashboard = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
139
+ (module) => module.slug === "creature-care-dashboard",
140
+ );
137
141
 
138
142
  if (
139
143
  !roadHopper ||
@@ -152,7 +156,8 @@ if (
152
156
  !vibeGameRemixLab ||
153
157
  !vibeBugDetective ||
154
158
  !vibeIdeaStudio ||
155
- !adventureMissionPlanner
159
+ !adventureMissionPlanner ||
160
+ !creatureCareDashboard
156
161
  ) {
157
162
  throw new Error("Junior Coder module is missing");
158
163
  }
@@ -225,6 +230,10 @@ assertValidMissionAuthoringBundle(
225
230
  ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1,
226
231
  adventureMissionPlanner,
227
232
  );
233
+ assertValidMissionAuthoringBundle(
234
+ CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1,
235
+ creatureCareDashboard,
236
+ );
228
237
  ```
229
238
 
230
239
  ## Contract rules
@@ -281,6 +290,10 @@ assertValidMissionAuthoringBundle(
281
290
  state, private simulated local save and an equivalent accessible summary.
282
291
  The learner reviews the exact persistence diff; no form transmits data and
283
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.
284
297
 
285
298
  See [the foundation design](docs/design/junior-coder-catalog-foundation.md),
286
299
  [the uniform pricing design](docs/design/junior-coder-uniform-pricing.md),
@@ -296,6 +309,7 @@ See also [TDR 0010](docs/tdrs/tdr-0010-vibe-game-remix-bounded-suggestion-author
296
309
  See also [TDR 0011](docs/tdrs/tdr-0011-vibe-bug-detective-evidence-led-repair.md).
297
310
  See also [TDR 0012](docs/tdrs/tdr-0012-vibe-idea-studio-bounded-goal-prototyping.md).
298
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).
299
313
 
300
314
  ## Development
301
315
 
package/dist/index.cjs CHANGED
@@ -22,6 +22,7 @@ var index_exports = {};
22
22
  __export(index_exports, {
23
23
  ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1: () => ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1,
24
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,
25
26
  DANCE_ROVER_MISSION_ONE_AUTHORING_V1: () => DANCE_ROVER_MISSION_ONE_AUTHORING_V1,
26
27
  JUNIOR_CODER_MISSION_STAGE_ORDER_V1: () => JUNIOR_CODER_MISSION_STAGE_ORDER_V1,
27
28
  JUNIOR_CODER_MODULE_PRICE_V1_1: () => JUNIOR_CODER_MODULE_PRICE_V1_1,
@@ -5488,6 +5489,287 @@ var VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1 = {
5488
5489
  ]
5489
5490
  }
5490
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
+ };
5491
5773
  var ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1 = {
5492
5774
  version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
5493
5775
  moduleId: "junior-coder.adventure-mission-planner",
@@ -6123,6 +6405,7 @@ ${summary}`);
6123
6405
  0 && (module.exports = {
6124
6406
  ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1,
6125
6407
  BEACON_BOT_MISSION_ONE_AUTHORING_V1,
6408
+ CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1,
6126
6409
  DANCE_ROVER_MISSION_ONE_AUTHORING_V1,
6127
6410
  JUNIOR_CODER_MISSION_STAGE_ORDER_V1,
6128
6411
  JUNIOR_CODER_MODULE_PRICE_V1_1,