@plasius/learning 0.2.21 → 0.2.23
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 +42 -7
- package/dist/index.cjs +320 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +56 -2
- package/dist/index.d.ts +56 -2
- package/dist/index.js +309 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -142,6 +142,20 @@ interface BadgeDefinitionV1 {
|
|
|
142
142
|
tradeable: false;
|
|
143
143
|
tokenConvertible: false;
|
|
144
144
|
}
|
|
145
|
+
/** Immutable package export selected by the catalog without importing it. */
|
|
146
|
+
declare const EXTERNAL_LEARNING_CONTENT_REFERENCE_VERSION_V1: "1";
|
|
147
|
+
interface ExternalLearningContentReferenceV1 {
|
|
148
|
+
/** Exact public package name; ranges and aliases are not permitted. */
|
|
149
|
+
packageName: string;
|
|
150
|
+
/** Exact semantic version without a range operator. */
|
|
151
|
+
packageVersion: string;
|
|
152
|
+
/** Named ESM/CJS export containing the immutable content manifest. */
|
|
153
|
+
exportName: string;
|
|
154
|
+
/** Exact schema version declared by the referenced exported manifest. */
|
|
155
|
+
schemaVersion: string;
|
|
156
|
+
/** Lower-case SHA-256 of the canonical exported manifest JSON. */
|
|
157
|
+
sha256: string;
|
|
158
|
+
}
|
|
145
159
|
/** One immutable, independently sellable module version. */
|
|
146
160
|
interface LearningModuleVersionV1 {
|
|
147
161
|
id: string;
|
|
@@ -163,6 +177,8 @@ interface LearningModuleVersionV1 {
|
|
|
163
177
|
assessment: AssessmentRubricV1;
|
|
164
178
|
agents: ModuleAgentDefinitionV1[];
|
|
165
179
|
badges: BadgeDefinitionV1[];
|
|
180
|
+
/** Optional separately released content implementation pinned by digest. */
|
|
181
|
+
externalContent?: ExternalLearningContentReferenceV1;
|
|
166
182
|
}
|
|
167
183
|
/** A versioned path is a recommendation and never a paid prerequisite chain. */
|
|
168
184
|
interface LearningPathVersionV1 {
|
|
@@ -389,7 +405,7 @@ interface MissionAuthoringValidationIssueV1 {
|
|
|
389
405
|
path: string;
|
|
390
406
|
}
|
|
391
407
|
interface LearningValidationIssueV1 {
|
|
392
|
-
code: "duplicate-module-id" | "duplicate-module-slug" | "module-not-self-contained" | "paid-prerequisite" | "missing-materials" | "facilitator-material-leak" | "learner-material-leak" | "invalid-token-subunits" | "invalid-reference-price" | "rubric-total" | "rubric-dimension-total" | "duplicate-criterion-id" | "missing-mandatory-safety" | "missing-hardware-items" | "invalid-agent-authority" | "missing-missions";
|
|
408
|
+
code: "duplicate-module-id" | "duplicate-module-slug" | "module-not-self-contained" | "paid-prerequisite" | "missing-materials" | "facilitator-material-leak" | "learner-material-leak" | "invalid-token-subunits" | "invalid-reference-price" | "rubric-total" | "rubric-dimension-total" | "duplicate-criterion-id" | "missing-mandatory-safety" | "missing-hardware-items" | "invalid-agent-authority" | "missing-missions" | "invalid-external-content-reference";
|
|
393
409
|
message: string;
|
|
394
410
|
moduleId?: string;
|
|
395
411
|
path: string;
|
|
@@ -426,6 +442,42 @@ declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_V1: LearningPathVersionV1;
|
|
|
426
442
|
* without altering previously published records.
|
|
427
443
|
*/
|
|
428
444
|
declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1: LearningPathVersionV1;
|
|
445
|
+
/** Digest-pinned content package for the independently released 54-stage course. */
|
|
446
|
+
declare const ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V1: Readonly<{
|
|
447
|
+
packageName: "@plasius/learning-road-hopper-rally";
|
|
448
|
+
packageVersion: "1.0.0";
|
|
449
|
+
exportName: "ROAD_HOPPER_RALLY_COURSE_V2";
|
|
450
|
+
schemaVersion: "2";
|
|
451
|
+
sha256: "1a20741beba028004e0be527d05aae2b2881082d3b578e0d62308a59bf1323f0";
|
|
452
|
+
}>;
|
|
453
|
+
/** Digest-pinned evidence-led successor; the immutable v2 reference remains available. */
|
|
454
|
+
declare const ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V2: Readonly<{
|
|
455
|
+
packageName: "@plasius/learning-road-hopper-rally";
|
|
456
|
+
packageVersion: "1.1.0";
|
|
457
|
+
exportName: "ROAD_HOPPER_RALLY_COURSE_V3";
|
|
458
|
+
schemaVersion: "3";
|
|
459
|
+
sha256: "f73b90f5f0e483b96724f978f2977435a5e6a1333f5f45fd0fc803b55ad21187";
|
|
460
|
+
}>;
|
|
461
|
+
/** Road Hopper Rally 2.0 catalog record; course data stays in the referenced package. */
|
|
462
|
+
declare const JUNIOR_CODER_ROAD_HOPPER_RALLY_V2: LearningModuleVersionV1;
|
|
463
|
+
/** Evidence-led Road Hopper 2.1 record; the executable course remains external. */
|
|
464
|
+
declare const JUNIOR_CODER_ROAD_HOPPER_RALLY_V2_1: LearningModuleVersionV1;
|
|
465
|
+
/** Mixed-version successor: Road Hopper 2.0 plus every other immutable 1.1 module. */
|
|
466
|
+
declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_2: LearningPathVersionV1;
|
|
467
|
+
/** Digest-pinned Paddle Pulse 2.0 reference-module content. */
|
|
468
|
+
declare const PADDLE_PULSE_EXTERNAL_CONTENT_V1: Readonly<{
|
|
469
|
+
packageName: "@plasius/learning-paddle-pulse";
|
|
470
|
+
packageVersion: "0.1.0";
|
|
471
|
+
exportName: "PADDLE_PULSE_MODULE_V2";
|
|
472
|
+
schemaVersion: "2";
|
|
473
|
+
sha256: "19f3666bdb523a3faf069341b0bc748996b3db282f89171e3c9f0a373a8c8f7e";
|
|
474
|
+
}>;
|
|
475
|
+
/** Paddle Pulse 2.0 catalog record; executable content stays in its package. */
|
|
476
|
+
declare const JUNIOR_CODER_PADDLE_PULSE_V2: LearningModuleVersionV1;
|
|
477
|
+
/** Mixed-version successor adding Paddle Pulse 2.0 without mutating v1.1. */
|
|
478
|
+
declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3: LearningPathVersionV1;
|
|
479
|
+
/** Mixed-version successor adding evidence-led Road Hopper without mutating v1.3. */
|
|
480
|
+
declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_4: LearningPathVersionV1;
|
|
429
481
|
/** Current pilot catalog for server adapters that intentionally follow releases. */
|
|
430
482
|
declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT: LearningPathVersionV1;
|
|
431
483
|
|
|
@@ -728,9 +780,11 @@ declare const ROBOT_MISSION_CONTROL_MISSION_ONE_AUTHORING_V1: MissionAuthoringBu
|
|
|
728
780
|
declare const ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
|
|
729
781
|
declare const ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
|
|
730
782
|
|
|
783
|
+
/** Runtime guard for digest-pinned external learning content references. */
|
|
784
|
+
declare function isExternalLearningContentReferenceV1(value: unknown): value is ExternalLearningContentReferenceV1;
|
|
731
785
|
/** Return every catalog issue without throwing, suitable for authoring tools. */
|
|
732
786
|
declare function validateLearningPath(path: LearningPathVersionV1): LearningValidationIssueV1[];
|
|
733
787
|
/** Fail fast when a path is not safe to publish or consume. */
|
|
734
788
|
declare function assertValidLearningPath(path: LearningPathVersionV1): void;
|
|
735
789
|
|
|
736
|
-
export { ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1, type AdventureMissionPlannerSafeRenderV1, type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, CONTEXTUAL_HELP_CONTRACT_VERSION_V1, CONTEXTUAL_HELP_KINDS_V1, CONTEXTUAL_VOICE_INTENTS_V1, CONTEXTUAL_VOICE_SUGGESTED_ACTIONS_V1, CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1, type CanonicalSpokenHelpDescriptorV1, type CommercialStateV1, type ContextualHelpIdentifierV1, type ContextualHelpKindV1, type ContextualVoiceAnswerV1, type ContextualVoiceIntentV1, type ContextualVoiceQuestionMetadataV1, type ContextualVoiceQuestionResultV1, type ContextualVoiceSuggestedActionV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, type CreatureCareDashboardSafeRenderV1, DANCE_ROVER_MISSION_ONE_AUTHORING_V1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, type GuardianVoiceConsentStateV1, type GuardianVoiceConsentV1, type GuardianVoiceProcessingRouteV1, type HardwareItemV1, type HardwareModeV1, type HardwareRequirementManifestV1, type HardwareVerificationStatusV1, JUNIOR_CODER_MISSION_STAGE_ORDER_V1, JUNIOR_CODER_MODULE_PRICE_V1_1, JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1, type LearnerMissionAuthoringV1, type LearningGoalV1, type LearningModuleVersionV1, type LearningPathVersionV1, type LearningValidationIssueV1, METEOR_SHIELD_MISSION_ONE_AUTHORING_V1, MISSION_AUTHORING_CONTRACT_VERSION_V1, type MissionAccessibilityAlternativeV1, type MissionArtifactKindV1, type MissionArtifactReferenceV1, type MissionAuthoringBundleV1, type MissionAuthoringGoalV1, type MissionAuthoringValidationIssueV1, type MissionBoundedSuggestionV1, type MissionEvidenceKindV1, type MissionEvidenceRequirementV1, type MissionEvidenceRetentionV1, type MissionFunctionParameterV1, type MissionFunctionReferenceV1, type MissionHardwareAcquisitionScopeV1, type MissionHardwareComponentDisclosureV1, type MissionHardwareDisclosureV1, type MissionInteractionModeV1, type MissionInteractionRequirementV1, type MissionPhysicalSafeguardsV1, type MissionReadinessCheckV1, type MissionRewardBindingV1, type MissionSideAdventureV1, type MissionStageCardV1, type MissionStageKindV1, type MissionV1, type ModuleAgentDefinitionV1, type ModuleAgentFeedbackV1, type ModuleAgentRoleV1, type ModuleCategoryV1, type ModuleEntitlementV1, type ModulePricingV1, type ModuleReferencePriceV1, OBSTACLE_EXPLORER_MISSION_ONE_AUTHORING_V1, PADDLE_PULSE_MISSION_ONE_AUTHORING_V1, PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1, type PublishedStaticProjectSnapshotV1, RAINBOW_RESCUE_ROVER_MISSION_ONE_AUTHORING_V1, RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, ROBOT_MISSION_CONTROL_MISSION_ONE_AUTHORING_V1, type RobotMissionControlSafeRenderV1, SERVO_CREATURE_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, STATIC_PROJECT_APPROVAL_STATEMENT_VERSION_V1, STATIC_PROJECT_DEFAULT_LIFETIME_DAYS_V1, STATIC_PROJECT_MAX_SOURCE_CHARACTERS_V1, STATIC_PROJECT_PUBLISHING_CONTRACT_VERSION_V1, STATIC_PROJECT_SAFETY_CHECK_IDS_V1, STATIC_PROJECT_SCANNER_VERSION_V1, type ScoreBandV1, type StaticProjectContractIssueV1, type StaticProjectGuardianApprovalV1, type StaticProjectModuleSlugV1, type StaticProjectPublicationV1, type StaticProjectSafeRenderV1, type StaticProjectSafetyCheckIdV1, type StaticProjectSafetyCheckV1, type StaticProjectSafetyScanV1, type StaticProjectSnapshotV1, VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1, VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1, VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1, type VoiceHelpAvailabilityReasonV1, type VoiceHelpAvailabilityV1, assertValidCanonicalSpokenHelpDescriptor, assertValidContextualHelpIdentifier, assertValidContextualVoiceQuestionMetadata, assertValidContextualVoiceQuestionResult, assertValidGuardianVoiceConsent, assertValidLearningPath, assertValidMissionAuthoringBundle, assertValidStaticProjectGuardianApproval, assertValidStaticProjectPublication, assertValidStaticProjectSnapshot, assertValidVoiceHelpAvailability, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle, validateStaticProjectGuardianApproval, validateStaticProjectPublication, validateStaticProjectSnapshot };
|
|
790
|
+
export { ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1, type AdventureMissionPlannerSafeRenderV1, type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, CONTEXTUAL_HELP_CONTRACT_VERSION_V1, CONTEXTUAL_HELP_KINDS_V1, CONTEXTUAL_VOICE_INTENTS_V1, CONTEXTUAL_VOICE_SUGGESTED_ACTIONS_V1, CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1, type CanonicalSpokenHelpDescriptorV1, type CommercialStateV1, type ContextualHelpIdentifierV1, type ContextualHelpKindV1, type ContextualVoiceAnswerV1, type ContextualVoiceIntentV1, type ContextualVoiceQuestionMetadataV1, type ContextualVoiceQuestionResultV1, type ContextualVoiceSuggestedActionV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, type CreatureCareDashboardSafeRenderV1, DANCE_ROVER_MISSION_ONE_AUTHORING_V1, EXTERNAL_LEARNING_CONTENT_REFERENCE_VERSION_V1, type ExternalLearningContentReferenceV1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, type GuardianVoiceConsentStateV1, type GuardianVoiceConsentV1, type GuardianVoiceProcessingRouteV1, type HardwareItemV1, type HardwareModeV1, type HardwareRequirementManifestV1, type HardwareVerificationStatusV1, JUNIOR_CODER_MISSION_STAGE_ORDER_V1, JUNIOR_CODER_MODULE_PRICE_V1_1, JUNIOR_CODER_PADDLE_PULSE_V2, JUNIOR_CODER_ROAD_HOPPER_RALLY_V2, JUNIOR_CODER_ROAD_HOPPER_RALLY_V2_1, JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_2, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_4, type LearnerMissionAuthoringV1, type LearningGoalV1, type LearningModuleVersionV1, type LearningPathVersionV1, type LearningValidationIssueV1, METEOR_SHIELD_MISSION_ONE_AUTHORING_V1, MISSION_AUTHORING_CONTRACT_VERSION_V1, type MissionAccessibilityAlternativeV1, type MissionArtifactKindV1, type MissionArtifactReferenceV1, type MissionAuthoringBundleV1, type MissionAuthoringGoalV1, type MissionAuthoringValidationIssueV1, type MissionBoundedSuggestionV1, type MissionEvidenceKindV1, type MissionEvidenceRequirementV1, type MissionEvidenceRetentionV1, type MissionFunctionParameterV1, type MissionFunctionReferenceV1, type MissionHardwareAcquisitionScopeV1, type MissionHardwareComponentDisclosureV1, type MissionHardwareDisclosureV1, type MissionInteractionModeV1, type MissionInteractionRequirementV1, type MissionPhysicalSafeguardsV1, type MissionReadinessCheckV1, type MissionRewardBindingV1, type MissionSideAdventureV1, type MissionStageCardV1, type MissionStageKindV1, type MissionV1, type ModuleAgentDefinitionV1, type ModuleAgentFeedbackV1, type ModuleAgentRoleV1, type ModuleCategoryV1, type ModuleEntitlementV1, type ModulePricingV1, type ModuleReferencePriceV1, OBSTACLE_EXPLORER_MISSION_ONE_AUTHORING_V1, PADDLE_PULSE_EXTERNAL_CONTENT_V1, PADDLE_PULSE_MISSION_ONE_AUTHORING_V1, PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1, type PublishedStaticProjectSnapshotV1, RAINBOW_RESCUE_ROVER_MISSION_ONE_AUTHORING_V1, RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1, ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V1, ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V2, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, ROBOT_MISSION_CONTROL_MISSION_ONE_AUTHORING_V1, type RobotMissionControlSafeRenderV1, SERVO_CREATURE_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, STATIC_PROJECT_APPROVAL_STATEMENT_VERSION_V1, STATIC_PROJECT_DEFAULT_LIFETIME_DAYS_V1, STATIC_PROJECT_MAX_SOURCE_CHARACTERS_V1, STATIC_PROJECT_PUBLISHING_CONTRACT_VERSION_V1, STATIC_PROJECT_SAFETY_CHECK_IDS_V1, STATIC_PROJECT_SCANNER_VERSION_V1, type ScoreBandV1, type StaticProjectContractIssueV1, type StaticProjectGuardianApprovalV1, type StaticProjectModuleSlugV1, type StaticProjectPublicationV1, type StaticProjectSafeRenderV1, type StaticProjectSafetyCheckIdV1, type StaticProjectSafetyCheckV1, type StaticProjectSafetyScanV1, type StaticProjectSnapshotV1, VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1, VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1, VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1, type VoiceHelpAvailabilityReasonV1, type VoiceHelpAvailabilityV1, assertValidCanonicalSpokenHelpDescriptor, assertValidContextualHelpIdentifier, assertValidContextualVoiceQuestionMetadata, assertValidContextualVoiceQuestionResult, assertValidGuardianVoiceConsent, assertValidLearningPath, assertValidMissionAuthoringBundle, assertValidStaticProjectGuardianApproval, assertValidStaticProjectPublication, assertValidStaticProjectSnapshot, assertValidVoiceHelpAvailability, calculateAssessment, isExternalLearningContentReferenceV1, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle, validateStaticProjectGuardianApproval, validateStaticProjectPublication, validateStaticProjectSnapshot };
|
package/dist/index.d.ts
CHANGED
|
@@ -142,6 +142,20 @@ interface BadgeDefinitionV1 {
|
|
|
142
142
|
tradeable: false;
|
|
143
143
|
tokenConvertible: false;
|
|
144
144
|
}
|
|
145
|
+
/** Immutable package export selected by the catalog without importing it. */
|
|
146
|
+
declare const EXTERNAL_LEARNING_CONTENT_REFERENCE_VERSION_V1: "1";
|
|
147
|
+
interface ExternalLearningContentReferenceV1 {
|
|
148
|
+
/** Exact public package name; ranges and aliases are not permitted. */
|
|
149
|
+
packageName: string;
|
|
150
|
+
/** Exact semantic version without a range operator. */
|
|
151
|
+
packageVersion: string;
|
|
152
|
+
/** Named ESM/CJS export containing the immutable content manifest. */
|
|
153
|
+
exportName: string;
|
|
154
|
+
/** Exact schema version declared by the referenced exported manifest. */
|
|
155
|
+
schemaVersion: string;
|
|
156
|
+
/** Lower-case SHA-256 of the canonical exported manifest JSON. */
|
|
157
|
+
sha256: string;
|
|
158
|
+
}
|
|
145
159
|
/** One immutable, independently sellable module version. */
|
|
146
160
|
interface LearningModuleVersionV1 {
|
|
147
161
|
id: string;
|
|
@@ -163,6 +177,8 @@ interface LearningModuleVersionV1 {
|
|
|
163
177
|
assessment: AssessmentRubricV1;
|
|
164
178
|
agents: ModuleAgentDefinitionV1[];
|
|
165
179
|
badges: BadgeDefinitionV1[];
|
|
180
|
+
/** Optional separately released content implementation pinned by digest. */
|
|
181
|
+
externalContent?: ExternalLearningContentReferenceV1;
|
|
166
182
|
}
|
|
167
183
|
/** A versioned path is a recommendation and never a paid prerequisite chain. */
|
|
168
184
|
interface LearningPathVersionV1 {
|
|
@@ -389,7 +405,7 @@ interface MissionAuthoringValidationIssueV1 {
|
|
|
389
405
|
path: string;
|
|
390
406
|
}
|
|
391
407
|
interface LearningValidationIssueV1 {
|
|
392
|
-
code: "duplicate-module-id" | "duplicate-module-slug" | "module-not-self-contained" | "paid-prerequisite" | "missing-materials" | "facilitator-material-leak" | "learner-material-leak" | "invalid-token-subunits" | "invalid-reference-price" | "rubric-total" | "rubric-dimension-total" | "duplicate-criterion-id" | "missing-mandatory-safety" | "missing-hardware-items" | "invalid-agent-authority" | "missing-missions";
|
|
408
|
+
code: "duplicate-module-id" | "duplicate-module-slug" | "module-not-self-contained" | "paid-prerequisite" | "missing-materials" | "facilitator-material-leak" | "learner-material-leak" | "invalid-token-subunits" | "invalid-reference-price" | "rubric-total" | "rubric-dimension-total" | "duplicate-criterion-id" | "missing-mandatory-safety" | "missing-hardware-items" | "invalid-agent-authority" | "missing-missions" | "invalid-external-content-reference";
|
|
393
409
|
message: string;
|
|
394
410
|
moduleId?: string;
|
|
395
411
|
path: string;
|
|
@@ -426,6 +442,42 @@ declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_V1: LearningPathVersionV1;
|
|
|
426
442
|
* without altering previously published records.
|
|
427
443
|
*/
|
|
428
444
|
declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1: LearningPathVersionV1;
|
|
445
|
+
/** Digest-pinned content package for the independently released 54-stage course. */
|
|
446
|
+
declare const ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V1: Readonly<{
|
|
447
|
+
packageName: "@plasius/learning-road-hopper-rally";
|
|
448
|
+
packageVersion: "1.0.0";
|
|
449
|
+
exportName: "ROAD_HOPPER_RALLY_COURSE_V2";
|
|
450
|
+
schemaVersion: "2";
|
|
451
|
+
sha256: "1a20741beba028004e0be527d05aae2b2881082d3b578e0d62308a59bf1323f0";
|
|
452
|
+
}>;
|
|
453
|
+
/** Digest-pinned evidence-led successor; the immutable v2 reference remains available. */
|
|
454
|
+
declare const ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V2: Readonly<{
|
|
455
|
+
packageName: "@plasius/learning-road-hopper-rally";
|
|
456
|
+
packageVersion: "1.1.0";
|
|
457
|
+
exportName: "ROAD_HOPPER_RALLY_COURSE_V3";
|
|
458
|
+
schemaVersion: "3";
|
|
459
|
+
sha256: "f73b90f5f0e483b96724f978f2977435a5e6a1333f5f45fd0fc803b55ad21187";
|
|
460
|
+
}>;
|
|
461
|
+
/** Road Hopper Rally 2.0 catalog record; course data stays in the referenced package. */
|
|
462
|
+
declare const JUNIOR_CODER_ROAD_HOPPER_RALLY_V2: LearningModuleVersionV1;
|
|
463
|
+
/** Evidence-led Road Hopper 2.1 record; the executable course remains external. */
|
|
464
|
+
declare const JUNIOR_CODER_ROAD_HOPPER_RALLY_V2_1: LearningModuleVersionV1;
|
|
465
|
+
/** Mixed-version successor: Road Hopper 2.0 plus every other immutable 1.1 module. */
|
|
466
|
+
declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_2: LearningPathVersionV1;
|
|
467
|
+
/** Digest-pinned Paddle Pulse 2.0 reference-module content. */
|
|
468
|
+
declare const PADDLE_PULSE_EXTERNAL_CONTENT_V1: Readonly<{
|
|
469
|
+
packageName: "@plasius/learning-paddle-pulse";
|
|
470
|
+
packageVersion: "0.1.0";
|
|
471
|
+
exportName: "PADDLE_PULSE_MODULE_V2";
|
|
472
|
+
schemaVersion: "2";
|
|
473
|
+
sha256: "19f3666bdb523a3faf069341b0bc748996b3db282f89171e3c9f0a373a8c8f7e";
|
|
474
|
+
}>;
|
|
475
|
+
/** Paddle Pulse 2.0 catalog record; executable content stays in its package. */
|
|
476
|
+
declare const JUNIOR_CODER_PADDLE_PULSE_V2: LearningModuleVersionV1;
|
|
477
|
+
/** Mixed-version successor adding Paddle Pulse 2.0 without mutating v1.1. */
|
|
478
|
+
declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3: LearningPathVersionV1;
|
|
479
|
+
/** Mixed-version successor adding evidence-led Road Hopper without mutating v1.3. */
|
|
480
|
+
declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_4: LearningPathVersionV1;
|
|
429
481
|
/** Current pilot catalog for server adapters that intentionally follow releases. */
|
|
430
482
|
declare const JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT: LearningPathVersionV1;
|
|
431
483
|
|
|
@@ -728,9 +780,11 @@ declare const ROBOT_MISSION_CONTROL_MISSION_ONE_AUTHORING_V1: MissionAuthoringBu
|
|
|
728
780
|
declare const ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
|
|
729
781
|
declare const ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
|
|
730
782
|
|
|
783
|
+
/** Runtime guard for digest-pinned external learning content references. */
|
|
784
|
+
declare function isExternalLearningContentReferenceV1(value: unknown): value is ExternalLearningContentReferenceV1;
|
|
731
785
|
/** Return every catalog issue without throwing, suitable for authoring tools. */
|
|
732
786
|
declare function validateLearningPath(path: LearningPathVersionV1): LearningValidationIssueV1[];
|
|
733
787
|
/** Fail fast when a path is not safe to publish or consume. */
|
|
734
788
|
declare function assertValidLearningPath(path: LearningPathVersionV1): void;
|
|
735
789
|
|
|
736
|
-
export { ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1, type AdventureMissionPlannerSafeRenderV1, type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, CONTEXTUAL_HELP_CONTRACT_VERSION_V1, CONTEXTUAL_HELP_KINDS_V1, CONTEXTUAL_VOICE_INTENTS_V1, CONTEXTUAL_VOICE_SUGGESTED_ACTIONS_V1, CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1, type CanonicalSpokenHelpDescriptorV1, type CommercialStateV1, type ContextualHelpIdentifierV1, type ContextualHelpKindV1, type ContextualVoiceAnswerV1, type ContextualVoiceIntentV1, type ContextualVoiceQuestionMetadataV1, type ContextualVoiceQuestionResultV1, type ContextualVoiceSuggestedActionV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, type CreatureCareDashboardSafeRenderV1, DANCE_ROVER_MISSION_ONE_AUTHORING_V1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, type GuardianVoiceConsentStateV1, type GuardianVoiceConsentV1, type GuardianVoiceProcessingRouteV1, type HardwareItemV1, type HardwareModeV1, type HardwareRequirementManifestV1, type HardwareVerificationStatusV1, JUNIOR_CODER_MISSION_STAGE_ORDER_V1, JUNIOR_CODER_MODULE_PRICE_V1_1, JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1, type LearnerMissionAuthoringV1, type LearningGoalV1, type LearningModuleVersionV1, type LearningPathVersionV1, type LearningValidationIssueV1, METEOR_SHIELD_MISSION_ONE_AUTHORING_V1, MISSION_AUTHORING_CONTRACT_VERSION_V1, type MissionAccessibilityAlternativeV1, type MissionArtifactKindV1, type MissionArtifactReferenceV1, type MissionAuthoringBundleV1, type MissionAuthoringGoalV1, type MissionAuthoringValidationIssueV1, type MissionBoundedSuggestionV1, type MissionEvidenceKindV1, type MissionEvidenceRequirementV1, type MissionEvidenceRetentionV1, type MissionFunctionParameterV1, type MissionFunctionReferenceV1, type MissionHardwareAcquisitionScopeV1, type MissionHardwareComponentDisclosureV1, type MissionHardwareDisclosureV1, type MissionInteractionModeV1, type MissionInteractionRequirementV1, type MissionPhysicalSafeguardsV1, type MissionReadinessCheckV1, type MissionRewardBindingV1, type MissionSideAdventureV1, type MissionStageCardV1, type MissionStageKindV1, type MissionV1, type ModuleAgentDefinitionV1, type ModuleAgentFeedbackV1, type ModuleAgentRoleV1, type ModuleCategoryV1, type ModuleEntitlementV1, type ModulePricingV1, type ModuleReferencePriceV1, OBSTACLE_EXPLORER_MISSION_ONE_AUTHORING_V1, PADDLE_PULSE_MISSION_ONE_AUTHORING_V1, PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1, type PublishedStaticProjectSnapshotV1, RAINBOW_RESCUE_ROVER_MISSION_ONE_AUTHORING_V1, RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, ROBOT_MISSION_CONTROL_MISSION_ONE_AUTHORING_V1, type RobotMissionControlSafeRenderV1, SERVO_CREATURE_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, STATIC_PROJECT_APPROVAL_STATEMENT_VERSION_V1, STATIC_PROJECT_DEFAULT_LIFETIME_DAYS_V1, STATIC_PROJECT_MAX_SOURCE_CHARACTERS_V1, STATIC_PROJECT_PUBLISHING_CONTRACT_VERSION_V1, STATIC_PROJECT_SAFETY_CHECK_IDS_V1, STATIC_PROJECT_SCANNER_VERSION_V1, type ScoreBandV1, type StaticProjectContractIssueV1, type StaticProjectGuardianApprovalV1, type StaticProjectModuleSlugV1, type StaticProjectPublicationV1, type StaticProjectSafeRenderV1, type StaticProjectSafetyCheckIdV1, type StaticProjectSafetyCheckV1, type StaticProjectSafetyScanV1, type StaticProjectSnapshotV1, VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1, VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1, VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1, type VoiceHelpAvailabilityReasonV1, type VoiceHelpAvailabilityV1, assertValidCanonicalSpokenHelpDescriptor, assertValidContextualHelpIdentifier, assertValidContextualVoiceQuestionMetadata, assertValidContextualVoiceQuestionResult, assertValidGuardianVoiceConsent, assertValidLearningPath, assertValidMissionAuthoringBundle, assertValidStaticProjectGuardianApproval, assertValidStaticProjectPublication, assertValidStaticProjectSnapshot, assertValidVoiceHelpAvailability, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle, validateStaticProjectGuardianApproval, validateStaticProjectPublication, validateStaticProjectSnapshot };
|
|
790
|
+
export { ADVENTURE_MISSION_PLANNER_MISSION_ONE_AUTHORING_V1, type AdventureMissionPlannerSafeRenderV1, type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, CONTEXTUAL_HELP_CONTRACT_VERSION_V1, CONTEXTUAL_HELP_KINDS_V1, CONTEXTUAL_VOICE_INTENTS_V1, CONTEXTUAL_VOICE_SUGGESTED_ACTIONS_V1, CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1, type CanonicalSpokenHelpDescriptorV1, type CommercialStateV1, type ContextualHelpIdentifierV1, type ContextualHelpKindV1, type ContextualVoiceAnswerV1, type ContextualVoiceIntentV1, type ContextualVoiceQuestionMetadataV1, type ContextualVoiceQuestionResultV1, type ContextualVoiceSuggestedActionV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, type CreatureCareDashboardSafeRenderV1, DANCE_ROVER_MISSION_ONE_AUTHORING_V1, EXTERNAL_LEARNING_CONTENT_REFERENCE_VERSION_V1, type ExternalLearningContentReferenceV1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, type GuardianVoiceConsentStateV1, type GuardianVoiceConsentV1, type GuardianVoiceProcessingRouteV1, type HardwareItemV1, type HardwareModeV1, type HardwareRequirementManifestV1, type HardwareVerificationStatusV1, JUNIOR_CODER_MISSION_STAGE_ORDER_V1, JUNIOR_CODER_MODULE_PRICE_V1_1, JUNIOR_CODER_PADDLE_PULSE_V2, JUNIOR_CODER_ROAD_HOPPER_RALLY_V2, JUNIOR_CODER_ROAD_HOPPER_RALLY_V2_1, JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_2, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3, JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_4, type LearnerMissionAuthoringV1, type LearningGoalV1, type LearningModuleVersionV1, type LearningPathVersionV1, type LearningValidationIssueV1, METEOR_SHIELD_MISSION_ONE_AUTHORING_V1, MISSION_AUTHORING_CONTRACT_VERSION_V1, type MissionAccessibilityAlternativeV1, type MissionArtifactKindV1, type MissionArtifactReferenceV1, type MissionAuthoringBundleV1, type MissionAuthoringGoalV1, type MissionAuthoringValidationIssueV1, type MissionBoundedSuggestionV1, type MissionEvidenceKindV1, type MissionEvidenceRequirementV1, type MissionEvidenceRetentionV1, type MissionFunctionParameterV1, type MissionFunctionReferenceV1, type MissionHardwareAcquisitionScopeV1, type MissionHardwareComponentDisclosureV1, type MissionHardwareDisclosureV1, type MissionInteractionModeV1, type MissionInteractionRequirementV1, type MissionPhysicalSafeguardsV1, type MissionReadinessCheckV1, type MissionRewardBindingV1, type MissionSideAdventureV1, type MissionStageCardV1, type MissionStageKindV1, type MissionV1, type ModuleAgentDefinitionV1, type ModuleAgentFeedbackV1, type ModuleAgentRoleV1, type ModuleCategoryV1, type ModuleEntitlementV1, type ModulePricingV1, type ModuleReferencePriceV1, OBSTACLE_EXPLORER_MISSION_ONE_AUTHORING_V1, PADDLE_PULSE_EXTERNAL_CONTENT_V1, PADDLE_PULSE_MISSION_ONE_AUTHORING_V1, PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1, type PublishedStaticProjectSnapshotV1, RAINBOW_RESCUE_ROVER_MISSION_ONE_AUTHORING_V1, RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1, ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V1, ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V2, ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1, ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1, ROBOT_MISSION_CONTROL_MISSION_ONE_AUTHORING_V1, type RobotMissionControlSafeRenderV1, SERVO_CREATURE_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, STATIC_PROJECT_APPROVAL_STATEMENT_VERSION_V1, STATIC_PROJECT_DEFAULT_LIFETIME_DAYS_V1, STATIC_PROJECT_MAX_SOURCE_CHARACTERS_V1, STATIC_PROJECT_PUBLISHING_CONTRACT_VERSION_V1, STATIC_PROJECT_SAFETY_CHECK_IDS_V1, STATIC_PROJECT_SCANNER_VERSION_V1, type ScoreBandV1, type StaticProjectContractIssueV1, type StaticProjectGuardianApprovalV1, type StaticProjectModuleSlugV1, type StaticProjectPublicationV1, type StaticProjectSafeRenderV1, type StaticProjectSafetyCheckIdV1, type StaticProjectSafetyCheckV1, type StaticProjectSafetyScanV1, type StaticProjectSnapshotV1, VIBE_BUG_DETECTIVE_MISSION_ONE_AUTHORING_V1, VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1, VIBE_IDEA_STUDIO_MISSION_ONE_AUTHORING_V1, type VoiceHelpAvailabilityReasonV1, type VoiceHelpAvailabilityV1, assertValidCanonicalSpokenHelpDescriptor, assertValidContextualHelpIdentifier, assertValidContextualVoiceQuestionMetadata, assertValidContextualVoiceQuestionResult, assertValidGuardianVoiceConsent, assertValidLearningPath, assertValidMissionAuthoringBundle, assertValidStaticProjectGuardianApproval, assertValidStaticProjectPublication, assertValidStaticProjectSnapshot, assertValidVoiceHelpAvailability, calculateAssessment, isExternalLearningContentReferenceV1, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle, validateStaticProjectGuardianApproval, validateStaticProjectPublication, validateStaticProjectSnapshot };
|
package/dist/index.js
CHANGED
|
@@ -566,9 +566,285 @@ var JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1 = {
|
|
|
566
566
|
}
|
|
567
567
|
}))
|
|
568
568
|
};
|
|
569
|
-
var
|
|
569
|
+
var ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V1 = Object.freeze({
|
|
570
|
+
packageName: "@plasius/learning-road-hopper-rally",
|
|
571
|
+
packageVersion: "1.0.0",
|
|
572
|
+
exportName: "ROAD_HOPPER_RALLY_COURSE_V2",
|
|
573
|
+
schemaVersion: "2",
|
|
574
|
+
sha256: "1a20741beba028004e0be527d05aae2b2881082d3b578e0d62308a59bf1323f0"
|
|
575
|
+
});
|
|
576
|
+
var ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V2 = Object.freeze({
|
|
577
|
+
packageName: "@plasius/learning-road-hopper-rally",
|
|
578
|
+
packageVersion: "1.1.0",
|
|
579
|
+
exportName: "ROAD_HOPPER_RALLY_COURSE_V3",
|
|
580
|
+
schemaVersion: "3",
|
|
581
|
+
sha256: "f73b90f5f0e483b96724f978f2977435a5e6a1333f5f45fd0fc803b55ad21187"
|
|
582
|
+
});
|
|
583
|
+
var roadHopperV1_1 = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
584
|
+
(entry) => entry.id === "junior-coder.road-hopper-rally"
|
|
585
|
+
);
|
|
586
|
+
var ROAD_HOPPER_RALLY_V2_MISSIONS = [
|
|
587
|
+
{
|
|
588
|
+
id: "board",
|
|
589
|
+
title: "Build the Rally Board",
|
|
590
|
+
concepts: ["coordinate grids", "arrays", "entity state", "rendering"],
|
|
591
|
+
statement: "Create the road, median, river and five distinct home bays in board.js.",
|
|
592
|
+
sideAdventure: "Design an original high-contrast board palette without changing its mechanics."
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
id: "hopper",
|
|
596
|
+
title: "Move the Hopper",
|
|
597
|
+
concepts: ["events", "bounded movement", "keyboard input", "touch input", "respawning"],
|
|
598
|
+
statement: "Implement four-direction tile movement, bounds, equivalent inputs and respawning in hopper.js.",
|
|
599
|
+
sideAdventure: "Add an accessible movement status phrase for every successful hop."
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
id: "traffic",
|
|
603
|
+
title: "Create Rally Traffic",
|
|
604
|
+
concepts: ["spawning", "fixed-step updates", "wrapping", "collision detection", "difficulty"],
|
|
605
|
+
statement: "Implement five deterministic traffic lanes, collisions, lives and difficulty in traffic.js.",
|
|
606
|
+
sideAdventure: "Invent an original vehicle type while preserving the entity and collision limits."
|
|
607
|
+
},
|
|
608
|
+
{
|
|
609
|
+
id: "river",
|
|
610
|
+
title: "Cross the Moving River",
|
|
611
|
+
concepts: ["moving platforms", "carrying", "hazards", "state machines", "off-screen bounds"],
|
|
612
|
+
statement: "Implement logs, carrying, water deaths, diving platforms and edge hazards in river.js.",
|
|
613
|
+
sideAdventure: "Create an original visual warning for a platform that is about to dive."
|
|
614
|
+
},
|
|
615
|
+
{
|
|
616
|
+
id: "rules",
|
|
617
|
+
title: "Add Rally Rules",
|
|
618
|
+
concepts: ["timers", "lives", "scoring", "bonuses", "levels", "game over"],
|
|
619
|
+
statement: "Implement homes, occupied and blocked bays, timer, scoring, bonuses and level progression in rules.js.",
|
|
620
|
+
sideAdventure: "Tune a practice-speed preset that keeps every rule deterministic."
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
id: "game",
|
|
624
|
+
title: "Complete Road Hopper Rally",
|
|
625
|
+
concepts: ["system assembly", "pause and restart", "alternating players", "audio", "accessibility", "testing"],
|
|
626
|
+
statement: "Assemble the systems, accessibility modes and alternating-player finale in game.js, then pass the protected challenge.",
|
|
627
|
+
sideAdventure: "Polish the finished game with original captions, visual cues and reduced-motion feedback."
|
|
628
|
+
}
|
|
629
|
+
];
|
|
630
|
+
var JUNIOR_CODER_ROAD_HOPPER_RALLY_V2 = {
|
|
631
|
+
...roadHopperV1_1,
|
|
632
|
+
version: "2.0.0",
|
|
633
|
+
contentRevision: "2026-08-11.1",
|
|
634
|
+
summary: "Recreate the systems behind a classic road-and-river crossing game using original Road Hopper Rally code, art, audio and presentation.",
|
|
635
|
+
estimatedMinutes: 450,
|
|
636
|
+
tools: [
|
|
637
|
+
"JavaScript",
|
|
638
|
+
"QuickJS sandbox",
|
|
639
|
+
"Deterministic 30 Hz engine",
|
|
640
|
+
"Road Hopper renderer"
|
|
641
|
+
],
|
|
642
|
+
concepts: [
|
|
643
|
+
"coordinates",
|
|
644
|
+
"arrays and entity state",
|
|
645
|
+
"events and input",
|
|
646
|
+
"fixed-step update and render",
|
|
647
|
+
"spawning and movement",
|
|
648
|
+
"collision detection",
|
|
649
|
+
"state machines",
|
|
650
|
+
"timers, lives and scoring",
|
|
651
|
+
"difficulty progression",
|
|
652
|
+
"audio integration",
|
|
653
|
+
"debugging",
|
|
654
|
+
"deterministic testing"
|
|
655
|
+
],
|
|
656
|
+
missions: ROAD_HOPPER_RALLY_V2_MISSIONS.map((missionDefinition, index) => ({
|
|
657
|
+
id: `road-hopper-rally-mission-${index + 1}-${missionDefinition.id}`,
|
|
658
|
+
title: missionDefinition.title,
|
|
659
|
+
estimatedMinutes: 75,
|
|
660
|
+
concepts: [...missionDefinition.concepts],
|
|
661
|
+
goals: [
|
|
662
|
+
{
|
|
663
|
+
id: `road-hopper-rally-v2-${missionDefinition.id}`,
|
|
664
|
+
statement: missionDefinition.statement,
|
|
665
|
+
evidence: "assessment"
|
|
666
|
+
}
|
|
667
|
+
],
|
|
668
|
+
sideAdventure: missionDefinition.sideAdventure
|
|
669
|
+
})),
|
|
670
|
+
assessment: {
|
|
671
|
+
version: "2.0.0",
|
|
672
|
+
completionScore: 80,
|
|
673
|
+
criteria: [
|
|
674
|
+
{ id: "road-hopper-v2-structure", label: "All six bounded JavaScript files compile and assemble.", dimension: "structure", points: 20, mandatory: true, visibility: "visible" },
|
|
675
|
+
{ id: "road-hopper-v2-road", label: "Board, input and traffic behaviours pass deterministic scenarios.", dimension: "behaviour", points: 15, mandatory: true, visibility: "visible" },
|
|
676
|
+
{ id: "road-hopper-v2-river", label: "River platforms, carrying and hazards pass deterministic scenarios.", dimension: "behaviour", points: 15, mandatory: true, visibility: "visible" },
|
|
677
|
+
{ id: "road-hopper-v2-rules", label: "Homes, timer, lives, scoring, bonuses and levels behave correctly.", dimension: "behaviour", points: 20, mandatory: true, visibility: "visible" },
|
|
678
|
+
{ id: "road-hopper-v2-final", label: "The complete game passes the server-only protected final challenge.", dimension: "resilience", points: 20, mandatory: true, visibility: "protected" },
|
|
679
|
+
{ id: "road-hopper-v2-safety", label: "The project stays within the sandbox, resource and privacy boundaries.", dimension: "safety", points: 10, mandatory: true, visibility: "visible" }
|
|
680
|
+
]
|
|
681
|
+
},
|
|
682
|
+
badges: [
|
|
683
|
+
{
|
|
684
|
+
id: "road-hopper-rally-v2-complete",
|
|
685
|
+
title: "Road Hopper Rally Champion",
|
|
686
|
+
evidence: "module-score",
|
|
687
|
+
tradeable: false,
|
|
688
|
+
tokenConvertible: false
|
|
689
|
+
}
|
|
690
|
+
],
|
|
691
|
+
externalContent: ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V1
|
|
692
|
+
};
|
|
693
|
+
var ROAD_HOPPER_RALLY_V2_1_MISSION_TITLES = [
|
|
694
|
+
"Map the Rally Route",
|
|
695
|
+
"Move the Hopper",
|
|
696
|
+
"Build the Traffic Rally",
|
|
697
|
+
"Ride the Rescue River",
|
|
698
|
+
"Score the Rescue",
|
|
699
|
+
"Road Hopper Rally Challenge"
|
|
700
|
+
];
|
|
701
|
+
var JUNIOR_CODER_ROAD_HOPPER_RALLY_V2_1 = {
|
|
702
|
+
...JUNIOR_CODER_ROAD_HOPPER_RALLY_V2,
|
|
703
|
+
version: "2.1.0",
|
|
704
|
+
contentRevision: "2026-08-24.1",
|
|
705
|
+
summary: "Build Road Hopper Rally through 54 evidence-led activities: predict, edit, run, inspect, repair, explain and prove each deterministic game system.",
|
|
706
|
+
missions: JUNIOR_CODER_ROAD_HOPPER_RALLY_V2.missions.map((mission2, index) => ({
|
|
707
|
+
...mission2,
|
|
708
|
+
title: ROAD_HOPPER_RALLY_V2_1_MISSION_TITLES[index]
|
|
709
|
+
})),
|
|
710
|
+
assessment: {
|
|
711
|
+
...JUNIOR_CODER_ROAD_HOPPER_RALLY_V2.assessment,
|
|
712
|
+
version: "2.1.0"
|
|
713
|
+
},
|
|
714
|
+
externalContent: ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V2
|
|
715
|
+
};
|
|
716
|
+
var JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_2 = {
|
|
717
|
+
...JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1,
|
|
718
|
+
version: "1.2.0",
|
|
719
|
+
modules: JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.map((entry) => entry.id === JUNIOR_CODER_ROAD_HOPPER_RALLY_V2.id ? JUNIOR_CODER_ROAD_HOPPER_RALLY_V2 : entry)
|
|
720
|
+
};
|
|
721
|
+
var PADDLE_PULSE_EXTERNAL_CONTENT_V1 = Object.freeze({
|
|
722
|
+
packageName: "@plasius/learning-paddle-pulse",
|
|
723
|
+
packageVersion: "0.1.0",
|
|
724
|
+
exportName: "PADDLE_PULSE_MODULE_V2",
|
|
725
|
+
schemaVersion: "2",
|
|
726
|
+
sha256: "19f3666bdb523a3faf069341b0bc748996b3db282f89171e3c9f0a373a8c8f7e"
|
|
727
|
+
});
|
|
728
|
+
var paddlePulseV1_1 = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1.modules.find(
|
|
729
|
+
(entry) => entry.id === "junior-coder.paddle-pulse"
|
|
730
|
+
);
|
|
731
|
+
var PADDLE_PULSE_V2_MISSIONS = [
|
|
732
|
+
{
|
|
733
|
+
id: "court-coordinates",
|
|
734
|
+
title: "Court & Coordinates",
|
|
735
|
+
concepts: ["coordinates", "canvas primitives", "game loops", "bounds"],
|
|
736
|
+
statement: "Build a responsive 640 \xD7 480 logical court with a bounded paddle and ball.",
|
|
737
|
+
sideAdventure: "Create an original high-contrast court palette without changing its geometry."
|
|
738
|
+
},
|
|
739
|
+
{
|
|
740
|
+
id: "paddle-controls",
|
|
741
|
+
title: "Paddle Controls",
|
|
742
|
+
concepts: ["input state", "Pointer Events", "keyboard input", "clamping"],
|
|
743
|
+
statement: "Implement equivalent Arrow/A/D and direct horizontal pointer-drag controls.",
|
|
744
|
+
sideAdventure: "Add a semantic movement trace that does not rely on animation."
|
|
745
|
+
},
|
|
746
|
+
{
|
|
747
|
+
id: "ball-motion",
|
|
748
|
+
title: "Ball Motion & Bounces",
|
|
749
|
+
concepts: ["velocity", "fixed timesteps", "reflection", "contact normals", "paddle angles"],
|
|
750
|
+
statement: "Implement deterministic ball motion plus controlled wall and paddle reflections.",
|
|
751
|
+
sideAdventure: "Design a reduced-motion trajectory inspector for one rally."
|
|
752
|
+
},
|
|
753
|
+
{
|
|
754
|
+
id: "bricks-collisions",
|
|
755
|
+
title: "Bricks & Collisions",
|
|
756
|
+
concepts: ["arrays", "loops", "brick grids", "AABB collision", "resolution"],
|
|
757
|
+
statement: "Create an original brick grid whose bricks score once and disappear on impact.",
|
|
758
|
+
sideAdventure: "Invent a new visual brick pattern using the same bounded collision rules."
|
|
759
|
+
},
|
|
760
|
+
{
|
|
761
|
+
id: "score-lives-states",
|
|
762
|
+
title: "Score, Lives & States",
|
|
763
|
+
concepts: ["state machines", "invariants", "scoring", "lives", "HUD state"],
|
|
764
|
+
statement: "Implement serve, pause, life loss, level clear, game over, score and HUD states.",
|
|
765
|
+
sideAdventure: "Add a printable state-transition table for a facilitator or screen-reader user."
|
|
766
|
+
},
|
|
767
|
+
{
|
|
768
|
+
id: "levels-final-game",
|
|
769
|
+
title: "Levels, Sound & Final Game",
|
|
770
|
+
concepts: ["level data", "difficulty", "responsive rendering", "accessible audio", "testing"],
|
|
771
|
+
statement: "Assemble multiple original levels, optional generated cues and the integrated final game.",
|
|
772
|
+
sideAdventure: "After completion, add an optional original power-up without changing core assessment."
|
|
773
|
+
}
|
|
774
|
+
];
|
|
775
|
+
var JUNIOR_CODER_PADDLE_PULSE_V2 = {
|
|
776
|
+
...paddlePulseV1_1,
|
|
777
|
+
version: "2.0.0",
|
|
778
|
+
contentRevision: "2026-08-11.1",
|
|
779
|
+
summary: "Build an original Plasius brick-breaker while learning rendering, equivalent input, deterministic physics, collisions, score, lives, states, levels, accessible sound and testing.",
|
|
780
|
+
estimatedMinutes: 360,
|
|
781
|
+
tools: [
|
|
782
|
+
"JavaScript",
|
|
783
|
+
"QuickJS sandbox",
|
|
784
|
+
"Deterministic 60 Hz engine",
|
|
785
|
+
"Responsive Paddle Pulse renderer"
|
|
786
|
+
],
|
|
787
|
+
concepts: [
|
|
788
|
+
"coordinates and rendering",
|
|
789
|
+
"game loops and fixed timesteps",
|
|
790
|
+
"keyboard and pointer input",
|
|
791
|
+
"velocity and reflection",
|
|
792
|
+
"collision detection and resolution",
|
|
793
|
+
"arrays and brick grids",
|
|
794
|
+
"scoring, lives and state machines",
|
|
795
|
+
"level data and difficulty",
|
|
796
|
+
"accessible generated audio",
|
|
797
|
+
"debugging and deterministic testing"
|
|
798
|
+
],
|
|
799
|
+
missions: PADDLE_PULSE_V2_MISSIONS.map((missionDefinition, index) => ({
|
|
800
|
+
id: `paddle-pulse-mission-${index + 1}-${missionDefinition.id}`,
|
|
801
|
+
title: missionDefinition.title,
|
|
802
|
+
estimatedMinutes: 60,
|
|
803
|
+
concepts: [...missionDefinition.concepts],
|
|
804
|
+
goals: [{
|
|
805
|
+
id: `paddle-pulse-v2-${missionDefinition.id}`,
|
|
806
|
+
statement: missionDefinition.statement,
|
|
807
|
+
evidence: "assessment"
|
|
808
|
+
}],
|
|
809
|
+
sideAdventure: missionDefinition.sideAdventure
|
|
810
|
+
})),
|
|
811
|
+
assessment: {
|
|
812
|
+
version: "2.0.0",
|
|
813
|
+
completionScore: 80,
|
|
814
|
+
criteria: [
|
|
815
|
+
{ id: "paddle-pulse-v2-court", label: "The logical court, paddle and initial scene are finite, responsive and bounded.", dimension: "structure", points: 20, mandatory: false, visibility: "visible" },
|
|
816
|
+
{ id: "paddle-pulse-v2-controls", label: "Keyboard and pointer paths produce equivalent clamped paddle input.", dimension: "behaviour", points: 15, mandatory: false, visibility: "visible" },
|
|
817
|
+
{ id: "paddle-pulse-v2-motion", label: "Ball motion and wall/paddle reflections pass deterministic trajectories.", dimension: "behaviour", points: 15, mandatory: false, visibility: "visible" },
|
|
818
|
+
{ id: "paddle-pulse-v2-bricks", label: "Brick face, corner and adjacent impacts resolve without double-scoring.", dimension: "behaviour", points: 20, mandatory: false, visibility: "visible" },
|
|
819
|
+
{ id: "paddle-pulse-v2-states", label: "Score, lives, serve, pause, level-clear and game-over transitions preserve invariants.", dimension: "resilience", points: 10, mandatory: false, visibility: "visible" },
|
|
820
|
+
{ id: "paddle-pulse-v2-final", label: "Multiple original levels and the integrated game pass protected deterministic scenarios.", dimension: "resilience", points: 10, mandatory: false, visibility: "protected" },
|
|
821
|
+
{ id: "paddle-pulse-v2-safety", label: "Source, commands, runtime resources and assessment remain inside sandbox limits.", dimension: "safety", points: 10, mandatory: true, visibility: "visible" }
|
|
822
|
+
]
|
|
823
|
+
},
|
|
824
|
+
badges: [
|
|
825
|
+
{ id: "paddle-pulse-v2-court-builder", title: "Court Builder", evidence: "mission-score", tradeable: false, tokenConvertible: false },
|
|
826
|
+
{ id: "paddle-pulse-v2-paddle-pilot", title: "Paddle Pilot", evidence: "mission-score", tradeable: false, tokenConvertible: false },
|
|
827
|
+
{ id: "paddle-pulse-v2-rally-master", title: "Rally Master", evidence: "mission-score", tradeable: false, tokenConvertible: false },
|
|
828
|
+
{ id: "paddle-pulse-v2-brick-breaker", title: "Brick Breaker", evidence: "mission-score", tradeable: false, tokenConvertible: false },
|
|
829
|
+
{ id: "paddle-pulse-v2-game-keeper", title: "Game Keeper", evidence: "mission-score", tradeable: false, tokenConvertible: false },
|
|
830
|
+
{ id: "paddle-pulse-v2-complete", title: "Paddle Pulse Champion", evidence: "module-score", tradeable: false, tokenConvertible: false }
|
|
831
|
+
],
|
|
832
|
+
externalContent: PADDLE_PULSE_EXTERNAL_CONTENT_V1
|
|
833
|
+
};
|
|
834
|
+
var JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3 = {
|
|
835
|
+
...JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_2,
|
|
836
|
+
version: "1.3.0",
|
|
837
|
+
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)
|
|
838
|
+
};
|
|
839
|
+
var JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_4 = {
|
|
840
|
+
...JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3,
|
|
841
|
+
version: "1.4.0",
|
|
842
|
+
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)
|
|
843
|
+
};
|
|
844
|
+
var JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT = JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_4;
|
|
570
845
|
|
|
571
846
|
// src/contracts.ts
|
|
847
|
+
var EXTERNAL_LEARNING_CONTENT_REFERENCE_VERSION_V1 = "1";
|
|
572
848
|
var MISSION_AUTHORING_CONTRACT_VERSION_V1 = "1.0.0";
|
|
573
849
|
|
|
574
850
|
// src/contextual-help.ts
|
|
@@ -6760,6 +7036,16 @@ var ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1 = {
|
|
|
6760
7036
|
|
|
6761
7037
|
// src/validation.ts
|
|
6762
7038
|
var CANONICAL_TOKEN_SUBUNITS = /^(0|[1-9][0-9]*)$/u;
|
|
7039
|
+
var EXACT_PACKAGE_NAME = /^@plasius\/[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/u;
|
|
7040
|
+
var EXACT_SEMVER = /^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$/u;
|
|
7041
|
+
var EXPORT_NAME = /^[A-Za-z_$][A-Za-z0-9_$]*$/u;
|
|
7042
|
+
var CONTENT_SCHEMA_VERSION = /^(0|[1-9][0-9]*)$/u;
|
|
7043
|
+
var SHA256 = /^[a-f0-9]{64}$/u;
|
|
7044
|
+
function isExternalLearningContentReferenceV1(value) {
|
|
7045
|
+
if (typeof value !== "object" || value === null) return false;
|
|
7046
|
+
const candidate = value;
|
|
7047
|
+
return Object.keys(value).length === 5 && typeof candidate.packageName === "string" && EXACT_PACKAGE_NAME.test(candidate.packageName) && typeof candidate.packageVersion === "string" && EXACT_SEMVER.test(candidate.packageVersion) && typeof candidate.exportName === "string" && EXPORT_NAME.test(candidate.exportName) && typeof candidate.schemaVersion === "string" && CONTENT_SCHEMA_VERSION.test(candidate.schemaVersion) && typeof candidate.sha256 === "string" && SHA256.test(candidate.sha256);
|
|
7048
|
+
}
|
|
6763
7049
|
function issue(code, message, path, moduleId) {
|
|
6764
7050
|
return { code, message, path, ...moduleId ? { moduleId } : {} };
|
|
6765
7051
|
}
|
|
@@ -6874,6 +7160,17 @@ function validateModule(module2, moduleIndex) {
|
|
|
6874
7160
|
)
|
|
6875
7161
|
);
|
|
6876
7162
|
}
|
|
7163
|
+
const externalContent = module2.externalContent;
|
|
7164
|
+
if (externalContent && !isExternalLearningContentReferenceV1(externalContent)) {
|
|
7165
|
+
issues.push(
|
|
7166
|
+
issue(
|
|
7167
|
+
"invalid-external-content-reference",
|
|
7168
|
+
"External content must use an exact @plasius package, stable semantic version, named export, schema version and lower-case SHA-256 digest.",
|
|
7169
|
+
`${base}.externalContent`,
|
|
7170
|
+
module2.id
|
|
7171
|
+
)
|
|
7172
|
+
);
|
|
7173
|
+
}
|
|
6877
7174
|
return issues;
|
|
6878
7175
|
}
|
|
6879
7176
|
function validateLearningPath(path) {
|
|
@@ -6923,18 +7220,28 @@ export {
|
|
|
6923
7220
|
CONTEXTUAL_VOICE_SUGGESTED_ACTIONS_V1,
|
|
6924
7221
|
CREATURE_CARE_DASHBOARD_MISSION_ONE_AUTHORING_V1,
|
|
6925
7222
|
DANCE_ROVER_MISSION_ONE_AUTHORING_V1,
|
|
7223
|
+
EXTERNAL_LEARNING_CONTENT_REFERENCE_VERSION_V1,
|
|
6926
7224
|
JUNIOR_CODER_MISSION_STAGE_ORDER_V1,
|
|
6927
7225
|
JUNIOR_CODER_MODULE_PRICE_V1_1,
|
|
7226
|
+
JUNIOR_CODER_PADDLE_PULSE_V2,
|
|
7227
|
+
JUNIOR_CODER_ROAD_HOPPER_RALLY_V2,
|
|
7228
|
+
JUNIOR_CODER_ROAD_HOPPER_RALLY_V2_1,
|
|
6928
7229
|
JUNIOR_CODER_ROBOT_RESCUE_PATH_CURRENT,
|
|
6929
7230
|
JUNIOR_CODER_ROBOT_RESCUE_PATH_V1,
|
|
6930
7231
|
JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_1,
|
|
7232
|
+
JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_2,
|
|
7233
|
+
JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_3,
|
|
7234
|
+
JUNIOR_CODER_ROBOT_RESCUE_PATH_V1_4,
|
|
6931
7235
|
METEOR_SHIELD_MISSION_ONE_AUTHORING_V1,
|
|
6932
7236
|
MISSION_AUTHORING_CONTRACT_VERSION_V1,
|
|
6933
7237
|
OBSTACLE_EXPLORER_MISSION_ONE_AUTHORING_V1,
|
|
7238
|
+
PADDLE_PULSE_EXTERNAL_CONTENT_V1,
|
|
6934
7239
|
PADDLE_PULSE_MISSION_ONE_AUTHORING_V1,
|
|
6935
7240
|
PIXEL_TRAIL_CHALLENGE_MISSION_ONE_AUTHORING_V1,
|
|
6936
7241
|
RAINBOW_RESCUE_ROVER_MISSION_ONE_AUTHORING_V1,
|
|
6937
7242
|
RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1,
|
|
7243
|
+
ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V1,
|
|
7244
|
+
ROAD_HOPPER_RALLY_EXTERNAL_CONTENT_V2,
|
|
6938
7245
|
ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1,
|
|
6939
7246
|
ROBOT_MAZE_DASH_MISSION_ONE_AUTHORING_V1,
|
|
6940
7247
|
ROBOT_MISSION_CONTROL_MISSION_ONE_AUTHORING_V1,
|
|
@@ -6962,6 +7269,7 @@ export {
|
|
|
6962
7269
|
assertValidStaticProjectSnapshot,
|
|
6963
7270
|
assertValidVoiceHelpAvailability,
|
|
6964
7271
|
calculateAssessment,
|
|
7272
|
+
isExternalLearningContentReferenceV1,
|
|
6965
7273
|
validateAssessmentRubric,
|
|
6966
7274
|
validateLearningPath,
|
|
6967
7275
|
validateMissionAuthoringBundle,
|