@plasius/learning 0.2.22 → 0.2.24

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
@@ -9,11 +9,11 @@ The package does **not** provide HTTP handlers, persistence, authentication, Tok
9
9
  The initial immutable catalog is exported as
10
10
  `JUNIOR_CODER_ROBOT_RESCUE_PATH_V1`, and its uniformly priced successor remains
11
11
  available as `JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1`. Path `1.2.0` upgrades Road
12
- Hopper Rally; path `1.3.0` is exported as
13
- `JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3` and selected by
14
- `JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT`. It also upgrades Paddle Pulse to
15
- module `2.0.0`; the other seventeen modules retain their prior immutable
16
- versions. Each path
12
+ Hopper Rally, path `1.3.0` adds Paddle Pulse `2.0.0`, and path `1.4.0` is
13
+ exported as `JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_4` and selected by
14
+ `JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT`. It advances Road Hopper Rally to the
15
+ evidence-led module `2.1.0`; the other eighteen module records retain their
16
+ prior immutable versions. Each path
17
17
  contains 19 independently sellable, self-contained project modules:
18
18
 
19
19
  - 8 original arcade game modules;
@@ -22,16 +22,18 @@ contains 19 independently sellable, self-contained project modules:
22
22
  - 3 web application modules.
23
23
 
24
24
  All catalogs remain in `pilot-grant-only` commercial state. The immutable
25
- `1.1.0` modules, Road Hopper Rally `2.0.0` and Paddle Pulse `2.0.0` each cost 50 Tokens (50,000 subunits), carrying a
25
+ `1.1.0` modules, Road Hopper Rally `2.1.0` and Paddle Pulse `2.0.0` each cost 50 Tokens (50,000 subunits), carrying a
26
26
  non-redeemable £5 reference value. Price metadata is not authorization to
27
27
  enable public checkout.
28
28
 
29
- Road Hopper Rally `2.0.0` is a 450-minute, six-mission catalog record whose
30
- 54-stage course, starter project, deterministic runtime, original assets and
31
- assessment definitions live in `@plasius/learning-road-hopper-rally@1.0.0`.
32
- The catalog pins the exact `ROAD_HOPPER_RALLY_COURSE_V2` export and its canonical
33
- SHA-256 digest through `ExternalLearningContentReferenceV1`; it does not import
34
- or bundle the executable content package.
29
+ Road Hopper Rally `2.1.0` is a 450-minute, six-mission catalog record whose
30
+ 54 evidence-led activities, starter project, deterministic runtime, original
31
+ assets and assessment definitions live in
32
+ `@plasius/learning-road-hopper-rally@1.1.0`. The catalog pins the exact
33
+ `ROAD_HOPPER_RALLY_COURSE_V3` export, schema `3` and its canonical SHA-256 digest
34
+ through `ExternalLearningContentReferenceV1`; it does not import or bundle the
35
+ executable content package. Road Hopper `2.0.0` and its package `1.0.0`
36
+ reference remain available unchanged for rollback and existing consumers.
35
37
 
36
38
  Paddle Pulse `2.0.0` is a 360-minute, six-mission catalog record whose 54-stage
37
39
  course, declarative program contracts, deterministic 60 Hz engine and protected
@@ -62,11 +64,11 @@ fields before use:
62
64
 
63
65
  ```ts
64
66
  import {
65
- ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V1,
67
+ ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V2,
66
68
  isExternalLearningContentReferenceV1,
67
69
  } from "@plasius/learning";
68
70
 
69
- if (!isExternalLearningContentReferenceV1(ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V1)) {
71
+ if (!isExternalLearningContentReferenceV1(ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V2)) {
70
72
  throw new Error("Invalid external learning content reference");
71
73
  }
72
74
  ```
@@ -424,18 +426,27 @@ npm run build
424
426
  npm run pack:check
425
427
  ```
426
428
 
427
- Node.js 24 is required. Public pull-request code is validated on an isolated
428
- GitHub-hosted Linux runner with read-only workflow permissions. Main-branch CI
429
- and both release jobs explicitly select the approved
430
- `Public CI - Quarantined` self-hosted runner group. `CI_RUNNER_GROUP` /
431
- `CI_RUNNER_LABELS` and `CD_RUNNER_GROUP` / `CD_RUNNER_LABELS` are reserved for
432
- governed operator configuration. The organisation group remains restricted to
433
- allowlisted `main` workflows and selected repositories. Release coverage and
434
- the CycloneDX SBOM are retained even when an external coverage or provenance
435
- service is unavailable. Release tags and GitHub Releases use a current-repository
436
- GitHub App token with explicit Contents and Workflows write permissions; npm
437
- publication continues to use only the protected `NPM_TOKEN`. Both release jobs
438
- install a checksum-pinned GitHub CLI under `RUNNER_TEMP`, so runner images do
439
- not need a mutable system-wide `gh` installation. Publication checks out the
440
- verified current release-branch HEAD, including the workflow tooling used by a
441
- `bump=none` recovery.
429
+ Node.js 24 is required. Public pull-request and main-branch code is validated
430
+ on isolated GitHub-hosted Linux runners with read-only workflow permissions.
431
+ Final npm
432
+ publication runs only on a GitHub-hosted runner from the protected `production`
433
+ environment so npm can validate its short-lived OIDC identity and record
434
+ provenance; it has no long-lived npm write-token fallback. Release coverage and
435
+ the CycloneDX SBOM are retained even when an external coverage service is
436
+ unavailable. Release tags and GitHub Releases use a current-repository GitHub
437
+ App token with explicit Contents and Workflows write permissions. Publication
438
+ checks out the verified current release-branch HEAD, including the workflow
439
+ tooling used by a `bump=none` recovery.
440
+ <!-- BEGIN PLASIUS RELEASE INTEGRITY -->
441
+ ## Release integrity
442
+
443
+ Production package publication runs only from `.github/workflows/cd.yml` on
444
+ protected `main`. The job verifies that the prepared commit is still the
445
+ current main commit and has an exact successful `ci.yml` push result before it
446
+ mutates release state. Public package CI runs on GitHub-hosted capacity so it
447
+ cannot execute on company-managed runners. npm publication runs on
448
+ GitHub-hosted Node.js 24 with
449
+ npm 11.5.1 or newer, uses the protected `production` environment and
450
+ short-lived npm OIDC with provenance, and has no long-lived npm write-token
451
+ fallback. Rollback disables CD; it never rewrites published package history.
452
+ <!-- END PLASIUS RELEASE INTEGRITY -->
package/dist/index.cjs CHANGED
@@ -33,11 +33,13 @@ __export(index_exports, {
33
33
  JUNIOR_CODER_MODULE_PRICE_V1_1: () => JUNIOR_CODER_MODULE_PRICE_V1_1,
34
34
  JUNIOR_CODER_PADDLE_PULSE_V2: () => JUNIOR_CODER_PADDLE_PULSE_V2,
35
35
  JUNIOR_CODER_ROAD_HOPPER_RALLY_V2: () => JUNIOR_CODER_ROAD_HOPPER_RALLY_V2,
36
+ JUNIOR_CODER_ROAD_HOPPER_RALLY_V2_1: () => JUNIOR_CODER_ROAD_HOPPER_RALLY_V2_1,
36
37
  JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT: () => JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT,
37
38
  JUNIOR_CODER_ROBOT_RESCUE_PATH_V1: () => JUNIOR_CODER_ROBOT_RESCUE_PATH_V1,
38
39
  JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1: () => JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1,
39
40
  JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_2: () => JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_2,
40
41
  JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3: () => JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3,
42
+ JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_4: () => JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_4,
41
43
  METEOR_SHIELD_MISSION_ONE_AUTHORING_V1: () => METEOR_SHIELD_MISSION_ONE_AUTHORING_V1,
42
44
  MISSION_AUTHORING_CONTRACT_VERSION_V1: () => MISSION_AUTHORING_CONTRACT_VERSION_V1,
43
45
  OBSTACLE_EXPLORER_MISSION_ONE_AUTHORING_V1: () => OBSTACLE_EXPLORER_MISSION_ONE_AUTHORING_V1,
@@ -47,6 +49,7 @@ __export(index_exports, {
47
49
  RAINBOW_RESCUE_ROVER_MISSION_ONE_AUTHORING_V1: () => RAINBOW_RESCUE_ROVER_MISSION_ONE_AUTHORING_V1,
48
50
  RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1: () => RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1,
49
51
  ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V1: () => ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V1,
52
+ ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V2: () => ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V2,
50
53
  ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1: () => ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1,
51
54
  ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1: () => ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1,
52
55
  ROBOT_MISSION_CONTROL_MISSION_ONE_AUTHORING_V1: () => ROBOT_MISSION_CONTROL_MISSION_ONE_AUTHORING_V1,
@@ -659,6 +662,13 @@ var ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V1 = Object.freeze({
659
662
  schemaVersion: "2",
660
663
  sha256: "1a20741beba028004e0be527d05aae2b2881082d3b578e0d62308a59bf1323f0"
661
664
  });
665
+ var ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V2 = Object.freeze({
666
+ packageName: "@plasius/learning-road-hopper-rally",
667
+ packageVersion: "1.1.0",
668
+ exportName: "ROAD_HOPPER_RALLY_COURSE_V3",
669
+ schemaVersion: "3",
670
+ sha256: "f73b90f5f0e483b96724f978f2977435a5e6a1333f5f45fd0fc803b55ad21187"
671
+ });
662
672
  var roadHopperV1_1 = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
663
673
  (entry) => entry.id === "junior-coder.road-hopper-rally"
664
674
  );
@@ -769,6 +779,29 @@ var JUNIOR_CODER_ROAD_HOPPER_RALLY_V2 = {
769
779
  ],
770
780
  externalContent: ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V1
771
781
  };
782
+ var ROAD_HOPPER_RALLY_V2_1_MISSION_TITLES = [
783
+ "Map the Rally Route",
784
+ "Move the Hopper",
785
+ "Build the Traffic Rally",
786
+ "Ride the Rescue River",
787
+ "Score the Rescue",
788
+ "Road Hopper Rally Challenge"
789
+ ];
790
+ var JUNIOR_CODER_ROAD_HOPPER_RALLY_V2_1 = {
791
+ ...JUNIOR_CODER_ROAD_HOPPER_RALLY_V2,
792
+ version: "2.1.0",
793
+ contentRevision: "2026-08-24.1",
794
+ summary: "Build Road Hopper Rally through 54 evidence-led activities: predict, edit, run, inspect, repair, explain and prove each deterministic game system.",
795
+ missions: JUNIOR_CODER_ROAD_HOPPER_RALLY_V2.missions.map((mission2, index) => ({
796
+ ...mission2,
797
+ title: ROAD_HOPPER_RALLY_V2_1_MISSION_TITLES[index]
798
+ })),
799
+ assessment: {
800
+ ...JUNIOR_CODER_ROAD_HOPPER_RALLY_V2.assessment,
801
+ version: "2.1.0"
802
+ },
803
+ externalContent: ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V2
804
+ };
772
805
  var JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_2 = {
773
806
  ...JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1,
774
807
  version: "1.2.0",
@@ -892,7 +925,12 @@ var JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3 = {
892
925
  version: "1.3.0",
893
926
  modules: JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_2.modules.map((entry) => entry.id === JUNIOR_CODER_PADDLE_PULSE_V2.id ? JUNIOR_CODER_PADDLE_PULSE_V2 : entry)
894
927
  };
895
- var JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3;
928
+ var JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_4 = {
929
+ ...JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3,
930
+ version: "1.4.0",
931
+ modules: JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3.modules.map((entry) => entry.id === JUNIOR_CODER_ROAD_HOPPER_RALLY_V2_1.id ? JUNIOR_CODER_ROAD_HOPPER_RALLY_V2_1 : entry)
932
+ };
933
+ var JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_4;
896
934
 
897
935
  // src/contracts.ts
898
936
  var EXTERNAL_LEARNING_CONTENT_REFERENCE_VERSION_V1 = "1";
@@ -7277,11 +7315,13 @@ ${summary}`);
7277
7315
  JUNIOR_CODER_MODULE_PRICE_V1_1,
7278
7316
  JUNIOR_CODER_PADDLE_PULSE_V2,
7279
7317
  JUNIOR_CODER_ROAD_HOPPER_RALLY_V2,
7318
+ JUNIOR_CODER_ROAD_HOPPER_RALLY_V2_1,
7280
7319
  JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT,
7281
7320
  JUNIOR_CODER_ROBOT_RESCUE_PATH_V1,
7282
7321
  JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1,
7283
7322
  JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_2,
7284
7323
  JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3,
7324
+ JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_4,
7285
7325
  METEOR_SHIELD_MISSION_ONE_AUTHORING_V1,
7286
7326
  MISSION_AUTHORING_CONTRACT_VERSION_V1,
7287
7327
  OBSTACLE_EXPLORER_MISSION_ONE_AUTHORING_V1,
@@ -7291,6 +7331,7 @@ ${summary}`);
7291
7331
  RAINBOW_RESCUE_ROVER_MISSION_ONE_AUTHORING_V1,
7292
7332
  RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1,
7293
7333
  ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V1,
7334
+ ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V2,
7294
7335
  ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1,
7295
7336
  ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1,
7296
7337
  ROBOT_MISSION_CONTROL_MISSION_ONE_AUTHORING_V1,