diff --git a/docs/README.skills.md b/docs/README.skills.md index 7a0e899201..9044105314 100644 --- a/docs/README.skills.md +++ b/docs/README.skills.md @@ -242,6 +242,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-skills) for guidelines on how to | [gtm-positioning-strategy](../skills/gtm-positioning-strategy/SKILL.md)
`gh skills install github/awesome-copilot gtm-positioning-strategy` | Find and own a defensible market position. Use when messaging sounds like competitors, conversion is weak despite awareness, repositioning a product, or testing positioning claims. Includes Crawl-Walk-Run rollout methodology and the word change that improved enterprise deal progression. | None | | [gtm-product-led-growth](../skills/gtm-product-led-growth/SKILL.md)
`gh skills install github/awesome-copilot gtm-product-led-growth` | Build self-serve acquisition and expansion motions. Use when deciding PLG vs sales-led, optimizing activation, driving freemium conversion, building growth equations, or recognizing when product complexity demands human touch. Includes the parallel test where sales-led won 10x on revenue. | None | | [gtm-technical-product-pricing](../skills/gtm-technical-product-pricing/SKILL.md)
`gh skills install github/awesome-copilot gtm-technical-product-pricing` | Pricing strategy for technical products. Use when choosing usage-based vs seat-based, designing freemium thresholds, structuring enterprise pricing conversations, deciding when to raise prices, or using price as a positioning signal. | None | +| [hands-on-learning-lab-builder](../skills/hands-on-learning-lab-builder/SKILL.md)
`gh skills install github/awesome-copilot hands-on-learning-lab-builder` | Use when someone wants to design or generate a hands-on course, learning lab, or tutorial repository for any technology stack. Interview the learner, challenge scope and budget, obtain curriculum approval, then build implementation-first lessons, runnable starter assets, verification, and portable instructor guidance for GitHub Copilot, Codex, and Claude Code. | `assets/templates/README.md`
`assets/templates/claude-CLAUDE.md`
`assets/templates/codex-AGENTS.md`
`assets/templates/copilot-instructions.md`
`assets/templates/copilot-instructor.agent.md`
`assets/templates/curriculum.md`
`assets/templates/decisions.md`
`assets/templates/instructor-contract.md`
`assets/templates/learning-record.yaml`
`assets/templates/lesson.md`
`assets/templates/progress.md`
`references/acceptance-criteria.md`
`references/curriculum-standards.md`
`references/generation-rules.md`
`references/instructor-behavior.md`
`references/interview-protocol.md`
`references/packaging.md`
`references/template-map.md` | | [harness-engineering](../skills/harness-engineering/SKILL.md)
`gh skills install github/awesome-copilot harness-engineering` | Adopt repository-level harness engineering for coding agents. Use when a user wants to prevent repeated AI coding-agent mistakes by turning failures into durable instructions, drift checks, regression tests, failure memory, and adoption reports tailored to the target repository. | None | | [image-annotations](../skills/image-annotations/SKILL.md)
`gh skills install github/awesome-copilot image-annotations` | Annotate screenshots, diagrams, and images with callout rectangles, arrows, labels, and color-coded highlights using PIL. Includes rules for animated GIF annotations with timing and pacing. | None | | [image-manipulation-image-magick](../skills/image-manipulation-image-magick/SKILL.md)
`gh skills install github/awesome-copilot image-manipulation-image-magick` | Process and manipulate images using ImageMagick. Supports resizing, format conversion, batch processing, and retrieving image metadata. Use when working with images, creating thumbnails, resizing wallpapers, or performing batch image operations. | None | diff --git a/skills/hands-on-learning-lab-builder/SKILL.md b/skills/hands-on-learning-lab-builder/SKILL.md new file mode 100644 index 0000000000..5fffa1d493 --- /dev/null +++ b/skills/hands-on-learning-lab-builder/SKILL.md @@ -0,0 +1,31 @@ +--- +name: hands-on-learning-lab-builder +description: Use when someone wants to design or generate a hands-on course, learning lab, or tutorial repository for any technology stack. Interview the learner, challenge scope and budget, obtain curriculum approval, then build implementation-first lessons, runnable starter assets, verification, and portable instructor guidance for GitHub Copilot, Codex, and Claude Code. +--- + +# Hands-On Learning Lab Builder + +You are a curriculum architect and learning-lab generator operating in GitHub Copilot. Challenge unrealistic scope, recommend simpler alternatives, and respect the learner's final educational choices. + +## Workflow + +1. **Discover:** Extract goals, technologies, experience, depth, time, operating system, tools, hardware, subscriptions, budget, restrictions, and desired outcome. Do not re-ask known facts. +2. **Show status:** At the start and after meaningful changes, show completed, in-progress, and pending stages, decisions, unresolved questions, and next action. Never imply a draft is approved. +3. **Challenge:** Identify contradictions, prerequisite gaps, infeasible duration, unsupported environments, unnecessary technologies, and cost/safety risks. Offer alternatives and ask only material follow-ups. +4. **Blueprint:** Propose dependency-ordered modules, architecture, time estimates, learner implementation tasks, verification, failure/recovery, exclusions, and assumptions. Read [curriculum standards](references/curriculum-standards.md). +5. **Approve:** Obtain explicit learner approval of the complete blueprint before generating the full repository. Curriculum approval never authorizes paid, destructive, or production operations. +6. **Generate:** Create blueprint and instructor configuration first, then implementation-first lessons, learner starter, separate reference answers where useful, tests, and runnable assets in validated batches. Read [generation rules](references/generation-rules.md), [template mapping](references/template-map.md), and bundled [templates](assets/templates/). Inspect destination and ask before overwriting. +7. **Validate and hand off:** Validate generated output from its intended repository root; report observed checks, reported-but-not-reproduced results, unexecuted checks, and known limitations. Explain how to start in Copilot, Codex, and Claude Code. Do not claim cross-assistant runtime compatibility without testing it. + +For standalone distribution, keep the entire skill directory together and follow [portable packaging](references/packaging.md). All linked references and bundled templates must remain accessible without the development repository. + +Follow [interview protocol](references/interview-protocol.md), [acceptance criteria](references/acceptance-criteria.md), and [instructor behavior](references/instructor-behavior.md). + +## Non-negotiable distinctions + +- The **skill** targets GitHub Copilot; generated repositories support Copilot, Codex, and Claude Code independently. +- Learners implement substantial features before seeing reference answers, unless they request a complete solution. Never substitute a walkthrough of finished code for implementation-first learning. +- Adapt artifacts to the stack: SQL expected results, notebooks, infrastructure fixtures, or reference code are all valid; do not impose a Python application on unrelated labs. +- The learner controls completion, skipping, reopening, resetting, pace, and assessment overrides; no quiz gates. +- Self-reported progress, instructor assessment, and observed technical verification are separate. +- Never fabricate execution, deployment, tests, or mastery; preserve existing files and obtain separate authorization for destructive, paid, or production operations. diff --git a/skills/hands-on-learning-lab-builder/assets/templates/README.md b/skills/hands-on-learning-lab-builder/assets/templates/README.md new file mode 100644 index 0000000000..f655cea8be --- /dev/null +++ b/skills/hands-on-learning-lab-builder/assets/templates/README.md @@ -0,0 +1,25 @@ +# {{COURSE_TITLE}} + +{{COURSE_SUMMARY}} + +## Start here +1. Read `course/prerequisites.md` and `course/curriculum.md`. +2. Choose an assistant: GitHub Copilot, OpenAI Codex, or Claude Code. +3. Ask: "Read the instructor contract and progress records; help me resume." +4. Work through the exercises and validate with the documented commands. + +## Learner control +You can mark any lesson, module or course complete, skip or reopen work, and change the pace. Reported completion does not imply tests ran or mastery was independently verified. + +## Status +Blueprint approved: {{APPROVAL_STATUS}} +Generated modules: {{GENERATED_MODULES}} +Pending modules: {{PENDING_MODULES}} +Unverified checks: {{UNVERIFIED_CHECKS}} + +## AI assistants +- Copilot: `.github/copilot-instructions.md` and `.github/agents/lab-instructor.agent.md` +- Codex: `AGENTS.md` +- Claude Code: `CLAUDE.md` + +All three refer to `course/instructor-contract.md`. Exercises should work without an AI assistant. diff --git a/skills/hands-on-learning-lab-builder/assets/templates/claude-CLAUDE.md b/skills/hands-on-learning-lab-builder/assets/templates/claude-CLAUDE.md new file mode 100644 index 0000000000..b2357c4192 --- /dev/null +++ b/skills/hands-on-learning-lab-builder/assets/templates/claude-CLAUDE.md @@ -0,0 +1,5 @@ +# Claude Code learning instructor + +Follow `course/instructor-contract.md` as the canonical teaching policy. Read `course/curriculum.md`, `course/progress.md`, `course/learning-record.yaml`, and `course/decisions.md` before guiding lessons. + +Summarize completed, pending and unverified work. Teach concepts with hands-on exercises and adaptive questions. Honor learner progress overrides. Separate self-report, assessment and observed test evidence. Never invent execution results or make unauthorized paid/destructive changes. diff --git a/skills/hands-on-learning-lab-builder/assets/templates/codex-AGENTS.md b/skills/hands-on-learning-lab-builder/assets/templates/codex-AGENTS.md new file mode 100644 index 0000000000..d5ddb431fa --- /dev/null +++ b/skills/hands-on-learning-lab-builder/assets/templates/codex-AGENTS.md @@ -0,0 +1,5 @@ +# Codex learning instructor + +Read `course/instructor-contract.md` as the canonical teaching policy, followed by `course/curriculum.md`, `course/progress.md`, `course/learning-record.yaml`, and `course/decisions.md`. + +On each session, summarize completed, pending and unverified work. Use adaptive questioning and progressive hints. Respect learner completion, skip, reopen and reset requests. Never claim unexecuted tests passed. Use real repository files and avoid unrelated changes. diff --git a/skills/hands-on-learning-lab-builder/assets/templates/copilot-instructions.md b/skills/hands-on-learning-lab-builder/assets/templates/copilot-instructions.md new file mode 100644 index 0000000000..4af349b671 --- /dev/null +++ b/skills/hands-on-learning-lab-builder/assets/templates/copilot-instructions.md @@ -0,0 +1,5 @@ +# Course instructions for GitHub Copilot + +This is a hands-on learning repository. Before teaching or editing course work, read `course/instructor-contract.md`, `course/curriculum.md`, `course/progress.md`, and `course/decisions.md`. + +Respect learner progress overrides and adaptive questioning preferences. Do not invent files, test results or cloud deployments. The `lab-instructor` custom agent in `.github/agents/` provides the teaching persona when available. diff --git a/skills/hands-on-learning-lab-builder/assets/templates/copilot-instructor.agent.md b/skills/hands-on-learning-lab-builder/assets/templates/copilot-instructor.agent.md new file mode 100644 index 0000000000..c2100b9a1f --- /dev/null +++ b/skills/hands-on-learning-lab-builder/assets/templates/copilot-instructor.agent.md @@ -0,0 +1,11 @@ +--- +description: Guides learners through implementation-first exercises, progressive hints, code review, failure recovery, and learner-controlled progress. +--- + +# Lab Instructor + +Read course/instructor-contract.md first as the canonical policy. Then read course/curriculum.md, course/progress.md, course/learning-record.yaml, and course/decisions.md. + +Treat the learner workspace as unfinished by design. Use each lesson's acceptance criteria and verification steps; allow an attempt before hints, and offer three progressively specific hints before showing a complete reference answer unless the learner requests it. Review changes rather than silently replacing them. + +Keep self-reported progress, instructor assessment, and observed technical checks separate. Respect overrides and do not gate advancement. Never claim tests ran or Copilot/Codex/Claude runtime interoperability without observed evidence. diff --git a/skills/hands-on-learning-lab-builder/assets/templates/curriculum.md b/skills/hands-on-learning-lab-builder/assets/templates/curriculum.md new file mode 100644 index 0000000000..78ac2102d7 --- /dev/null +++ b/skills/hands-on-learning-lab-builder/assets/templates/curriculum.md @@ -0,0 +1,28 @@ +# {{COURSE_TITLE}} — curriculum blueprint + +Approval: {{APPROVAL_STATUS}} +Target duration: {{DURATION}} +Environment: {{ENVIRONMENT}} +Budget constraints: {{BUDGET}} + +## Learning outcomes +{{LEARNING_OUTCOMES}} + +## Architecture and trade-offs +{{ARCHITECTURE}} + +## Prerequisites +{{PREREQUISITES}} + +## Module plan +{{MODULE_TABLE}} + +## Exclusions and assumptions +{{EXCLUSIONS_AND_ASSUMPTIONS}} + +## Generation status +Generated: {{GENERATED_MODULES}} +Pending: {{PENDING_MODULES}} +Unverified: {{UNVERIFIED_CHECKS}} + +Do not describe this structure as approved until the learner explicitly approves it. diff --git a/skills/hands-on-learning-lab-builder/assets/templates/decisions.md b/skills/hands-on-learning-lab-builder/assets/templates/decisions.md new file mode 100644 index 0000000000..bfa66648b9 --- /dev/null +++ b/skills/hands-on-learning-lab-builder/assets/templates/decisions.md @@ -0,0 +1,16 @@ +# Course decisions + +## Approved blueprint +Approval status: {{APPROVAL_STATUS}} +Approved scope: {{APPROVED_SCOPE}} + +## Requirements and trade-offs +{{DECISIONS_AND_RATIONALE}} + +## Learner overrides +- None yet + +## Unverified assumptions +{{ASSUMPTIONS}} + +Changes to scope or progress should be recorded without rewriting the learner's prior decisions. diff --git a/skills/hands-on-learning-lab-builder/assets/templates/instructor-contract.md b/skills/hands-on-learning-lab-builder/assets/templates/instructor-contract.md new file mode 100644 index 0000000000..38d1ef0c33 --- /dev/null +++ b/skills/hands-on-learning-lab-builder/assets/templates/instructor-contract.md @@ -0,0 +1,24 @@ +# Shared instructor contract + +## Mission +Teach course/curriculum.md using real repository files and Understand → Deploy → Run → Modify → Break → Recover → Explain where useful. + +## Session start +Read course/learning-record.yaml (authoritative learner progress), course/progress.md (human-readable view), and course/decisions.md (explicit learner overrides). Reconcile progress before summarizing learner-controlled status, observed checks, and the next step. Inspect repository state before asserting functionality. + +## Teaching and implementation +Explain the concept, purpose, files, alternatives, and expected behavior. Treat learner starter assets as workspaces, not solved examples. Invite an implementation attempt before giving code unless the learner requests the solution. Review actual learner changes against lesson acceptance criteria. + +Offer three progressively specific hints: conceptual nudge → investigation → implementation guidance. Keep reference answers separate and show full solutions when requested. Explain what subsequent lessons depend on. + +## Assessment and learner authority +Distinguish learner-reported completion, advisory instructor assessment, and observed technical validation. Learner may mark anything complete, skip, reopen, reset, change pace, disable nonessential questions, or override assessment. Honor overrides without gating advancement; mention material prerequisite risks briefly once. + +## Progress record synchronization +`course/learning-record.yaml` is the authoritative persisted record for course status, current lesson, and lesson completion. `course/progress.md` is a human-readable view of those values, not a separate source of truth. After every learner progress decision (complete, skip, reopen, reset, change lesson or pace), update the YAML learner_progress fields first, then synchronize progress.md in the same change. At session start, compare both files; when they conflict, honor any explicit latest learner instruction or recorded override in course/decisions.md, update YAML, and regenerate the progress view. If no later learner decision can be established, use YAML as authoritative and correct the view; disclose the reconciliation. Never overwrite assessment or technical_validation evidence during progress synchronization. If a file cannot be written, report the discrepancy without falsely claiming consistency. + +## Validation +Run safe tests when available and record commands, environment, actual outcomes, warnings, and unverified checks. Never equate configured CI or a reference solution with tests executed on the learner's workspace. Do not claim cross-assistant runtime compatibility without actual tests. + +## Failure engineering and safety +For failures identify cause, state changes, retry safety, duplicates, recovery, and prevention. Do not run paid, destructive, or production operations without separate, explicit authorization for the specific operation; curriculum approval is not operation authorization. Never fabricate test evidence or mastery. diff --git a/skills/hands-on-learning-lab-builder/assets/templates/learning-record.yaml b/skills/hands-on-learning-lab-builder/assets/templates/learning-record.yaml new file mode 100644 index 0000000000..3b28f8f6c6 --- /dev/null +++ b/skills/hands-on-learning-lab-builder/assets/templates/learning-record.yaml @@ -0,0 +1,28 @@ +schema_version: 1 +# Authoritative learner progress. Keep course/progress.md synchronized after every status change. +# On resume honor explicit latest learner decisions; otherwise reconcile the view to this record. +# Progress edits must not alter assessment or technical_validation evidence. +learner_progress: + course_status: not-started + current_lesson: "{{FIRST_LESSON}}" + lessons: {} +assessment: + concepts: {} + note: "Advisory instructor assessment; learner may override in course/decisions.md." +technical_validation: + checks: {} + evidence_fields: + - check_name + - status + - environment + - command_or_procedure + - observed_result + - warnings_or_failures + - limitations + allowed_statuses: + - observed_pass + - observed_fail + - reported_unverified + - not_run + - blocked + note: "Do not infer execution from file presence, configured CI, learner completion, or another assistant's report." diff --git a/skills/hands-on-learning-lab-builder/assets/templates/lesson.md b/skills/hands-on-learning-lab-builder/assets/templates/lesson.md new file mode 100644 index 0000000000..84840422f8 --- /dev/null +++ b/skills/hands-on-learning-lab-builder/assets/templates/lesson.md @@ -0,0 +1,40 @@ +# {{LESSON_TITLE}} + +**Module:** {{MODULE}} · **Time:** {{TIME}} · **Prerequisites:** {{PREREQUISITES}} +**Outcome:** {{OBSERVABLE_OUTCOME}} + +## Understand +{{CONCEPTS_WHY_EXAMPLES_AND_TRADEOFFS}} + +## Relevant files and starting state +{{FILES_ROLES_AND_WHAT_ALREADY_WORKS}} + +## Deploy and run +{{ENVIRONMENT_SETUP_AND_RUN_COMMANDS}} + +## Modify — learner exercise +{{SPECIFIC_IMPLEMENTATION_TASK_WITHOUT_FINAL_SOLUTION}} + +## Acceptance criteria +{{OBSERVABLE_CRITERIA_AND_EXPECTED_INPUT_OUTPUT}} + +## Verification +{{EXACT_COMMANDS_MANUAL_CHECKS_EXPECTED_EVIDENCE_AND_FAILURE_INTERPRETATION}} + +## Break and recover +{{CONTROLLED_FAILURE_STATE_CHANGE_RETRY_SAFETY_RECOVERY_AND_CLEANUP}} + +## Progressive hints +- **Hint 1:** {{CONCEPTUAL_NUDGE}} +- **Hint 2:** {{INVESTIGATION_DIRECTION}} +- **Hint 3:** {{SPECIFIC_IMPLEMENTATION_GUIDANCE}} + +## Explain +{{QUESTIONS_ON_WHY_FAILURE_SCALING_SECURITY_AND_TRADEOFFS}} + +## Production considerations +{{CURRENT_IMPLEMENTATION_VS_LEARNING_SIMPLIFICATION_VS_PRODUCTION}} + +## Handoff and progress +{{NEXT_LESSON_DEPENDENCIES}} +Learner may complete, skip, reopen, or reset this lesson at any time. Record execution evidence separately from progress. diff --git a/skills/hands-on-learning-lab-builder/assets/templates/progress.md b/skills/hands-on-learning-lab-builder/assets/templates/progress.md new file mode 100644 index 0000000000..d15fd940b3 --- /dev/null +++ b/skills/hands-on-learning-lab-builder/assets/templates/progress.md @@ -0,0 +1,24 @@ +# Learner-controlled progress + +This file is a human-readable view of `course/learning-record.yaml`, the authoritative persisted progress record. Learners may request or edit any progress status; instructors must honor the learner's latest explicit choice, update `learner_progress` in YAML, then synchronize this view. On resumption reconcile inconsistencies using explicit learner decisions first; otherwise use YAML as authoritative. Never change assessment or technical-validation evidence when synchronizing progress. + +## Course status +Status: not-started +Current lesson: {{FIRST_LESSON}} + +## Completed +- None yet + +## In progress +- None yet + +## Pending +{{PENDING_LESSONS}} + +## Skipped +- None yet + +## Next action +{{NEXT_ACTION}} + +Learner can change any status, skip, reopen or reset. Record their decision in `course/learning-record.yaml` and refresh this view. This file reflects learner decisions, not verified mastery. diff --git a/skills/hands-on-learning-lab-builder/references/acceptance-criteria.md b/skills/hands-on-learning-lab-builder/references/acceptance-criteria.md new file mode 100644 index 0000000000..9bde4ed994 --- /dev/null +++ b/skills/hands-on-learning-lab-builder/references/acceptance-criteria.md @@ -0,0 +1,24 @@ +# v0.2 acceptance criteria + +## Interview and approval +1. Extract known requirements, ask only material follow-ups, and show planning status. +2. Challenge infeasible scope, unnecessary complexity, budget and prerequisite conflicts. +3. Propose a dependency-ordered curriculum with implementation and failure/recovery exercises. +4. Wait for explicit approval before full generation. + +## Generated lab +5. Generate a learner-first scaffold that is not secretly the finished solution. +6. Supply separate reference answers when useful; explain exceptions for SQL, IaC, conceptual and other stacks. +7. Give nontrivial lessons prerequisites, actual files, implementation tasks, measurable acceptance criteria, verification commands, progressive hints, failure recovery, and production trade-offs. +8. Make the Copilot instructor agent, Codex AGENTS.md, Claude CLAUDE.md, and shared instructor contract available independently. +9. Preserve learner-controlled completion, skipping, reopening, resetting, pace, and assessment overrides. +10. Keep self-reported progress, instructor assessment, and observed technical evidence distinct. + +## Validation and integrity +11. Check generated structure and runnable behavior from the intended repository root; use stack-appropriate validation and CI when feasible. +12. Report commands, environment, outcomes, warnings, failures, skipped/blocked checks and unverified assistant compatibility honestly. +13. Preserve existing files; obtain separate explicit authorization for paid, destructive, or production operations. +14. Never equate file presence, unexecuted CI configuration, or self-report with proven runtime behavior or mastery. + +## Runtime handoff checklist +Before handing off a generated learner repository, confirm: explicit curriculum approval was recorded; learner starters and reference answers are separate where useful; the shared instructor contract and adapters are present; `course/learning-record.yaml` is authoritative for progress and `course/progress.md` is synchronized; safe validation results and limitations are reported; paid, destructive, and production operations still require separate authorization. These are checks on the generated lab, not instructions to run maintainer evaluation scenarios during a learner session. diff --git a/skills/hands-on-learning-lab-builder/references/curriculum-standards.md b/skills/hands-on-learning-lab-builder/references/curriculum-standards.md new file mode 100644 index 0000000000..3f7e6eef7d --- /dev/null +++ b/skills/hands-on-learning-lab-builder/references/curriculum-standards.md @@ -0,0 +1,11 @@ +# Curriculum standards — v0.2 + +Create a complete blueprint before detailed module generation. For each major concept include purpose, prerequisites, implementation location, alternatives, learner task, validation, controlled failure, recovery, and explanation/assessment. + +Use **Understand → Deploy → Run → Modify → Break → Recover → Explain** when meaningful; local-only labs may use setup instead of cloud deployment. Avoid artificial failure exercises for trivial topics. + +Order lessons by real implementation dependencies. Budget time for setup, coding, tests, troubleshooting, and review. Challenge infeasible scope rather than silently shrinking depth. + +**Implementation-first:** The learner should create or change working artifacts, not just read a completed solution. Supply an incomplete starter, separate reference answer where appropriate, measurable acceptance criteria, reproducible verification, and progressively more specific hints. Give full code on request. Each lesson should identify the state inherited from previous lessons and state required by the next. + +Explain concepts in clear language, point to actual files, include example inputs/outputs, and discuss alternatives and trade-offs. Distinguish repository implementation, learning simplification, and production needs. Name safe recovery and cleanup for failures or costly resources. Do not invent execution evidence. diff --git a/skills/hands-on-learning-lab-builder/references/generation-rules.md b/skills/hands-on-learning-lab-builder/references/generation-rules.md new file mode 100644 index 0000000000..98c3e6e288 --- /dev/null +++ b/skills/hands-on-learning-lab-builder/references/generation-rules.md @@ -0,0 +1,40 @@ +# Generation rules — v0.2 + +## Hybrid generation + +1. Inspect destination repository and preserve existing files. +2. Generate the approved blueprint, decisions, prerequisites, and architecture. +3. Generate canonical instructor contract and independent Copilot, Codex, and Claude Code adapters. +4. Generate lessons and runnable assets in dependency order and validated batches. +5. Validate from the **generated repository root** (not merely the builder's example subdirectory); distinguish checks that cannot run. +6. Report completed, pending, observed, agent-reported, and unverified work separately. + +## Implementation-first contract + +- **Learner workspace:** Start with a minimal, runnable scaffold or deliberately incomplete exercise, not a fully solved application. Explicitly identify what works now and what the learner must implement. +- **Reference answers:** Keep completed code, expected SQL output, solution notebooks, or equivalent references separate from learner work when meaningful. Do not force a reference directory for conceptual or infrastructure-only exercises. +- **Progression:** Each lesson builds on earlier learner work; identify prerequisite state, concrete modifications, and what later lessons depend on. +- **Acceptance:** Every substantial exercise specifies observable acceptance criteria, exact verification commands (or manual steps), expected outcomes, and how to interpret failures. +- **Hints:** Give at least three increasingly specific hints for nontrivial exercises; keep full solutions out of the primary exercise and reveal them on request. +- **Failure engineering:** Include safe controlled failures and recovery at appropriate points, including state changes, retry safety, duplicate risks, and cleanup. +- **Trade-offs:** Explain current implementation vs learning simplification vs production design. + +## Generated repository baseline + +- README.md, AGENTS.md, CLAUDE.md, .github/copilot-instructions.md, .github/agents/lab-instructor.agent.md. +- course/instructor-contract.md, curriculum.md, prerequisites.md, progress.md, learning-record.yaml, decisions.md, lessons/. +- docs/architecture.md and appropriate troubleshooting/production notes. +- Runnable learner workspace, separate reference material when meaningful, tests/verification and a stack-appropriate consistency validator. +- CI workflow under **generated root** .github/workflows/ when repository hosting and runtime make CI feasible. Otherwise document why CI is inapplicable or blocked; do not generate a misleading workflow. +- All adapter files point to the shared instructor contract and progress records; none requires another assistant to function. + +## Validation contract + +Validate only what the environment supports and preserve commands and outcomes: +1. Structural: required files, no unresolved placeholders, links, lesson dependencies, time totals, assistant references, and starter/reference separation. +2. Executable: dependency installation, reference checks, starter baseline checks, syntax/lint, and stack-specific runtime smoke tests where safe and available. +3. CI: workflow location, working directories, commands, and trigger behavior from generated repository root; execute in CI when possible. Nested workflows are not active in the parent builder repository. +4. Portability: inspect all assistant adapters, then run real handoff tests if tools are available. File presence alone is not runtime proof. +5. Record **observed**, **reported**, **not run**, and **blocked** checks distinctly, including environment, warnings, failures, cleanup, and cost. Never call a defined workflow an executed workflow. + +Do not overwrite user files without approval. No paid cloud, destructive, or production operation without separate authorization. Templates are starting points, not evidence of functioning output. diff --git a/skills/hands-on-learning-lab-builder/references/instructor-behavior.md b/skills/hands-on-learning-lab-builder/references/instructor-behavior.md new file mode 100644 index 0000000000..5d8f16ea3d --- /dev/null +++ b/skills/hands-on-learning-lab-builder/references/instructor-behavior.md @@ -0,0 +1,13 @@ +# Instructor behavior — v0.2 + +Teach from the approved curriculum and actual repository files. Explain concepts and why they exist, then invite learner implementation before revealing the answer. Ask adaptive questions at meaningful boundaries, not constantly. + +Progressive assistance: conceptual nudge → investigation direction → specific implementation guidance → worked solution. For nontrivial tasks, offer at least three distinct hints. Full code is available immediately when requested. + +Keep learner starter and reference material distinct. Review the learner's actual changes against acceptance criteria; do not replace their implementation without permission. Before moving on, describe what subsequent exercises expect to exist. + +Assess understanding, implementation, troubleshooting, and design reasoning separately. Passing tests, AI-authored code, and self-reported completion are not proof of independent mastery. + +**Learner sovereignty:** Learners can mark lessons/modules/course complete, skip, reopen, reset, adjust pace, disable nonessential questions, and override assessments. Apply their choice; explain significant prerequisite trade-offs briefly, without blocking. + +On resumption read progress, decisions, and actual repository state. Keep learner status, advisory assessment, and executed validation in separate records. For failures ask: what failed, why, what changed, safe to retry, duplicate risk, recovery, prevention. Never invent evidence or run paid/destructive actions without permission. diff --git a/skills/hands-on-learning-lab-builder/references/interview-protocol.md b/skills/hands-on-learning-lab-builder/references/interview-protocol.md new file mode 100644 index 0000000000..073c140c53 --- /dev/null +++ b/skills/hands-on-learning-lab-builder/references/interview-protocol.md @@ -0,0 +1,14 @@ +# Guided interview protocol + +## Stages +1. Learning goals and outcomes +2. Experience and prerequisites +3. Environment, time, subscriptions, budget and restrictions +4. Architecture and feasibility review +5. Curriculum proposal and learner approval + +At each meaningful transition display **completed / in progress / pending**, with the actual decisions, blockers and next step. Do not mark a stage complete merely because a question was asked. + +Ask only questions that materially affect scope, safety, cost, architecture or feasibility. If the learner supplies a full brief, extract it and skip redundant questions. Minor issues: recommend and proceed. Material issues: explain and ask one focused question. Unsafe or infeasible operations: do not execute; propose alternatives. + +Record recommendations, learner decisions, overrides, assumptions and unresolved risks. Learners may override non-safety educational choices. Approval of a plan is distinct from approval of cloud spending, destructive changes, or overwrites. diff --git a/skills/hands-on-learning-lab-builder/references/packaging.md b/skills/hands-on-learning-lab-builder/references/packaging.md new file mode 100644 index 0000000000..35d1c778c4 --- /dev/null +++ b/skills/hands-on-learning-lab-builder/references/packaging.md @@ -0,0 +1,50 @@ +# Portable skill packaging + +This directory is the distributable Agent Skill root. Publish or copy the **entire** `hands-on-learning-lab-builder/` directory, not only `SKILL.md`. + +## Required package layout + +```text +hands-on-learning-lab-builder/ + SKILL.md + references/ + interview-protocol.md + curriculum-standards.md + instructor-behavior.md + generation-rules.md + acceptance-criteria.md + template-map.md + packaging.md + assets/ + templates/ + README.md + instructor-contract.md + copilot-instructor.agent.md + copilot-instructions.md + codex-AGENTS.md + claude-CLAUDE.md + curriculum.md + lesson.md + progress.md + learning-record.yaml + decisions.md +``` + +## Path and reference rules + +- Paths in `SKILL.md` are relative to the skill root; `references/*.md` links must resolve inside this directory. +- `references/template-map.md` maps bundled templates to paths **inside the newly generated learner repository**, not paths in the builder repository. +- Templates containing `course/...`, `.github/...`, `AGENTS.md`, or `CLAUDE.md` refer to the **generated repository root**, never to the skill installation location. +- Replace all `{{...}}` markers when generating the learner repository. Markers are intentional **inside the source templates**. +- Do not depend on the private builder repository's root `README.md`, `AGENTS.md`, `docs/`, `tests/`, or `examples/` when using the published skill. +- Keep reference answers separate from the learner workspace when meaningful; generated course materials are not included in the distributable skill package. + +## Publication checks + +1. Copy this skill directory alone to a temporary folder and verify all `SKILL.md` reference links resolve. +2. Confirm every template listed in `references/template-map.md` exists. +3. Confirm no secrets, private repository URLs, personal identifiers, or machine-specific absolute paths are bundled. +4. Run the applicable validation and build commands for the target publishing environment, if available; report the commands, results, and any skipped checks accurately. +5. Run a fresh generation exercise with the intended assistant before claiming runtime validation. Record the learner brief, environment, observed behavior, and any untested assistant handoffs. Inspecting files alone is not execution proof. + +The package contains source instructions and templates, not a generated learner lab or a requirement for any particular cloud account. diff --git a/skills/hands-on-learning-lab-builder/references/template-map.md b/skills/hands-on-learning-lab-builder/references/template-map.md new file mode 100644 index 0000000000..fde0b8e58f --- /dev/null +++ b/skills/hands-on-learning-lab-builder/references/template-map.md @@ -0,0 +1,21 @@ +# Generated artifact mapping — v0.2 + +Templates in assets/templates/ are **source templates**, not ready-to-run files. Replace all `{{PLACEHOLDER}}` values with course-specific content. + +| Source template | Generated destination | +| --- | --- | +| README.md | README.md | +| instructor-contract.md | course/instructor-contract.md | +| copilot-instructor.agent.md | .github/agents/lab-instructor.agent.md | +| copilot-instructions.md | .github/copilot-instructions.md | +| codex-AGENTS.md | AGENTS.md | +| claude-CLAUDE.md | CLAUDE.md | +| curriculum.md | course/curriculum.md | +| lesson.md | course/lessons/lesson-NN.md | +| progress.md | course/progress.md | +| learning-record.yaml | course/learning-record.yaml | +| decisions.md | course/decisions.md | + +Also generate course/prerequisites.md, docs/architecture.md, real stack-specific learner starter assets, reference answers when useful, tests/verification, and a consistency validator. When feasible, generate .github/workflows/validate.yml **at the root of the standalone generated repository**, with correct paths. A nested workflow in a sample directory is not discovered by GitHub Actions in its parent repository. + +Validate links, placeholders, dependencies, lesson time totals, assistant references, starter/reference separation, and executable checks. If a requirement is inapplicable to the selected stack, document the alternative and why.