{
  "schema_version": 2,
  "meta": {
    "build_id": "CODEX-GROK-BOT-GALAXY-3-DAY",
    "slug": "grok-bot-galaxy-3-day",
    "title": "Grok Bot Galaxy, 3 Days: Build a Company with Bots",
    "subtitle": "Three practice days: validate, build, verify and launch a local rehearsal.",
    "description": "A three-day company-of-bots practice pack with a chief of staff, two specialists, shared company document, approval rules, one bounded routine, MVP contract, verification evidence and launch-feedback plan.",
    "one_sentence_description": "A three-day company-of-bots practice pack with a chief of staff, two specialists, shared company document, approval rules, one bounded routine, MVP contract, verification evidence and launch-feedback plan.",
    "target_user": "A motivated beginner with permission to work in a private practice folder.",
    "skill_level": "beginner",
    "estimated_time": "3 days; 60–90 min hands-on per day",
    "category": "Guided Build",
    "tags": [
      "grok-bot-galaxy-3-day",
      "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": "Use existing tools or a local rehearsal; no paid account or cloud agent is required to pass.",
    "final_outcome": "A three-day company-of-bots practice pack with a chief of staff, two specialists, shared company document, approval rules, one bounded routine, MVP contract, verification evidence and launch-feedback plan.",
    "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 grok bot galaxy, 3 days: build a company with bots.",
    "after": "A three-day company-of-bots practice pack with a chief of staff, two specialists, shared company document, approval rules, one bounded routine, MVP contract, verification evidence and launch-feedback plan.",
    "finished_product": "A three-day company-of-bots practice pack with a chief of staff, two specialists, shared company document, approval rules, one bounded routine, MVP contract, verification evidence and launch-feedback plan."
  },
  "learning_objectives": [
    "The plan records tool scope, approval boundaries and a precise urgent condition.",
    "COMPANY PASS reports three bots for the complete pack and the incomplete pack fails.",
    "COMPANY PASS and the shared company doc, three role outputs, routine, verification proof and launch review form the final pack.",
    "RESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch."
  ],
  "lessons": [
    {
      "lesson_id": "L01",
      "title": "Day 1 — Validate the problem",
      "purpose": "A dedicated folder makes mistakes easy to diagnose and keeps real project files separate.",
      "estimated_time": "24 min",
      "learning_objective": "The plan records tool scope, approval boundaries and a precise urgent condition.",
      "lessons_before_this": [],
      "lessons_after_this": [
        "L02"
      ]
    },
    {
      "lesson_id": "L02",
      "title": "Day 2 — Build a narrow MVP",
      "purpose": "Day 2 [00:27] emphasizes a tight starting version; [02:03] discusses scaffolding agents can drive and verify.",
      "estimated_time": "24 min",
      "learning_objective": "COMPANY PASS reports three bots for the complete pack and the incomplete pack fails.",
      "lessons_before_this": [
        "L01"
      ],
      "lessons_after_this": [
        "L03"
      ]
    },
    {
      "lesson_id": "L03",
      "title": "Day 3 — Verify, launch and learn",
      "purpose": "Day 3 [00:14] describes small implementer/verifier phases; [02:28] stresses rigorous checks once users are on production. Green status alone is insufficient.",
      "estimated_time": "24 min",
      "learning_objective": "COMPANY PASS and the shared company doc, three role outputs, routine, verification proof and launch review form the final pack.",
      "lessons_before_this": [
        "L02"
      ],
      "lessons_after_this": [
        "L04"
      ]
    },
    {
      "lesson_id": "L04",
      "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": [
        "L03"
      ],
      "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": "Choose one problem and a validation plan",
      "purpose": "Day 1’s company setup and validation sessions preceded the product. Keep facts and inferred business advice separate.",
      "user_action": "Write one recurring problem, the people affected, and three validation conversations to conduct manually. Draft a simple landing-page message and a sheet of evidence; do not buy ads or send automatic outreach. Attribute the event’s validation advice to its speakers rather than presenting it as a universal rule.",
      "explanation": "Day 1’s company setup and validation sessions preceded the product. Keep facts and inferred business advice separate.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "company.json",
        "launch-review.md"
      ],
      "expected_result": "The problem brief, three conversation questions and a distribution hypothesis are recorded.",
      "resources": [
        "company.json",
        "launch-review.md"
      ],
      "checkpoint": {
        "what_is_being_checked": "Choose one problem and a validation plan",
        "success_condition": "The problem brief, three conversation questions and a distribution hypothesis are recorded.",
        "how_to_verify": "Record the problem brief, three conversation questions and a distribution hypothesis are recorded. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The problem brief, three conversation questions and a distribution hypothesis are recorded.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The problem brief, three conversation questions and a distribution hypothesis are 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 choose one problem and a validation plan?",
          "answer": "The problem brief, three conversation questions and a distribution hypothesis are recorded. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use company.json, launch-review.md. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to choose one problem and a validation plan. The problem brief, three conversation questions and a distribution hypothesis are recorded.",
        "demo": "Write one recurring problem, the people affected, and three validation conversations to conduct manually. Draft a simple landing-page message and a sheet of evidence; do not buy ads or send automatic outreach. Attribute the event’s validation advice to its speakers rather than presenting it as a universal 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 choose one problem and a validation plan",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Write one recurring problem, the people affected, and three validation conversations to conduct manually. Draft a simple landing-page message and a sheet of evidence; do not buy ads or send automatic outreach. Attribute the event’s validation advice to its speakers rather than presenting it as a universal rule. The problem brief, three conversation questions and a distribution hypothesis are recorded.",
        "on_screen_text": [
          "Choose one problem and a validation plan",
          "The problem brief, three conversation questions and a distribution hypothesis are recorded."
        ],
        "screen_recording_instructions": [
          "Write one recurring problem, the people affected, and three validation conversations to conduct manually. Draft a simple landing-page message and a sheet of evidence; do not buy ads or send automatic outreach. Attribute the event’s validation advice to its speakers rather than presenting it as a universal rule.",
          "Inspect the result: The problem brief, three conversation questions and a distribution hypothesis are 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": [
          "The problem brief, three conversation questions and a distribution hypothesis are recorded."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Write one recurring problem, the people affected, and three validation conversations to conduct manually. Draft a simple landing-page message and a sheet of evidence; do not buy ads or send automatic outreach. Attribute the event’s validation advice to its speakers rather than presenting it as a universal rule.",
          "The problem brief, three conversation questions and a distribution hypothesis are recorded."
        ]
      },
      "step_id": "L01-S02",
      "lesson_id": "L01"
    },
    {
      "title": "Build a team operating contract",
      "purpose": "Day 1 [00:32] describes teammates with discrete responsibilities; Day 2 [03:35] discusses descriptions shaping behavior. A description should state principles instead of a brittle list of UI clicks.",
      "user_action": "Edit company.json: chief-of-staff routes work, Research cites supplied evidence, QA rejects unsourced claims. Give each bot one job, explicit principles and a voice, plus the short shared company_doc. With Grok Bot create private test teammates; without access, run these roles as separate bounded sessions in your own existing CLI.",
      "explanation": "Day 1 [00:32] describes teammates with discrete responsibilities; Day 2 [03:35] discusses descriptions shaping behavior. A description should state principles instead of a brittle list of UI clicks.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "company.json"
      ],
      "expected_result": "The team has a chief and at least two named specialists, each with a job, rules and voice.",
      "resources": [
        "company.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Build a team operating contract",
        "success_condition": "The team has a chief and at least two named specialists, each with a job, rules and voice.",
        "how_to_verify": "Record the team has a chief and at least two named specialists, each with a job, rules and voice. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The team has a chief and at least two named specialists, each with a job, rules and voice.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The team has a chief and at least two named specialists, each with a job, rules and voice.",
        "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 build a team operating contract?",
          "answer": "The team has a chief and at least two named specialists, each with a job, rules and voice. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use company.json. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to build a team operating contract. The team has a chief and at least two named specialists, each with a job, rules and voice.",
        "demo": "Edit company.json: chief-of-staff routes work, Research cites supplied evidence, QA rejects unsourced claims. Give each bot one job, explicit principles and a voice, plus the short shared company_doc. With Grok Bot create private test teammates; without access, run these roles as separate bounded sessions in your own existing CLI.",
        "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 build a team operating contract",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Edit company.json: chief-of-staff routes work, Research cites supplied evidence, QA rejects unsourced claims. Give each bot one job, explicit principles and a voice, plus the short shared company_doc. With Grok Bot create private test teammates; without access, run these roles as separate bounded sessions in your own existing CLI. The team has a chief and at least two named specialists, each with a job, rules and voice.",
        "on_screen_text": [
          "Build a team operating contract",
          "The team has a chief and at least two named specialists, each with a job, rules and voice."
        ],
        "screen_recording_instructions": [
          "Edit company.json: chief-of-staff routes work, Research cites supplied evidence, QA rejects unsourced claims. Give each bot one job, explicit principles and a voice, plus the short shared company_doc. With Grok Bot create private test teammates; without access, run these roles as separate bounded sessions in your own existing CLI.",
          "Inspect the result: The team has a chief and at least two named specialists, each with a job, rules and voice.",
          "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 team has a chief and at least two named specialists, each with a job, rules and voice."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Edit company.json: chief-of-staff routes work, Research cites supplied evidence, QA rejects unsourced claims. Give each bot one job, explicit principles and a voice, plus the short shared company_doc. With Grok Bot create private test teammates; without access, run these roles as separate bounded sessions in your own existing CLI.",
          "The team has a chief and at least two named specialists, each with a job, rules and voice."
        ]
      },
      "step_id": "L01-S03",
      "lesson_id": "L01"
    },
    {
      "title": "Set approvals and the tool path",
      "purpose": "Day 1 [01:16] distinguishes the built-in action classifier from stricter user rules. The event demonstration does not prove every possible action is safe.",
      "user_action": "Keep send_email and publish set to human in company.json. Compare connector/MCP, computer-use and taught-task options for one tool; choose the narrowest access. Define “urgent” as a measurable incident, not a way to bypass review.",
      "explanation": "Day 1 [01:16] distinguishes the built-in action classifier from stricter user rules. The event demonstration does not prove every possible action is safe.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "company.json"
      ],
      "expected_result": "The plan records tool scope, approval boundaries and a precise urgent condition.",
      "resources": [
        "company.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Set approvals and the tool path",
        "success_condition": "The plan records tool scope, approval boundaries and a precise urgent condition.",
        "how_to_verify": "Record the plan records tool scope, approval boundaries and a precise urgent condition. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The plan records tool scope, approval boundaries and a precise urgent condition.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The plan records tool scope, approval boundaries and a precise urgent condition.",
        "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 set approvals and the tool path?",
          "answer": "The plan records tool scope, approval boundaries and a precise urgent condition. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use company.json. Work in the same practice folder."
        }
      ],
      "quiz": {
        "question": "A bot calls a task urgent. May it ignore the written send-email approval rule?",
        "answer_type": "single_choice",
        "choices": [
          "No; urgency does not replace the explicit approval boundary.",
          "Yes; urgent is blanket permission."
        ],
        "correct_answer": 0,
        "explanation": "Rules apply to the action and scope; define measurable escalation conditions."
      },
      "coach": {
        "intro": "We are going to set approvals and the tool path. The plan records tool scope, approval boundaries and a precise urgent condition.",
        "demo": "Keep send_email and publish set to human in company.json. Compare connector/MCP, computer-use and taught-task options for one tool; choose the narrowest access. Define “urgent” as a measurable incident, not a way to bypass review.",
        "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 set approvals and the tool path",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Keep send_email and publish set to human in company.json. Compare connector/MCP, computer-use and taught-task options for one tool; choose the narrowest access. Define “urgent” as a measurable incident, not a way to bypass review. The plan records tool scope, approval boundaries and a precise urgent condition.",
        "on_screen_text": [
          "Set approvals and the tool path",
          "The plan records tool scope, approval boundaries and a precise urgent condition."
        ],
        "screen_recording_instructions": [
          "Keep send_email and publish set to human in company.json. Compare connector/MCP, computer-use and taught-task options for one tool; choose the narrowest access. Define “urgent” as a measurable incident, not a way to bypass review.",
          "Inspect the result: The plan records tool scope, approval boundaries and a precise urgent condition.",
          "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 plan records tool scope, approval boundaries and a precise urgent condition."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Keep send_email and publish set to human in company.json. Compare connector/MCP, computer-use and taught-task options for one tool; choose the narrowest access. Define “urgent” as a measurable incident, not a way to bypass review.",
          "The plan records tool scope, approval boundaries and a precise urgent condition."
        ]
      },
      "step_id": "L01-S04",
      "lesson_id": "L01"
    },
    {
      "title": "Write the core loop before graphics",
      "purpose": "Day 2 [00:27] emphasizes a tight starting version; [02:03] discusses scaffolding agents can drive and verify.",
      "user_action": "Edit mvp.core_loop and excluded in company.json. For Proof Desk the loop is ticket → sourced draft → QA review → approved answer. Choose one input and one output, with field types and expected errors. Sketch a debug/feature map before adding visual polish.",
      "explanation": "Day 2 [00:27] emphasizes a tight starting version; [02:03] discusses scaffolding agents can drive and verify.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "company.json",
        "launch-review.md"
      ],
      "expected_result": "The MVP contract has a tight loop, excluded scope and a field/error checklist.",
      "resources": [
        "company.json",
        "launch-review.md"
      ],
      "checkpoint": {
        "what_is_being_checked": "Write the core loop before graphics",
        "success_condition": "The MVP contract has a tight loop, excluded scope and a field/error checklist.",
        "how_to_verify": "Record the MVP contract has a tight loop, excluded scope and a field/error checklist. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The MVP contract has a tight loop, excluded scope and a field/error checklist.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The MVP contract has a tight loop, excluded scope and a field/error checklist.",
        "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 core loop before graphics?",
          "answer": "The MVP contract has a tight loop, excluded scope and a field/error checklist. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use company.json, launch-review.md. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to write the core loop before graphics. The MVP contract has a tight loop, excluded scope and a field/error checklist.",
        "demo": "Edit mvp.core_loop and excluded in company.json. For Proof Desk the loop is ticket → sourced draft → QA review → approved answer. Choose one input and one output, with field types and expected errors. Sketch a debug/feature map before adding visual polish.",
        "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 core loop before graphics",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Edit mvp.core_loop and excluded in company.json. For Proof Desk the loop is ticket → sourced draft → QA review → approved answer. Choose one input and one output, with field types and expected errors. Sketch a debug/feature map before adding visual polish. The MVP contract has a tight loop, excluded scope and a field/error checklist.",
        "on_screen_text": [
          "Write the core loop before graphics",
          "The MVP contract has a tight loop, excluded scope and a field/error checklist."
        ],
        "screen_recording_instructions": [
          "Edit mvp.core_loop and excluded in company.json. For Proof Desk the loop is ticket → sourced draft → QA review → approved answer. Choose one input and one output, with field types and expected errors. Sketch a debug/feature map before adding visual polish.",
          "Inspect the result: The MVP contract has a tight loop, excluded scope and a field/error checklist.",
          "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 MVP contract has a tight loop, excluded scope and a field/error checklist."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Edit mvp.core_loop and excluded in company.json. For Proof Desk the loop is ticket → sourced draft → QA review → approved answer. Choose one input and one output, with field types and expected errors. Sketch a debug/feature map before adding visual polish.",
          "The MVP contract has a tight loop, excluded scope and a field/error checklist."
        ]
      },
      "step_id": "L02-S01",
      "lesson_id": "L02"
    },
    {
      "title": "Pair a maker with a critic",
      "purpose": "Day 2 [05:25] describes generator/critic separation and actually checking outputs. This course uses bounded existing sessions; paid cloud agents are optional.",
      "user_action": "Give Research a supplied support note and ask for a sourced answer. Give QA the note and draft independently; ask for missing evidence, contradiction and an explicit accept/reject decision. Preserve both outputs and the final reviewed correction.",
      "explanation": "Day 2 [05:25] describes generator/critic separation and actually checking outputs. This course uses bounded existing sessions; paid cloud agents are optional.",
      "estimated_time": "6 min",
      "action_type": "create",
      "commands": {
        "all": "Role Research: use only the supplied note to draft an answer with a source quote. Role QA in a separate session: inspect the note and draft, reject unsupported claims, and return a specific correction. Do not publish or send messages."
      },
      "command_type": "prompt",
      "required_inputs": [
        "company.json"
      ],
      "expected_result": "A generated draft, independent critique and sourced correction are retained.",
      "resources": [
        "company.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Pair a maker with a critic",
        "success_condition": "A generated draft, independent critique and sourced correction are retained.",
        "how_to_verify": "Record a generated draft, independent critique and sourced correction are retained. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A generated draft, independent critique and sourced correction are retained.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A generated draft, independent critique and sourced correction are retained.",
        "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 pair a maker with a critic?",
          "answer": "A generated draft, independent critique and sourced correction are retained. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use company.json. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to pair a maker with a critic. A generated draft, independent critique and sourced correction are retained.",
        "demo": "Give Research a supplied support note and ask for a sourced answer. Give QA the note and draft independently; ask for missing evidence, contradiction and an explicit accept/reject decision. Preserve both outputs and the final reviewed correction.",
        "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 pair a maker with a critic",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Give Research a supplied support note and ask for a sourced answer. Give QA the note and draft independently; ask for missing evidence, contradiction and an explicit accept/reject decision. Preserve both outputs and the final reviewed correction. A generated draft, independent critique and sourced correction are retained.",
        "on_screen_text": [
          "Pair a maker with a critic",
          "A generated draft, independent critique and sourced correction are retained."
        ],
        "screen_recording_instructions": [
          "Give Research a supplied support note and ask for a sourced answer. Give QA the note and draft independently; ask for missing evidence, contradiction and an explicit accept/reject decision. Preserve both outputs and the final reviewed correction.",
          "Inspect the result: A generated draft, independent critique and sourced correction are retained.",
          "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 generated draft, independent critique and sourced correction are retained."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Give Research a supplied support note and ask for a sourced answer. Give QA the note and draft independently; ask for missing evidence, contradiction and an explicit accept/reject decision. Preserve both outputs and the final reviewed correction.",
          "A generated draft, independent critique and sourced correction are retained."
        ]
      },
      "step_id": "L02-S02",
      "lesson_id": "L02"
    },
    {
      "title": "Design one economical routine",
      "purpose": "Day 2 [04:08] explicitly recommends fewer routines to reduce noise/usage. The event’s launch pulse and a permanent generic polling loop solve different needs.",
      "user_action": "Set routine trigger, numbered steps and max_runs_per_day to 1 or 2. Estimate usage per run × runs/day and add a stop rule. Prefer an event for new input rather than running every fifteen minutes with nothing to do.",
      "explanation": "Day 2 [04:08] explicitly recommends fewer routines to reduce noise/usage. The event’s launch pulse and a permanent generic polling loop solve different needs.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "company.json"
      ],
      "expected_result": "The routine has a trigger, numbered actions, bounded daily frequency, estimate and stop condition.",
      "resources": [
        "company.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Design one economical routine",
        "success_condition": "The routine has a trigger, numbered actions, bounded daily frequency, estimate and stop condition.",
        "how_to_verify": "Record the routine has a trigger, numbered actions, bounded daily frequency, estimate and stop condition. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The routine has a trigger, numbered actions, bounded daily frequency, estimate and stop condition.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The routine has a trigger, numbered actions, bounded daily frequency, estimate and stop condition.",
        "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 one economical routine?",
          "answer": "The routine has a trigger, numbered actions, bounded daily frequency, estimate and stop condition. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use company.json. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to design one economical routine. The routine has a trigger, numbered actions, bounded daily frequency, estimate and stop condition.",
        "demo": "Set routine trigger, numbered steps and max_runs_per_day to 1 or 2. Estimate usage per run × runs/day and add a stop rule. Prefer an event for new input rather than running every fifteen minutes with nothing to do.",
        "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 one economical routine",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Set routine trigger, numbered steps and max_runs_per_day to 1 or 2. Estimate usage per run × runs/day and add a stop rule. Prefer an event for new input rather than running every fifteen minutes with nothing to do. The routine has a trigger, numbered actions, bounded daily frequency, estimate and stop condition.",
        "on_screen_text": [
          "Design one economical routine",
          "The routine has a trigger, numbered actions, bounded daily frequency, estimate and stop condition."
        ],
        "screen_recording_instructions": [
          "Set routine trigger, numbered steps and max_runs_per_day to 1 or 2. Estimate usage per run × runs/day and add a stop rule. Prefer an event for new input rather than running every fifteen minutes with nothing to do.",
          "Inspect the result: The routine has a trigger, numbered actions, bounded daily frequency, estimate and stop condition.",
          "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 routine has a trigger, numbered actions, bounded daily frequency, estimate and stop condition."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Set routine trigger, numbered steps and max_runs_per_day to 1 or 2. Estimate usage per run × runs/day and add a stop rule. Prefer an event for new input rather than running every fifteen minutes with nothing to do.",
          "The routine has a trigger, numbered actions, bounded daily frequency, estimate and stop condition."
        ]
      },
      "step_id": "L02-S03",
      "lesson_id": "L02"
    },
    {
      "title": "Run the deterministic company check",
      "purpose": "A reusable checker makes the contract observable. This validates configuration, not that a cloud bot performed the task.",
      "user_action": "Run company_check.py company.json and inspect company-check.json. Then remove one specialist from a copy and prove the checker rejects an incomplete team.",
      "explanation": "A reusable checker makes the contract observable. This validates configuration, not that a cloud bot performed the task.",
      "estimated_time": "6 min",
      "action_type": "command",
      "commands": {
        "windows": "python company_check.py company.json",
        "macos": "python3 company_check.py company.json",
        "linux": "python3 company_check.py company.json"
      },
      "command_type": "shell",
      "required_inputs": [
        "company_check.py",
        "company.json"
      ],
      "expected_result": "COMPANY PASS reports three bots for the complete pack and the incomplete pack fails.",
      "resources": [
        "company_check.py",
        "company.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Run the deterministic company check",
        "success_condition": "COMPANY PASS reports three bots for the complete pack and the incomplete pack fails.",
        "how_to_verify": "Record cOMPANY PASS reports three bots for the complete pack and the incomplete pack fails. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "COMPANY PASS reports three bots for the complete pack and the incomplete pack fails.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [
          "COMPANY PASS"
        ],
        "user_visible_success_message": "Evidence saved. COMPANY PASS reports three bots for the complete pack and the incomplete pack fails.",
        "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 deterministic company check?",
          "answer": "COMPANY PASS reports three bots for the complete pack and the incomplete pack fails. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use company_check.py, company.json. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to run the deterministic company check. COMPANY PASS reports three bots for the complete pack and the incomplete pack fails.",
        "demo": "Run company_check.py company.json and inspect company-check.json. Then remove one specialist from a copy and prove the checker rejects an incomplete team.",
        "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 deterministic company check",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Run company_check.py company.json and inspect company-check.json. Then remove one specialist from a copy and prove the checker rejects an incomplete team. COMPANY PASS reports three bots for the complete pack and the incomplete pack fails.",
        "on_screen_text": [
          "Run the deterministic company check",
          "COMPANY PASS reports three bots for the complete pack and the incomplete pack fails."
        ],
        "screen_recording_instructions": [
          "Run company_check.py company.json and inspect company-check.json. Then remove one specialist from a copy and prove the checker rejects an incomplete team.",
          "Inspect the result: COMPANY PASS reports three bots for the complete pack and the incomplete pack fails.",
          "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": [
          "COMPANY PASS reports three bots for the complete pack and the incomplete pack fails."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Run company_check.py company.json and inspect company-check.json. Then remove one specialist from a copy and prove the checker rejects an incomplete team.",
          "COMPANY PASS reports three bots for the complete pack and the incomplete pack fails."
        ]
      },
      "step_id": "L02-S04",
      "lesson_id": "L02"
    },
    {
      "title": "Plan a software factory with a release gate",
      "purpose": "Day 3 [00:14] describes small implementer/verifier phases; [02:28] stresses rigorous checks once users are on production. Green status alone is insufficient.",
      "user_action": "Write a small-change workflow: reproduce bug, implementer proposes a minimal diff, verifier runs/fuzzes the actual app, QA receives passing changes, then human reviews before merge. Attach screenshots/traces and keep auto-merge off in the rehearsal.",
      "explanation": "Day 3 [00:14] describes small implementer/verifier phases; [02:28] stresses rigorous checks once users are on production. Green status alone is insufficient.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "launch-review.md"
      ],
      "expected_result": "The release gate requires reproduction, independent execution evidence, review and rollback.",
      "resources": [
        "launch-review.md"
      ],
      "checkpoint": {
        "what_is_being_checked": "Plan a software factory with a release gate",
        "success_condition": "The release gate requires reproduction, independent execution evidence, review and rollback.",
        "how_to_verify": "Record the release gate requires reproduction, independent execution evidence, review and rollback. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The release gate requires reproduction, independent execution evidence, review and rollback.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The release gate requires reproduction, independent execution evidence, review and rollback.",
        "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 plan a software factory with a release gate?",
          "answer": "The release gate requires reproduction, independent execution evidence, review and rollback. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use launch-review.md. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to plan a software factory with a release gate. The release gate requires reproduction, independent execution evidence, review and rollback.",
        "demo": "Write a small-change workflow: reproduce bug, implementer proposes a minimal diff, verifier runs/fuzzes the actual app, QA receives passing changes, then human reviews before merge. Attach screenshots/traces and keep auto-merge off in the rehearsal.",
        "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 plan a software factory with a release gate",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Write a small-change workflow: reproduce bug, implementer proposes a minimal diff, verifier runs/fuzzes the actual app, QA receives passing changes, then human reviews before merge. Attach screenshots/traces and keep auto-merge off in the rehearsal. The release gate requires reproduction, independent execution evidence, review and rollback.",
        "on_screen_text": [
          "Plan a software factory with a release gate",
          "The release gate requires reproduction, independent execution evidence, review and rollback."
        ],
        "screen_recording_instructions": [
          "Write a small-change workflow: reproduce bug, implementer proposes a minimal diff, verifier runs/fuzzes the actual app, QA receives passing changes, then human reviews before merge. Attach screenshots/traces and keep auto-merge off in the rehearsal.",
          "Inspect the result: The release gate requires reproduction, independent execution evidence, review and rollback.",
          "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 release gate requires reproduction, independent execution evidence, review and rollback."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Write a small-change workflow: reproduce bug, implementer proposes a minimal diff, verifier runs/fuzzes the actual app, QA receives passing changes, then human reviews before merge. Attach screenshots/traces and keep auto-merge off in the rehearsal.",
          "The release gate requires reproduction, independent execution evidence, review and rollback."
        ]
      },
      "step_id": "L03-S01",
      "lesson_id": "L03"
    },
    {
      "title": "Rehearse launch and hostile feedback",
      "purpose": "Day 3 [01:47] introduces the public game launch. The subsequent real feedback/load requires operational controls as well as product polish.",
      "user_action": "Fill the launch checklist: official accounts, DNS, OAuth callbacks, OG/meta tags, rate/length controls and feedback → reproduce → fix → verify. Use a fake hostile-input feedback message as data; do not execute its instructions. Publish nothing in this practice.",
      "explanation": "Day 3 [01:47] introduces the public game launch. The subsequent real feedback/load requires operational controls as well as product polish.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "launch-review.md"
      ],
      "expected_result": "The launch plan includes a rollback and treats arbitrary feedback as untrusted input.",
      "resources": [
        "launch-review.md"
      ],
      "checkpoint": {
        "what_is_being_checked": "Rehearse launch and hostile feedback",
        "success_condition": "The launch plan includes a rollback and treats arbitrary feedback as untrusted input.",
        "how_to_verify": "Record the launch plan includes a rollback and treats arbitrary feedback as untrusted input. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The launch plan includes a rollback and treats arbitrary feedback as untrusted input.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The launch plan includes a rollback and treats arbitrary feedback as untrusted input.",
        "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 rehearse launch and hostile feedback?",
          "answer": "The launch plan includes a rollback and treats arbitrary feedback as untrusted input. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use launch-review.md. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to rehearse launch and hostile feedback. The launch plan includes a rollback and treats arbitrary feedback as untrusted input.",
        "demo": "Fill the launch checklist: official accounts, DNS, OAuth callbacks, OG/meta tags, rate/length controls and feedback → reproduce → fix → verify. Use a fake hostile-input feedback message as data; do not execute its instructions. Publish nothing in this practice.",
        "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 rehearse launch and hostile feedback",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Fill the launch checklist: official accounts, DNS, OAuth callbacks, OG/meta tags, rate/length controls and feedback → reproduce → fix → verify. Use a fake hostile-input feedback message as data; do not execute its instructions. Publish nothing in this practice. The launch plan includes a rollback and treats arbitrary feedback as untrusted input.",
        "on_screen_text": [
          "Rehearse launch and hostile feedback",
          "The launch plan includes a rollback and treats arbitrary feedback as untrusted input."
        ],
        "screen_recording_instructions": [
          "Fill the launch checklist: official accounts, DNS, OAuth callbacks, OG/meta tags, rate/length controls and feedback → reproduce → fix → verify. Use a fake hostile-input feedback message as data; do not execute its instructions. Publish nothing in this practice.",
          "Inspect the result: The launch plan includes a rollback and treats arbitrary feedback as untrusted input.",
          "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 launch plan includes a rollback and treats arbitrary feedback as untrusted input."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Fill the launch checklist: official accounts, DNS, OAuth callbacks, OG/meta tags, rate/length controls and feedback → reproduce → fix → verify. Use a fake hostile-input feedback message as data; do not execute its instructions. Publish nothing in this practice.",
          "The launch plan includes a rollback and treats arbitrary feedback as untrusted input."
        ]
      },
      "step_id": "L03-S02",
      "lesson_id": "L03"
    },
    {
      "title": "Measure usage and keep the team lean",
      "purpose": "The event’s growth and retrospective are case-study advice. A human still sets vision, taste and judgment; bots do not establish product-market fit by announcing completion.",
      "user_action": "Write a launch pulse with attempts, accepted answers, repeat users, errors and cost per routine. Identify one redundant bot/feature to retire. Give the chief a finite task list and a weekly improvement suggestion; retain dissent and blockers in a staff summary.",
      "explanation": "The event’s growth and retrospective are case-study advice. A human still sets vision, taste and judgment; bots do not establish product-market fit by announcing completion.",
      "estimated_time": "6 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "company.json",
        "launch-review.md"
      ],
      "expected_result": "The measurement plan uses funnel/retention before speculative revenue and has one scope-reduction decision.",
      "resources": [
        "company.json",
        "launch-review.md"
      ],
      "checkpoint": {
        "what_is_being_checked": "Measure usage and keep the team lean",
        "success_condition": "The measurement plan uses funnel/retention before speculative revenue and has one scope-reduction decision.",
        "how_to_verify": "Record the measurement plan uses funnel/retention before speculative revenue and has one scope-reduction decision. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The measurement plan uses funnel/retention before speculative revenue and has one scope-reduction decision.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The measurement plan uses funnel/retention before speculative revenue and has one scope-reduction decision.",
        "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 measure usage and keep the team lean?",
          "answer": "The measurement plan uses funnel/retention before speculative revenue and has one scope-reduction decision. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use company.json, launch-review.md. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to measure usage and keep the team lean. The measurement plan uses funnel/retention before speculative revenue and has one scope-reduction decision.",
        "demo": "Write a launch pulse with attempts, accepted answers, repeat users, errors and cost per routine. Identify one redundant bot/feature to retire. Give the chief a finite task list and a weekly improvement suggestion; retain dissent and blockers in a staff summary.",
        "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 measure usage and keep the team lean",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Write a launch pulse with attempts, accepted answers, repeat users, errors and cost per routine. Identify one redundant bot/feature to retire. Give the chief a finite task list and a weekly improvement suggestion; retain dissent and blockers in a staff summary. The measurement plan uses funnel/retention before speculative revenue and has one scope-reduction decision.",
        "on_screen_text": [
          "Measure usage and keep the team lean",
          "The measurement plan uses funnel/retention before speculative revenue and has one scope-reduction decision."
        ],
        "screen_recording_instructions": [
          "Write a launch pulse with attempts, accepted answers, repeat users, errors and cost per routine. Identify one redundant bot/feature to retire. Give the chief a finite task list and a weekly improvement suggestion; retain dissent and blockers in a staff summary.",
          "Inspect the result: The measurement plan uses funnel/retention before speculative revenue and has one scope-reduction decision.",
          "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 measurement plan uses funnel/retention before speculative revenue and has one scope-reduction decision."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Write a launch pulse with attempts, accepted answers, repeat users, errors and cost per routine. Identify one redundant bot/feature to retire. Give the chief a finite task list and a weekly improvement suggestion; retain dissent and blockers in a staff summary.",
          "The measurement plan uses funnel/retention before speculative revenue and has one scope-reduction decision."
        ]
      },
      "step_id": "L03-S03",
      "lesson_id": "L03"
    },
    {
      "title": "Deliver your company-of-bots capstone",
      "purpose": "No paid step, public launch or automatic outreach is required. Without Grok Bot access, the same role contracts can be practiced in your existing agent CLI.",
      "user_action": "Adapt the pack to your own real problem or a clearly labeled rehearsal. Run the three bounded roles, preserve their outputs, run company_check.py and retain the check. Verify the one routine’s scope and approvals before enabling it later.",
      "explanation": "No paid step, public launch or automatic outreach is required. Without Grok Bot access, the same role contracts can be practiced in your existing agent CLI.",
      "estimated_time": "6 min",
      "action_type": "command",
      "commands": {
        "windows": "python company_check.py company.json",
        "macos": "python3 company_check.py company.json",
        "linux": "python3 company_check.py company.json"
      },
      "command_type": "shell",
      "required_inputs": [
        "company_check.py",
        "company.json",
        "launch-review.md"
      ],
      "expected_result": "COMPANY PASS and the shared company doc, three role outputs, routine, verification proof and launch review form the final pack.",
      "resources": [
        "company_check.py",
        "company.json",
        "launch-review.md"
      ],
      "checkpoint": {
        "what_is_being_checked": "Deliver your company-of-bots capstone",
        "success_condition": "COMPANY PASS and the shared company doc, three role outputs, routine, verification proof and launch review form the final pack.",
        "how_to_verify": "Record cOMPANY PASS and the shared company doc, three role outputs, routine, verification proof and launch review form the final pack. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "COMPANY PASS and the shared company doc, three role outputs, routine, verification proof and launch review form the final pack.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [
          "COMPANY PASS"
        ],
        "user_visible_success_message": "Evidence saved. COMPANY PASS and the shared company doc, three role outputs, routine, verification proof and launch review form the final pack.",
        "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 deliver your company-of-bots capstone?",
          "answer": "COMPANY PASS and the shared company doc, three role outputs, routine, verification proof and launch review form the final pack. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use company_check.py, company.json, launch-review.md. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to deliver your company-of-bots capstone. COMPANY PASS and the shared company doc, three role outputs, routine, verification proof and launch review form the final pack.",
        "demo": "Adapt the pack to your own real problem or a clearly labeled rehearsal. Run the three bounded roles, preserve their outputs, run company_check.py and retain the check. Verify the one routine’s scope and approvals before enabling it later.",
        "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 deliver your company-of-bots capstone",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Adapt the pack to your own real problem or a clearly labeled rehearsal. Run the three bounded roles, preserve their outputs, run company_check.py and retain the check. Verify the one routine’s scope and approvals before enabling it later. COMPANY PASS and the shared company doc, three role outputs, routine, verification proof and launch review form the final pack.",
        "on_screen_text": [
          "Deliver your company-of-bots capstone",
          "COMPANY PASS and the shared company doc, three role outputs, routine, verification proof and launch review form the final pack."
        ],
        "screen_recording_instructions": [
          "Adapt the pack to your own real problem or a clearly labeled rehearsal. Run the three bounded roles, preserve their outputs, run company_check.py and retain the check. Verify the one routine’s scope and approvals before enabling it later.",
          "Inspect the result: COMPANY PASS and the shared company doc, three role outputs, routine, verification proof and launch review form the final pack.",
          "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": [
          "COMPANY PASS and the shared company doc, three role outputs, routine, verification proof and launch review form the final pack."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Adapt the pack to your own real problem or a clearly labeled rehearsal. Run the three bounded roles, preserve their outputs, run company_check.py and retain the check. Verify the one routine’s scope and approvals before enabling it later.",
          "COMPANY PASS and the shared company doc, three role outputs, routine, verification proof and launch review form the final pack."
        ]
      },
      "step_id": "L03-S04",
      "lesson_id": "L03"
    },
    {
      "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": "L04-S01",
      "lesson_id": "L04"
    },
    {
      "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": "L04-S02",
      "lesson_id": "L04"
    },
    {
      "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": "L04-S03",
      "lesson_id": "L04"
    },
    {
      "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": "L04-S04",
      "lesson_id": "L04"
    },
    {
      "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": "L04-S05",
      "lesson_id": "L04"
    }
  ],
  "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": "company.json",
      "type": "json",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "{\n  \"name\": \"Proof Desk\",\n  \"problem\": \"Turn messy support notes into reviewed answers\",\n  \"company_doc\": \"Only publish answers with a source and human approval. No messages are sent by this exercise.\",\n  \"bots\": [\n    {\n      \"name\": \"Chief\",\n      \"job\": \"Route tickets and summarize blockers\",\n      \"rules\": [\n        \"Read company doc\",\n        \"Ask before sending messages\"\n      ],\n      \"voice\": \"brief\"\n    },\n    {\n      \"name\": \"Research\",\n      \"job\": \"Find evidence in supplied notes\",\n      \"rules\": [\n        \"Cite source\",\n        \"Say unknown when absent\"\n      ],\n      \"voice\": \"precise\"\n    },\n    {\n      \"name\": \"QA\",\n      \"job\": \"Verify source and approval before release\",\n      \"rules\": [\n        \"Reject unsourced answers\",\n        \"Run check before release\"\n      ],\n      \"voice\": \"direct\"\n    }\n  ],\n  \"routine\": {\n    \"trigger\": \"daily 09:00 local\",\n    \"steps\": [\n      \"Read new tickets\",\n      \"Assign Research\",\n      \"Request QA check\",\n      \"Draft summary\"\n    ],\n    \"max_runs_per_day\": 1\n  },\n  \"approval\": {\n    \"send_email\": \"human\",\n    \"publish\": \"human\"\n  },\n  \"verification\": {\n    \"command\": \"python company_check.py company.json\",\n    \"evidence\": \"company-check.json\"\n  },\n  \"mvp\": {\n    \"core_loop\": [\n      \"ticket\",\n      \"sourced draft\",\n      \"review\",\n      \"approved answer\"\n    ],\n    \"excluded\": [\n      \"automated outreach\",\n      \"paid ads\"\n    ]\n  },\n  \"launch\": {\n    \"mode\": \"local rehearsal\",\n    \"metrics\": [\n      \"tickets reviewed\",\n      \"answers accepted\",\n      \"repeat users\"\n    ],\n    \"rollback\": \"keep last approved answer set\"\n  }\n}",
      "filename": "company.json",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R007",
      "name": "company_check.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.\nimport argparse,json\nfrom pathlib import Path\ndef validate(x):\n    assert len(x['bots'])>=3,'chief plus two specialists required'\n    assert len({b['name'] for b in x['bots']})==len(x['bots']),'unique bot names required'\n    assert x['company_doc'] and x['problem']\n    for b in x['bots']:assert b['job'] and b['voice'] and len(b['rules'])>=2\n    assert x['approval']['send_email']=='human' and x['approval']['publish']=='human'\n    assert x['routine']['max_runs_per_day']<=2 and len(x['routine']['steps'])>=3\n    assert x['verification']['command'] and x['verification']['evidence']\n    assert len(x['mvp']['core_loop'])>=3 and x['launch']['rollback']\n    return {'result':'COMPANY PASS','bots':len(x['bots']),'mode':'local rehearsal; no external actions executed'}\nif __name__=='__main__':\n    p=argparse.ArgumentParser();p.add_argument('company');a=p.parse_args()\n    report=validate(json.loads(Path(a.company).read_text(encoding='utf-8')))\n    Path('company-check.json').write_text(json.dumps(report,indent=2),encoding='utf-8');print(json.dumps(report,indent=2))\n",
      "filename": "company_check.py",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R008",
      "name": "launch-review.md",
      "type": "md",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "# Rehearsal gate\nMVP contract:\nThree validation conversations (notes only):\nFeature map:\nReproduction / verifier evidence:\nPublic account, DNS and OAuth checks (if later deploying):\nFeedback -> reproduce -> small fix -> check -> review:\nRate limits / hostile-input handling:\nFunnel and repeat use:\nCost per routine / maximum runs:\nOne thing to stop building:\n",
      "filename": "launch-review.md",
      "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",
      "company.json",
      "company_check.py",
      "launch-review.md"
    ],
    "success_conditions": [
      "A three-day company-of-bots practice pack with a chief of staff, two specialists, shared company document, approval rules, one bounded routine, MVP contract, verification evidence and launch-feedback plan.",
      "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 three-day company-of-bots practice pack with a chief of staff, two specialists, shared company document, approval rules, one bounded routine, MVP contract, verification evidence and launch-feedback plan.",
    "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": "Grok Bot Galaxy, 3 Days: Build a Company with Bots | BuildBotsBetter",
    "SEO_description": "A three-day company-of-bots practice pack with a chief of staff, two specialists, shared company document, approval rules, one bounded routine, MVP contract, verification evidence and launch-feedback plan.",
    "SEO_keywords": [
      "grok-bot-galaxy-3-day",
      "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": [
      "Transcripts have no speaker labels and sometimes garble names/tool names; do not treat garbled names as facts.",
      "Company checker validates the configuration contract; real bot task execution needs its own evidence."
    ]
  },
  "sources": [
    {
      "title": "Shared three-day brief",
      "url": "../../specs/grok-bot-galaxy-3-day.md"
    },
    {
      "title": "Archive provenance and transcript limitations",
      "url": "../../../../bots/marketing/x_broadcasts/claude_code/data/transcribe/README.md"
    },
    {
      "title": "Day 1 transcript — cited 00:32 and 01:16 passages",
      "url": "../../../../bots/marketing/x_broadcasts/claude_code/data/transcribe/day1/transcript.txt"
    },
    {
      "title": "Day 2 transcript — cited 00:27, 02:03, 03:35, 04:08 and 05:25 passages",
      "url": "../../../../bots/marketing/x_broadcasts/claude_code/data/transcribe/day2/transcript.txt"
    },
    {
      "title": "Day 3 transcript — cited 00:14, 01:47 and 02:28 passages",
      "url": "../../../../bots/marketing/x_broadcasts/claude_code/data/transcribe/day3/transcript.txt"
    },
    {
      "title": "Current Grok Bot product guide",
      "url": "https://docs.x.ai/grok-bot/get-started"
    }
  ],
  "known_uncertainties": [
    "Transcripts have no speaker labels and sometimes garble names/tool names; do not treat garbled names as facts.",
    "Company checker validates the configuration contract; real bot task execution needs its own evidence."
  ]
}
