{
  "schema_version": 2,
  "meta": {
    "build_id": "CODEX-YOUTUBE-CONTENT-AI-SI-AGENTIC-ERA",
    "slug": "youtube-content-ai-si-agentic-era",
    "title": "Creating YouTube Content for the AI, SI, and Agentic Era",
    "subtitle": "Produce a clear video script and a verified machine-readable knowledge pack.",
    "description": "A six-level, sixteen-mechanism strategy with keyword research, explicit script, synchronized captions/chapters, ten downstream artifacts, multilingual/entity/graph plans, three-platform commands and a linted provenance pack.",
    "one_sentence_description": "A six-level, sixteen-mechanism strategy with keyword research, explicit script, synchronized captions/chapters, ten downstream artifacts, multilingual/entity/graph plans, three-platform commands and a linted provenance pack.",
    "target_user": "A motivated beginner with permission to work in a private practice folder.",
    "skill_level": "beginner",
    "estimated_time": "3–4 hours",
    "category": "Guided Build",
    "tags": [
      "youtube-content-ai-si-agentic-era",
      "verified practice",
      "chatgpt_codex"
    ],
    "prerequisites": [
      "Permission to use a dedicated workspace",
      "A browser and terminal",
      "Read each platform-specific prerequisite before installation"
    ],
    "required_accounts": [],
    "required_software": [
      "Modern browser",
      "Python 3.10+ for downloadable drills"
    ],
    "required_hardware": [
      "A computer with space for the practice files",
      "Second drive for the disaster-recovery checkpoint"
    ],
    "expected_cost": "Free practice; existing tool accounts may have plan limits.",
    "final_outcome": "A six-level, sixteen-mechanism strategy with keyword research, explicit script, synchronized captions/chapters, ten downstream artifacts, multilingual/entity/graph plans, three-platform commands and a linted provenance pack.",
    "platforms": [
      "windows",
      "macos",
      "linux"
    ],
    "version": "2.0",
    "author": "chatgpt_codex",
    "source_checked": "2026-10-05",
    "verification_status": "Created; automated browser and project checks recorded separately. Live account/OS verification is never inferred from browser completion."
  },
  "user_outcome": {
    "before": "The learner has no reproducible, checked workflow for creating youtube content for the ai, si, and agentic era.",
    "after": "A six-level, sixteen-mechanism strategy with keyword research, explicit script, synchronized captions/chapters, ten downstream artifacts, multilingual/entity/graph plans, three-platform commands and a linted provenance pack.",
    "finished_product": "A six-level, sixteen-mechanism strategy with keyword research, explicit script, synchronized captions/chapters, ten downstream artifacts, multilingual/entity/graph plans, three-platform commands and a linted provenance pack."
  },
  "learning_objectives": [
    "Python reports version 3.10 or newer and the terminal is in the extracted resource folder.",
    "The map contains six levels, sixteen mechanisms and distinct evidence categories.",
    "The research brief has intent, query evidence, title/description, thumbnail hierarchy and a cluster.",
    "Each named entity and command is aligned across speech, captions, screen and metadata.",
    "The script names Qwen Code, Node.js and exact commands, with no vague click instruction.",
    "Ten distinct machine artifacts exist, with source-linked FAQ and correct nomenclature."
  ],
  "lessons": [
    {
      "lesson_id": "L01",
      "title": "Prepare the knowledge pack",
      "purpose": "A dedicated folder makes mistakes easy to diagnose and keeps real project files separate.",
      "estimated_time": "6 min",
      "learning_objective": "Python reports version 3.10 or newer and the terminal is in the extracted resource folder.",
      "lessons_before_this": [],
      "lessons_after_this": [
        "L02"
      ]
    },
    {
      "lesson_id": "L02",
      "title": "1 — YouTube foundations and truth",
      "purpose": "Publishing can improve accessibility and structure; proprietary training inclusion and future SI ingestion cannot be forced.",
      "estimated_time": "6 min",
      "learning_objective": "The map contains six levels, sixteen mechanisms and distinct evidence categories.",
      "lessons_before_this": [
        "L01"
      ],
      "lessons_after_this": [
        "L03"
      ]
    },
    {
      "lesson_id": "L03",
      "title": "2 — Search intent and content architecture",
      "purpose": "YouTube tags generally play a small discovery role; a clear topic and viewer usefulness matter more than stuffing tags.",
      "estimated_time": "6 min",
      "learning_objective": "The research brief has intent, query evidence, title/description, thumbnail hierarchy and a cluster.",
      "lessons_before_this": [
        "L02"
      ],
      "lessons_after_this": [
        "L04"
      ]
    },
    {
      "lesson_id": "L04",
      "title": "3 — Video as a multimodal dataset",
      "purpose": "A video is synchronized audio, frames, captions, on-screen text and metadata, not only an MP4 file.",
      "estimated_time": "6 min",
      "learning_objective": "Each named entity and command is aligned across speech, captions, screen and metadata.",
      "lessons_before_this": [
        "L03"
      ],
      "lessons_after_this": [
        "L05"
      ]
    },
    {
      "lesson_id": "L05",
      "title": "4 — Semantic explicitness",
      "purpose": "The shared brief’s button example is conceptual; the actual CLI installation is an npm command. Explicit nouns help a standalone transcript remain useful.",
      "estimated_time": "6 min",
      "learning_objective": "The script names Qwen Code, Node.js and exact commands, with no vague click instruction.",
      "lessons_before_this": [
        "L04"
      ],
      "lessons_after_this": [
        "L06"
      ]
    },
    {
      "lesson_id": "L06",
      "title": "5 — Transcripts as knowledge",
      "purpose": "A generated pack is a starting example. A transcript must be checked against the actual recording; local artifacts are not proof of video publication.",
      "estimated_time": "6 min",
      "learning_objective": "Ten distinct machine artifacts exist, with source-linked FAQ and correct nomenclature.",
      "lessons_before_this": [
        "L05"
      ],
      "lessons_after_this": [
        "L07"
      ]
    },
    {
      "lesson_id": "L07",
      "title": "6 — Multilingual discoverability",
      "purpose": "Cross-language retrieval/embeddings can help accessibility; translating captions does not force base models to reweight their knowledge.",
      "estimated_time": "6 min",
      "learning_objective": "One localized cue/metadata draft preserves entity names, timing and command semantics.",
      "lessons_before_this": [
        "L06"
      ],
      "lessons_after_this": [
        "L08"
      ]
    },
    {
      "lesson_id": "L08",
      "title": "7 — Entity SEO and disambiguation",
      "purpose": "Schema gives machines structured context. Valid markup alone does not guarantee a rich result or change YouTube’s private ranking weights.",
      "estimated_time": "6 min",
      "learning_objective": "The entities have distinct definitions and a valid draft VideoObject with accurate media URLs planned.",
      "lessons_before_this": [
        "L07"
      ],
      "lessons_after_this": [
        "L09"
      ]
    },
    {
      "lesson_id": "L09",
      "title": "8 — Knowledge graph thinking",
      "purpose": "A semantic graph should explain the relationship, not merely collect keyword links.",
      "estimated_time": "6 min",
      "learning_objective": "The graph names real nodes/relationships and provides a next step rather than an isolated video.",
      "lessons_before_this": [
        "L08"
      ],
      "lessons_after_this": [
        "L10"
      ]
    },
    {
      "lesson_id": "L10",
      "title": "9 — RAG-ready sections",
      "purpose": "This pack uses explicit JSONL chunks; it does not claim to train embeddings or deploy a vector database.",
      "estimated_time": "6 min",
      "learning_objective": "At least two chunks stand alone with entity/source, and one answer can be checked from its cited source.",
      "lessons_before_this": [
        "L09"
      ],
      "lessons_after_this": [
        "L11"
      ]
    },
    {
      "lesson_id": "L11",
      "title": "10 — Agent-ready execution",
      "purpose": "An executable procedure needs inputs, scope, prerequisites, expected results and failure handling, not simply a code block.",
      "estimated_time": "6 min",
      "learning_objective": "The three command cards are explicit and the actual local version check has an exit/result receipt.",
      "lessons_before_this": [
        "L10"
      ],
      "lessons_after_this": [
        "L12"
      ]
    },
    {
      "lesson_id": "L12",
      "title": "11 — Provenance and future intelligence",
      "purpose": "Future SI learning environments remain a research/design possibility. Do not advertise guaranteed ingestion, authority or model training.",
      "estimated_time": "6 min",
      "learning_objective": "The provenance manifest contains SHA256 hashes and source URLs, plus a grounded benchmark question.",
      "lessons_before_this": [
        "L11"
      ],
      "lessons_after_this": [
        "L13"
      ]
    },
    {
      "lesson_id": "L13",
      "title": "Capstone — lint and adversarially inspect",
      "purpose": "Lint can detect structural errors and changed bytes. It cannot prove indexing, recommendation, factual correctness or training inclusion.",
      "estimated_time": "12 min",
      "learning_objective": "A real edit causes PACK FAIL, then a reviewed correction produces PACK PASS.",
      "lessons_before_this": [
        "L12"
      ],
      "lessons_after_this": [
        "L14"
      ]
    },
    {
      "lesson_id": "L14",
      "title": "Build Bot Better — protect and recover",
      "purpose": "The September 23 BuildBotsBetter profile wipe removed Desktop, Documents and hidden agent memory together. Repeatable onboarding protects the knowledge needed to recover.",
      "estimated_time": "30 min",
      "learning_objective": "RESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch.",
      "lessons_before_this": [
        "L13"
      ],
      "lessons_after_this": []
    }
  ],
  "steps": [
    {
      "title": "Set up the practice folder",
      "purpose": "A dedicated folder makes mistakes easy to diagnose and keeps real project files separate.",
      "user_action": "Download the resource ZIP at the top of this Build. Extract it into a new folder you own (for example C:\\BBBPractice on Windows, or ~/bbb-practice on macOS/Linux). Open a terminal in the extracted folder. Run the version command for your platform. All subsequent commands assume this folder.",
      "explanation": "A dedicated folder makes mistakes easy to diagnose and keeps real project files separate.",
      "estimated_time": "6 min",
      "action_type": "command",
      "commands": {
        "windows": "python --version\nGet-Location\nGet-ChildItem",
        "macos": "python3 --version\npwd\nls",
        "linux": "python3 --version\npwd\nls"
      },
      "command_type": "shell",
      "required_inputs": [],
      "expected_result": "Python reports version 3.10 or newer and the terminal is in the extracted resource folder.",
      "resources": [],
      "checkpoint": {
        "what_is_being_checked": "Set up the practice folder",
        "success_condition": "Python reports version 3.10 or newer and the terminal is in the extracted resource folder.",
        "how_to_verify": "Record python reports version 3.10 or newer and the terminal is in the extracted resource folder. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Python is 3.10 or newer.",
          "The listed files match the downloaded resources."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Python reports version 3.10 or newer and the terminal is in the extracted resource folder.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "Python or a file is not found",
          "likely_cause": "The terminal may be outside the extracted ZIP or Python may not be on PATH.",
          "diagnostic_question": "Does the file list include the resource named by the next step?",
          "fix": "Install Python from python.org with the PATH option; reopen the terminal and change into the extracted folder.",
          "alternative_fix": "Use py -3 on Windows if the Python launcher is installed. macOS/Linux commands use python3.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Install Python from python.org with the PATH option; reopen the terminal and change into the extracted folder."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify set up the practice folder?",
          "answer": "Python reports version 3.10 or newer and the terminal is in the extracted resource folder. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use your saved work from the previous step. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to set up the practice folder. Python reports version 3.10 or newer and the terminal is in the extracted resource folder.",
        "demo": "Download the resource ZIP at the top of this Build. Extract it into a new folder you own (for example C:\\BBBPractice on Windows, or ~/bbb-practice on macOS/Linux). Open a terminal in the extracted folder. Run the version command for your platform. All subsequent commands assume this folder.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Install Python from python.org with the PATH option; reopen the terminal and change into the extracted folder.",
        "help": "Does the file list include the resource named by the next step?"
      },
      "video": {
        "purpose": "Demonstrate set up the practice folder",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Download the resource ZIP at the top of this Build. Extract it into a new folder you own (for example C:\\BBBPractice on Windows, or ~/bbb-practice on macOS/Linux). Open a terminal in the extracted folder. Run the version command for your platform. All subsequent commands assume this folder. Python reports version 3.10 or newer and the terminal is in the extracted resource folder.",
        "on_screen_text": [
          "Set up the practice folder",
          "Python reports version 3.10 or newer and the terminal is in the extracted resource folder."
        ],
        "screen_recording_instructions": [
          "Download the resource ZIP at the top of this Build. Extract it into a new folder you own (for example C:\\BBBPractice on Windows, or ~/bbb-practice on macOS/Linux). Open a terminal in the extracted folder. Run the version command for your platform. All subsequent commands assume this folder.",
          "Inspect the result: Python reports version 3.10 or newer and the terminal is in the extracted resource folder.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "Python reports version 3.10 or newer and the terminal is in the extracted resource folder."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Download the resource ZIP at the top of this Build. Extract it into a new folder you own (for example C:\\BBBPractice on Windows, or ~/bbb-practice on macOS/Linux). Open a terminal in the extracted folder. Run the version command for your platform. All subsequent commands assume this folder.",
          "Python reports version 3.10 or newer and the terminal is in the extracted resource folder."
        ]
      },
      "step_id": "L01-S01",
      "lesson_id": "L01"
    },
    {
      "title": "Map the six optimization levels and sixteen mechanisms",
      "purpose": "Publishing can improve accessibility and structure; proprietary training inclusion and future SI ingestion cannot be forced.",
      "user_action": "Run pack.py init once. Inspect truth.json: human, search, platform, AI, agentic and future-intelligence levels, plus all sixteen discovery mechanisms. Classify claims as known, likely/hypothesis or speculative. Mark “exact hidden ranking weights” unknown; do not promise model training, search indexing or recommendations.",
      "explanation": "Publishing can improve accessibility and structure; proprietary training inclusion and future SI ingestion cannot be forced.",
      "estimated_time": "6 min",
      "action_type": "command",
      "commands": {
        "windows": "python pack.py init",
        "macos": "python3 pack.py init",
        "linux": "python3 pack.py init"
      },
      "command_type": "shell",
      "required_inputs": [
        "pack.py"
      ],
      "expected_result": "The map contains six levels, sixteen mechanisms and distinct evidence categories.",
      "resources": [
        "pack.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Map the six optimization levels and sixteen mechanisms",
        "success_condition": "The map contains six levels, sixteen mechanisms and distinct evidence categories.",
        "how_to_verify": "Record the map contains six levels, sixteen mechanisms and distinct evidence categories. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The map contains six levels, sixteen mechanisms and distinct evidence categories.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The map contains six levels, sixteen mechanisms and distinct evidence categories.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify map the six optimization levels and sixteen mechanisms?",
          "answer": "The map contains six levels, sixteen mechanisms and distinct evidence categories. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use pack.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to map the six optimization levels and sixteen mechanisms. The map contains six levels, sixteen mechanisms and distinct evidence categories.",
        "demo": "Run pack.py init once. Inspect truth.json: human, search, platform, AI, agentic and future-intelligence levels, plus all sixteen discovery mechanisms. Classify claims as known, likely/hypothesis or speculative. Mark “exact hidden ranking weights” unknown; do not promise model training, search indexing or recommendations.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate map the six optimization levels and sixteen mechanisms",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Run pack.py init once. Inspect truth.json: human, search, platform, AI, agentic and future-intelligence levels, plus all sixteen discovery mechanisms. Classify claims as known, likely/hypothesis or speculative. Mark “exact hidden ranking weights” unknown; do not promise model training, search indexing or recommendations. The map contains six levels, sixteen mechanisms and distinct evidence categories.",
        "on_screen_text": [
          "Map the six optimization levels and sixteen mechanisms",
          "The map contains six levels, sixteen mechanisms and distinct evidence categories."
        ],
        "screen_recording_instructions": [
          "Run pack.py init once. Inspect truth.json: human, search, platform, AI, agentic and future-intelligence levels, plus all sixteen discovery mechanisms. Classify claims as known, likely/hypothesis or speculative. Mark “exact hidden ranking weights” unknown; do not promise model training, search indexing or recommendations.",
          "Inspect the result: The map contains six levels, sixteen mechanisms and distinct evidence categories.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "The map contains six levels, sixteen mechanisms and distinct evidence categories."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Run pack.py init once. Inspect truth.json: human, search, platform, AI, agentic and future-intelligence levels, plus all sixteen discovery mechanisms. Classify claims as known, likely/hypothesis or speculative. Mark “exact hidden ranking weights” unknown; do not promise model training, search indexing or recommendations.",
          "The map contains six levels, sixteen mechanisms and distinct evidence categories."
        ]
      },
      "step_id": "L02-S01",
      "lesson_id": "L02"
    },
    {
      "title": "Write the keyword and metadata brief",
      "purpose": "YouTube tags generally play a small discovery role; a clear topic and viewer usefulness matter more than stuffing tags.",
      "user_action": "Edit research.json for the video’s instructional intent. Choose one head term and three long-tail queries; inspect current results manually and record the date. Write title, first three description lines, thumbnail text hierarchy and a topic-cluster/playlist plan. Do not invent search-volume figures.",
      "explanation": "YouTube tags generally play a small discovery role; a clear topic and viewer usefulness matter more than stuffing tags.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "pack.py"
      ],
      "expected_result": "The research brief has intent, query evidence, title/description, thumbnail hierarchy and a cluster.",
      "resources": [
        "pack.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Write the keyword and metadata brief",
        "success_condition": "The research brief has intent, query evidence, title/description, thumbnail hierarchy and a cluster.",
        "how_to_verify": "Record the research brief has intent, query evidence, title/description, thumbnail hierarchy and a cluster. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The research brief has intent, query evidence, title/description, thumbnail hierarchy and a cluster.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The research brief has intent, query evidence, title/description, thumbnail hierarchy and a cluster.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify write the keyword and metadata brief?",
          "answer": "The research brief has intent, query evidence, title/description, thumbnail hierarchy and a cluster. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use pack.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to write the keyword and metadata brief. The research brief has intent, query evidence, title/description, thumbnail hierarchy and a cluster.",
        "demo": "Edit research.json for the video’s instructional intent. Choose one head term and three long-tail queries; inspect current results manually and record the date. Write title, first three description lines, thumbnail text hierarchy and a topic-cluster/playlist plan. Do not invent search-volume figures.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate write the keyword and metadata brief",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Edit research.json for the video’s instructional intent. Choose one head term and three long-tail queries; inspect current results manually and record the date. Write title, first three description lines, thumbnail text hierarchy and a topic-cluster/playlist plan. Do not invent search-volume figures. The research brief has intent, query evidence, title/description, thumbnail hierarchy and a cluster.",
        "on_screen_text": [
          "Write the keyword and metadata brief",
          "The research brief has intent, query evidence, title/description, thumbnail hierarchy and a cluster."
        ],
        "screen_recording_instructions": [
          "Edit research.json for the video’s instructional intent. Choose one head term and three long-tail queries; inspect current results manually and record the date. Write title, first three description lines, thumbnail text hierarchy and a topic-cluster/playlist plan. Do not invent search-volume figures.",
          "Inspect the result: The research brief has intent, query evidence, title/description, thumbnail hierarchy and a cluster.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "The research brief has intent, query evidence, title/description, thumbnail hierarchy and a cluster."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Edit research.json for the video’s instructional intent. Choose one head term and three long-tail queries; inspect current results manually and record the date. Write title, first three description lines, thumbnail text hierarchy and a topic-cluster/playlist plan. Do not invent search-volume figures.",
          "The research brief has intent, query evidence, title/description, thumbnail hierarchy and a cluster."
        ]
      },
      "step_id": "L03-S01",
      "lesson_id": "L03"
    },
    {
      "title": "Align speech, image and description",
      "purpose": "A video is synchronized audio, frames, captions, on-screen text and metadata, not only an MP4 file.",
      "user_action": "Edit grounding.json with time ranges, spoken entities, on-screen commands/diagrams and matching description terms. Inspect captions.srt, script.txt and metadata together. Add a pinned-resource draft, frame/visual plan and comment-review rule.",
      "explanation": "A video is synchronized audio, frames, captions, on-screen text and metadata, not only an MP4 file.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "pack.py"
      ],
      "expected_result": "Each named entity and command is aligned across speech, captions, screen and metadata.",
      "resources": [
        "pack.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Align speech, image and description",
        "success_condition": "Each named entity and command is aligned across speech, captions, screen and metadata.",
        "how_to_verify": "Record each named entity and command is aligned across speech, captions, screen and metadata. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Each named entity and command is aligned across speech, captions, screen and metadata.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Each named entity and command is aligned across speech, captions, screen and metadata.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify align speech, image and description?",
          "answer": "Each named entity and command is aligned across speech, captions, screen and metadata. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use pack.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to align speech, image and description. Each named entity and command is aligned across speech, captions, screen and metadata.",
        "demo": "Edit grounding.json with time ranges, spoken entities, on-screen commands/diagrams and matching description terms. Inspect captions.srt, script.txt and metadata together. Add a pinned-resource draft, frame/visual plan and comment-review rule.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate align speech, image and description",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Edit grounding.json with time ranges, spoken entities, on-screen commands/diagrams and matching description terms. Inspect captions.srt, script.txt and metadata together. Add a pinned-resource draft, frame/visual plan and comment-review rule. Each named entity and command is aligned across speech, captions, screen and metadata.",
        "on_screen_text": [
          "Align speech, image and description",
          "Each named entity and command is aligned across speech, captions, screen and metadata."
        ],
        "screen_recording_instructions": [
          "Edit grounding.json with time ranges, spoken entities, on-screen commands/diagrams and matching description terms. Inspect captions.srt, script.txt and metadata together. Add a pinned-resource draft, frame/visual plan and comment-review rule.",
          "Inspect the result: Each named entity and command is aligned across speech, captions, screen and metadata.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "Each named entity and command is aligned across speech, captions, screen and metadata."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Edit grounding.json with time ranges, spoken entities, on-screen commands/diagrams and matching description terms. Inspect captions.srt, script.txt and metadata together. Add a pinned-resource draft, frame/visual plan and comment-review rule.",
          "Each named entity and command is aligned across speech, captions, screen and metadata."
        ]
      },
      "step_id": "L04-S01",
      "lesson_id": "L04"
    },
    {
      "title": "Replace vague references with named actions",
      "purpose": "The shared brief’s button example is conceptual; the actual CLI installation is an npm command. Explicit nouns help a standalone transcript remain useful.",
      "user_action": "Edit script.txt and semantic.md. Replace “click here”, “that tool” and “this thing” with the exact software, action and visible location. Speak command names clearly and display the actual string; do not narrate that npm has an Install button.",
      "explanation": "The shared brief’s button example is conceptual; the actual CLI installation is an npm command. Explicit nouns help a standalone transcript remain useful.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "pack.py"
      ],
      "expected_result": "The script names Qwen Code, Node.js and exact commands, with no vague click instruction.",
      "resources": [
        "pack.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Replace vague references with named actions",
        "success_condition": "The script names Qwen Code, Node.js and exact commands, with no vague click instruction.",
        "how_to_verify": "Record the script names Qwen Code, Node.js and exact commands, with no vague click instruction. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The script names Qwen Code, Node.js and exact commands, with no vague click instruction.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The script names Qwen Code, Node.js and exact commands, with no vague click instruction.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify replace vague references with named actions?",
          "answer": "The script names Qwen Code, Node.js and exact commands, with no vague click instruction. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use pack.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to replace vague references with named actions. The script names Qwen Code, Node.js and exact commands, with no vague click instruction.",
        "demo": "Edit script.txt and semantic.md. Replace “click here”, “that tool” and “this thing” with the exact software, action and visible location. Speak command names clearly and display the actual string; do not narrate that npm has an Install button.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate replace vague references with named actions",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Edit script.txt and semantic.md. Replace “click here”, “that tool” and “this thing” with the exact software, action and visible location. Speak command names clearly and display the actual string; do not narrate that npm has an Install button. The script names Qwen Code, Node.js and exact commands, with no vague click instruction.",
        "on_screen_text": [
          "Replace vague references with named actions",
          "The script names Qwen Code, Node.js and exact commands, with no vague click instruction."
        ],
        "screen_recording_instructions": [
          "Edit script.txt and semantic.md. Replace “click here”, “that tool” and “this thing” with the exact software, action and visible location. Speak command names clearly and display the actual string; do not narrate that npm has an Install button.",
          "Inspect the result: The script names Qwen Code, Node.js and exact commands, with no vague click instruction.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "The script names Qwen Code, Node.js and exact commands, with no vague click instruction."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Edit script.txt and semantic.md. Replace “click here”, “that tool” and “this thing” with the exact software, action and visible location. Speak command names clearly and display the actual string; do not narrate that npm has an Install button.",
          "The script names Qwen Code, Node.js and exact commands, with no vague click instruction."
        ]
      },
      "step_id": "L05-S01",
      "lesson_id": "L05"
    },
    {
      "title": "Inspect all ten downstream artifacts",
      "purpose": "A generated pack is a starting example. A transcript must be checked against the actual recording; local artifacts are not proof of video publication.",
      "user_action": "Open semantic.md, faq.json, glossary.json, abstract.md, tutorial.md, video.jsonld, eval-prompts.json, social-drafts.md, rag.jsonl and test_machine.py. Correct technical spelling, punctuation, speaker labels and source links. Review captions against real audio when you make the video.",
      "explanation": "A generated pack is a starting example. A transcript must be checked against the actual recording; local artifacts are not proof of video publication.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "pack.py"
      ],
      "expected_result": "Ten distinct machine artifacts exist, with source-linked FAQ and correct nomenclature.",
      "resources": [
        "pack.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Inspect all ten downstream artifacts",
        "success_condition": "Ten distinct machine artifacts exist, with source-linked FAQ and correct nomenclature.",
        "how_to_verify": "Record ten distinct machine artifacts exist, with source-linked FAQ and correct nomenclature. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Ten distinct machine artifacts exist, with source-linked FAQ and correct nomenclature.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Ten distinct machine artifacts exist, with source-linked FAQ and correct nomenclature.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify inspect all ten downstream artifacts?",
          "answer": "Ten distinct machine artifacts exist, with source-linked FAQ and correct nomenclature. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use pack.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to inspect all ten downstream artifacts. Ten distinct machine artifacts exist, with source-linked FAQ and correct nomenclature.",
        "demo": "Open semantic.md, faq.json, glossary.json, abstract.md, tutorial.md, video.jsonld, eval-prompts.json, social-drafts.md, rag.jsonl and test_machine.py. Correct technical spelling, punctuation, speaker labels and source links. Review captions against real audio when you make the video.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate inspect all ten downstream artifacts",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Open semantic.md, faq.json, glossary.json, abstract.md, tutorial.md, video.jsonld, eval-prompts.json, social-drafts.md, rag.jsonl and test_machine.py. Correct technical spelling, punctuation, speaker labels and source links. Review captions against real audio when you make the video. Ten distinct machine artifacts exist, with source-linked FAQ and correct nomenclature.",
        "on_screen_text": [
          "Inspect all ten downstream artifacts",
          "Ten distinct machine artifacts exist, with source-linked FAQ and correct nomenclature."
        ],
        "screen_recording_instructions": [
          "Open semantic.md, faq.json, glossary.json, abstract.md, tutorial.md, video.jsonld, eval-prompts.json, social-drafts.md, rag.jsonl and test_machine.py. Correct technical spelling, punctuation, speaker labels and source links. Review captions against real audio when you make the video.",
          "Inspect the result: Ten distinct machine artifacts exist, with source-linked FAQ and correct nomenclature.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "Ten distinct machine artifacts exist, with source-linked FAQ and correct nomenclature."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Open semantic.md, faq.json, glossary.json, abstract.md, tutorial.md, video.jsonld, eval-prompts.json, social-drafts.md, rag.jsonl and test_machine.py. Correct technical spelling, punctuation, speaker labels and source links. Review captions against real audio when you make the video.",
          "Ten distinct machine artifacts exist, with source-linked FAQ and correct nomenclature."
        ]
      },
      "step_id": "L06-S01",
      "lesson_id": "L06"
    },
    {
      "title": "Design a meaning-preserving caption translation",
      "purpose": "Cross-language retrieval/embeddings can help accessibility; translating captions does not force base models to reweight their knowledge.",
      "user_action": "Use localization.json to plan one target language. Translate a caption cue, title and description, retaining timing, Qwen Code/Node.js names and command strings. Ask a fluent reviewer to compare the source and target meaning. Keep optional dubbing separate and consented.",
      "explanation": "Cross-language retrieval/embeddings can help accessibility; translating captions does not force base models to reweight their knowledge.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "pack.py"
      ],
      "expected_result": "One localized cue/metadata draft preserves entity names, timing and command semantics.",
      "resources": [
        "pack.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Design a meaning-preserving caption translation",
        "success_condition": "One localized cue/metadata draft preserves entity names, timing and command semantics.",
        "how_to_verify": "Record one localized cue/metadata draft preserves entity names, timing and command semantics. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "One localized cue/metadata draft preserves entity names, timing and command semantics.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. One localized cue/metadata draft preserves entity names, timing and command semantics.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify design a meaning-preserving caption translation?",
          "answer": "One localized cue/metadata draft preserves entity names, timing and command semantics. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use pack.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to design a meaning-preserving caption translation. One localized cue/metadata draft preserves entity names, timing and command semantics.",
        "demo": "Use localization.json to plan one target language. Translate a caption cue, title and description, retaining timing, Qwen Code/Node.js names and command strings. Ask a fluent reviewer to compare the source and target meaning. Keep optional dubbing separate and consented.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate design a meaning-preserving caption translation",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Use localization.json to plan one target language. Translate a caption cue, title and description, retaining timing, Qwen Code/Node.js names and command strings. Ask a fluent reviewer to compare the source and target meaning. Keep optional dubbing separate and consented. One localized cue/metadata draft preserves entity names, timing and command semantics.",
        "on_screen_text": [
          "Design a meaning-preserving caption translation",
          "One localized cue/metadata draft preserves entity names, timing and command semantics."
        ],
        "screen_recording_instructions": [
          "Use localization.json to plan one target language. Translate a caption cue, title and description, retaining timing, Qwen Code/Node.js names and command strings. Ask a fluent reviewer to compare the source and target meaning. Keep optional dubbing separate and consented.",
          "Inspect the result: One localized cue/metadata draft preserves entity names, timing and command semantics.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "One localized cue/metadata draft preserves entity names, timing and command semantics."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Use localization.json to plan one target language. Translate a caption cue, title and description, retaining timing, Qwen Code/Node.js names and command strings. Ask a fluent reviewer to compare the source and target meaning. Keep optional dubbing separate and consented.",
          "One localized cue/metadata draft preserves entity names, timing and command semantics."
        ]
      },
      "step_id": "L07-S01",
      "lesson_id": "L07"
    },
    {
      "title": "Define the entities precisely",
      "purpose": "Schema gives machines structured context. Valid markup alone does not guarantee a rich result or change YouTube’s private ranking weights.",
      "user_action": "Edit glossary.json: name → definition → category → creator/context → use case. Keep Qwen Code (agent harness) distinct from Qwen model weights and Ollama (optional model host). Replace the example.com thumbnail/video URLs in video.jsonld before real publication.",
      "explanation": "Schema gives machines structured context. Valid markup alone does not guarantee a rich result or change YouTube’s private ranking weights.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "pack.py"
      ],
      "expected_result": "The entities have distinct definitions and a valid draft VideoObject with accurate media URLs planned.",
      "resources": [
        "pack.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Define the entities precisely",
        "success_condition": "The entities have distinct definitions and a valid draft VideoObject with accurate media URLs planned.",
        "how_to_verify": "Record the entities have distinct definitions and a valid draft VideoObject with accurate media URLs planned. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The entities have distinct definitions and a valid draft VideoObject with accurate media URLs planned.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The entities have distinct definitions and a valid draft VideoObject with accurate media URLs planned.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify define the entities precisely?",
          "answer": "The entities have distinct definitions and a valid draft VideoObject with accurate media URLs planned. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use pack.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to define the entities precisely. The entities have distinct definitions and a valid draft VideoObject with accurate media URLs planned.",
        "demo": "Edit glossary.json: name → definition → category → creator/context → use case. Keep Qwen Code (agent harness) distinct from Qwen model weights and Ollama (optional model host). Replace the example.com thumbnail/video URLs in video.jsonld before real publication.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate define the entities precisely",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Edit glossary.json: name → definition → category → creator/context → use case. Keep Qwen Code (agent harness) distinct from Qwen model weights and Ollama (optional model host). Replace the example.com thumbnail/video URLs in video.jsonld before real publication. The entities have distinct definitions and a valid draft VideoObject with accurate media URLs planned.",
        "on_screen_text": [
          "Define the entities precisely",
          "The entities have distinct definitions and a valid draft VideoObject with accurate media URLs planned."
        ],
        "screen_recording_instructions": [
          "Edit glossary.json: name → definition → category → creator/context → use case. Keep Qwen Code (agent harness) distinct from Qwen model weights and Ollama (optional model host). Replace the example.com thumbnail/video URLs in video.jsonld before real publication.",
          "Inspect the result: The entities have distinct definitions and a valid draft VideoObject with accurate media URLs planned.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "The entities have distinct definitions and a valid draft VideoObject with accurate media URLs planned."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Edit glossary.json: name → definition → category → creator/context → use case. Keep Qwen Code (agent harness) distinct from Qwen model weights and Ollama (optional model host). Replace the example.com thumbnail/video URLs in video.jsonld before real publication.",
          "The entities have distinct definitions and a valid draft VideoObject with accurate media URLs planned."
        ]
      },
      "step_id": "L08-S01",
      "lesson_id": "L08"
    },
    {
      "title": "Connect the lesson to useful neighbors",
      "purpose": "A semantic graph should explain the relationship, not merely collect keyword links.",
      "user_action": "Edit graph.json with prerequisite-of, enables, extends or alternative-to edges. Make a companion-page/playlist plan with reciprocal descriptions and a glossary hub. Check for a dead end and choose the next verified project after setup.",
      "explanation": "A semantic graph should explain the relationship, not merely collect keyword links.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "pack.py"
      ],
      "expected_result": "The graph names real nodes/relationships and provides a next step rather than an isolated video.",
      "resources": [
        "pack.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Connect the lesson to useful neighbors",
        "success_condition": "The graph names real nodes/relationships and provides a next step rather than an isolated video.",
        "how_to_verify": "Record the graph names real nodes/relationships and provides a next step rather than an isolated video. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The graph names real nodes/relationships and provides a next step rather than an isolated video.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The graph names real nodes/relationships and provides a next step rather than an isolated video.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify connect the lesson to useful neighbors?",
          "answer": "The graph names real nodes/relationships and provides a next step rather than an isolated video. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use pack.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to connect the lesson to useful neighbors. The graph names real nodes/relationships and provides a next step rather than an isolated video.",
        "demo": "Edit graph.json with prerequisite-of, enables, extends or alternative-to edges. Make a companion-page/playlist plan with reciprocal descriptions and a glossary hub. Check for a dead end and choose the next verified project after setup.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate connect the lesson to useful neighbors",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Edit graph.json with prerequisite-of, enables, extends or alternative-to edges. Make a companion-page/playlist plan with reciprocal descriptions and a glossary hub. Check for a dead end and choose the next verified project after setup. The graph names real nodes/relationships and provides a next step rather than an isolated video.",
        "on_screen_text": [
          "Connect the lesson to useful neighbors",
          "The graph names real nodes/relationships and provides a next step rather than an isolated video."
        ],
        "screen_recording_instructions": [
          "Edit graph.json with prerequisite-of, enables, extends or alternative-to edges. Make a companion-page/playlist plan with reciprocal descriptions and a glossary hub. Check for a dead end and choose the next verified project after setup.",
          "Inspect the result: The graph names real nodes/relationships and provides a next step rather than an isolated video.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "The graph names real nodes/relationships and provides a next step rather than an isolated video."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Edit graph.json with prerequisite-of, enables, extends or alternative-to edges. Make a companion-page/playlist plan with reciprocal descriptions and a glossary hub. Check for a dead end and choose the next verified project after setup.",
          "The graph names real nodes/relationships and provides a next step rather than an isolated video."
        ]
      },
      "step_id": "L09-S01",
      "lesson_id": "L09"
    },
    {
      "title": "Make retrieval chunks self-contained",
      "purpose": "This pack uses explicit JSONL chunks; it does not claim to train embeddings or deploy a vector database.",
      "user_action": "Edit rag.jsonl so each row has ID, entity, complete standalone fact and source URL. Add one direct question/answer pair that includes the software and prerequisite without relying on pronouns or a parent heading. Sketch chunk → embed → retrieve → cite.",
      "explanation": "This pack uses explicit JSONL chunks; it does not claim to train embeddings or deploy a vector database.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "pack.py"
      ],
      "expected_result": "At least two chunks stand alone with entity/source, and one answer can be checked from its cited source.",
      "resources": [
        "pack.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Make retrieval chunks self-contained",
        "success_condition": "At least two chunks stand alone with entity/source, and one answer can be checked from its cited source.",
        "how_to_verify": "Record at least two chunks stand alone with entity/source, and one answer can be checked from its cited source. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "At least two chunks stand alone with entity/source, and one answer can be checked from its cited source.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. At least two chunks stand alone with entity/source, and one answer can be checked from its cited source.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify make retrieval chunks self-contained?",
          "answer": "At least two chunks stand alone with entity/source, and one answer can be checked from its cited source. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use pack.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to make retrieval chunks self-contained. At least two chunks stand alone with entity/source, and one answer can be checked from its cited source.",
        "demo": "Edit rag.jsonl so each row has ID, entity, complete standalone fact and source URL. Add one direct question/answer pair that includes the software and prerequisite without relying on pronouns or a parent heading. Sketch chunk → embed → retrieve → cite.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate make retrieval chunks self-contained",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Edit rag.jsonl so each row has ID, entity, complete standalone fact and source URL. Add one direct question/answer pair that includes the software and prerequisite without relying on pronouns or a parent heading. Sketch chunk → embed → retrieve → cite. At least two chunks stand alone with entity/source, and one answer can be checked from its cited source.",
        "on_screen_text": [
          "Make retrieval chunks self-contained",
          "At least two chunks stand alone with entity/source, and one answer can be checked from its cited source."
        ],
        "screen_recording_instructions": [
          "Edit rag.jsonl so each row has ID, entity, complete standalone fact and source URL. Add one direct question/answer pair that includes the software and prerequisite without relying on pronouns or a parent heading. Sketch chunk → embed → retrieve → cite.",
          "Inspect the result: At least two chunks stand alone with entity/source, and one answer can be checked from its cited source.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "At least two chunks stand alone with entity/source, and one answer can be checked from its cited source."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Edit rag.jsonl so each row has ID, entity, complete standalone fact and source URL. Add one direct question/answer pair that includes the software and prerequisite without relying on pronouns or a parent heading. Sketch chunk → embed → retrieve → cite.",
          "At least two chunks stand alone with entity/source, and one answer can be checked from its cited source."
        ]
      },
      "step_id": "L10-S01",
      "lesson_id": "L10"
    },
    {
      "title": "Verify three-platform command cards",
      "purpose": "An executable procedure needs inputs, scope, prerequisites, expected results and failure handling, not simply a code block.",
      "user_action": "Inspect agent-commands.json: Windows PowerShell, macOS zsh and Linux bash cards, parameter schema, working directory, expected exit code, runtime prerequisite and failure tree. Run a non-mutating version check on your OS and save the output; do not claim the other OS branches ran.",
      "explanation": "An executable procedure needs inputs, scope, prerequisites, expected results and failure handling, not simply a code block.",
      "estimated_time": "6 min",
      "action_type": "command",
      "commands": {
        "windows": "node --version\nnpm.cmd --version",
        "macos": "node --version\nnpm --version",
        "linux": "node --version\nnpm --version"
      },
      "command_type": "shell",
      "required_inputs": [
        "pack.py"
      ],
      "expected_result": "The three command cards are explicit and the actual local version check has an exit/result receipt.",
      "resources": [
        "pack.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Verify three-platform command cards",
        "success_condition": "The three command cards are explicit and the actual local version check has an exit/result receipt.",
        "how_to_verify": "Record the three command cards are explicit and the actual local version check has an exit/result receipt. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The three command cards are explicit and the actual local version check has an exit/result receipt.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The three command cards are explicit and the actual local version check has an exit/result receipt.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify verify three-platform command cards?",
          "answer": "The three command cards are explicit and the actual local version check has an exit/result receipt. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use pack.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to verify three-platform command cards. The three command cards are explicit and the actual local version check has an exit/result receipt.",
        "demo": "Inspect agent-commands.json: Windows PowerShell, macOS zsh and Linux bash cards, parameter schema, working directory, expected exit code, runtime prerequisite and failure tree. Run a non-mutating version check on your OS and save the output; do not claim the other OS branches ran.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate verify three-platform command cards",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Inspect agent-commands.json: Windows PowerShell, macOS zsh and Linux bash cards, parameter schema, working directory, expected exit code, runtime prerequisite and failure tree. Run a non-mutating version check on your OS and save the output; do not claim the other OS branches ran. The three command cards are explicit and the actual local version check has an exit/result receipt.",
        "on_screen_text": [
          "Verify three-platform command cards",
          "The three command cards are explicit and the actual local version check has an exit/result receipt."
        ],
        "screen_recording_instructions": [
          "Inspect agent-commands.json: Windows PowerShell, macOS zsh and Linux bash cards, parameter schema, working directory, expected exit code, runtime prerequisite and failure tree. Run a non-mutating version check on your OS and save the output; do not claim the other OS branches ran.",
          "Inspect the result: The three command cards are explicit and the actual local version check has an exit/result receipt.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "The three command cards are explicit and the actual local version check has an exit/result receipt."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Inspect agent-commands.json: Windows PowerShell, macOS zsh and Linux bash cards, parameter schema, working directory, expected exit code, runtime prerequisite and failure tree. Run a non-mutating version check on your OS and save the output; do not claim the other OS branches ran.",
          "The three command cards are explicit and the actual local version check has an exit/result receipt."
        ]
      },
      "step_id": "L11-S01",
      "lesson_id": "L11"
    },
    {
      "title": "Hash the reviewed knowledge pack",
      "purpose": "Future SI learning environments remain a research/design possibility. Do not advertise guaranteed ingestion, authority or model training.",
      "user_action": "Record the checked source URLs and date. After reviewing each factual change, run pack.py hash to regenerate provenance.json. Explain that hashes detect changed bytes, while signatures require a separately managed signing identity and neither proves a claim true. Design one synthetic benchmark question grounded in a chunk.",
      "explanation": "Future SI learning environments remain a research/design possibility. Do not advertise guaranteed ingestion, authority or model training.",
      "estimated_time": "6 min",
      "action_type": "command",
      "commands": {
        "windows": "python pack.py hash",
        "macos": "python3 pack.py hash",
        "linux": "python3 pack.py hash"
      },
      "command_type": "shell",
      "required_inputs": [
        "pack.py"
      ],
      "expected_result": "The provenance manifest contains SHA256 hashes and source URLs, plus a grounded benchmark question.",
      "resources": [
        "pack.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Hash the reviewed knowledge pack",
        "success_condition": "The provenance manifest contains SHA256 hashes and source URLs, plus a grounded benchmark question.",
        "how_to_verify": "Record the provenance manifest contains SHA256 hashes and source URLs, plus a grounded benchmark question. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The provenance manifest contains SHA256 hashes and source URLs, plus a grounded benchmark question.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The provenance manifest contains SHA256 hashes and source URLs, plus a grounded benchmark question.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify hash the reviewed knowledge pack?",
          "answer": "The provenance manifest contains SHA256 hashes and source URLs, plus a grounded benchmark question. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use pack.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to hash the reviewed knowledge pack. The provenance manifest contains SHA256 hashes and source URLs, plus a grounded benchmark question.",
        "demo": "Record the checked source URLs and date. After reviewing each factual change, run pack.py hash to regenerate provenance.json. Explain that hashes detect changed bytes, while signatures require a separately managed signing identity and neither proves a claim true. Design one synthetic benchmark question grounded in a chunk.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate hash the reviewed knowledge pack",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Record the checked source URLs and date. After reviewing each factual change, run pack.py hash to regenerate provenance.json. Explain that hashes detect changed bytes, while signatures require a separately managed signing identity and neither proves a claim true. Design one synthetic benchmark question grounded in a chunk. The provenance manifest contains SHA256 hashes and source URLs, plus a grounded benchmark question.",
        "on_screen_text": [
          "Hash the reviewed knowledge pack",
          "The provenance manifest contains SHA256 hashes and source URLs, plus a grounded benchmark question."
        ],
        "screen_recording_instructions": [
          "Record the checked source URLs and date. After reviewing each factual change, run pack.py hash to regenerate provenance.json. Explain that hashes detect changed bytes, while signatures require a separately managed signing identity and neither proves a claim true. Design one synthetic benchmark question grounded in a chunk.",
          "Inspect the result: The provenance manifest contains SHA256 hashes and source URLs, plus a grounded benchmark question.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "The provenance manifest contains SHA256 hashes and source URLs, plus a grounded benchmark question."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Record the checked source URLs and date. After reviewing each factual change, run pack.py hash to regenerate provenance.json. Explain that hashes detect changed bytes, while signatures require a separately managed signing identity and neither proves a claim true. Design one synthetic benchmark question grounded in a chunk.",
          "The provenance manifest contains SHA256 hashes and source URLs, plus a grounded benchmark question."
        ]
      },
      "step_id": "L12-S01",
      "lesson_id": "L12"
    },
    {
      "title": "Run the pack checks",
      "purpose": "Lint can detect structural errors and changed bytes. It cannot prove indexing, recommendation, factual correctness or training inclusion.",
      "user_action": "Run pack.py lint after reviewing and hashing your edits. Inspect lint.json. Run test_machine.py from the knowledge-pack directory. Compare caption text with speech, check chapter start 00:00, at least three chapters, ten seconds minimum each, and replace placeholder media URLs before publishing.",
      "explanation": "Lint can detect structural errors and changed bytes. It cannot prove indexing, recommendation, factual correctness or training inclusion.",
      "estimated_time": "6 min",
      "action_type": "command",
      "commands": {
        "windows": "python pack.py lint\n# Then change into knowledge-pack:\npython test_machine.py",
        "macos": "python3 pack.py lint\n# Then change into knowledge-pack:\npython3 test_machine.py",
        "linux": "python3 pack.py lint\n# Then change into knowledge-pack:\npython3 test_machine.py"
      },
      "command_type": "shell",
      "required_inputs": [
        "pack.py"
      ],
      "expected_result": "PACK PASS and MACHINE PASS prove the structural checks; human caption/source/media review is recorded.",
      "resources": [
        "pack.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Run the pack checks",
        "success_condition": "PACK PASS and MACHINE PASS prove the structural checks; human caption/source/media review is recorded.",
        "how_to_verify": "Record pACK PASS and MACHINE PASS prove the structural checks; human caption/source/media review is recorded. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "PACK PASS and MACHINE PASS prove the structural checks; human caption/source/media review is recorded.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [
          "PACK PASS",
          "MACHINE PASS"
        ],
        "user_visible_success_message": "Evidence saved. PACK PASS and MACHINE PASS prove the structural checks; human caption/source/media review is recorded.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify run the pack checks?",
          "answer": "PACK PASS and MACHINE PASS prove the structural checks; human caption/source/media review is recorded. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use pack.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to run the pack checks. PACK PASS and MACHINE PASS prove the structural checks; human caption/source/media review is recorded.",
        "demo": "Run pack.py lint after reviewing and hashing your edits. Inspect lint.json. Run test_machine.py from the knowledge-pack directory. Compare caption text with speech, check chapter start 00:00, at least three chapters, ten seconds minimum each, and replace placeholder media URLs before publishing.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate run the pack checks",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Run pack.py lint after reviewing and hashing your edits. Inspect lint.json. Run test_machine.py from the knowledge-pack directory. Compare caption text with speech, check chapter start 00:00, at least three chapters, ten seconds minimum each, and replace placeholder media URLs before publishing. PACK PASS and MACHINE PASS prove the structural checks; human caption/source/media review is recorded.",
        "on_screen_text": [
          "Run the pack checks",
          "PACK PASS and MACHINE PASS prove the structural checks; human caption/source/media review is recorded."
        ],
        "screen_recording_instructions": [
          "Run pack.py lint after reviewing and hashing your edits. Inspect lint.json. Run test_machine.py from the knowledge-pack directory. Compare caption text with speech, check chapter start 00:00, at least three chapters, ten seconds minimum each, and replace placeholder media URLs before publishing.",
          "Inspect the result: PACK PASS and MACHINE PASS prove the structural checks; human caption/source/media review is recorded.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "PACK PASS and MACHINE PASS prove the structural checks; human caption/source/media review is recorded."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Run pack.py lint after reviewing and hashing your edits. Inspect lint.json. Run test_machine.py from the knowledge-pack directory. Compare caption text with speech, check chapter start 00:00, at least three chapters, ten seconds minimum each, and replace placeholder media URLs before publishing.",
          "PACK PASS and MACHINE PASS prove the structural checks; human caption/source/media review is recorded."
        ]
      },
      "step_id": "L13-S01",
      "lesson_id": "L13"
    },
    {
      "title": "Prove an error is caught",
      "purpose": "The negative test proves the lint is capable of distinguishing a broken artifact from the expected pack.",
      "user_action": "Change one script phrase to “click here” and run lint before regenerating hashes. Confirm ambiguous instruction and changed bytes appear. Restore the named action, review it, then hash and lint again. Export the pack and the pass/fail evidence.",
      "explanation": "The negative test proves the lint is capable of distinguishing a broken artifact from the expected pack.",
      "estimated_time": "6 min",
      "action_type": "command",
      "commands": {
        "windows": "python pack.py lint\n# After the reviewed correction:\npython pack.py hash\npython pack.py lint",
        "macos": "python3 pack.py lint\n# After the reviewed correction:\npython3 pack.py hash\npython3 pack.py lint",
        "linux": "python3 pack.py lint\n# After the reviewed correction:\npython3 pack.py hash\npython3 pack.py lint"
      },
      "command_type": "shell",
      "required_inputs": [
        "pack.py"
      ],
      "expected_result": "A real edit causes PACK FAIL, then a reviewed correction produces PACK PASS.",
      "resources": [
        "pack.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Prove an error is caught",
        "success_condition": "A real edit causes PACK FAIL, then a reviewed correction produces PACK PASS.",
        "how_to_verify": "Record a real edit causes PACK FAIL, then a reviewed correction produces PACK PASS. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A real edit causes PACK FAIL, then a reviewed correction produces PACK PASS.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [
          "PACK PASS"
        ],
        "user_visible_success_message": "Evidence saved. A real edit causes PACK FAIL, then a reviewed correction produces PACK PASS.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify prove an error is caught?",
          "answer": "A real edit causes PACK FAIL, then a reviewed correction produces PACK PASS. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use pack.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to prove an error is caught. A real edit causes PACK FAIL, then a reviewed correction produces PACK PASS.",
        "demo": "Change one script phrase to “click here” and run lint before regenerating hashes. Confirm ambiguous instruction and changed bytes appear. Restore the named action, review it, then hash and lint again. Export the pack and the pass/fail evidence.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate prove an error is caught",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Change one script phrase to “click here” and run lint before regenerating hashes. Confirm ambiguous instruction and changed bytes appear. Restore the named action, review it, then hash and lint again. Export the pack and the pass/fail evidence. A real edit causes PACK FAIL, then a reviewed correction produces PACK PASS.",
        "on_screen_text": [
          "Prove an error is caught",
          "A real edit causes PACK FAIL, then a reviewed correction produces PACK PASS."
        ],
        "screen_recording_instructions": [
          "Change one script phrase to “click here” and run lint before regenerating hashes. Confirm ambiguous instruction and changed bytes appear. Restore the named action, review it, then hash and lint again. Export the pack and the pass/fail evidence.",
          "Inspect the result: A real edit causes PACK FAIL, then a reviewed correction produces PACK PASS.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "A real edit causes PACK FAIL, then a reviewed correction produces PACK PASS."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Change one script phrase to “click here” and run lint before regenerating hashes. Confirm ambiguous instruction and changed bytes appear. Restore the named action, review it, then hash and lint again. Export the pack and the pass/fail evidence.",
          "A real edit causes PACK FAIL, then a reviewed correction produces PACK PASS."
        ]
      },
      "step_id": "L13-S02",
      "lesson_id": "L13"
    },
    {
      "title": "Write a repeatable onboarding checklist",
      "purpose": "The September 23 BuildBotsBetter profile wipe removed Desktop, Documents and hidden agent memory together. Repeatable onboarding protects the knowledge needed to recover.",
      "user_action": "Fill in onboarding-checklist.md for your agent. Record AGENTS.md, the tool’s user settings and memory folder, the assigned workspace, permissions, guard location, backup schedule, and a final proof task. Keep the checklist in your project.",
      "explanation": "The September 23 BuildBotsBetter profile wipe removed Desktop, Documents and hidden agent memory together. Repeatable onboarding protects the knowledge needed to recover.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "onboarding-checklist.md"
      ],
      "expected_result": "The checklist contains a concrete path and owner for rules, memory, permissions, guard, backup, restore and final verification.",
      "resources": [
        "onboarding-checklist.md"
      ],
      "checkpoint": {
        "what_is_being_checked": "Write a repeatable onboarding checklist",
        "success_condition": "The checklist contains a concrete path and owner for rules, memory, permissions, guard, backup, restore and final verification.",
        "how_to_verify": "Record the checklist contains a concrete path and owner for rules, memory, permissions, guard, backup, restore and final verification. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The checklist contains a concrete path and owner for rules, memory, permissions, guard, backup, restore and final verification.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The checklist contains a concrete path and owner for rules, memory, permissions, guard, backup, restore and final verification.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify write a repeatable onboarding checklist?",
          "answer": "The checklist contains a concrete path and owner for rules, memory, permissions, guard, backup, restore and final verification. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use onboarding-checklist.md. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to write a repeatable onboarding checklist. The checklist contains a concrete path and owner for rules, memory, permissions, guard, backup, restore and final verification.",
        "demo": "Fill in onboarding-checklist.md for your agent. Record AGENTS.md, the tool’s user settings and memory folder, the assigned workspace, permissions, guard location, backup schedule, and a final proof task. Keep the checklist in your project.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate write a repeatable onboarding checklist",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Fill in onboarding-checklist.md for your agent. Record AGENTS.md, the tool’s user settings and memory folder, the assigned workspace, permissions, guard location, backup schedule, and a final proof task. Keep the checklist in your project. The checklist contains a concrete path and owner for rules, memory, permissions, guard, backup, restore and final verification.",
        "on_screen_text": [
          "Write a repeatable onboarding checklist",
          "The checklist contains a concrete path and owner for rules, memory, permissions, guard, backup, restore and final verification."
        ],
        "screen_recording_instructions": [
          "Fill in onboarding-checklist.md for your agent. Record AGENTS.md, the tool’s user settings and memory folder, the assigned workspace, permissions, guard location, backup schedule, and a final proof task. Keep the checklist in your project.",
          "Inspect the result: The checklist contains a concrete path and owner for rules, memory, permissions, guard, backup, restore and final verification.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "The checklist contains a concrete path and owner for rules, memory, permissions, guard, backup, restore and final verification."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Fill in onboarding-checklist.md for your agent. Record AGENTS.md, the tool’s user settings and memory folder, the assigned workspace, permissions, guard location, backup schedule, and a final proof task. Keep the checklist in your project.",
          "The checklist contains a concrete path and owner for rules, memory, permissions, guard, backup, restore and final verification."
        ]
      },
      "step_id": "L14-S01",
      "lesson_id": "L14"
    },
    {
      "title": "Demonstrate the variable-path limit safely",
      "purpose": "A command-text hook can miss a target computed inside a script or variable. This demonstrator checks resolved paths but is not an operating-system sandbox. For a real operation, enforce the resolved boundary at the operation itself; symlinks and races still require care.",
      "user_action": "Run workspace_guard.py --self-test. Read the source: the target is resolved before deciding. The variable_target case points at the home folder but performs no filesystem operation. Compare this with a hook that sees only command text.",
      "explanation": "A command-text hook can miss a target computed inside a script or variable. This demonstrator checks resolved paths but is not an operating-system sandbox. For a real operation, enforce the resolved boundary at the operation itself; symlinks and races still require care.",
      "estimated_time": "6 min",
      "action_type": "command",
      "commands": {
        "windows": "python workspace_guard.py --self-test",
        "macos": "python3 workspace_guard.py --self-test",
        "linux": "python3 workspace_guard.py --self-test"
      },
      "command_type": "shell",
      "required_inputs": [
        "workspace_guard.py"
      ],
      "expected_result": "GUARD PASS reports inside allowed and profile, outside, variable-derived profile and workspace root denied; no deletion was executed.",
      "resources": [
        "workspace_guard.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Demonstrate the variable-path limit safely",
        "success_condition": "GUARD PASS reports inside allowed and profile, outside, variable-derived profile and workspace root denied; no deletion was executed.",
        "how_to_verify": "Record gUARD PASS reports inside allowed and profile, outside, variable-derived profile and workspace root denied; no deletion was executed. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "GUARD PASS reports inside allowed and profile, outside, variable-derived profile and workspace root denied; no deletion was executed.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [
          "GUARD PASS"
        ],
        "user_visible_success_message": "Evidence saved. GUARD PASS reports inside allowed and profile, outside, variable-derived profile and workspace root denied; no deletion was executed.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify demonstrate the variable-path limit safely?",
          "answer": "GUARD PASS reports inside allowed and profile, outside, variable-derived profile and workspace root denied; no deletion was executed. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use workspace_guard.py. Work in the same practice folder."
        }
      ],
      "quiz": {
        "question": "Does a command-text hook guarantee safety for a path computed inside a script?",
        "answer_type": "single_choice",
        "choices": [
          "No; add enforcement at the resolved operation boundary and independent recovery.",
          "Yes, because the command looks harmless."
        ],
        "correct_answer": 0,
        "explanation": "The profile-wipe failure can involve a runtime variable whose value the text hook cannot see."
      },
      "coach": {
        "intro": "We are going to demonstrate the variable-path limit safely. GUARD PASS reports inside allowed and profile, outside, variable-derived profile and workspace root denied; no deletion was executed.",
        "demo": "Run workspace_guard.py --self-test. Read the source: the target is resolved before deciding. The variable_target case points at the home folder but performs no filesystem operation. Compare this with a hook that sees only command text.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate demonstrate the variable-path limit safely",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Run workspace_guard.py --self-test. Read the source: the target is resolved before deciding. The variable_target case points at the home folder but performs no filesystem operation. Compare this with a hook that sees only command text. GUARD PASS reports inside allowed and profile, outside, variable-derived profile and workspace root denied; no deletion was executed.",
        "on_screen_text": [
          "Demonstrate the variable-path limit safely",
          "GUARD PASS reports inside allowed and profile, outside, variable-derived profile and workspace root denied; no deletion was executed."
        ],
        "screen_recording_instructions": [
          "Run workspace_guard.py --self-test. Read the source: the target is resolved before deciding. The variable_target case points at the home folder but performs no filesystem operation. Compare this with a hook that sees only command text.",
          "Inspect the result: GUARD PASS reports inside allowed and profile, outside, variable-derived profile and workspace root denied; no deletion was executed.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "GUARD PASS reports inside allowed and profile, outside, variable-derived profile and workspace root denied; no deletion was executed."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Run workspace_guard.py --self-test. Read the source: the target is resolved before deciding. The variable_target case points at the home folder but performs no filesystem operation. Compare this with a hook that sees only command text.",
          "GUARD PASS reports inside allowed and profile, outside, variable-derived profile and workspace root denied; no deletion was executed."
        ]
      },
      "step_id": "L14-S02",
      "lesson_id": "L14"
    },
    {
      "title": "Verify the actual protection in your tool",
      "purpose": "A broken hook that blocks everything can look like protection. Some tools fail open when hooks fail. Codex hook changes need review/trust; Grok Build needs its own deny protocol; Antigravity uses a different JSON protocol. Never treat a prompt rule or an inactive hook as enforcement.",
      "user_action": "For CLI tools, open the hook/permissions screen and confirm the configured guard is active. Use your tool’s documented pre-command hook protocol; the BBB working reference is linked in Sources. Run a harmless directory listing, then a guard dry-run targeting the profile. Do not execute a destructive profile probe. Grok Bot has no proven local shell guard here: use project-only tasks and reviewed actions, with backups.",
      "explanation": "A broken hook that blocks everything can look like protection. Some tools fail open when hooks fail. Codex hook changes need review/trust; Grok Build needs its own deny protocol; Antigravity uses a different JSON protocol. Never treat a prompt rule or an inactive hook as enforcement.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "workspace_guard.py",
        "onboarding-checklist.md"
      ],
      "expected_result": "A harmless command runs, the guard dry-run returns DENY, and the checklist records the actual hook protocol and active state or the Grok Bot limitation.",
      "resources": [
        "workspace_guard.py",
        "onboarding-checklist.md"
      ],
      "checkpoint": {
        "what_is_being_checked": "Verify the actual protection in your tool",
        "success_condition": "A harmless command runs, the guard dry-run returns DENY, and the checklist records the actual hook protocol and active state or the Grok Bot limitation.",
        "how_to_verify": "Record a harmless command runs, the guard dry-run returns DENY, and the checklist records the actual hook protocol and active state or the Grok Bot limitation. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The harmless command succeeds.",
          "The boundary dry-run denies a profile target.",
          "I recorded the tool’s active hook state, or explicitly recorded that this tool has no working local guard."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A harmless command runs, the guard dry-run returns DENY, and the checklist records the actual hook protocol and active state or the Grok Bot limitation.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I install a guard for this tool?",
          "answer": "Use the linked BBB safety reference for the exact tool/version protocol. Merge into the existing hooks instead of overwriting settings. Review/trust the hook if required, then verify a harmless call and a denied dry-run. The workspace_guard.py file is a teaching demonstration, not a universal hook adapter."
        },
        {
          "question": "Does Grok Bot have a working local delete guard?",
          "answer": "The project’s live September 29 tests found no working shell hook. Restrict the tasks and workspace you hand it, keep independent backups, and do not claim local deletion is guarded."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to verify the actual protection in your tool. A harmless command runs, the guard dry-run returns DENY, and the checklist records the actual hook protocol and active state or the Grok Bot limitation.",
        "demo": "For CLI tools, open the hook/permissions screen and confirm the configured guard is active. Use your tool’s documented pre-command hook protocol; the BBB working reference is linked in Sources. Run a harmless directory listing, then a guard dry-run targeting the profile. Do not execute a destructive profile probe. Grok Bot has no proven local shell guard here: use project-only tasks and reviewed actions, with backups.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate verify the actual protection in your tool",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "For CLI tools, open the hook/permissions screen and confirm the configured guard is active. Use your tool’s documented pre-command hook protocol; the BBB working reference is linked in Sources. Run a harmless directory listing, then a guard dry-run targeting the profile. Do not execute a destructive profile probe. Grok Bot has no proven local shell guard here: use project-only tasks and reviewed actions, with backups. A harmless command runs, the guard dry-run returns DENY, and the checklist records the actual hook protocol and active state or the Grok Bot limitation.",
        "on_screen_text": [
          "Verify the actual protection in your tool",
          "A harmless command runs, the guard dry-run returns DENY, and the checklist records the actual hook protocol and active state or the Grok Bot limitation."
        ],
        "screen_recording_instructions": [
          "For CLI tools, open the hook/permissions screen and confirm the configured guard is active. Use your tool’s documented pre-command hook protocol; the BBB working reference is linked in Sources. Run a harmless directory listing, then a guard dry-run targeting the profile. Do not execute a destructive profile probe. Grok Bot has no proven local shell guard here: use project-only tasks and reviewed actions, with backups.",
          "Inspect the result: A harmless command runs, the guard dry-run returns DENY, and the checklist records the actual hook protocol and active state or the Grok Bot limitation.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "A harmless command runs, the guard dry-run returns DENY, and the checklist records the actual hook protocol and active state or the Grok Bot limitation."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "For CLI tools, open the hook/permissions screen and confirm the configured guard is active. Use your tool’s documented pre-command hook protocol; the BBB working reference is linked in Sources. Run a harmless directory listing, then a guard dry-run targeting the profile. Do not execute a destructive profile probe. Grok Bot has no proven local shell guard here: use project-only tasks and reviewed actions, with backups.",
          "A harmless command runs, the guard dry-run returns DENY, and the checklist records the actual hook protocol and active state or the Grok Bot limitation."
        ]
      },
      "step_id": "L14-S03",
      "lesson_id": "L14"
    },
    {
      "title": "Enable a real backup of memory and project files",
      "purpose": "System Restore alone is not a personal-file backup. Previous Versions can disappear as shadow storage fills; OneDrive’s common-folder backup omits hidden agent folders.",
      "user_action": "Connect a second backup drive. Windows: configure System Protection as additional recovery and use a scheduled copy/File History that explicitly includes hidden agent folders. macOS: configure Time Machine and verify dot folders are included. Linux: use a home backup such as restic/Deja Dup; Timeshift omits /home by default. Download the copy-only profile backup script for your platform, inspect it, and adapt the folder list to your tool. Record the last successful scheduled run; protect backup access because it may contain credentials.",
      "explanation": "System Restore alone is not a personal-file backup. Previous Versions can disappear as shadow storage fills; OneDrive’s common-folder backup omits hidden agent folders.",
      "estimated_time": "6 min",
      "action_type": "command",
      "commands": {
        "windows": ".\\profile-backup.ps1 -Destination D:\\Backups\\llm-profiles",
        "macos": "bash profile-backup.sh /Volumes/YourBackup/llm-profiles",
        "linux": "bash profile-backup.sh /media/YourBackup/llm-profiles"
      },
      "command_type": "shell",
      "required_inputs": [
        "profile-backup.ps1",
        "profile-backup.sh",
        "onboarding-checklist.md"
      ],
      "expected_result": "A backup on another drive includes the tool’s user settings and memory folder and this project, and a successful schedule/time is recorded.",
      "resources": [
        "profile-backup.ps1",
        "profile-backup.sh",
        "onboarding-checklist.md"
      ],
      "checkpoint": {
        "what_is_being_checked": "Enable a real backup of memory and project files",
        "success_condition": "A backup on another drive includes the tool’s user settings and memory folder and this project, and a successful schedule/time is recorded.",
        "how_to_verify": "Record a backup on another drive includes the tool’s user settings and memory folder and this project, and a successful schedule/time is recorded. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The destination is a mounted second drive.",
          "The hidden memory/settings folders and project files are included.",
          "An automated backup is enabled and its latest successful run is recorded."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A backup on another drive includes the tool’s user settings and memory folder and this project, and a successful schedule/time is recorded.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The backup drive is missing or the script reports a failure",
          "likely_cause": "The destination may be on the same volume, unmounted, or unwritable.",
          "diagnostic_question": "Can you create a scratch file on the actual second drive?",
          "fix": "Mount the drive and choose an accessible backup directory. Inspect every error; robocopy codes 8 and higher are failures.",
          "alternative_fix": "Use the operating system backup application and verify the same folder coverage and successful run.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Mount the drive and choose an accessible backup directory. Inspect every error; robocopy codes 8 and higher are failures."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify enable a real backup of memory and project files?",
          "answer": "A backup on another drive includes the tool’s user settings and memory folder and this project, and a successful schedule/time is recorded. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use profile-backup.ps1, profile-backup.sh, onboarding-checklist.md. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to enable a real backup of memory and project files. A backup on another drive includes the tool’s user settings and memory folder and this project, and a successful schedule/time is recorded.",
        "demo": "Connect a second backup drive. Windows: configure System Protection as additional recovery and use a scheduled copy/File History that explicitly includes hidden agent folders. macOS: configure Time Machine and verify dot folders are included. Linux: use a home backup such as restic/Deja Dup; Timeshift omits /home by default. Download the copy-only profile backup script for your platform, inspect it, and adapt the folder list to your tool. Record the last successful scheduled run; protect backup access because it may contain credentials.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Mount the drive and choose an accessible backup directory. Inspect every error; robocopy codes 8 and higher are failures.",
        "help": "Can you create a scratch file on the actual second drive?"
      },
      "video": {
        "purpose": "Demonstrate enable a real backup of memory and project files",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Connect a second backup drive. Windows: configure System Protection as additional recovery and use a scheduled copy/File History that explicitly includes hidden agent folders. macOS: configure Time Machine and verify dot folders are included. Linux: use a home backup such as restic/Deja Dup; Timeshift omits /home by default. Download the copy-only profile backup script for your platform, inspect it, and adapt the folder list to your tool. Record the last successful scheduled run; protect backup access because it may contain credentials. A backup on another drive includes the tool’s user settings and memory folder and this project, and a successful schedule/time is recorded.",
        "on_screen_text": [
          "Enable a real backup of memory and project files",
          "A backup on another drive includes the tool’s user settings and memory folder and this project, and a successful schedule/time is recorded."
        ],
        "screen_recording_instructions": [
          "Connect a second backup drive. Windows: configure System Protection as additional recovery and use a scheduled copy/File History that explicitly includes hidden agent folders. macOS: configure Time Machine and verify dot folders are included. Linux: use a home backup such as restic/Deja Dup; Timeshift omits /home by default. Download the copy-only profile backup script for your platform, inspect it, and adapt the folder list to your tool. Record the last successful scheduled run; protect backup access because it may contain credentials.",
          "Inspect the result: A backup on another drive includes the tool’s user settings and memory folder and this project, and a successful schedule/time is recorded.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "A backup on another drive includes the tool’s user settings and memory folder and this project, and a successful schedule/time is recorded."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Connect a second backup drive. Windows: configure System Protection as additional recovery and use a scheduled copy/File History that explicitly includes hidden agent folders. macOS: configure Time Machine and verify dot folders are included. Linux: use a home backup such as restic/Deja Dup; Timeshift omits /home by default. Download the copy-only profile backup script for your platform, inspect it, and adapt the folder list to your tool. Record the last successful scheduled run; protect backup access because it may contain credentials.",
          "A backup on another drive includes the tool’s user settings and memory folder and this project, and a successful schedule/time is recorded."
        ]
      },
      "step_id": "L14-S04",
      "lesson_id": "L14"
    },
    {
      "title": "Practice a hash-verified restore",
      "purpose": "A backup becomes useful only when restoration has been practiced. A same-volume practice copy proves the procedure but not protection against disk failure.",
      "user_action": "Run restore_drill.py with a separate backup directory. The script creates a new proof file, copies it, restores a second copy, and compares SHA256 hashes. Then restore one non-secret file from your actual agent memory backup into a separate scratch directory and open it; do not overwrite the live profile.",
      "explanation": "A backup becomes useful only when restoration has been practiced. A same-volume practice copy proves the procedure but not protection against disk failure.",
      "estimated_time": "6 min",
      "action_type": "command",
      "commands": {
        "windows": "python restore_drill.py --backup-root D:\\Backups\\bbb-practice --work-root practice",
        "macos": "python3 restore_drill.py --backup-root /Volumes/YourBackup/bbb-practice --work-root practice",
        "linux": "python3 restore_drill.py --backup-root /media/YourBackup/bbb-practice --work-root practice"
      },
      "command_type": "shell",
      "required_inputs": [
        "restore_drill.py"
      ],
      "expected_result": "RESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch.",
      "resources": [
        "restore_drill.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Practice a hash-verified restore",
        "success_condition": "RESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch.",
        "how_to_verify": "Record rESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The proof file SHA256 hashes match.",
          "I restored and opened a non-secret memory/settings file from my real backup.",
          "The restored file is in scratch; the live profile was not overwritten."
        ],
        "tokens": [
          "RESTORE PASS"
        ],
        "user_visible_success_message": "Evidence saved. RESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify practice a hash-verified restore?",
          "answer": "RESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use restore_drill.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to practice a hash-verified restore. RESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch.",
        "demo": "Run restore_drill.py with a separate backup directory. The script creates a new proof file, copies it, restores a second copy, and compares SHA256 hashes. Then restore one non-secret file from your actual agent memory backup into a separate scratch directory and open it; do not overwrite the live profile.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate practice a hash-verified restore",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Run restore_drill.py with a separate backup directory. The script creates a new proof file, copies it, restores a second copy, and compares SHA256 hashes. Then restore one non-secret file from your actual agent memory backup into a separate scratch directory and open it; do not overwrite the live profile. RESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch.",
        "on_screen_text": [
          "Practice a hash-verified restore",
          "RESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch."
        ],
        "screen_recording_instructions": [
          "Run restore_drill.py with a separate backup directory. The script creates a new proof file, copies it, restores a second copy, and compares SHA256 hashes. Then restore one non-secret file from your actual agent memory backup into a separate scratch directory and open it; do not overwrite the live profile.",
          "Inspect the result: RESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "RESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Run restore_drill.py with a separate backup directory. The script creates a new proof file, copies it, restores a second copy, and compares SHA256 hashes. Then restore one non-secret file from your actual agent memory backup into a separate scratch directory and open it; do not overwrite the live profile.",
          "RESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch."
        ]
      },
      "step_id": "L14-S05",
      "lesson_id": "L14"
    }
  ],
  "resources": [
    {
      "resource_id": "R001",
      "name": "workspace_guard.py",
      "type": "py",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "# VERSION HISTORY\n# 2026-10-05 EDT | chatgpt_codex | overnight-catalog | v1: learner resource.\n\"\"\"Dry-run resolved-path boundary demonstration. This script never deletes anything.\"\"\"\nimport argparse\nfrom pathlib import Path\n\ndef permitted(target, workspace):\n    root = Path(workspace).resolve()\n    candidate = Path(target).resolve()\n    home = Path.home().resolve()\n    if root == home or root == root.anchor or root in home.parents:\n        return False\n    return candidate != root and root in candidate.parents and candidate != home and candidate not in home.parents\n\ndef main():\n    p=argparse.ArgumentParser(description=__doc__)\n    p.add_argument('--workspace',default='practice')\n    p.add_argument('--target')\n    p.add_argument('--self-test',action='store_true')\n    a=p.parse_args()\n    root=Path(a.workspace).resolve()\n    if a.self_test:\n        assert permitted(root/'proof.txt',root)\n        assert not permitted(Path.home(),root)\n        assert not permitted(root.parent/'outside.txt',root)\n        assert not permitted(root,root)\n        variable_target=Path.home()\n        assert not permitted(variable_target,root)\n        print('GUARD PASS: inside allowed; profile, variable-derived profile, outside, workspace root denied; no deletion executed')\n    else:\n        if not a.target:p.error('--target required')\n        allowed=permitted(a.target,a.workspace)\n        print(('ALLOW' if allowed else 'DENY')+': resolved boundary; dry-run only')\n        raise SystemExit(0 if allowed else 2)\nif __name__=='__main__':main()\n",
      "filename": "workspace_guard.py",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R002",
      "name": "restore_drill.py",
      "type": "py",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "# VERSION HISTORY\n# 2026-10-05 EDT | chatgpt_codex | overnight-catalog | v1: learner resource.\n\"\"\"Backup and restore a new proof file only; never edits an existing file or profile.\"\"\"\nimport argparse,hashlib,json,logging\nfrom datetime import datetime,timezone\nfrom pathlib import Path\nimport shutil\ndef digest(p):return hashlib.sha256(p.read_bytes()).hexdigest()\ndef main():\n    a=argparse.ArgumentParser(description=__doc__)\n    a.add_argument('--backup-root',required=True)\n    a.add_argument('--work-root',default='practice')\n    x=a.parse_args()\n    run=datetime.now(timezone.utc).strftime('%Y%m%dT%H%M%S%fZ')\n    work=Path(x.work_root).resolve()/('restore-'+run)\n    backup=Path(x.backup_root).resolve()/('restore-'+run)\n    if work==backup or work in backup.parents or backup in work.parents:raise SystemExit('Use separate, non-overlapping work and backup roots')\n    work.mkdir(parents=True,exist_ok=False);backup.mkdir(parents=True,exist_ok=False)\n    logging.basicConfig(filename=work/'drill.log',encoding='utf-8',level=logging.INFO)\n    source=work/'proof.txt';source.write_text('BuildBotsBetter restore proof '+run,encoding='utf-8')\n    shutil.copy2(source,backup/'proof.txt')\n    restored=work/'restored.txt';shutil.copy2(backup/'proof.txt',restored)\n    assert digest(source)==digest(restored)\n    receipt={'result':'RESTORE PASS','source_sha256':digest(source),'restored_sha256':digest(restored),'backup_root':str(backup),'off_volume':work.anchor.lower()!=backup.anchor.lower(),'scope':'new proof file only; does not establish a scheduled profile backup'}\n    (work/'receipt.json').write_text(json.dumps(receipt,indent=2),encoding='utf-8')\n    logging.info('Proof backup and hash-verified restore completed')\n    print(json.dumps(receipt,indent=2))\n    if not receipt['off_volume']:print('SAME VOLUME: practice passed; configure a second drive for disaster recovery')\nif __name__=='__main__':main()\n",
      "filename": "restore_drill.py",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R003",
      "name": "onboarding-checklist.md",
      "type": "md",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "# Repeatable agent onboarding\nagent:\ntool version:\nrules file:\nmemory/settings location:\nassigned workspace:\npermissions / actions needing approval:\nhook location and protocol:\nguard active (harmless command + denied dry-run):\nvariable-derived path limit understood:\nbackup destination (second drive):\nbackup schedule / last successful run:\nrestored memory file / matching SHA256:\nfinal task / evidence / reviewer:\n\nProtect memory/settings and project files. A prompt rule is not an operating-system boundary.\nA command-text hook can miss a path computed in a script or variable. Resolve paths at the\noperation boundary and fail closed; keep independent backups and monitoring.\nWindows System Restore reverts system components, not a reliable personal-file backup.\nOneDrive folder backup does not automatically include hidden agent folders.\nmacOS: check Time Machine includes hidden agent folders. Linux: Timeshift excludes /home by\ndefault; use a separate home backup or explicitly include it.\n",
      "filename": "onboarding-checklist.md",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R004",
      "name": "profile-backup.ps1",
      "type": "ps1",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "# VERSION HISTORY\n# 2026-10-05 EDT | chatgpt_codex | overnight-catalog | v1: copy-only explicit profile backup.\nparam([Parameter(Mandatory=$true)][string]$Destination,[string]$ProjectPath=(Get-Location).Path)\n$ErrorActionPreference='Stop'\n$destRoot=[IO.Path]::GetFullPath($Destination)\n$profileRoot=[IO.Path]::GetFullPath($env:USERPROFILE)\nif ([IO.Path]::GetPathRoot($destRoot) -eq [IO.Path]::GetPathRoot($profileRoot)) { throw 'Choose a backup destination on a second drive.' }\nif (-not (Test-Path -LiteralPath ([IO.Path]::GetPathRoot($destRoot)))) { throw 'Backup drive is unavailable.' }\n$runDir=Join-Path $destRoot (Get-Date -Format 'yyyyMMdd-HHmmss-fff')\nNew-Item -ItemType Directory -Path $runDir -ErrorAction Stop | Out-Null\nforeach ($folderName in @('.codex','.claude','.grok','.qwen','.gemini')) {\n  $sourceDir=Join-Path $profileRoot $folderName\n  if (Test-Path -LiteralPath $sourceDir) {\n    $copyDir=Join-Path $runDir $folderName\n    & robocopy $sourceDir $copyDir /E /XJ /R:1 /W:1 /COPY:DAT /DCOPY:DAT /NP\n    if ($LASTEXITCODE -ge 8) { throw \"Backup failed for $folderName (robocopy $LASTEXITCODE).\" }\n  }\n}\n$projectSource=[IO.Path]::GetFullPath($ProjectPath)\nif (-not (Test-Path -LiteralPath $projectSource -PathType Container)) { throw 'Project directory is unavailable.' }\n& robocopy $projectSource (Join-Path $runDir 'project') /E /XJ /R:1 /W:1 /COPY:DAT /DCOPY:DAT /NP\nif ($LASTEXITCODE -ge 8) { throw \"Project backup failed (robocopy $LASTEXITCODE).\" }\n\"PROFILE BACKUP PASS: $runDir\"\n# Copy-only: no /MIR, /PURGE or deletion. Backup may contain credentials; protect the drive.\n# Add the Grok Bot profile and project path explicitly after finding them in your own installation.\n",
      "filename": "profile-backup.ps1",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R005",
      "name": "profile-backup.sh",
      "type": "sh",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "#!/usr/bin/env bash\n# VERSION HISTORY\n# 2026-10-05 EDT | chatgpt_codex | overnight-catalog | v1: copy-only explicit profile backup.\nset -euo pipefail\ndest=${1:?Pass a mounted external-drive backup directory}\nproject=${2:-$PWD}\nmkdir -p \"$dest\"\nif [ \"$(df -P \"$HOME\" | tail -1 | awk '{print $1}')\" = \"$(df -P \"$dest\" | tail -1 | awk '{print $1}')\" ]; then\n  echo 'Choose a destination on another mounted filesystem.' >&2; exit 2\nfi\nrun=\"$dest/$(date -u +%Y%m%dT%H%M%SZ)-$$\"\nmkdir \"$run\"\nfor name in .codex .claude .grok .qwen .gemini; do\n  if [ -d \"$HOME/$name\" ]; then cp -pR \"$HOME/$name\" \"$run/$name\"; fi\ndone\nif [ ! -d \"$project\" ]; then echo 'Project directory is unavailable.' >&2; exit 2; fi\ncp -pR \"$project\" \"$run/project\"\necho \"PROFILE BACKUP PASS: $run\"\n# This backup can contain credentials; protect access to the backup drive.\n",
      "filename": "profile-backup.sh",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R006",
      "name": "pack.py",
      "type": "py",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "# VERSION HISTORY\n# 2026-10-05 EDT | chatgpt_codex | overnight-catalog | v1: learner resource.\n\"\"\"Build and lint an editable educational video knowledge pack. No upload or API calls.\"\"\"\nimport argparse,json,re,hashlib,logging\nfrom pathlib import Path\nSCRIPT='Qwen Code is an open-source coding agent for the terminal. The npm installation requires Node.js 22 or newer. Run node --version before installing Qwen Code. Install Qwen Code with npm install -g @qwen-code/qwen-code@latest. Run qwen --version to verify the installation.'\nMECHANISMS=['pre-training datasets','post-training and fine-tuning','RAG','search AI indexes','dense embeddings','vector databases','context windows','web crawlers','AI browsing agents','generated summaries','recommendation systems','knowledge graphs','structured schemas','multimodal understanding','agentic tool calling','future SI environments']\nLEVELS=['human','search','platform','AI','agentic','future intelligence']\ndef put(root,name,data):\n    (root/name).write_text(json.dumps(data,indent=2,ensure_ascii=False) if not isinstance(data,str) else data,encoding='utf-8')\ndef initialize(root):\n    root.mkdir(parents=True,exist_ok=False)\n    put(root,'script.txt',SCRIPT)\n    put(root,'captions.srt','1\\n00:00:00,000 --> 00:00:10,000\\n[Presenter] Qwen Code is an open-source coding agent for the terminal.\\n\\n2\\n00:00:10,000 --> 00:00:20,000\\n[Presenter] The npm installation requires Node.js 22 or newer. Run node --version.\\n\\n3\\n00:00:20,000 --> 00:00:35,000\\n[Presenter] Run npm install -g @qwen-code/qwen-code@latest. Verify with qwen --version.\\n')\n    put(root,'chapters.txt','00:00 Identify Qwen Code\\n00:10 Check Node.js 22\\n00:20 Install and verify Qwen Code\\n')\n    put(root,'research.json',{'intent':'instructional','head_term':'Qwen Code','long_tail':['install Qwen Code Windows','Qwen Code Node 22 requirement'],'validation':'Compare current search results manually. No fabricated search volume or keyword difficulty.','title':'Install Qwen Code: check Node.js, install and verify','description_first_lines':['Install Qwen Code from the official QwenLM distribution.','Check Node.js 22 or newer for the npm path.','Companion commands and source links are in the knowledge pack.'],'thumbnail':'Three readable words: Qwen Code Setup; terminal version check; human review needed','cluster':['setup','first verified project','recover installation errors']})\n    put(root,'truth.json',{'known':[{'claim':'Manual chapters need 00:00, at least three chapters and at least ten seconds per chapter','url':'https://support.google.com/youtube/answer/9884579'}],'likely':[{'claim':'Aligned spoken and visible names can help machine interpretation','status':'design hypothesis; evaluate retrieval quality'}],'speculative':[{'claim':'Exact hidden recommendation weights','status':'unknown; no guarantees'}],'levels':LEVELS,'mechanisms':[{'name':m,'creator_control':'Publish clear, accessible source-linked content; inclusion is not guaranteed','test':'Inspect output or retrieval when the mechanism exposes a test'} for m in MECHANISMS]})\n    put(root,'grounding.json',[{'start':0,'end':10,'spoken_entity':'Qwen Code','on_screen':'Qwen Code — terminal coding agent','description_entity':'Qwen Code'},{'start':10,'end':20,'spoken_entity':'Node.js 22','on_screen':'node --version','description_entity':'Node.js 22 prerequisite'},{'start':20,'end':35,'spoken_entity':'Qwen Code installation','on_screen':'npm install -g @qwen-code/qwen-code@latest','description_entity':'Official installation command'}])\n    put(root,'semantic.md','# How do I install Qwen Code?\\nCheck Node.js 22 or newer for npm. Run `npm install -g @qwen-code/qwen-code@latest`, then `qwen --version`.\\nSource: https://github.com/QwenLM/qwen-code\\n')\n    put(root,'faq.json',[{'question':'Does Qwen Code require Ollama?','answer':'No. Qwen Code is a coding-agent harness; a local model host is optional.','source':'https://github.com/QwenLM/qwen-code'},{'question':'What Node.js version does the npm installation need?','answer':'The official README specifies Node.js 22 or newer.','source':'https://github.com/QwenLM/qwen-code'}])\n    put(root,'glossary.json',[{'term':'Qwen Code','definition':'Open-source coding-agent harness','category':'software','creator':'QwenLM','use_case':'terminal coding workflows'},{'term':'Node.js','definition':'JavaScript runtime used by the npm installation path','category':'runtime','creator':'Node.js project','use_case':'run the Qwen Code npm distribution'}])\n    put(root,'abstract.md','A 35-second practice video identifies Qwen Code, checks Node.js 22, installs the official npm package and verifies its version. This pack is an editable example, not evidence of an uploaded or indexed video.\\n')\n    put(root,'tutorial.md','# Installation commands\\nWindows PowerShell: `node --version`; `npm.cmd install -g @qwen-code/qwen-code@latest`; `qwen.cmd --version`.\\nmacOS zsh and Linux bash: `node --version`; `npm install -g @qwen-code/qwen-code@latest`; `qwen --version`.\\nExpected: version output, exit 0. Diagnose PATH or runtime before retrying.\\n')\n    put(root,'video.jsonld',{'@context':'https://schema.org','@type':'VideoObject','name':'Install Qwen Code with a version check','description':'An original practice tutorial for installing the terminal coding agent.','thumbnailUrl':['https://example.com/replace-with-your-thumbnail.jpg'],'uploadDate':'2026-10-05T10:00:00Z','duration':'PT35S','contentUrl':'https://example.com/replace-with-your-video.mp4','about':[{'@type':'SoftwareApplication','name':'Qwen Code','url':'https://github.com/QwenLM/qwen-code'}],'isPartOf':{'@type':'CreativeWorkSeries','name':'Verified agent setup'}})\n    put(root,'eval-prompts.json',[{'user':'Install Qwen Code on a machine with Node.js 18','expected':'Identify Node.js 22+ prerequisite before npm installation','source':'https://github.com/QwenLM/qwen-code'}])\n    put(root,'social-drafts.md','Draft only: Install Qwen Code after checking Node.js 22+. Keep the official package name visible, verify the version, and retain source links. Do not send or publish this automatically.\\n')\n    put(root,'rag.jsonl','\\n'.join(json.dumps(x) for x in [{'id':'qwen-001','entity':'Qwen Code','text':'Qwen Code npm installation requires Node.js 22 or newer.','source':'https://github.com/QwenLM/qwen-code'},{'id':'qwen-002','entity':'Qwen Code','text':'Install Qwen Code with npm install -g @qwen-code/qwen-code@latest and verify with qwen --version.','source':'https://github.com/QwenLM/qwen-code'}])+'\\n')\n    put(root,'agent-commands.json',{'tool':'install_qwen','parameters':{'platform':{'enum':['windows','macos','linux']},'working_directory':{'type':'string'}},'prerequisite':'Node.js >=22 for npm','windows':['node --version','npm.cmd install -g @qwen-code/qwen-code@latest','qwen.cmd --version'],'macos':['node --version','npm install -g @qwen-code/qwen-code@latest','qwen --version'],'linux':['node --version','npm install -g @qwen-code/qwen-code@latest','qwen --version'],'expected_exit':0,'failure_tree':{'runtime':'update Node.js using official installer','path':'reopen terminal and inspect npm prefix','auth':'sign in manually; do not expose credentials'}})\n    put(root,'localization.json',{'source_language':'en','target_languages':['es'],'locked_terms':['Qwen Code','Node.js','npm','qwen'],'instructions':'Translate captions, title and description; preserve cue timings and command strings. Have a fluent reviewer compare meaning. Optional dubbing needs consent and quality review; translated captions do not force model training.'})\n    put(root,'graph.json',{'nodes':['Qwen Code','Node.js','verified project'],'edges':[{'from':'Node.js','relation':'prerequisite-of','to':'Qwen Code'},{'from':'Qwen Code','relation':'enables','to':'verified project'}]})\n    put(root,'test_machine.py','# VERSION HISTORY\\n# 2026-10-05 EDT | chatgpt_codex | v1: machine artifact checker\\nimport json\\nfrom pathlib import Path\\nx=json.loads(Path(\"video.jsonld\").read_text(encoding=\"utf-8\"))\\nassert x[\"@type\"]==\"VideoObject\" and x[\"name\"] and x[\"thumbnailUrl\"]\\nassert len(json.loads(Path(\"faq.json\").read_text(encoding=\"utf-8\")))>=2\\nprint(\"MACHINE PASS: video metadata and FAQ structures\")\\n')\n    hashpack(root)\ndef hashpack(root):\n    hashes={p.name:hashlib.sha256(p.read_bytes()).hexdigest() for p in root.iterdir() if p.is_file() and p.name not in ('provenance.json','lint.json')}\n    put(root,'provenance.json',{'sha256':hashes,'source_urls':['https://github.com/QwenLM/qwen-code','https://support.google.com/youtube/answer/9884579'],'scope':'Hashes detect changed bytes; they do not authenticate authors or prove factual accuracy.'})\ndef seconds(t):\n    parts=[int(v) for v in t.split(':')];return sum(v*60**i for i,v in enumerate(reversed(parts)))\ndef lint(root):\n    issues=[]\n    required=['semantic.md','faq.json','glossary.json','abstract.md','tutorial.md','video.jsonld','eval-prompts.json','social-drafts.md','rag.jsonl','test_machine.py','captions.srt','chapters.txt','truth.json','agent-commands.json','provenance.json']\n    for name in required:\n        if not (root/name).is_file():issues.append('missing '+name)\n    if issues:return issues\n    script=(root/'script.txt').read_text(encoding='utf-8')\n    if re.search(r'\\b(click here|this thing|that tool)\\b',script,re.I):issues.append('ambiguous instruction in script')\n    chapters=(root/'chapters.txt').read_text(encoding='utf-8').splitlines();times=[]\n    for line in chapters:\n        m=re.match(r'^(\\d{2}:\\d{2}(?::\\d{2})?)\\s+\\S',line)\n        if not m:issues.append('invalid chapter line');continue\n        times.append(seconds(m[1]))\n    if len(times)<3 or not times or times[0]!=0 or any(b-a<10 for a,b in zip(times,times[1:])) or (times and 35-times[-1]<10):issues.append('chapter timing: need 00:00, >=3, >=10s each within 35s sample')\n    srt=(root/'captions.srt').read_text(encoding='utf-8');cues=re.findall(r'(\\d{2}:\\d{2}:\\d{2},\\d{3}) --> (\\d{2}:\\d{2}:\\d{2},\\d{3})',srt)\n    def cue_seconds(t):return seconds(t.split(',')[0])+int(t.split(',')[1])/1000\n    previous=0\n    for a,b in cues:\n        start,end=cue_seconds(a),cue_seconds(b)\n        if end<=start or start<previous:issues.append('caption overlap or invalid duration')\n        previous=end\n    if not cues or '[Presenter]' not in srt:issues.append('caption cue/speaker labels missing')\n    video=json.loads((root/'video.jsonld').read_text(encoding='utf-8'))\n    for k in ['name','description','thumbnailUrl','uploadDate']:\n        if not video.get(k):issues.append('missing VideoObject '+k)\n    truth=json.loads((root/'truth.json').read_text(encoding='utf-8'))\n    if len(truth.get('levels',[]))!=6 or len(truth.get('mechanisms',[]))!=16:issues.append('six levels / sixteen mechanisms missing')\n    for line in (root/'rag.jsonl').read_text(encoding='utf-8').splitlines():\n        row=json.loads(line)\n        if 'Qwen Code' not in row['text'] or not row['source']:issues.append('RAG chunk lacks standalone entity/source')\n    commands=json.loads((root/'agent-commands.json').read_text(encoding='utf-8'))\n    if not all(commands.get(k) for k in ['windows','macos','linux']):issues.append('three-platform commands missing')\n    provenance=json.loads((root/'provenance.json').read_text(encoding='utf-8'))\n    for name,digest in provenance['sha256'].items():\n        p=root/name\n        if not p.is_file() or hashlib.sha256(p.read_bytes()).hexdigest()!=digest:issues.append('changed bytes: '+name)\n    return issues\ndef main():\n    p=argparse.ArgumentParser(description=__doc__);p.add_argument('action',choices=['init','lint','hash']);p.add_argument('--dir',default='knowledge-pack');a=p.parse_args();root=Path(a.dir)\n    Path('logs').mkdir(exist_ok=True);logging.basicConfig(filename='logs/pack.log',encoding='utf-8',level=logging.INFO)\n    if a.action=='init':initialize(root);print('PACK CREATED: edit the files before adapting to your own video')\n    elif a.action=='hash':hashpack(root);print('HASH PASS: record why files changed before updating hashes')\n    else:\n        issues=lint(root);report={'result':'PACK PASS' if not issues else 'PACK FAIL','issues':issues,'manual_review':['check caption wording against audio','replace example.com media URLs before publishing','review translated captions','verify factual claims against sources'],'limits':'lint checks structure, not indexing, recommendation or model-training inclusion'};put(root,'lint.json',report);logging.info('issues=%d',len(issues));print(json.dumps(report,indent=2));raise SystemExit(1 if issues else 0)\nif __name__=='__main__':main()\n",
      "filename": "pack.py",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    }
  ],
  "bot_coach": {
    "bot_name": "Buzz",
    "bot_role": "Offline reviewed step coach",
    "personality": "patient and concrete",
    "tone": "plain",
    "teaching_style": "hint, diagnostic, action, checkpoint",
    "introduction": "Ask about the current step. I use reviewed local answers and queue unknown questions for review.",
    "encouragement_style": "Focus on observed results.",
    "troubleshooting_style": "Ask for the smallest reproducible evidence.",
    "limits": "This offline coach does not call an LLM or inspect your computer. Unknown questions enter a local exportable review queue, not a shared SQL FAQ."
  },
  "coach_interaction_model": {
    "stuck": "current diagnostic and first repair",
    "meaning": "current explanation",
    "error": "current troubleshooting",
    "why": "purpose",
    "skip": "require equivalent evidence",
    "alternative": "documented alternative",
    "finished": "record actual output",
    "start_over": "export then reset only this Build",
    "progressive_assistance": [
      "hint",
      "diagnostic",
      "walkthrough",
      "resource solution"
    ]
  },
  "website_specification": {
    "layout": "Lesson outline, actionable step, current-context coach",
    "features": [
      "platform selectors",
      "command copy with selection fallback",
      "evidence checklist",
      "practical quiz",
      "downloadable resource ZIP",
      "local progress",
      "evidence export",
      "unknown-question review queue"
    ],
    "checkpoint_model": "Learner supplies observations/output; tokens check expected shape only, not host truth.",
    "navigation": "Browse freely; checked next-button progression retains evidence.",
    "video": "spec-driven walkthrough and optional speech; full rendered media is a downstream production task."
  },
  "final_test": {
    "test_name": "Repeat the core workflow and restore its evidence",
    "instructions": "Repeat the last product-specific checkpoint from a fresh practice input, preserve actual output, then complete the Build Bot Better guard and restore checks. Export the evidence.",
    "required_inputs": [
      "workspace_guard.py",
      "restore_drill.py",
      "onboarding-checklist.md",
      "pack.py"
    ],
    "success_conditions": [
      "A six-level, sixteen-mechanism strategy with keyword research, explicit script, synchronized captions/chapters, ten downstream artifacts, multilingual/entity/graph plans, three-platform commands and a linted provenance pack.",
      "Core output can be reproduced",
      "Guard limit explained",
      "Backup and restoration evidence retained"
    ],
    "automated_tests": "catalog_check.py records browser behavior and executable resources, with explicit scope.",
    "manual_tests": [
      "Review actual account sign-in where needed",
      "Check source/data assumptions",
      "Restore one real non-secret memory file"
    ],
    "expected_output": "A six-level, sixteen-mechanism strategy with keyword research, explicit script, synchronized captions/chapters, ten downstream artifacts, multilingual/entity/graph plans, three-platform commands and a linted provenance pack.",
    "failure_paths": "Use the specific step diagnostic, retain failure evidence and stop when access is required."
  },
  "extensions": [
    {
      "title": "Use your own input",
      "action": "Replace the sample with one permitted real input and rerun the same checks."
    },
    {
      "title": "Add one failure case",
      "action": "Create a malformed or missing input; prove the workflow fails visibly and recovers."
    },
    {
      "title": "Automate after review",
      "action": "Write a bounded schedule with logging and a stop condition; obtain approval for external actions separately."
    }
  ],
  "metadata": {
    "SEO_title": "Creating YouTube Content for the AI, SI, and Agentic Era | BuildBotsBetter",
    "SEO_description": "A six-level, sixteen-mechanism strategy with keyword research, explicit script, synchronized captions/chapters, ten downstream artifacts, multilingual/entity/graph plans, three-platform commands and a linted provenance pack.",
    "SEO_keywords": [
      "youtube-content-ai-si-agentic-era",
      "guided build",
      "verified outcome"
    ],
    "difficulty": "beginner",
    "related_builds": [
      "dogfooding",
      "buildbotsbetter-onboarding"
    ],
    "next_recommended_build": "dogfooding"
  },
  "automation_map": [
    {
      "output": "website",
      "generated_from": "BUILD_SPEC.json",
      "human_review_required": true
    },
    {
      "output": "walkthrough",
      "generated_from": "BUILD_SPEC.json",
      "human_review_required": true
    },
    {
      "output": "bot dialogue",
      "generated_from": "BUILD_SPEC.json",
      "human_review_required": true
    },
    {
      "output": "resources",
      "generated_from": "BUILD_SPEC.json",
      "human_review_required": true
    },
    {
      "output": "quiz",
      "generated_from": "BUILD_SPEC.json",
      "human_review_required": true
    },
    {
      "output": "captions",
      "generated_from": "BUILD_SPEC.json",
      "human_review_required": true
    },
    {
      "output": "metadata",
      "generated_from": "BUILD_SPEC.json",
      "human_review_required": true
    }
  ],
  "quality_assurance_report": {
    "scope": "Original instructional content, reviewed against shared brief; execution and browser receipts are stored under logs/catalog-acceptance.",
    "known_limits": [
      "No guarantee of ranking, indexing, foundational-model training or future SI ingestion.",
      "Caption/audio alignment, translation quality and factual accuracy require human review beyond lint.",
      "The example pack is a draft; example.com URLs must be replaced before publication."
    ]
  },
  "sources": [
    {
      "title": "Shared course requirements and scientific distinctions",
      "url": "../../specs/youtube-content-ai-si-agentic-era.md"
    },
    {
      "title": "YouTube manual chapter rules",
      "url": "https://support.google.com/youtube/answer/9884579"
    },
    {
      "title": "YouTube tag guidance",
      "url": "https://support.google.com/youtube/answer/146402"
    },
    {
      "title": "VideoObject official guidance",
      "url": "https://developers.google.com/search/docs/appearance/structured-data/video"
    },
    {
      "title": "Official Qwen Code installation source",
      "url": "https://github.com/QwenLM/qwen-code"
    }
  ],
  "known_uncertainties": [
    "No guarantee of ranking, indexing, foundational-model training or future SI ingestion.",
    "Caption/audio alignment, translation quality and factual accuracy require human review beyond lint.",
    "The example pack is a draft; example.com URLs must be replaced before publication."
  ]
}
