@plasius/learning 0.2.13 → 0.2.14

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/dist/index.d.cts CHANGED
@@ -296,6 +296,24 @@ interface MissionFunctionReferenceV1 {
296
296
  effect: string;
297
297
  example: string;
298
298
  }
299
+ /**
300
+ * One learner-safe change proposal. Vibe missions expose a diff for a single
301
+ * authored artifact and always leave the final accept/reject decision to the
302
+ * learner. Live AI is an optional adapter concern, never a completion input.
303
+ */
304
+ interface MissionBoundedSuggestionV1 {
305
+ id: string;
306
+ source: "authored-fallback";
307
+ intent: string;
308
+ constraints: string[];
309
+ permittedArtifactId: string;
310
+ originalSnippet: string;
311
+ replacementSnippet: string;
312
+ explanationPrompt: string;
313
+ aiOptional: false;
314
+ learnerApprovalRequired: true;
315
+ alternatives: ["accept", "reject"];
316
+ }
299
317
  /** The only mission projection safe to return to a learner. */
300
318
  interface LearnerMissionAuthoringV1 {
301
319
  estimatedMinutes: number;
@@ -309,6 +327,7 @@ interface LearnerMissionAuthoringV1 {
309
327
  sideAdventures: MissionSideAdventureV1[];
310
328
  rewardBindings: MissionRewardBindingV1[];
311
329
  functionReference?: MissionFunctionReferenceV1[];
330
+ boundedSuggestion?: MissionBoundedSuggestionV1;
312
331
  }
313
332
  /** Protected authoring data must never be projected through learner APIs. */
314
333
  interface FacilitatorMissionAuthoringV1 {
@@ -365,7 +384,7 @@ interface MissionAuthoringBundleV1 {
365
384
  hardware?: MissionHardwareDisclosureV1;
366
385
  }
367
386
  interface MissionAuthoringValidationIssueV1 {
368
- code: "bundle-version-mismatch" | "module-reference-mismatch" | "mission-reference-mismatch" | "invalid-duration" | "missing-stage" | "duplicate-stage" | "stage-order" | "missing-readiness-check" | "scored-readiness-check" | "missing-starter-artifact" | "learner-artifact-leak" | "facilitator-artifact-leak" | "unknown-artifact" | "duplicate-id" | "missing-visible-goal" | "missing-protected-goal" | "invalid-goal-projection" | "duplicate-goal-id" | "unknown-criterion" | "criterion-visibility-mismatch" | "rubric-total" | "rubric-dimension-total" | "duplicate-criterion-id" | "missing-mandatory-safety" | "missing-safety-evidence" | "ai-dependent-completion" | "inaccessible-interaction" | "unknown-accessibility-alternative" | "non-equivalent-accessibility-alternative" | "missing-evidence" | "unknown-evidence-goal" | "personal-data-evidence" | "missing-side-adventure" | "mandatory-side-adventure" | "invalid-reward" | "hardware-module-mismatch" | "hardware-requirements-version-mismatch" | "hardware-item-mismatch" | "hardware-verification-claim" | "unsafe-physical-export" | "invalid-hardware-reward" | "invalid-function-reference";
387
+ code: "bundle-version-mismatch" | "module-reference-mismatch" | "mission-reference-mismatch" | "invalid-duration" | "missing-stage" | "duplicate-stage" | "stage-order" | "missing-readiness-check" | "scored-readiness-check" | "missing-starter-artifact" | "learner-artifact-leak" | "facilitator-artifact-leak" | "unknown-artifact" | "duplicate-id" | "missing-visible-goal" | "missing-protected-goal" | "invalid-goal-projection" | "duplicate-goal-id" | "unknown-criterion" | "criterion-visibility-mismatch" | "rubric-total" | "rubric-dimension-total" | "duplicate-criterion-id" | "missing-mandatory-safety" | "missing-safety-evidence" | "ai-dependent-completion" | "inaccessible-interaction" | "unknown-accessibility-alternative" | "non-equivalent-accessibility-alternative" | "missing-evidence" | "unknown-evidence-goal" | "personal-data-evidence" | "missing-side-adventure" | "mandatory-side-adventure" | "invalid-reward" | "hardware-module-mismatch" | "hardware-requirements-version-mismatch" | "hardware-item-mismatch" | "hardware-verification-claim" | "unsafe-physical-export" | "invalid-hardware-reward" | "invalid-function-reference" | "invalid-bounded-suggestion";
369
388
  message: string;
370
389
  path: string;
371
390
  }
@@ -487,6 +506,8 @@ declare const RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1: MissionAuthoringBu
487
506
  * projectile answers.
488
507
  */
489
508
  declare const METEOR_SHIELD_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
509
+ /** Bounded first Vibe mission; no open prompt or provider is required. */
510
+ declare const VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
490
511
  /** Original first-mission exemplar; no protected content appears in learner data. */
491
512
  declare const ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
492
513
 
@@ -495,4 +516,4 @@ declare function validateLearningPath(path: LearningPathVersionV1): LearningVali
495
516
  /** Fail fast when a path is not safe to publish or consume. */
496
517
  declare function assertValidLearningPath(path: LearningPathVersionV1): void;
497
518
 
498
- export { type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, type CommercialStateV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, DANCE_ROVER_MISSION_ONE_AUTHORING_V1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, 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 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, SERVO_CREATURE_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, type ScoreBandV1, assertValidLearningPath, assertValidMissionAuthoringBundle, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle };
519
+ export { type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, type CommercialStateV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, DANCE_ROVER_MISSION_ONE_AUTHORING_V1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, 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, SERVO_CREATURE_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, type ScoreBandV1, VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1, assertValidLearningPath, assertValidMissionAuthoringBundle, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle };
package/dist/index.d.ts CHANGED
@@ -296,6 +296,24 @@ interface MissionFunctionReferenceV1 {
296
296
  effect: string;
297
297
  example: string;
298
298
  }
299
+ /**
300
+ * One learner-safe change proposal. Vibe missions expose a diff for a single
301
+ * authored artifact and always leave the final accept/reject decision to the
302
+ * learner. Live AI is an optional adapter concern, never a completion input.
303
+ */
304
+ interface MissionBoundedSuggestionV1 {
305
+ id: string;
306
+ source: "authored-fallback";
307
+ intent: string;
308
+ constraints: string[];
309
+ permittedArtifactId: string;
310
+ originalSnippet: string;
311
+ replacementSnippet: string;
312
+ explanationPrompt: string;
313
+ aiOptional: false;
314
+ learnerApprovalRequired: true;
315
+ alternatives: ["accept", "reject"];
316
+ }
299
317
  /** The only mission projection safe to return to a learner. */
300
318
  interface LearnerMissionAuthoringV1 {
301
319
  estimatedMinutes: number;
@@ -309,6 +327,7 @@ interface LearnerMissionAuthoringV1 {
309
327
  sideAdventures: MissionSideAdventureV1[];
310
328
  rewardBindings: MissionRewardBindingV1[];
311
329
  functionReference?: MissionFunctionReferenceV1[];
330
+ boundedSuggestion?: MissionBoundedSuggestionV1;
312
331
  }
313
332
  /** Protected authoring data must never be projected through learner APIs. */
314
333
  interface FacilitatorMissionAuthoringV1 {
@@ -365,7 +384,7 @@ interface MissionAuthoringBundleV1 {
365
384
  hardware?: MissionHardwareDisclosureV1;
366
385
  }
367
386
  interface MissionAuthoringValidationIssueV1 {
368
- code: "bundle-version-mismatch" | "module-reference-mismatch" | "mission-reference-mismatch" | "invalid-duration" | "missing-stage" | "duplicate-stage" | "stage-order" | "missing-readiness-check" | "scored-readiness-check" | "missing-starter-artifact" | "learner-artifact-leak" | "facilitator-artifact-leak" | "unknown-artifact" | "duplicate-id" | "missing-visible-goal" | "missing-protected-goal" | "invalid-goal-projection" | "duplicate-goal-id" | "unknown-criterion" | "criterion-visibility-mismatch" | "rubric-total" | "rubric-dimension-total" | "duplicate-criterion-id" | "missing-mandatory-safety" | "missing-safety-evidence" | "ai-dependent-completion" | "inaccessible-interaction" | "unknown-accessibility-alternative" | "non-equivalent-accessibility-alternative" | "missing-evidence" | "unknown-evidence-goal" | "personal-data-evidence" | "missing-side-adventure" | "mandatory-side-adventure" | "invalid-reward" | "hardware-module-mismatch" | "hardware-requirements-version-mismatch" | "hardware-item-mismatch" | "hardware-verification-claim" | "unsafe-physical-export" | "invalid-hardware-reward" | "invalid-function-reference";
387
+ code: "bundle-version-mismatch" | "module-reference-mismatch" | "mission-reference-mismatch" | "invalid-duration" | "missing-stage" | "duplicate-stage" | "stage-order" | "missing-readiness-check" | "scored-readiness-check" | "missing-starter-artifact" | "learner-artifact-leak" | "facilitator-artifact-leak" | "unknown-artifact" | "duplicate-id" | "missing-visible-goal" | "missing-protected-goal" | "invalid-goal-projection" | "duplicate-goal-id" | "unknown-criterion" | "criterion-visibility-mismatch" | "rubric-total" | "rubric-dimension-total" | "duplicate-criterion-id" | "missing-mandatory-safety" | "missing-safety-evidence" | "ai-dependent-completion" | "inaccessible-interaction" | "unknown-accessibility-alternative" | "non-equivalent-accessibility-alternative" | "missing-evidence" | "unknown-evidence-goal" | "personal-data-evidence" | "missing-side-adventure" | "mandatory-side-adventure" | "invalid-reward" | "hardware-module-mismatch" | "hardware-requirements-version-mismatch" | "hardware-item-mismatch" | "hardware-verification-claim" | "unsafe-physical-export" | "invalid-hardware-reward" | "invalid-function-reference" | "invalid-bounded-suggestion";
369
388
  message: string;
370
389
  path: string;
371
390
  }
@@ -487,6 +506,8 @@ declare const RESCUE_CREW_COMMANDER_MISSION_ONE_AUTHORING_V1: MissionAuthoringBu
487
506
  * projectile answers.
488
507
  */
489
508
  declare const METEOR_SHIELD_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
509
+ /** Bounded first Vibe mission; no open prompt or provider is required. */
510
+ declare const VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
490
511
  /** Original first-mission exemplar; no protected content appears in learner data. */
491
512
  declare const ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1: MissionAuthoringBundleV1;
492
513
 
@@ -495,4 +516,4 @@ declare function validateLearningPath(path: LearningPathVersionV1): LearningVali
495
516
  /** Fail fast when a path is not safe to publish or consume. */
496
517
  declare function assertValidLearningPath(path: LearningPathVersionV1): void;
497
518
 
498
- export { type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, type CommercialStateV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, DANCE_ROVER_MISSION_ONE_AUTHORING_V1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, 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 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, SERVO_CREATURE_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, type ScoreBandV1, assertValidLearningPath, assertValidMissionAuthoringBundle, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle };
519
+ export { type AssessmentCheckResultV1, type AssessmentCriterionV1, type AssessmentDimensionV1, type AssessmentResultV1, type AssessmentRubricV1, type AttemptEvidenceV1, BEACON_BOT_MISSION_ONE_AUTHORING_V1, type BadgeDefinitionV1, type CommercialStateV1, type CourseMaterialAudienceV1, type CourseMaterialKindV1, type CourseMaterialV1, type CourseMaterialsManifestV1, DANCE_ROVER_MISSION_ONE_AUTHORING_V1, type FacilitatorMissionAuthoringV1, type GuardianAiConsentV1, 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, SERVO_CREATURE_MISSION_ONE_AUTHORING_V1, SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1, STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1, type ScoreBandV1, VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1, assertValidLearningPath, assertValidMissionAuthoringBundle, calculateAssessment, validateAssessmentRubric, validateLearningPath, validateMissionAuthoringBundle };
package/dist/index.js CHANGED
@@ -1101,6 +1101,19 @@ function validateMissionAuthoringBundle(bundle, module2) {
1101
1101
  );
1102
1102
  }
1103
1103
  }
1104
+ if (learner.boundedSuggestion) {
1105
+ const suggestion = learner.boundedSuggestion;
1106
+ const invalidBoundedSuggestion = suggestion.id.trim().length === 0 || suggestion.source !== "authored-fallback" || suggestion.intent.trim().length === 0 || suggestion.constraints.length === 0 || suggestion.constraints.some((constraint) => constraint.trim().length === 0) || !learnerArtifactIds.has(suggestion.permittedArtifactId) || suggestion.originalSnippet.trim().length === 0 || suggestion.replacementSnippet.trim().length === 0 || suggestion.originalSnippet === suggestion.replacementSnippet || suggestion.explanationPrompt.trim().length === 0 || suggestion.aiOptional !== false || suggestion.learnerApprovalRequired !== true || suggestion.alternatives.length !== 2 || suggestion.alternatives[0] !== "accept" || suggestion.alternatives[1] !== "reject";
1107
+ if (invalidBoundedSuggestion) {
1108
+ issues.push(
1109
+ authoringIssue(
1110
+ "invalid-bounded-suggestion",
1111
+ "A bounded suggestion requires one learner artifact, authored constraints, a visible diff and explicit accept/reject approval.",
1112
+ "learner.boundedSuggestion"
1113
+ )
1114
+ );
1115
+ }
1116
+ }
1104
1117
  const hardware = bundle.hardware;
1105
1118
  if (hardware) {
1106
1119
  if (module2.category !== "robot" || module2.hardware.mode !== "physical-first" || !module2.hardware.simulatorAvailable) {
@@ -4587,6 +4600,280 @@ var METEOR_SHIELD_MISSION_ONE_AUTHORING_V1 = {
4587
4600
  ]
4588
4601
  }
4589
4602
  };
4603
+ var VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1 = {
4604
+ version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
4605
+ moduleId: "junior-coder.vibe-game-remix-lab",
4606
+ moduleVersion: "1.1.0",
4607
+ missionId: "vibe-game-remix-lab-mission-1",
4608
+ learner: {
4609
+ estimatedMinutes: 20,
4610
+ stages: [
4611
+ {
4612
+ kind: "learn",
4613
+ instruction: "Read how setRescueSpeed(), setGateSpacing() and setGoalCount() change the supplied mini-game.",
4614
+ artifactIds: ["vibe-game-remix-lab-m1-guide"]
4615
+ },
4616
+ {
4617
+ kind: "predict",
4618
+ instruction: "Choose one bounded intent card and predict what its one-line diff will change before viewing it.",
4619
+ artifactIds: ["vibe-game-remix-lab-m1-intent-cards"]
4620
+ },
4621
+ {
4622
+ kind: "build",
4623
+ instruction: "Open the supplied mini-game and keep changes inside its documented settings file.",
4624
+ artifactIds: ["vibe-game-remix-lab-m1-code"]
4625
+ },
4626
+ {
4627
+ kind: "run",
4628
+ instruction: "Use the Run action button to start the private JavaScript preview.",
4629
+ artifactIds: ["vibe-game-remix-lab-m1-code"]
4630
+ },
4631
+ {
4632
+ kind: "assess",
4633
+ instruction: "Run deterministic checks before requesting or applying any suggestion.",
4634
+ artifactIds: []
4635
+ },
4636
+ {
4637
+ kind: "inspect",
4638
+ instruction: "Compare the single authored diff with your prediction and the failed goal evidence.",
4639
+ artifactIds: ["vibe-game-remix-lab-m1-code"]
4640
+ },
4641
+ {
4642
+ kind: "fix",
4643
+ instruction: "Accept or reject the proposed change yourself, then rerun the preview and assessment.",
4644
+ artifactIds: ["vibe-game-remix-lab-m1-code"]
4645
+ },
4646
+ {
4647
+ kind: "explain",
4648
+ instruction: "Explain why you accepted or rejected the change and what the new evidence shows.",
4649
+ artifactIds: []
4650
+ },
4651
+ {
4652
+ kind: "reward",
4653
+ instruction: "Collect the evidence-bound badge after the deterministic score reaches 80 and every safety check passes.",
4654
+ artifactIds: []
4655
+ }
4656
+ ],
4657
+ readinessChecks: [
4658
+ {
4659
+ id: "vibe-game-remix-lab-m1-find-setting",
4660
+ prompt: "Point to the documented function that changes how many rescue goals appear.",
4661
+ scored: false
4662
+ }
4663
+ ],
4664
+ artifacts: [
4665
+ {
4666
+ id: "vibe-game-remix-lab-m1-code",
4667
+ kind: "starter-code",
4668
+ audience: "learner",
4669
+ solutionBearing: false
4670
+ },
4671
+ {
4672
+ id: "vibe-game-remix-lab-m1-guide",
4673
+ kind: "starter-assets",
4674
+ audience: "learner",
4675
+ solutionBearing: false
4676
+ },
4677
+ {
4678
+ id: "vibe-game-remix-lab-m1-intent-cards",
4679
+ kind: "printable",
4680
+ audience: "learner",
4681
+ solutionBearing: false
4682
+ }
4683
+ ],
4684
+ goals: [
4685
+ {
4686
+ id: "vibe-game-remix-lab-m1-starts",
4687
+ statement: "The supplied JavaScript mini-game remains structurally valid and starts.",
4688
+ visibility: "visible",
4689
+ criterionIds: ["vibe-game-remix-lab-build"],
4690
+ completionRequired: true,
4691
+ aiRequired: false
4692
+ },
4693
+ {
4694
+ id: "vibe-game-remix-lab-m1-bounded-remix",
4695
+ statement: "The approved one-file change matches the chosen intent and every published behaviour goal.",
4696
+ visibility: "visible",
4697
+ criterionIds: [
4698
+ "vibe-game-remix-lab-goal-one",
4699
+ "vibe-game-remix-lab-goal-two",
4700
+ "vibe-game-remix-lab-goal-three"
4701
+ ],
4702
+ completionRequired: true,
4703
+ aiRequired: false
4704
+ },
4705
+ {
4706
+ id: "vibe-game-remix-lab-m1-private-runtime",
4707
+ statement: "The remix stays inside the private sandbox with no network, personal data or automatic code changes.",
4708
+ visibility: "visible",
4709
+ criterionIds: ["vibe-game-remix-lab-safety"],
4710
+ completionRequired: true,
4711
+ aiRequired: false
4712
+ }
4713
+ ],
4714
+ interactions: [
4715
+ {
4716
+ id: "vibe-game-remix-lab-m1-run-control",
4717
+ description: "Start the supplied mini-game preview.",
4718
+ primaryMode: "pointer",
4719
+ alternativeIds: ["vibe-game-remix-lab-m1-keyboard-run"]
4720
+ },
4721
+ {
4722
+ id: "vibe-game-remix-lab-m1-diff-review",
4723
+ description: "Read the removed and added source line before choosing what to do.",
4724
+ primaryMode: "text",
4725
+ alternativeIds: []
4726
+ },
4727
+ {
4728
+ id: "vibe-game-remix-lab-m1-accept-control",
4729
+ description: "Approve the exact immutable suggestion snapshot.",
4730
+ primaryMode: "pointer",
4731
+ alternativeIds: ["vibe-game-remix-lab-m1-keyboard-review"]
4732
+ },
4733
+ {
4734
+ id: "vibe-game-remix-lab-m1-reject-control",
4735
+ description: "Reject the suggestion and preserve the current source.",
4736
+ primaryMode: "pointer",
4737
+ alternativeIds: ["vibe-game-remix-lab-m1-keyboard-review"]
4738
+ }
4739
+ ],
4740
+ accessibilityAlternatives: [
4741
+ {
4742
+ id: "vibe-game-remix-lab-m1-keyboard-run",
4743
+ modes: ["keyboard"],
4744
+ equivalentOutcome: true,
4745
+ description: "Press Enter or Space on the play-icon Run button to start the same preview."
4746
+ },
4747
+ {
4748
+ id: "vibe-game-remix-lab-m1-keyboard-review",
4749
+ modes: ["keyboard", "text", "reduced-motion"],
4750
+ equivalentOutcome: true,
4751
+ description: "Read the labelled removed and added lines, then focus Accept or Reject and press Enter or Space."
4752
+ }
4753
+ ],
4754
+ evidenceRequirements: [
4755
+ {
4756
+ id: "vibe-game-remix-lab-m1-assessment",
4757
+ goalIds: [
4758
+ "vibe-game-remix-lab-m1-starts",
4759
+ "vibe-game-remix-lab-m1-bounded-remix",
4760
+ "vibe-game-remix-lab-m1-private-runtime"
4761
+ ],
4762
+ kind: "assessment-result",
4763
+ retention: "entitlement",
4764
+ containsPersonalData: false
4765
+ },
4766
+ {
4767
+ id: "vibe-game-remix-lab-m1-explanation",
4768
+ goalIds: ["vibe-game-remix-lab-m1-bounded-remix"],
4769
+ kind: "learner-explanation",
4770
+ retention: "attempt",
4771
+ containsPersonalData: false
4772
+ }
4773
+ ],
4774
+ sideAdventures: [
4775
+ {
4776
+ id: "vibe-game-remix-lab-m1-inventor",
4777
+ prompt: "Write a new bounded remix intent card with one permitted setting, one constraint and one success test.",
4778
+ completionRequired: false
4779
+ }
4780
+ ],
4781
+ rewardBindings: [
4782
+ {
4783
+ id: "vibe-game-remix-lab-m1-badge",
4784
+ badgeId: "vibe-game-remix-lab-mission-complete",
4785
+ goalIds: [
4786
+ "vibe-game-remix-lab-m1-starts",
4787
+ "vibe-game-remix-lab-m1-bounded-remix",
4788
+ "vibe-game-remix-lab-m1-private-runtime"
4789
+ ],
4790
+ deterministic: true,
4791
+ random: false,
4792
+ tokenConvertible: false
4793
+ }
4794
+ ],
4795
+ functionReference: [
4796
+ {
4797
+ id: "vibe-game-remix-lab-function-speed",
4798
+ signature: "setRescueSpeed(speed)",
4799
+ summary: "Sets the supplied rescue robot's bounded movement speed.",
4800
+ parameters: [{ name: "speed", type: "whole number", description: "A safe speed from 1 to 5." }],
4801
+ effect: "Changes only the private mini-game simulation speed.",
4802
+ example: "setRescueSpeed(3);"
4803
+ },
4804
+ {
4805
+ id: "vibe-game-remix-lab-function-spacing",
4806
+ signature: "setGateSpacing(spacing)",
4807
+ summary: "Sets the gap between original rescue gates.",
4808
+ parameters: [{ name: "spacing", type: "whole number", description: "A bounded spacing from 2 to 6." }],
4809
+ effect: "Changes only the generated gate layout in the private preview.",
4810
+ example: "setGateSpacing(4);"
4811
+ },
4812
+ {
4813
+ id: "vibe-game-remix-lab-function-goals",
4814
+ signature: "setGoalCount(count)",
4815
+ summary: "Chooses how many fictional rescue goals the round contains.",
4816
+ parameters: [{ name: "count", type: "whole number", description: "A bounded goal count from 1 to 4." }],
4817
+ effect: "Changes the labelled rescue-goal count without network or account access.",
4818
+ example: "setGoalCount(3);"
4819
+ }
4820
+ ],
4821
+ boundedSuggestion: {
4822
+ id: "vibe-game-remix-lab-m1-authored-goal-diff",
4823
+ source: "authored-fallback",
4824
+ intent: "Make the round contain one more rescue goal.",
4825
+ constraints: [
4826
+ "Change exactly one documented setting.",
4827
+ "Keep the goal count inside the published range.",
4828
+ "Do not add network, storage, DOM or account access."
4829
+ ],
4830
+ permittedArtifactId: "vibe-game-remix-lab-m1-code",
4831
+ originalSnippet: "setGoalCount(2);",
4832
+ replacementSnippet: "setGoalCount(3);",
4833
+ explanationPrompt: "Did the new goal count match your prediction, and which assessment evidence proves it?",
4834
+ aiOptional: false,
4835
+ learnerApprovalRequired: true,
4836
+ alternatives: ["accept", "reject"]
4837
+ }
4838
+ },
4839
+ facilitator: {
4840
+ artifacts: [
4841
+ {
4842
+ id: "vibe-game-remix-lab-m1-answer-key",
4843
+ kind: "answer-key",
4844
+ audience: "facilitator",
4845
+ solutionBearing: true
4846
+ },
4847
+ {
4848
+ id: "vibe-game-remix-lab-m1-protected-tests",
4849
+ kind: "protected-test",
4850
+ audience: "facilitator",
4851
+ solutionBearing: true
4852
+ },
4853
+ {
4854
+ id: "vibe-game-remix-lab-m1-safety-notes",
4855
+ kind: "facilitator-note",
4856
+ audience: "facilitator",
4857
+ solutionBearing: true
4858
+ }
4859
+ ],
4860
+ protectedGoals: [
4861
+ {
4862
+ id: "vibe-game-remix-lab-m1-protected-resilience",
4863
+ statement: "The sandbox rejects prompt injection, answer dumping, disallowed files, network access and changes outside the approved diff.",
4864
+ visibility: "protected",
4865
+ criterionIds: ["vibe-game-remix-lab-edge-one", "vibe-game-remix-lab-edge-two"],
4866
+ completionRequired: false,
4867
+ aiRequired: false
4868
+ }
4869
+ ],
4870
+ prompts: [
4871
+ "Ask for the learner's prediction before revealing the authored diff.",
4872
+ "Do not invite free-form chat; keep intent, evidence and suggestions bound to the current project, rubric and permitted artifact.",
4873
+ "A rejection must leave source unchanged, and AI/provider failure must never block deterministic completion."
4874
+ ]
4875
+ }
4876
+ };
4590
4877
  var ROAD_HOPPER_RALLY_MISSION_ONE_AUTHORING_V1 = {
4591
4878
  version: MISSION_AUTHORING_CONTRACT_VERSION_V1,
4592
4879
  moduleId: "junior-coder.road-hopper-rally",
@@ -4954,6 +5241,7 @@ export {
4954
5241
  SERVO_CREATURE_MISSION_ONE_AUTHORING_V1,
4955
5242
  SKYWING_SPRINT_MISSION_ONE_AUTHORING_V1,
4956
5243
  STAR_DEFENDER_SQUADRON_MISSION_ONE_AUTHORING_V1,
5244
+ VIBE_GAME_REMIX_LAB_MISSION_ONE_AUTHORING_V1,
4957
5245
  assertValidLearningPath,
4958
5246
  assertValidMissionAuthoringBundle,
4959
5247
  calculateAssessment,