{
  "schema_version": 2,
  "meta": {
    "build_id": "CODEX-REDDIT-CONTENT-AI-SI-AGENTIC-ERA",
    "slug": "reddit-content-ai-si-agentic-era",
    "title": "Creating Reddit Content for the AI, SI, and Agentic Era",
    "subtitle": "Make a native selftext troubleshooting post and a checked companion knowledge pack.",
    "description": "A reviewed selftext troubleshooting post for Desktop PC case rattle, controlled A/B drafts, complete native production/capstone plans, an evidence rubric, source-linked retrieval objects and hash-checked companion resources.",
    "one_sentence_description": "A reviewed selftext troubleshooting post for Desktop PC case rattle, controlled A/B drafts, complete native production/capstone plans, an evidence rubric, source-linked retrieval objects and hash-checked companion resources.",
    "target_user": "A beginner content creator or content agent reviewer: A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.",
    "skill_level": "beginner",
    "estimated_time": "4–6 hours including native production; live publication optional",
    "category": "Guided Build",
    "tags": [
      "reddit-content-ai-si-agentic-era",
      "verified practice",
      "chatgpt_codex"
    ],
    "prerequisites": [
      "Permission to use a dedicated workspace",
      "A browser and terminal",
      "Read each platform-specific prerequisite before installation"
    ],
    "required_accounts": [],
    "required_software": [
      "Modern browser",
      "Python 3.10+ for downloadable drills"
    ],
    "required_hardware": [
      "A computer with space for the practice files",
      "Second drive for the disaster-recovery checkpoint"
    ],
    "expected_cost": "Free offline practice. Optional platform production uses your own eligible account; no paid service is needed.",
    "final_outcome": "A reviewed selftext troubleshooting post for Desktop PC case rattle, controlled A/B drafts, complete native production/capstone plans, an evidence rubric, source-linked retrieval objects and hash-checked companion resources.",
    "platforms": [
      "windows",
      "macos",
      "linux"
    ],
    "version": "3.0",
    "author": "chatgpt_codex",
    "source_checked": "2026-10-06",
    "verification_status": "Created; automated browser and project checks recorded separately. Live account/OS verification is never inferred from browser completion."
  },
  "user_outcome": {
    "before": "The learner has no reproducible, checked workflow for creating reddit content for the ai, si, and agentic era.",
    "after": "A reviewed selftext troubleshooting post for Desktop PC case rattle, controlled A/B drafts, complete native production/capstone plans, an evidence rubric, source-linked retrieval objects and hash-checked companion resources.",
    "finished_product": "A reviewed selftext troubleshooting post for Desktop PC case rattle, controlled A/B drafts, complete native production/capstone plans, an evidence rubric, source-linked retrieval objects and hash-checked companion resources."
  },
  "learning_objectives": [
    "The studio shows A/B drafts and a zero-initialized rubric; the content-agent plan has twenty operating points and native CTA/AI boundaries.",
    "A community map separates format, governance and discovery.",
    "Ten preflight answers justify a specific community.",
    "A dated intelligence profile lists actual rules and unknowns.",
    "Seventeen archetypes and one native choice exist.",
    "A format decision and evidence plan fit community rules."
  ],
  "lessons": [
    {
      "lesson_id": "L01",
      "title": "Start with the native creation experience",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.",
      "estimated_time": "10 min",
      "learning_objective": "The studio shows A/B drafts and a zero-initialized rubric; the content-agent plan has twenty operating points and native CTA/AI boundaries.",
      "lessons_before_this": [],
      "lessons_after_this": [
        "L02"
      ]
    },
    {
      "lesson_id": "L02",
      "title": "Understand the community architecture",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A community map separates format, governance and discovery.",
      "lessons_before_this": [
        "L01"
      ],
      "lessons_after_this": [
        "L03"
      ]
    },
    {
      "lesson_id": "L03",
      "title": "Choose the subreddit audience",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Ten preflight answers justify a specific community.",
      "lessons_before_this": [
        "L02"
      ],
      "lessons_after_this": [
        "L04"
      ]
    },
    {
      "lesson_id": "L04",
      "title": "Write a community intelligence profile",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A dated intelligence profile lists actual rules and unknowns.",
      "lessons_before_this": [
        "L03"
      ],
      "lessons_after_this": [
        "L05"
      ]
    },
    {
      "lesson_id": "L05",
      "title": "Choose a conversational contribution",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Seventeen archetypes and one native choice exist.",
      "lessons_before_this": [
        "L04"
      ],
      "lessons_after_this": [
        "L06"
      ]
    },
    {
      "lesson_id": "L06",
      "title": "Select the native post type",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A format decision and evidence plan fit community rules.",
      "lessons_before_this": [
        "L05"
      ],
      "lessons_after_this": [
        "L07"
      ]
    },
    {
      "lesson_id": "L07",
      "title": "Write a descriptive title",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Three titles communicate the actual problem.",
      "lessons_before_this": [
        "L06"
      ],
      "lessons_after_this": [
        "L08"
      ]
    },
    {
      "lesson_id": "L08",
      "title": "Compose the controlled selftext pair",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A/B drafts differ in clarity rather than topic or offer.",
      "lessons_before_this": [
        "L07"
      ],
      "lessons_after_this": [
        "L09"
      ]
    },
    {
      "lesson_id": "L09",
      "title": "Make the observation reproducible",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A log separates observation from unverified diagnosis.",
      "lessons_before_this": [
        "L08"
      ],
      "lessons_after_this": [
        "L10"
      ]
    },
    {
      "lesson_id": "L10",
      "title": "Treat comments as first-class content",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Three replies add value and respect uncertainty.",
      "lessons_before_this": [
        "L09"
      ],
      "lessons_after_this": [
        "L11"
      ]
    },
    {
      "lesson_id": "L11",
      "title": "Extract a nine-field knowledge object",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Nine extraction fields preserve unresolved and disputed status.",
      "lessons_before_this": [
        "L10"
      ],
      "lessons_after_this": [
        "L12"
      ]
    },
    {
      "lesson_id": "L12",
      "title": "Support search and semantic discovery",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A self-contained question and answer use explicit entities.",
      "lessons_before_this": [
        "L11"
      ],
      "lessons_after_this": [
        "L13"
      ]
    },
    {
      "lesson_id": "L13",
      "title": "Evaluate Reddit AI with boundaries",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A claim ledger separates retrieval features from training assertions.",
      "lessons_before_this": [
        "L12"
      ],
      "lessons_after_this": [
        "L14"
      ]
    },
    {
      "lesson_id": "L14",
      "title": "Answer the six agent questions",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Six qualification answers identify safe scope and unknowns.",
      "lessons_before_this": [
        "L13"
      ],
      "lessons_after_this": [
        "L15"
      ]
    },
    {
      "lesson_id": "L15",
      "title": "Respect contribution culture",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A contribution policy and three moderation responses exist.",
      "lessons_before_this": [
        "L14"
      ],
      "lessons_after_this": [
        "L16"
      ]
    },
    {
      "lesson_id": "L16",
      "title": "Design a B3 technical variant",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "The technical variant changes audience deliberately and preserves source honesty.",
      "lessons_before_this": [
        "L15"
      ],
      "lessons_after_this": [
        "L17"
      ]
    },
    {
      "lesson_id": "L17",
      "title": "Plan the experimentation lab",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Four test proposals have denominators and a moderation stop rule.",
      "lessons_before_this": [
        "L16"
      ],
      "lessons_after_this": [
        "L18"
      ]
    },
    {
      "lesson_id": "L18",
      "title": "Apply the quality rubric and flywheel",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A scored review and eight-stage knowledge loop exist.",
      "lessons_before_this": [
        "L17"
      ],
      "lessons_after_this": [
        "L19"
      ]
    },
    {
      "lesson_id": "L19",
      "title": "Recompose community knowledge",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Seven native briefs keep the same diagnostic status.",
      "lessons_before_this": [
        "L18"
      ],
      "lessons_after_this": [
        "L20"
      ]
    },
    {
      "lesson_id": "L20",
      "title": "Specify the factory and seventeen gates",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A production flow and seventeen approval checks are complete.",
      "lessons_before_this": [
        "L19"
      ],
      "lessons_after_this": [
        "L21"
      ]
    },
    {
      "lesson_id": "L21",
      "title": "Execute the capstone as a draft rehearsal",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A draft capstone preserves three edge cases and actual publication status.",
      "lessons_before_this": [
        "L20"
      ],
      "lessons_after_this": [
        "L22"
      ]
    },
    {
      "lesson_id": "L22",
      "title": "Companion knowledge and truthful claims",
      "purpose": "A dedicated folder makes mistakes easy to diagnose and keeps real project files separate.",
      "estimated_time": "10 min",
      "learning_objective": "The ledger separates training, retrieval, indexing, context, citation and action; two source-linked chunks stand alone.",
      "lessons_before_this": [
        "L21"
      ],
      "lessons_after_this": [
        "L23"
      ]
    },
    {
      "lesson_id": "L23",
      "title": "Score and verify a reviewed production pack",
      "purpose": "A downloadable pair and rubric are saved; the score is self-assessment and unrun metrics are explicit.",
      "estimated_time": "12 min",
      "learning_objective": "A mismatched topic produces MEDIA FAIL; a reviewed correction produces MEDIA PASS.",
      "lessons_before_this": [
        "L22"
      ],
      "lessons_after_this": [
        "L24"
      ]
    },
    {
      "lesson_id": "L24",
      "title": "Retrieve, attribute and hand off",
      "purpose": "The relevant query returns source-linked chunks; the unrelated query abstains.",
      "estimated_time": "8 min",
      "learning_objective": "The handoff includes native drafts, source/rights review, unsigned integrity manifest, explicit live-status limits and an approval decision.",
      "lessons_before_this": [
        "L23"
      ],
      "lessons_after_this": [
        "L25"
      ]
    },
    {
      "lesson_id": "L25",
      "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": [
        "L24"
      ],
      "lessons_after_this": []
    }
  ],
  "steps": [
    {
      "title": "Open the native draft studio",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.",
      "user_action": "Download the resource ZIP and extract it into a new private folder. Open studio.html directly in your browser. Compare the two selftext troubleshooting post drafts for Desktop PC case rattle. Read AGENT_OPERATING_MANUAL.md and all twenty points in agent-training.json: native CTA/AI, concrete inputs, draft outputs and stop rules. Inspect strategy.json and assign an artifact to each maturity stage. No account or terminal is needed for the studio; do not publish a synthetic fixture.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.",
      "estimated_time": "10 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "studio.html",
        "strategy.json",
        "AGENT_OPERATING_MANUAL.md",
        "agent-training.json"
      ],
      "expected_result": "The studio shows A/B drafts and a zero-initialized rubric; the content-agent plan has twenty operating points and native CTA/AI boundaries.",
      "resources": [
        "studio.html",
        "strategy.json",
        "AGENT_OPERATING_MANUAL.md",
        "agent-training.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Open the native draft studio",
        "success_condition": "The studio shows A/B drafts and a zero-initialized rubric; the content-agent plan has twenty operating points and native CTA/AI boundaries.",
        "how_to_verify": "Record the studio shows A/B drafts and a zero-initialized rubric; the content-agent plan has twenty operating points and native CTA/AI boundaries. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The studio shows A/B drafts and a zero-initialized rubric; the content-agent plan has twenty operating points and native CTA/AI boundaries.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The studio shows A/B drafts and a zero-initialized rubric; the content-agent plan has twenty operating points and native CTA/AI boundaries.",
        "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 open the native draft studio?",
          "answer": "The studio shows A/B drafts and a zero-initialized rubric; the content-agent plan has twenty operating points and native CTA/AI boundaries. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use studio.html, strategy.json, AGENT_OPERATING_MANUAL.md, agent-training.json. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to open the native draft studio. The studio shows A/B drafts and a zero-initialized rubric; the content-agent plan has twenty operating points and native CTA/AI boundaries.",
        "demo": "Download the resource ZIP and extract it into a new private folder. Open studio.html directly in your browser. Compare the two selftext troubleshooting post drafts for Desktop PC case rattle. Read AGENT_OPERATING_MANUAL.md and all twenty points in agent-training.json: native CTA/AI, concrete inputs, draft outputs and stop rules. Inspect strategy.json and assign an artifact to each maturity stage. No account or terminal is needed for the studio; do not publish a synthetic fixture.",
        "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 open the native draft studio",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Download the resource ZIP and extract it into a new private folder. Open studio.html directly in your browser. Compare the two selftext troubleshooting post drafts for Desktop PC case rattle. Read AGENT_OPERATING_MANUAL.md and all twenty points in agent-training.json: native CTA/AI, concrete inputs, draft outputs and stop rules. Inspect strategy.json and assign an artifact to each maturity stage. No account or terminal is needed for the studio; do not publish a synthetic fixture. The studio shows A/B drafts and a zero-initialized rubric; the content-agent plan has twenty operating points and native CTA/AI boundaries.",
        "on_screen_text": [
          "Open the native draft studio",
          "The studio shows A/B drafts and a zero-initialized rubric; the content-agent plan has twenty operating points and native CTA/AI boundaries."
        ],
        "screen_recording_instructions": [
          "Download the resource ZIP and extract it into a new private folder. Open studio.html directly in your browser. Compare the two selftext troubleshooting post drafts for Desktop PC case rattle. Read AGENT_OPERATING_MANUAL.md and all twenty points in agent-training.json: native CTA/AI, concrete inputs, draft outputs and stop rules. Inspect strategy.json and assign an artifact to each maturity stage. No account or terminal is needed for the studio; do not publish a synthetic fixture.",
          "Inspect the result: The studio shows A/B drafts and a zero-initialized rubric; the content-agent plan has twenty operating points and native CTA/AI boundaries.",
          "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 studio shows A/B drafts and a zero-initialized rubric; the content-agent plan has twenty operating points and native CTA/AI boundaries."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Download the resource ZIP and extract it into a new private folder. Open studio.html directly in your browser. Compare the two selftext troubleshooting post drafts for Desktop PC case rattle. Read AGENT_OPERATING_MANUAL.md and all twenty points in agent-training.json: native CTA/AI, concrete inputs, draft outputs and stop rules. Inspect strategy.json and assign an artifact to each maturity stage. No account or terminal is needed for the studio; do not publish a synthetic fixture.",
          "The studio shows A/B drafts and a zero-initialized rubric; the content-agent plan has twenty operating points and native CTA/AI boundaries."
        ]
      },
      "step_id": "L01-S01",
      "lesson_id": "L01"
    },
    {
      "title": "Understand the community architecture",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Map subreddits, posts, comments, nested replies, votes, karma, flair, moderators and AutoModerator. Inventory text, images, galleries, video, polls and AMAs. Treat Home/Popular and sort options as different discovery contexts; do not present a legacy public formula as the current full ranker.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "A community map separates format, governance and discovery.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Understand the community architecture",
        "success_condition": "A community map separates format, governance and discovery.",
        "how_to_verify": "Record a community map separates format, governance and discovery. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A community map separates format, governance and discovery.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A community map separates format, governance and discovery.",
        "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": "What is a useful result for understand the community architecture?",
          "answer": "A community map separates format, governance and discovery. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to understand the community architecture. A community map separates format, governance and discovery.",
        "demo": "Map subreddits, posts, comments, nested replies, votes, karma, flair, moderators and AutoModerator. Inventory text, images, galleries, video, polls and AMAs. Treat Home/Popular and sort options as different discovery contexts; do not present a legacy public formula as the current full ranker.",
        "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 understand the community architecture",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Map subreddits, posts, comments, nested replies, votes, karma, flair, moderators and AutoModerator. Inventory text, images, galleries, video, polls and AMAs. Treat Home/Popular and sort options as different discovery contexts; do not present a legacy public formula as the current full ranker. A community map separates format, governance and discovery.",
        "on_screen_text": [
          "Understand the community architecture",
          "A community map separates format, governance and discovery."
        ],
        "screen_recording_instructions": [
          "Map subreddits, posts, comments, nested replies, votes, karma, flair, moderators and AutoModerator. Inventory text, images, galleries, video, polls and AMAs. Treat Home/Popular and sort options as different discovery contexts; do not present a legacy public formula as the current full ranker.",
          "Inspect the result: A community map separates format, governance and discovery.",
          "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 community map separates format, governance and discovery."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Map subreddits, posts, comments, nested replies, votes, karma, flair, moderators and AutoModerator. Inventory text, images, galleries, video, polls and AMAs. Treat Home/Popular and sort options as different discovery contexts; do not present a legacy public formula as the current full ranker.",
          "A community map separates format, governance and discovery."
        ]
      },
      "step_id": "L02-S01",
      "lesson_id": "L02"
    },
    {
      "title": "Choose the subreddit audience",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Answer which community, purpose, concerns, current discussions, terminology, rewarded posts, rejected posts, explicit rules, norms and native value. Choose a permitted PC-troubleshooting venue rather than assuming every subreddit welcomes the same post.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "Ten preflight answers justify a specific community.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Choose the subreddit audience",
        "success_condition": "Ten preflight answers justify a specific community.",
        "how_to_verify": "Record ten preflight answers justify a specific community. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Ten preflight answers justify a specific community.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Ten preflight answers justify a specific community.",
        "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": "What is a useful result for choose the subreddit audience?",
          "answer": "Ten preflight answers justify a specific community. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to choose the subreddit audience. Ten preflight answers justify a specific community.",
        "demo": "Answer which community, purpose, concerns, current discussions, terminology, rewarded posts, rejected posts, explicit rules, norms and native value. Choose a permitted PC-troubleshooting venue rather than assuming every subreddit welcomes the same post.",
        "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 the subreddit audience",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Answer which community, purpose, concerns, current discussions, terminology, rewarded posts, rejected posts, explicit rules, norms and native value. Choose a permitted PC-troubleshooting venue rather than assuming every subreddit welcomes the same post. Ten preflight answers justify a specific community.",
        "on_screen_text": [
          "Choose the subreddit audience",
          "Ten preflight answers justify a specific community."
        ],
        "screen_recording_instructions": [
          "Answer which community, purpose, concerns, current discussions, terminology, rewarded posts, rejected posts, explicit rules, norms and native value. Choose a permitted PC-troubleshooting venue rather than assuming every subreddit welcomes the same post.",
          "Inspect the result: Ten preflight answers justify a specific community.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "Ten preflight answers justify a specific community."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Answer which community, purpose, concerns, current discussions, terminology, rewarded posts, rejected posts, explicit rules, norms and native value. Choose a permitted PC-troubleshooting venue rather than assuming every subreddit welcomes the same post.",
          "Ten preflight answers justify a specific community."
        ]
      },
      "step_id": "L03-S01",
      "lesson_id": "L03"
    },
    {
      "title": "Write a community intelligence profile",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Observe two public threads and current sidebar/wiki. Record title style, depth, recurring questions, disagreements, account age/karma rules if published, flair, links and AI policies. Unknown thresholds remain unknown.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "A dated intelligence profile lists actual rules and unknowns.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Write a community intelligence profile",
        "success_condition": "A dated intelligence profile lists actual rules and unknowns.",
        "how_to_verify": "Record a dated intelligence profile lists actual rules and unknowns. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A dated intelligence profile lists actual rules and unknowns.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A dated intelligence profile lists actual rules and unknowns.",
        "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": "What is a useful result for write a community intelligence profile?",
          "answer": "A dated intelligence profile lists actual rules and unknowns. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to write a community intelligence profile. A dated intelligence profile lists actual rules and unknowns.",
        "demo": "Observe two public threads and current sidebar/wiki. Record title style, depth, recurring questions, disagreements, account age/karma rules if published, flair, links and AI policies. Unknown thresholds remain unknown.",
        "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 community intelligence profile",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Observe two public threads and current sidebar/wiki. Record title style, depth, recurring questions, disagreements, account age/karma rules if published, flair, links and AI policies. Unknown thresholds remain unknown. A dated intelligence profile lists actual rules and unknowns.",
        "on_screen_text": [
          "Write a community intelligence profile",
          "A dated intelligence profile lists actual rules and unknowns."
        ],
        "screen_recording_instructions": [
          "Observe two public threads and current sidebar/wiki. Record title style, depth, recurring questions, disagreements, account age/karma rules if published, flair, links and AI policies. Unknown thresholds remain unknown.",
          "Inspect the result: A dated intelligence profile lists actual rules and unknowns.",
          "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 dated intelligence profile lists actual rules and unknowns."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Observe two public threads and current sidebar/wiki. Record title style, depth, recurring questions, disagreements, account age/karma rules if published, flair, links and AI policies. Unknown thresholds remain unknown.",
          "A dated intelligence profile lists actual rules and unknowns."
        ]
      },
      "step_id": "L04-S01",
      "lesson_id": "L04"
    },
    {
      "title": "Choose a conversational contribution",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Compare a question, discovery, postmortem, comparison, experiment, breakdown, walkthrough, before/after, critique, compilation, misconception, data request, decision, lesson, resource review, update and synthesis. Pick troubleshooting for the rattle observation.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "Seventeen archetypes and one native choice exist.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Choose a conversational contribution",
        "success_condition": "Seventeen archetypes and one native choice exist.",
        "how_to_verify": "Record seventeen archetypes and one native choice exist. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Seventeen archetypes and one native choice exist.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Seventeen archetypes and one native choice exist.",
        "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": "What is a useful result for choose a conversational contribution?",
          "answer": "Seventeen archetypes and one native choice exist. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to choose a conversational contribution. Seventeen archetypes and one native choice exist.",
        "demo": "Compare a question, discovery, postmortem, comparison, experiment, breakdown, walkthrough, before/after, critique, compilation, misconception, data request, decision, lesson, resource review, update and synthesis. Pick troubleshooting for the rattle observation.",
        "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 a conversational contribution",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Compare a question, discovery, postmortem, comparison, experiment, breakdown, walkthrough, before/after, critique, compilation, misconception, data request, decision, lesson, resource review, update and synthesis. Pick troubleshooting for the rattle observation. Seventeen archetypes and one native choice exist.",
        "on_screen_text": [
          "Choose a conversational contribution",
          "Seventeen archetypes and one native choice exist."
        ],
        "screen_recording_instructions": [
          "Compare a question, discovery, postmortem, comparison, experiment, breakdown, walkthrough, before/after, critique, compilation, misconception, data request, decision, lesson, resource review, update and synthesis. Pick troubleshooting for the rattle observation.",
          "Inspect the result: Seventeen archetypes and one native choice exist.",
          "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": [
          "Seventeen archetypes and one native choice exist."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Compare a question, discovery, postmortem, comparison, experiment, breakdown, walkthrough, before/after, critique, compilation, misconception, data request, decision, lesson, resource review, update and synthesis. Pick troubleshooting for the rattle observation.",
          "Seventeen archetypes and one native choice exist."
        ]
      },
      "step_id": "L05-S01",
      "lesson_id": "L05"
    },
    {
      "title": "Select the native post type",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Draft selftext structure, possible audio/video proof, labeled image and gallery alternatives. Use an external link only when the source is the subject; compare native/external media friction and community permissions without assuming ranking penalties.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "A format decision and evidence plan fit community rules.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Select the native post type",
        "success_condition": "A format decision and evidence plan fit community rules.",
        "how_to_verify": "Record a format decision and evidence plan fit community rules. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A format decision and evidence plan fit community rules.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A format decision and evidence plan fit community rules.",
        "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": "What is a useful result for select the native post type?",
          "answer": "A format decision and evidence plan fit community rules. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to select the native post type. A format decision and evidence plan fit community rules.",
        "demo": "Draft selftext structure, possible audio/video proof, labeled image and gallery alternatives. Use an external link only when the source is the subject; compare native/external media friction and community permissions without assuming ranking penalties.",
        "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 select the native post type",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Draft selftext structure, possible audio/video proof, labeled image and gallery alternatives. Use an external link only when the source is the subject; compare native/external media friction and community permissions without assuming ranking penalties. A format decision and evidence plan fit community rules.",
        "on_screen_text": [
          "Select the native post type",
          "A format decision and evidence plan fit community rules."
        ],
        "screen_recording_instructions": [
          "Draft selftext structure, possible audio/video proof, labeled image and gallery alternatives. Use an external link only when the source is the subject; compare native/external media friction and community permissions without assuming ranking penalties.",
          "Inspect the result: A format decision and evidence plan fit community rules.",
          "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 format decision and evidence plan fit community rules."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Draft selftext structure, possible audio/video proof, labeled image and gallery alternatives. Use an external link only when the source is the subject; compare native/external media friction and community permissions without assuming ranking penalties.",
          "A format decision and evidence plan fit community rules."
        ]
      },
      "step_id": "L06-S01",
      "lesson_id": "L06"
    },
    {
      "title": "Write a descriptive title",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Draft three non-hype titles naming the desktop PC, sound and unresolved status. Avoid sensational claims, sales wording and unexplained abbreviations.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "Three titles communicate the actual problem.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Write a descriptive title",
        "success_condition": "Three titles communicate the actual problem.",
        "how_to_verify": "Record three titles communicate the actual problem. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Three titles communicate the actual problem.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Three titles communicate the actual problem.",
        "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": "What is a useful result for write a descriptive title?",
          "answer": "Three titles communicate the actual problem. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to write a descriptive title. Three titles communicate the actual problem.",
        "demo": "Draft three non-hype titles naming the desktop PC, sound and unresolved status. Avoid sensational claims, sales wording and unexplained abbreviations.",
        "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 descriptive title",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Draft three non-hype titles naming the desktop PC, sound and unresolved status. Avoid sensational claims, sales wording and unexplained abbreviations. Three titles communicate the actual problem.",
        "on_screen_text": [
          "Write a descriptive title",
          "Three titles communicate the actual problem."
        ],
        "screen_recording_instructions": [
          "Draft three non-hype titles naming the desktop PC, sound and unresolved status. Avoid sensational claims, sales wording and unexplained abbreviations.",
          "Inspect the result: Three titles communicate the actual problem.",
          "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": [
          "Three titles communicate the actual problem."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Draft three non-hype titles naming the desktop PC, sound and unresolved status. Avoid sensational claims, sales wording and unexplained abbreviations.",
          "Three titles communicate the actual problem."
        ]
      },
      "step_id": "L07-S01",
      "lesson_id": "L07"
    },
    {
      "title": "Compose the controlled selftext pair",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Use studio.html for A/B on the same case rattle. Keep the symptom and community constant; add context and a genuine request while retaining a conversational voice.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "A/B drafts differ in clarity rather than topic or offer.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Compose the controlled selftext pair",
        "success_condition": "A/B drafts differ in clarity rather than topic or offer.",
        "how_to_verify": "Record a/B drafts differ in clarity rather than topic or offer. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A/B drafts differ in clarity rather than topic or offer.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A/B drafts differ in clarity rather than topic or offer.",
        "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": "What is a useful result for compose the controlled selftext pair?",
          "answer": "A/B drafts differ in clarity rather than topic or offer. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to compose the controlled selftext pair. A/B drafts differ in clarity rather than topic or offer.",
        "demo": "Use studio.html for A/B on the same case rattle. Keep the symptom and community constant; add context and a genuine request while retaining a conversational voice.",
        "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 compose the controlled selftext pair",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Use studio.html for A/B on the same case rattle. Keep the symptom and community constant; add context and a genuine request while retaining a conversational voice. A/B drafts differ in clarity rather than topic or offer.",
        "on_screen_text": [
          "Compose the controlled selftext pair",
          "A/B drafts differ in clarity rather than topic or offer."
        ],
        "screen_recording_instructions": [
          "Use studio.html for A/B on the same case rattle. Keep the symptom and community constant; add context and a genuine request while retaining a conversational voice.",
          "Inspect the result: A/B drafts differ in clarity rather than topic or offer.",
          "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/B drafts differ in clarity rather than topic or offer."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Use studio.html for A/B on the same case rattle. Keep the symptom and community constant; add context and a genuine request while retaining a conversational voice.",
          "A/B drafts differ in clarity rather than topic or offer."
        ]
      },
      "step_id": "L08-S01",
      "lesson_id": "L08"
    },
    {
      "title": "Make the observation reproducible",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Write environment, sound conditions, safe prior observations, redacted evidence and unknowns in diagnostic-log.md. Do not touch moving hardware or assert a component failure from the example.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "A log separates observation from unverified diagnosis.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Make the observation reproducible",
        "success_condition": "A log separates observation from unverified diagnosis.",
        "how_to_verify": "Record a log separates observation from unverified diagnosis. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A log separates observation from unverified diagnosis.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A log separates observation from unverified diagnosis.",
        "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": "What is a useful result for make the observation reproducible?",
          "answer": "A log separates observation from unverified diagnosis. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to make the observation reproducible. A log separates observation from unverified diagnosis.",
        "demo": "Write environment, sound conditions, safe prior observations, redacted evidence and unknowns in diagnostic-log.md. Do not touch moving hardware or assert a component failure from the example.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate make the observation reproducible",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Write environment, sound conditions, safe prior observations, redacted evidence and unknowns in diagnostic-log.md. Do not touch moving hardware or assert a component failure from the example. A log separates observation from unverified diagnosis.",
        "on_screen_text": [
          "Make the observation reproducible",
          "A log separates observation from unverified diagnosis."
        ],
        "screen_recording_instructions": [
          "Write environment, sound conditions, safe prior observations, redacted evidence and unknowns in diagnostic-log.md. Do not touch moving hardware or assert a component failure from the example.",
          "Inspect the result: A log separates observation from unverified diagnosis.",
          "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 log separates observation from unverified diagnosis."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Write environment, sound conditions, safe prior observations, redacted evidence and unknowns in diagnostic-log.md. Do not touch moving hardware or assert a component failure from the example.",
          "A log separates observation from unverified diagnosis."
        ]
      },
      "step_id": "L09-S01",
      "lesson_id": "L09"
    },
    {
      "title": "Treat comments as first-class content",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Write three helpful replies: request missing model, clarify an assumption and explain how to report a safe observation. Avoid unsolicited product promotion or repetitive links.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "Three replies add value and respect uncertainty.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Treat comments as first-class content",
        "success_condition": "Three replies add value and respect uncertainty.",
        "how_to_verify": "Record three replies add value and respect uncertainty. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Three replies add value and respect uncertainty.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Three replies add value and respect uncertainty.",
        "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": "What is a useful result for treat comments as first-class content?",
          "answer": "Three replies add value and respect uncertainty. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to treat comments as first-class content. Three replies add value and respect uncertainty.",
        "demo": "Write three helpful replies: request missing model, clarify an assumption and explain how to report a safe observation. Avoid unsolicited product promotion or repetitive links.",
        "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 treat comments as first-class content",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Write three helpful replies: request missing model, clarify an assumption and explain how to report a safe observation. Avoid unsolicited product promotion or repetitive links. Three replies add value and respect uncertainty.",
        "on_screen_text": [
          "Treat comments as first-class content",
          "Three replies add value and respect uncertainty."
        ],
        "screen_recording_instructions": [
          "Write three helpful replies: request missing model, clarify an assumption and explain how to report a safe observation. Avoid unsolicited product promotion or repetitive links.",
          "Inspect the result: Three replies add value and respect uncertainty.",
          "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": [
          "Three replies add value and respect uncertainty."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Write three helpful replies: request missing model, clarify an assumption and explain how to report a safe observation. Avoid unsolicited product promotion or repetitive links.",
          "Three replies add value and respect uncertainty."
        ]
      },
      "step_id": "L10-S01",
      "lesson_id": "L10"
    },
    {
      "title": "Extract a nine-field knowledge object",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Record core question, consensus, alternatives, evidence, examples, edge cases, root cause, unresolved questions and entities. Use three labeled synthetic replies for practice; consensus does not itself prove a diagnosis.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "Nine extraction fields preserve unresolved and disputed status.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Extract a nine-field knowledge object",
        "success_condition": "Nine extraction fields preserve unresolved and disputed status.",
        "how_to_verify": "Record nine extraction fields preserve unresolved and disputed status. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Nine extraction fields preserve unresolved and disputed status.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Nine extraction fields preserve unresolved and disputed status.",
        "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": "What is a useful result for extract a nine-field knowledge object?",
          "answer": "Nine extraction fields preserve unresolved and disputed status. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to extract a nine-field knowledge object. Nine extraction fields preserve unresolved and disputed status.",
        "demo": "Record core question, consensus, alternatives, evidence, examples, edge cases, root cause, unresolved questions and entities. Use three labeled synthetic replies for practice; consensus does not itself prove a diagnosis.",
        "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 extract a nine-field knowledge object",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Record core question, consensus, alternatives, evidence, examples, edge cases, root cause, unresolved questions and entities. Use three labeled synthetic replies for practice; consensus does not itself prove a diagnosis. Nine extraction fields preserve unresolved and disputed status.",
        "on_screen_text": [
          "Extract a nine-field knowledge object",
          "Nine extraction fields preserve unresolved and disputed status."
        ],
        "screen_recording_instructions": [
          "Record core question, consensus, alternatives, evidence, examples, edge cases, root cause, unresolved questions and entities. Use three labeled synthetic replies for practice; consensus does not itself prove a diagnosis.",
          "Inspect the result: Nine extraction fields preserve unresolved and disputed status.",
          "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": [
          "Nine extraction fields preserve unresolved and disputed status."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Record core question, consensus, alternatives, evidence, examples, edge cases, root cause, unresolved questions and entities. Use three labeled synthetic replies for practice; consensus does not itself prove a diagnosis.",
          "Nine extraction fields preserve unresolved and disputed status."
        ]
      },
      "step_id": "L11-S01",
      "lesson_id": "L11"
    },
    {
      "title": "Support search and semantic discovery",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Put desktop PC, case rattle, model and conditions in natural title/body text. Define subject-predicate-object relationships and avoid vague instructions detached from context.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "A self-contained question and answer use explicit entities.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Support search and semantic discovery",
        "success_condition": "A self-contained question and answer use explicit entities.",
        "how_to_verify": "Record a self-contained question and answer use explicit entities. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A self-contained question and answer use explicit entities.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A self-contained question and answer use explicit entities.",
        "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": "What is a useful result for support search and semantic discovery?",
          "answer": "A self-contained question and answer use explicit entities. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to support search and semantic discovery. A self-contained question and answer use explicit entities.",
        "demo": "Put desktop PC, case rattle, model and conditions in natural title/body text. Define subject-predicate-object relationships and avoid vague instructions detached from context.",
        "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 support search and semantic discovery",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Put desktop PC, case rattle, model and conditions in natural title/body text. Define subject-predicate-object relationships and avoid vague instructions detached from context. A self-contained question and answer use explicit entities.",
        "on_screen_text": [
          "Support search and semantic discovery",
          "A self-contained question and answer use explicit entities."
        ],
        "screen_recording_instructions": [
          "Put desktop PC, case rattle, model and conditions in natural title/body text. Define subject-predicate-object relationships and avoid vague instructions detached from context.",
          "Inspect the result: A self-contained question and answer use explicit entities.",
          "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 self-contained question and answer use explicit entities."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Put desktop PC, case rattle, model and conditions in natural title/body text. Define subject-predicate-object relationships and avoid vague instructions detached from context.",
          "A self-contained question and answer use explicit entities."
        ]
      },
      "step_id": "L12-S01",
      "lesson_id": "L12"
    },
    {
      "title": "Evaluate Reddit AI with boundaries",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Read the Reddit Answers announcement. Contrast cited conversation summaries, search, recommendations, moderation and Pro features; check current availability separately. Licensed data or public access does not guarantee your post enters model weights.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "A claim ledger separates retrieval features from training assertions.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Evaluate Reddit AI with boundaries",
        "success_condition": "A claim ledger separates retrieval features from training assertions.",
        "how_to_verify": "Record a claim ledger separates retrieval features from training assertions. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A claim ledger separates retrieval features from training assertions.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A claim ledger separates retrieval features from training assertions.",
        "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": "What is a useful result for evaluate reddit ai with boundaries?",
          "answer": "A claim ledger separates retrieval features from training assertions. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to evaluate Reddit AI with boundaries. A claim ledger separates retrieval features from training assertions.",
        "demo": "Read the Reddit Answers announcement. Contrast cited conversation summaries, search, recommendations, moderation and Pro features; check current availability separately. Licensed data or public access does not guarantee your post enters model weights.",
        "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 evaluate reddit ai with boundaries",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Read the Reddit Answers announcement. Contrast cited conversation summaries, search, recommendations, moderation and Pro features; check current availability separately. Licensed data or public access does not guarantee your post enters model weights. A claim ledger separates retrieval features from training assertions.",
        "on_screen_text": [
          "Evaluate Reddit AI with boundaries",
          "A claim ledger separates retrieval features from training assertions."
        ],
        "screen_recording_instructions": [
          "Read the Reddit Answers announcement. Contrast cited conversation summaries, search, recommendations, moderation and Pro features; check current availability separately. Licensed data or public access does not guarantee your post enters model weights.",
          "Inspect the result: A claim ledger separates retrieval features from training assertions.",
          "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 claim ledger separates retrieval features from training assertions."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Read the Reddit Answers announcement. Contrast cited conversation summaries, search, recommendations, moderation and Pro features; check current availability separately. Licensed data or public access does not guarantee your post enters model weights.",
          "A claim ledger separates retrieval features from training assertions."
        ]
      },
      "step_id": "L13-S01",
      "lesson_id": "L13"
    },
    {
      "title": "Answer the six agent questions",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Record what the object is, audience/environment, problem, mechanism, failure limits and deterministic next action. Keep the public selftext useful to humans; local draft validation is the companion action.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "Six qualification answers identify safe scope and unknowns.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Answer the six agent questions",
        "success_condition": "Six qualification answers identify safe scope and unknowns.",
        "how_to_verify": "Record six qualification answers identify safe scope and unknowns. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Six qualification answers identify safe scope and unknowns.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Six qualification answers identify safe scope and unknowns.",
        "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": "What is a useful result for answer the six agent questions?",
          "answer": "Six qualification answers identify safe scope and unknowns. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to answer the six agent questions. Six qualification answers identify safe scope and unknowns.",
        "demo": "Record what the object is, audience/environment, problem, mechanism, failure limits and deterministic next action. Keep the public selftext useful to humans; local draft validation is the companion action.",
        "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 answer the six agent questions",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Record what the object is, audience/environment, problem, mechanism, failure limits and deterministic next action. Keep the public selftext useful to humans; local draft validation is the companion action. Six qualification answers identify safe scope and unknowns.",
        "on_screen_text": [
          "Answer the six agent questions",
          "Six qualification answers identify safe scope and unknowns."
        ],
        "screen_recording_instructions": [
          "Record what the object is, audience/environment, problem, mechanism, failure limits and deterministic next action. Keep the public selftext useful to humans; local draft validation is the companion action.",
          "Inspect the result: Six qualification answers identify safe scope and unknowns.",
          "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": [
          "Six qualification answers identify safe scope and unknowns."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Record what the object is, audience/environment, problem, mechanism, failure limits and deterministic next action. Keep the public selftext useful to humans; local draft validation is the companion action.",
          "Six qualification answers identify safe scope and unknowns."
        ]
      },
      "step_id": "L14-S01",
      "lesson_id": "L14"
    },
    {
      "title": "Respect contribution culture",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Draft a disclosure of AI editing and any affiliation. Write moderation responses for a removed post, criticism and a correction. No sockpuppets, fake votes, manufactured controversy or private-thread extraction.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "A contribution policy and three moderation responses exist.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Respect contribution culture",
        "success_condition": "A contribution policy and three moderation responses exist.",
        "how_to_verify": "Record a contribution policy and three moderation responses exist. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A contribution policy and three moderation responses exist.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A contribution policy and three moderation responses exist.",
        "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": "What is a useful result for respect contribution culture?",
          "answer": "A contribution policy and three moderation responses exist. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to respect contribution culture. A contribution policy and three moderation responses exist.",
        "demo": "Draft a disclosure of AI editing and any affiliation. Write moderation responses for a removed post, criticism and a correction. No sockpuppets, fake votes, manufactured controversy or private-thread extraction.",
        "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 respect contribution culture",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Draft a disclosure of AI editing and any affiliation. Write moderation responses for a removed post, criticism and a correction. No sockpuppets, fake votes, manufactured controversy or private-thread extraction. A contribution policy and three moderation responses exist.",
        "on_screen_text": [
          "Respect contribution culture",
          "A contribution policy and three moderation responses exist."
        ],
        "screen_recording_instructions": [
          "Draft a disclosure of AI editing and any affiliation. Write moderation responses for a removed post, criticism and a correction. No sockpuppets, fake votes, manufactured controversy or private-thread extraction.",
          "Inspect the result: A contribution policy and three moderation responses exist.",
          "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 contribution policy and three moderation responses exist."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Draft a disclosure of AI editing and any affiliation. Write moderation responses for a removed post, criticism and a correction. No sockpuppets, fake votes, manufactured controversy or private-thread extraction.",
          "A contribution policy and three moderation responses exist."
        ]
      },
      "step_id": "L15-S01",
      "lesson_id": "L15"
    },
    {
      "title": "Design a B3 technical variant",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "As a separate adaptation, outline a real builder postmortem with reproducible logs and context. Explain why a developer community needs a different example from the general PC-noise audience.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "The technical variant changes audience deliberately and preserves source honesty.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Design a B3 technical variant",
        "success_condition": "The technical variant changes audience deliberately and preserves source honesty.",
        "how_to_verify": "Record the technical variant changes audience deliberately and preserves source honesty. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The technical variant changes audience deliberately and preserves source honesty.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The technical variant changes audience deliberately and preserves source honesty.",
        "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": "What is a useful result for design a b3 technical variant?",
          "answer": "The technical variant changes audience deliberately and preserves source honesty. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to design a B3 technical variant. The technical variant changes audience deliberately and preserves source honesty.",
        "demo": "As a separate adaptation, outline a real builder postmortem with reproducible logs and context. Explain why a developer community needs a different example from the general PC-noise audience.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate design a b3 technical variant",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "As a separate adaptation, outline a real builder postmortem with reproducible logs and context. Explain why a developer community needs a different example from the general PC-noise audience. The technical variant changes audience deliberately and preserves source honesty.",
        "on_screen_text": [
          "Design a B3 technical variant",
          "The technical variant changes audience deliberately and preserves source honesty."
        ],
        "screen_recording_instructions": [
          "As a separate adaptation, outline a real builder postmortem with reproducible logs and context. Explain why a developer community needs a different example from the general PC-noise audience.",
          "Inspect the result: The technical variant changes audience deliberately and preserves source honesty.",
          "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 technical variant changes audience deliberately and preserves source honesty."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "As a separate adaptation, outline a real builder postmortem with reproducible logs and context. Explain why a developer community needs a different example from the general PC-noise audience.",
          "The technical variant changes audience deliberately and preserves source honesty."
        ]
      },
      "step_id": "L16-S01",
      "lesson_id": "L16"
    },
    {
      "title": "Plan the experimentation lab",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Test text/image/gallery/video, title, posting window and prompt independently. Record removal risk, exposure, vote availability, comment depth and useful corrections. Leave unavailable downvote counts as unavailable.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "experiments.md",
        "metrics.json"
      ],
      "expected_result": "Four test proposals have denominators and a moderation stop rule.",
      "resources": [
        "experiments.md",
        "metrics.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Plan the experimentation lab",
        "success_condition": "Four test proposals have denominators and a moderation stop rule.",
        "how_to_verify": "Record four test proposals have denominators and a moderation stop rule. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Four test proposals have denominators and a moderation stop rule.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Four test proposals have denominators and a moderation stop rule.",
        "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": "What is a useful result for plan the experimentation lab?",
          "answer": "Four test proposals have denominators and a moderation stop rule. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to plan the experimentation lab. Four test proposals have denominators and a moderation stop rule.",
        "demo": "Test text/image/gallery/video, title, posting window and prompt independently. Record removal risk, exposure, vote availability, comment depth and useful corrections. Leave unavailable downvote counts as unavailable.",
        "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 the experimentation lab",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Test text/image/gallery/video, title, posting window and prompt independently. Record removal risk, exposure, vote availability, comment depth and useful corrections. Leave unavailable downvote counts as unavailable. Four test proposals have denominators and a moderation stop rule.",
        "on_screen_text": [
          "Plan the experimentation lab",
          "Four test proposals have denominators and a moderation stop rule."
        ],
        "screen_recording_instructions": [
          "Test text/image/gallery/video, title, posting window and prompt independently. Record removal risk, exposure, vote availability, comment depth and useful corrections. Leave unavailable downvote counts as unavailable.",
          "Inspect the result: Four test proposals have denominators and a moderation stop rule.",
          "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": [
          "Four test proposals have denominators and a moderation stop rule."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Test text/image/gallery/video, title, posting window and prompt independently. Record removal risk, exposure, vote availability, comment depth and useful corrections. Leave unavailable downvote counts as unavailable.",
          "Four test proposals have denominators and a moderation stop rule."
        ]
      },
      "step_id": "L17-S01",
      "lesson_id": "L17"
    },
    {
      "title": "Apply the quality rubric and flywheel",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Rate the ten dimensions in studio.html using evidence. Map build → experiment → contribution → critique → extraction → knowledge → improved build → next experiment. A high self-score is not moderator approval.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "A scored review and eight-stage knowledge loop exist.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Apply the quality rubric and flywheel",
        "success_condition": "A scored review and eight-stage knowledge loop exist.",
        "how_to_verify": "Record a scored review and eight-stage knowledge loop exist. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A scored review and eight-stage knowledge loop exist.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A scored review and eight-stage knowledge loop exist.",
        "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": "What is a useful result for apply the quality rubric and flywheel?",
          "answer": "A scored review and eight-stage knowledge loop exist. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to apply the quality rubric and flywheel. A scored review and eight-stage knowledge loop exist.",
        "demo": "Rate the ten dimensions in studio.html using evidence. Map build → experiment → contribution → critique → extraction → knowledge → improved build → next experiment. A high self-score is not moderator approval.",
        "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 apply the quality rubric and flywheel",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Rate the ten dimensions in studio.html using evidence. Map build → experiment → contribution → critique → extraction → knowledge → improved build → next experiment. A high self-score is not moderator approval. A scored review and eight-stage knowledge loop exist.",
        "on_screen_text": [
          "Apply the quality rubric and flywheel",
          "A scored review and eight-stage knowledge loop exist."
        ],
        "screen_recording_instructions": [
          "Rate the ten dimensions in studio.html using evidence. Map build → experiment → contribution → critique → extraction → knowledge → improved build → next experiment. A high self-score is not moderator approval.",
          "Inspect the result: A scored review and eight-stage knowledge loop exist.",
          "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 scored review and eight-stage knowledge loop exist."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Rate the ten dimensions in studio.html using evidence. Map build → experiment → contribution → critique → extraction → knowledge → improved build → next experiment. A high self-score is not moderator approval.",
          "A scored review and eight-stage knowledge loop exist."
        ]
      },
      "step_id": "L18-S01",
      "lesson_id": "L18"
    },
    {
      "title": "Recompose community knowledge",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Adapt the same verified observation into YouTube explanation, TikTok demo, Instagram carousel, professional LinkedIn case, X update, Facebook discussion and a canonical reference. Credit permitted source material and preserve uncertainty.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "Seven native briefs keep the same diagnostic status.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Recompose community knowledge",
        "success_condition": "Seven native briefs keep the same diagnostic status.",
        "how_to_verify": "Record seven native briefs keep the same diagnostic status. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Seven native briefs keep the same diagnostic status.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Seven native briefs keep the same diagnostic status.",
        "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": "What is a useful result for recompose community knowledge?",
          "answer": "Seven native briefs keep the same diagnostic status. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to recompose community knowledge. Seven native briefs keep the same diagnostic status.",
        "demo": "Adapt the same verified observation into YouTube explanation, TikTok demo, Instagram carousel, professional LinkedIn case, X update, Facebook discussion and a canonical reference. Credit permitted source material and preserve uncertainty.",
        "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 recompose community knowledge",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Adapt the same verified observation into YouTube explanation, TikTok demo, Instagram carousel, professional LinkedIn case, X update, Facebook discussion and a canonical reference. Credit permitted source material and preserve uncertainty. Seven native briefs keep the same diagnostic status.",
        "on_screen_text": [
          "Recompose community knowledge",
          "Seven native briefs keep the same diagnostic status."
        ],
        "screen_recording_instructions": [
          "Adapt the same verified observation into YouTube explanation, TikTok demo, Instagram carousel, professional LinkedIn case, X update, Facebook discussion and a canonical reference. Credit permitted source material and preserve uncertainty.",
          "Inspect the result: Seven native briefs keep the same diagnostic status.",
          "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": [
          "Seven native briefs keep the same diagnostic status."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Adapt the same verified observation into YouTube explanation, TikTok demo, Instagram carousel, professional LinkedIn case, X update, Facebook discussion and a canonical reference. Credit permitted source material and preserve uncertainty.",
          "Seven native briefs keep the same diagnostic status."
        ]
      },
      "step_id": "L19-S01",
      "lesson_id": "L19"
    },
    {
      "title": "Specify the factory and seventeen gates",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Map source, intelligence, fit, strategy, post, reply, moderation, discussion, extraction, analytics and model feedback. Answer the seventeen brief gates for audience, rules, format, media, title, value, comments, cards, evidence and logs.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "native-production.md",
        "native.json"
      ],
      "expected_result": "A production flow and seventeen approval checks are complete.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Specify the factory and seventeen gates",
        "success_condition": "A production flow and seventeen approval checks are complete.",
        "how_to_verify": "Record a production flow and seventeen approval checks are complete. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A production flow and seventeen approval checks are complete.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A production flow and seventeen approval checks are complete.",
        "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": "What is a useful result for specify the factory and seventeen gates?",
          "answer": "A production flow and seventeen approval checks are complete. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to specify the factory and seventeen gates. A production flow and seventeen approval checks are complete.",
        "demo": "Map source, intelligence, fit, strategy, post, reply, moderation, discussion, extraction, analytics and model feedback. Answer the seventeen brief gates for audience, rules, format, media, title, value, comments, cards, evidence and logs.",
        "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 specify the factory and seventeen gates",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Map source, intelligence, fit, strategy, post, reply, moderation, discussion, extraction, analytics and model feedback. Answer the seventeen brief gates for audience, rules, format, media, title, value, comments, cards, evidence and logs. A production flow and seventeen approval checks are complete.",
        "on_screen_text": [
          "Specify the factory and seventeen gates",
          "A production flow and seventeen approval checks are complete."
        ],
        "screen_recording_instructions": [
          "Map source, intelligence, fit, strategy, post, reply, moderation, discussion, extraction, analytics and model feedback. Answer the seventeen brief gates for audience, rules, format, media, title, value, comments, cards, evidence and logs.",
          "Inspect the result: A production flow and seventeen approval checks are complete.",
          "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 production flow and seventeen approval checks are complete."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Map source, intelligence, fit, strategy, post, reply, moderation, discussion, extraction, analytics and model feedback. Answer the seventeen brief gates for audience, rules, format, media, title, value, comments, cards, evidence and logs.",
          "A production flow and seventeen approval checks are complete."
        ]
      },
      "step_id": "L20-S01",
      "lesson_id": "L20"
    },
    {
      "title": "Execute the capstone as a draft rehearsal",
      "purpose": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "user_action": "Write a twenty-two-action plan from observation through rule check, evidence, post, responses, extraction of three edge cases, corrected object and platform recomposition. Use synthetic replies only when labelled; real community engagement remains an optional authorized follow-up. Review the primary native AI source in AGENT_OPERATING_MANUAL.md. Record documented inputs/outputs, actual account availability (or NOT VERIFIED), a useful native application and a privacy/failure limit. Use this platform’s CTA chain from agent-training.json, rather than importing another platform’s CTA.",
      "explanation": "A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "capstone.md",
        "AGENT_OPERATING_MANUAL.md",
        "agent-training.json"
      ],
      "expected_result": "A draft capstone preserves three edge cases and actual publication status.",
      "resources": [
        "capstone.md",
        "AGENT_OPERATING_MANUAL.md",
        "agent-training.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Execute the capstone as a draft rehearsal",
        "success_condition": "A draft capstone preserves three edge cases and actual publication status.",
        "how_to_verify": "Record a draft capstone preserves three edge cases and actual publication status. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A draft capstone preserves three edge cases and actual publication status.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A draft capstone preserves three edge cases and actual publication status.",
        "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": "What is a useful result for execute the capstone as a draft rehearsal?",
          "answer": "A draft capstone preserves three edge cases and actual publication status. Include the actual draft, source date or human observation rather than a claim that the algorithm will reward it."
        },
        {
          "question": "Can I use a different topic?",
          "answer": "Yes. Keep the same audience, topic, format and promise across your comparison versions. Update every entity/source/knowledge artifact consistently."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to execute the capstone as a draft rehearsal. A draft capstone preserves three edge cases and actual publication status.",
        "demo": "Write a twenty-two-action plan from observation through rule check, evidence, post, responses, extraction of three edge cases, corrected object and platform recomposition. Use synthetic replies only when labelled; real community engagement remains an optional authorized follow-up. Review the primary native AI source in AGENT_OPERATING_MANUAL.md. Record documented inputs/outputs, actual account availability (or NOT VERIFIED), a useful native application and a privacy/failure limit. Use this platform’s CTA chain from agent-training.json, rather than importing another platform’s CTA.",
        "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 execute the capstone as a draft rehearsal",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Write a twenty-two-action plan from observation through rule check, evidence, post, responses, extraction of three edge cases, corrected object and platform recomposition. Use synthetic replies only when labelled; real community engagement remains an optional authorized follow-up. Review the primary native AI source in AGENT_OPERATING_MANUAL.md. Record documented inputs/outputs, actual account availability (or NOT VERIFIED), a useful native application and a privacy/failure limit. Use this platform’s CTA chain from agent-training.json, rather than importing another platform’s CTA. A draft capstone preserves three edge cases and actual publication status.",
        "on_screen_text": [
          "Execute the capstone as a draft rehearsal",
          "A draft capstone preserves three edge cases and actual publication status."
        ],
        "screen_recording_instructions": [
          "Write a twenty-two-action plan from observation through rule check, evidence, post, responses, extraction of three edge cases, corrected object and platform recomposition. Use synthetic replies only when labelled; real community engagement remains an optional authorized follow-up. Review the primary native AI source in AGENT_OPERATING_MANUAL.md. Record documented inputs/outputs, actual account availability (or NOT VERIFIED), a useful native application and a privacy/failure limit. Use this platform’s CTA chain from agent-training.json, rather than importing another platform’s CTA.",
          "Inspect the result: A draft capstone preserves three edge cases and actual publication status.",
          "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 draft capstone preserves three edge cases and actual publication status."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Write a twenty-two-action plan from observation through rule check, evidence, post, responses, extraction of three edge cases, corrected object and platform recomposition. Use synthetic replies only when labelled; real community engagement remains an optional authorized follow-up. Review the primary native AI source in AGENT_OPERATING_MANUAL.md. Record documented inputs/outputs, actual account availability (or NOT VERIFIED), a useful native application and a privacy/failure limit. Use this platform’s CTA chain from agent-training.json, rather than importing another platform’s CTA.",
          "A draft capstone preserves three edge cases and actual publication status."
        ]
      },
      "step_id": "L21-S01",
      "lesson_id": "L21"
    },
    {
      "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": "L22-S01",
      "lesson_id": "L22"
    },
    {
      "title": "Audit the mechanism and claim ledger",
      "purpose": "The ledger separates training, retrieval, indexing, context, citation and action; two source-linked chunks stand alone.",
      "user_action": "Read mechanisms.md and claims.json. Attach a direct source and date to established claims; distinguish hypothesis from evidence and future SI from deployed features. Edit knowledge.json and rag.jsonl so each answer stands alone with named entities and a source.",
      "explanation": "Keep the input and the observed result together so you can reproduce this action later.",
      "estimated_time": "4 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "mechanisms.md",
        "claims.json",
        "knowledge.json",
        "rag.jsonl"
      ],
      "expected_result": "The ledger separates training, retrieval, indexing, context, citation and action; two source-linked chunks stand alone.",
      "resources": [
        "mechanisms.md",
        "claims.json",
        "knowledge.json",
        "rag.jsonl"
      ],
      "checkpoint": {
        "what_is_being_checked": "Audit the mechanism and claim ledger",
        "success_condition": "The ledger separates training, retrieval, indexing, context, citation and action; two source-linked chunks stand alone.",
        "how_to_verify": "Record the ledger separates training, retrieval, indexing, context, citation and action; two source-linked chunks stand alone. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The ledger separates training, retrieval, indexing, context, citation and action; two source-linked chunks stand alone.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The ledger separates training, retrieval, indexing, context, citation and action; two source-linked chunks stand alone.",
        "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 audit the mechanism and claim ledger?",
          "answer": "The ledger separates training, retrieval, indexing, context, citation and action; two source-linked chunks stand alone. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use mechanisms.md, claims.json, knowledge.json, rag.jsonl. Work in the same practice folder."
        }
      ],
      "quiz": {
        "question": "Does a readable public post guarantee model training?",
        "answer_type": "single_choice",
        "choices": [
          "No; access, selection and training decisions are separate from post clarity.",
          "Yes; entity names force weight updates."
        ],
        "correct_answer": 0,
        "explanation": "Retrieval supplies inference context; training changes weights."
      },
      "coach": {
        "intro": "We are going to audit the mechanism and claim ledger. The ledger separates training, retrieval, indexing, context, citation and action; two source-linked chunks stand alone.",
        "demo": "Read mechanisms.md and claims.json. Attach a direct source and date to established claims; distinguish hypothesis from evidence and future SI from deployed features. Edit knowledge.json and rag.jsonl so each answer stands alone with named entities and a source.",
        "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 audit the mechanism and claim ledger",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Read mechanisms.md and claims.json. Attach a direct source and date to established claims; distinguish hypothesis from evidence and future SI from deployed features. Edit knowledge.json and rag.jsonl so each answer stands alone with named entities and a source. The ledger separates training, retrieval, indexing, context, citation and action; two source-linked chunks stand alone.",
        "on_screen_text": [
          "Audit the mechanism and claim ledger",
          "The ledger separates training, retrieval, indexing, context, citation and action; two source-linked chunks stand alone."
        ],
        "screen_recording_instructions": [
          "Read mechanisms.md and claims.json. Attach a direct source and date to established claims; distinguish hypothesis from evidence and future SI from deployed features. Edit knowledge.json and rag.jsonl so each answer stands alone with named entities and a source.",
          "Inspect the result: The ledger separates training, retrieval, indexing, context, citation and action; two source-linked chunks stand alone.",
          "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 ledger separates training, retrieval, indexing, context, citation and action; two source-linked chunks stand alone."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Read mechanisms.md and claims.json. Attach a direct source and date to established claims; distinguish hypothesis from evidence and future SI from deployed features. Edit knowledge.json and rag.jsonl so each answer stands alone with named entities and a source.",
          "The ledger separates training, retrieval, indexing, context, citation and action; two source-linked chunks stand alone."
        ]
      },
      "step_id": "L22-S02",
      "lesson_id": "L22"
    },
    {
      "title": "Use the readiness calculator",
      "purpose": "A downloadable pair and rubric are saved; the score is self-assessment and unrun metrics are explicit.",
      "user_action": "Open studio.html and score each dimension from 0 to 10 with a written reason. Download versions.json and rubric.json; replace the matching extracted files after reviewing them. Leave metrics.json NOT RUN unless you have actual observations. Facebook uses eleven dimensions normalized by dividing by 110 and multiplying by 100.",
      "explanation": "Keep the input and the observed result together so you can reproduce this action later.",
      "estimated_time": "4 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "studio.html",
        "rubric.json",
        "versions.json",
        "metrics.json"
      ],
      "expected_result": "A downloadable pair and rubric are saved; the score is self-assessment and unrun metrics are explicit.",
      "resources": [
        "studio.html",
        "rubric.json",
        "versions.json",
        "metrics.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Use the readiness calculator",
        "success_condition": "A downloadable pair and rubric are saved; the score is self-assessment and unrun metrics are explicit.",
        "how_to_verify": "Record a downloadable pair and rubric are saved; the score is self-assessment and unrun metrics are explicit. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A downloadable pair and rubric are saved; the score is self-assessment and unrun metrics are explicit.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A downloadable pair and rubric are saved; the score is self-assessment and unrun metrics are explicit.",
        "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 use the readiness calculator?",
          "answer": "A downloadable pair and rubric are saved; the score is self-assessment and unrun metrics are explicit. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use studio.html, rubric.json, versions.json, metrics.json. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to use the readiness calculator. A downloadable pair and rubric are saved; the score is self-assessment and unrun metrics are explicit.",
        "demo": "Open studio.html and score each dimension from 0 to 10 with a written reason. Download versions.json and rubric.json; replace the matching extracted files after reviewing them. Leave metrics.json NOT RUN unless you have actual observations. Facebook uses eleven dimensions normalized by dividing by 110 and multiplying by 100.",
        "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 use the readiness calculator",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Open studio.html and score each dimension from 0 to 10 with a written reason. Download versions.json and rubric.json; replace the matching extracted files after reviewing them. Leave metrics.json NOT RUN unless you have actual observations. Facebook uses eleven dimensions normalized by dividing by 110 and multiplying by 100. A downloadable pair and rubric are saved; the score is self-assessment and unrun metrics are explicit.",
        "on_screen_text": [
          "Use the readiness calculator",
          "A downloadable pair and rubric are saved; the score is self-assessment and unrun metrics are explicit."
        ],
        "screen_recording_instructions": [
          "Open studio.html and score each dimension from 0 to 10 with a written reason. Download versions.json and rubric.json; replace the matching extracted files after reviewing them. Leave metrics.json NOT RUN unless you have actual observations. Facebook uses eleven dimensions normalized by dividing by 110 and multiplying by 100.",
          "Inspect the result: A downloadable pair and rubric are saved; the score is self-assessment and unrun metrics are explicit.",
          "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 downloadable pair and rubric are saved; the score is self-assessment and unrun metrics are explicit."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Open studio.html and score each dimension from 0 to 10 with a written reason. Download versions.json and rubric.json; replace the matching extracted files after reviewing them. Leave metrics.json NOT RUN unless you have actual observations. Facebook uses eleven dimensions normalized by dividing by 110 and multiplying by 100.",
          "A downloadable pair and rubric are saved; the score is self-assessment and unrun metrics are explicit."
        ]
      },
      "step_id": "L23-S01",
      "lesson_id": "L23"
    },
    {
      "title": "Hash and lint the reviewed files",
      "purpose": "HASH PASS and MEDIA PASS appear with exit 0; the readiness score matches the reviewed rubric.",
      "user_action": "Review your changes first. Run the hash command, then lint and score. Inspect report.json. Commands use the current extracted resource folder; PowerShell runs python, macOS zsh and Linux bash run python3. A missing field must be corrected before hashing again.",
      "explanation": "Keep the input and the observed result together so you can reproduce this action later.",
      "estimated_time": "4 min",
      "action_type": "command",
      "commands": {
        "windows": "python media_pack.py hash\npython media_pack.py lint\npython media_pack.py score",
        "macos": "python3 media_pack.py hash\npython3 media_pack.py lint\npython3 media_pack.py score",
        "linux": "python3 media_pack.py hash\npython3 media_pack.py lint\npython3 media_pack.py score"
      },
      "command_type": "shell",
      "required_inputs": [
        "media_pack.py",
        "agent-card.json"
      ],
      "expected_result": "HASH PASS and MEDIA PASS appear with exit 0; the readiness score matches the reviewed rubric.",
      "resources": [
        "media_pack.py",
        "agent-card.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Hash and lint the reviewed files",
        "success_condition": "HASH PASS and MEDIA PASS appear with exit 0; the readiness score matches the reviewed rubric.",
        "how_to_verify": "Record hASH PASS and MEDIA PASS appear with exit 0; the readiness score matches the reviewed rubric. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "HASH PASS and MEDIA PASS appear with exit 0; the readiness score matches the reviewed rubric.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [
          "MEDIA PASS"
        ],
        "user_visible_success_message": "Evidence saved. HASH PASS and MEDIA PASS appear with exit 0; the readiness score matches the reviewed rubric.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify hash and lint the reviewed files?",
          "answer": "HASH PASS and MEDIA PASS appear with exit 0; the readiness score matches the reviewed rubric. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use media_pack.py, agent-card.json. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to hash and lint the reviewed files. HASH PASS and MEDIA PASS appear with exit 0; the readiness score matches the reviewed rubric.",
        "demo": "Review your changes first. Run the hash command, then lint and score. Inspect report.json. Commands use the current extracted resource folder; PowerShell runs python, macOS zsh and Linux bash run python3. A missing field must be corrected before hashing again.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate hash and lint the reviewed files",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Review your changes first. Run the hash command, then lint and score. Inspect report.json. Commands use the current extracted resource folder; PowerShell runs python, macOS zsh and Linux bash run python3. A missing field must be corrected before hashing again. HASH PASS and MEDIA PASS appear with exit 0; the readiness score matches the reviewed rubric.",
        "on_screen_text": [
          "Hash and lint the reviewed files",
          "HASH PASS and MEDIA PASS appear with exit 0; the readiness score matches the reviewed rubric."
        ],
        "screen_recording_instructions": [
          "Review your changes first. Run the hash command, then lint and score. Inspect report.json. Commands use the current extracted resource folder; PowerShell runs python, macOS zsh and Linux bash run python3. A missing field must be corrected before hashing again.",
          "Inspect the result: HASH PASS and MEDIA PASS appear with exit 0; the readiness score matches the reviewed rubric.",
          "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": [
          "HASH PASS and MEDIA PASS appear with exit 0; the readiness score matches the reviewed rubric."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Review your changes first. Run the hash command, then lint and score. Inspect report.json. Commands use the current extracted resource folder; PowerShell runs python, macOS zsh and Linux bash run python3. A missing field must be corrected before hashing again.",
          "HASH PASS and MEDIA PASS appear with exit 0; the readiness score matches the reviewed rubric."
        ]
      },
      "step_id": "L23-S02",
      "lesson_id": "L23"
    },
    {
      "title": "Prove changed bytes and broken content fail",
      "purpose": "A mismatched topic produces MEDIA FAIL; a reviewed correction produces MEDIA PASS.",
      "user_action": "Change versions.json B.topic to a different topic. Run lint and retain MEDIA FAIL. Restore the same topic, review the repair, hash and lint again. Do not weaken the checker or present a structural pass as factual/media verification.",
      "explanation": "Keep the input and the observed result together so you can reproduce this action later.",
      "estimated_time": "4 min",
      "action_type": "command",
      "commands": {
        "windows": "python media_pack.py lint\n# After correcting and reviewing the topic:\npython media_pack.py hash\npython media_pack.py lint",
        "macos": "python3 media_pack.py lint\n# After correcting and reviewing the topic:\npython3 media_pack.py hash\npython3 media_pack.py lint",
        "linux": "python3 media_pack.py lint\n# After correcting and reviewing the topic:\npython3 media_pack.py hash\npython3 media_pack.py lint"
      },
      "command_type": "shell",
      "required_inputs": [
        "versions.json",
        "media_pack.py"
      ],
      "expected_result": "A mismatched topic produces MEDIA FAIL; a reviewed correction produces MEDIA PASS.",
      "resources": [
        "versions.json",
        "media_pack.py"
      ],
      "checkpoint": {
        "what_is_being_checked": "Prove changed bytes and broken content fail",
        "success_condition": "A mismatched topic produces MEDIA FAIL; a reviewed correction produces MEDIA PASS.",
        "how_to_verify": "Record a mismatched topic produces MEDIA FAIL; a reviewed correction produces MEDIA PASS. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A mismatched topic produces MEDIA FAIL; a reviewed correction produces MEDIA PASS.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [
          "MEDIA PASS"
        ],
        "user_visible_success_message": "Evidence saved. A mismatched topic produces MEDIA FAIL; a reviewed correction produces MEDIA PASS.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "How do I verify prove changed bytes and broken content fail?",
          "answer": "A mismatched topic produces MEDIA FAIL; a reviewed correction produces MEDIA PASS. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use versions.json, media_pack.py. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to prove changed bytes and broken content fail. A mismatched topic produces MEDIA FAIL; a reviewed correction produces MEDIA PASS.",
        "demo": "Change versions.json B.topic to a different topic. Run lint and retain MEDIA FAIL. Restore the same topic, review the repair, hash and lint again. Do not weaken the checker or present a structural pass as factual/media verification.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate prove changed bytes and broken content fail",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Change versions.json B.topic to a different topic. Run lint and retain MEDIA FAIL. Restore the same topic, review the repair, hash and lint again. Do not weaken the checker or present a structural pass as factual/media verification. A mismatched topic produces MEDIA FAIL; a reviewed correction produces MEDIA PASS.",
        "on_screen_text": [
          "Prove changed bytes and broken content fail",
          "A mismatched topic produces MEDIA FAIL; a reviewed correction produces MEDIA PASS."
        ],
        "screen_recording_instructions": [
          "Change versions.json B.topic to a different topic. Run lint and retain MEDIA FAIL. Restore the same topic, review the repair, hash and lint again. Do not weaken the checker or present a structural pass as factual/media verification.",
          "Inspect the result: A mismatched topic produces MEDIA FAIL; a reviewed correction produces MEDIA PASS.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "A mismatched topic produces MEDIA FAIL; a reviewed correction produces MEDIA PASS."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Change versions.json B.topic to a different topic. Run lint and retain MEDIA FAIL. Restore the same topic, review the repair, hash and lint again. Do not weaken the checker or present a structural pass as factual/media verification.",
          "A mismatched topic produces MEDIA FAIL; a reviewed correction produces MEDIA PASS."
        ]
      },
      "step_id": "L23-S03",
      "lesson_id": "L23"
    },
    {
      "title": "Run a source-linked retrieval probe",
      "purpose": "The relevant query returns source-linked chunks; the unrelated query abstains.",
      "user_action": "Run the supplied question, then an unrelated query. Inspect the answer and source. This standard-library demo uses lexical word overlap, not embeddings, a vector database or an AI citation measurement. Save actual OS command/exit/output and mark other OS branches unverified.",
      "explanation": "Keep the input and the observed result together so you can reproduce this action later.",
      "estimated_time": "4 min",
      "action_type": "command",
      "commands": {
        "windows": "python media_pack.py retrieve --query \"What context helps a community investigate a desktop PC case rattle?\"\npython media_pack.py retrieve --query \"quasar waffle weather\"",
        "macos": "python3 media_pack.py retrieve --query \"What context helps a community investigate a desktop PC case rattle?\"\npython3 media_pack.py retrieve --query \"quasar waffle weather\"",
        "linux": "python3 media_pack.py retrieve --query \"What context helps a community investigate a desktop PC case rattle?\"\npython3 media_pack.py retrieve --query \"quasar waffle weather\""
      },
      "command_type": "shell",
      "required_inputs": [
        "media_pack.py",
        "rag.jsonl"
      ],
      "expected_result": "The relevant query returns source-linked chunks; the unrelated query abstains.",
      "resources": [
        "media_pack.py",
        "rag.jsonl"
      ],
      "checkpoint": {
        "what_is_being_checked": "Run a source-linked retrieval probe",
        "success_condition": "The relevant query returns source-linked chunks; the unrelated query abstains.",
        "how_to_verify": "Record the relevant query returns source-linked chunks; the unrelated query abstains. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The relevant query returns source-linked chunks; the unrelated query abstains.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The relevant query returns source-linked chunks; the unrelated query abstains.",
        "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 a source-linked retrieval probe?",
          "answer": "The relevant query returns source-linked chunks; the unrelated query abstains. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use media_pack.py, rag.jsonl. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to run a source-linked retrieval probe. The relevant query returns source-linked chunks; the unrelated query abstains.",
        "demo": "Run the supplied question, then an unrelated query. Inspect the answer and source. This standard-library demo uses lexical word overlap, not embeddings, a vector database or an AI citation measurement. Save actual OS command/exit/output and mark other OS branches unverified.",
        "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 a source-linked retrieval probe",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Run the supplied question, then an unrelated query. Inspect the answer and source. This standard-library demo uses lexical word overlap, not embeddings, a vector database or an AI citation measurement. Save actual OS command/exit/output and mark other OS branches unverified. The relevant query returns source-linked chunks; the unrelated query abstains.",
        "on_screen_text": [
          "Run a source-linked retrieval probe",
          "The relevant query returns source-linked chunks; the unrelated query abstains."
        ],
        "screen_recording_instructions": [
          "Run the supplied question, then an unrelated query. Inspect the answer and source. This standard-library demo uses lexical word overlap, not embeddings, a vector database or an AI citation measurement. Save actual OS command/exit/output and mark other OS branches unverified.",
          "Inspect the result: The relevant query returns source-linked chunks; the unrelated query abstains.",
          "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 relevant query returns source-linked chunks; the unrelated query abstains."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Run the supplied question, then an unrelated query. Inspect the answer and source. This standard-library demo uses lexical word overlap, not embeddings, a vector database or an AI citation measurement. Save actual OS command/exit/output and mark other OS branches unverified.",
          "The relevant query returns source-linked chunks; the unrelated query abstains."
        ]
      },
      "step_id": "L24-S01",
      "lesson_id": "L24"
    },
    {
      "title": "Record provenance and a human approval decision",
      "purpose": "The handoff includes native drafts, source/rights review, unsigned integrity manifest, explicit live-status limits and an approval decision.",
      "user_action": "Use provenance-notes.md to record author, capture/source dates, rights, AI assistance and unresolved claims. SHA256 detects byte changes but does not sign the file or prove truth. Read the source/command cards, review the native capstone and export course evidence. Actual publication requires your own account, current rules and a human decision.",
      "explanation": "Keep the input and the observed result together so you can reproduce this action later.",
      "estimated_time": "4 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "provenance-notes.md",
        "agent-card.json",
        "capstone.md"
      ],
      "expected_result": "The handoff includes native drafts, source/rights review, unsigned integrity manifest, explicit live-status limits and an approval decision.",
      "resources": [
        "provenance-notes.md",
        "agent-card.json",
        "capstone.md"
      ],
      "checkpoint": {
        "what_is_being_checked": "Record provenance and a human approval decision",
        "success_condition": "The handoff includes native drafts, source/rights review, unsigned integrity manifest, explicit live-status limits and an approval decision.",
        "how_to_verify": "Record the handoff includes native drafts, source/rights review, unsigned integrity manifest, explicit live-status limits and an approval decision. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The handoff includes native drafts, source/rights review, unsigned integrity manifest, explicit live-status limits and an approval decision.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The handoff includes native drafts, source/rights review, unsigned integrity manifest, explicit live-status limits and an approval 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 record provenance and a human approval decision?",
          "answer": "The handoff includes native drafts, source/rights review, unsigned integrity manifest, explicit live-status limits and an approval decision. Keep the command or observation with your evidence."
        },
        {
          "question": "Which files do I need for this step?",
          "answer": "Use provenance-notes.md, agent-card.json, capstone.md. Work in the same practice folder."
        }
      ],
      "quiz": null,
      "coach": {
        "intro": "We are going to record provenance and a human approval decision. The handoff includes native drafts, source/rights review, unsigned integrity manifest, explicit live-status limits and an approval decision.",
        "demo": "Use provenance-notes.md to record author, capture/source dates, rights, AI assistance and unresolved claims. SHA256 detects byte changes but does not sign the file or prove truth. Read the source/command cards, review the native capstone and export course evidence. Actual publication requires your own account, current rules and a human decision.",
        "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 record provenance and a human approval decision",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Use provenance-notes.md to record author, capture/source dates, rights, AI assistance and unresolved claims. SHA256 detects byte changes but does not sign the file or prove truth. Read the source/command cards, review the native capstone and export course evidence. Actual publication requires your own account, current rules and a human decision. The handoff includes native drafts, source/rights review, unsigned integrity manifest, explicit live-status limits and an approval decision.",
        "on_screen_text": [
          "Record provenance and a human approval decision",
          "The handoff includes native drafts, source/rights review, unsigned integrity manifest, explicit live-status limits and an approval decision."
        ],
        "screen_recording_instructions": [
          "Use provenance-notes.md to record author, capture/source dates, rights, AI assistance and unresolved claims. SHA256 detects byte changes but does not sign the file or prove truth. Read the source/command cards, review the native capstone and export course evidence. Actual publication requires your own account, current rules and a human decision.",
          "Inspect the result: The handoff includes native drafts, source/rights review, unsigned integrity manifest, explicit live-status limits and an approval 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 handoff includes native drafts, source/rights review, unsigned integrity manifest, explicit live-status limits and an approval decision."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Use provenance-notes.md to record author, capture/source dates, rights, AI assistance and unresolved claims. SHA256 detects byte changes but does not sign the file or prove truth. Read the source/command cards, review the native capstone and export course evidence. Actual publication requires your own account, current rules and a human decision.",
          "The handoff includes native drafts, source/rights review, unsigned integrity manifest, explicit live-status limits and an approval decision."
        ]
      },
      "step_id": "L24-S02",
      "lesson_id": "L24"
    },
    {
      "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": "L25-S01",
      "lesson_id": "L25"
    },
    {
      "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": "L25-S02",
      "lesson_id": "L25"
    },
    {
      "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": "L25-S03",
      "lesson_id": "L25"
    },
    {
      "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": "L25-S04",
      "lesson_id": "L25"
    },
    {
      "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": "L25-S05",
      "lesson_id": "L25"
    }
  ],
  "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": "media_pack.py",
      "type": "py",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "# VERSION HISTORY\n# 2026-10-06 EDT | chatgpt_codex | media-catchup | v1: created structural draft checks, normalized scoring and lexical retrieval.\n\"\"\"Check local draft structure, provenance and retrieval. Never publishes content.\"\"\"\nimport argparse, hashlib, json, logging, math, re\nfrom datetime import datetime, timezone\nfrom pathlib import Path\n\nROOT=Path(__file__).resolve().parent\ndef read(name):return json.loads((ROOT/name).read_text(encoding='utf-8'))\ndef digest(p):return hashlib.sha256(p.read_bytes()).hexdigest()\ndef payloads():return sorted(p for p in ROOT.iterdir() if p.is_file() and p.name not in ['provenance.json','report.json','media-pack.log'] and not p.name.endswith('.zip'))\ndef issues():\n    problems=[]\n    try:\n        k=read('knowledge.json');versions=read('versions.json');cards=read('agent-card.json');rubric=read('rubric.json')\n        for field in ['topic','question','answer','context','entities','sources','author','date','next_action']:\n            if not k.get(field):problems.append('Missing knowledge field: '+field)\n        if not all(re.match(r'^https://[^/]+/.+',s) for s in k.get('sources',[])):problems.append('Source must be a direct HTTPS page')\n        if not all(e.casefold() in k['answer'].casefold() for e in k['entities']):problems.append('Answer lacks a named entity')\n        for entity in k['entities']:\n            if entity.casefold() not in versions['B']['text'].casefold():problems.append('Version B lacks entity '+entity)\n        if versions['A']['topic']!=versions['B']['topic'] or versions['A']['topic']!=k['topic']:problems.append('Comparison topic changed')\n        if versions['A']['format']!=versions['B']['format']:problems.append('Comparison format changed')\n        for version in versions.values():\n            if re.search(r'guarantee[sd]? (?:AI training|viral|ranking)',version['text'],re.I):problems.append('Unjustified outcome guarantee')\n            if not version['text'].strip():problems.append('Empty comparison')\n        if k['platform']=='threads' and any(len(v['text'])>500 for v in versions.values()):problems.append('Threads root draft exceeds 500 characters')\n        if k['platform']=='xai-xsi' and any(len(v['text'])>280 for v in versions.values()):problems.append('X practice root draft exceeds 280 characters')\n        if k['platform']=='pinterest':\n            pin=read('native.json')\n            if len(pin['title'])>100 or len(pin['description'])>500:problems.append('Pin practice metadata exceeds title/description limit')\n            if pin['ratio']!='2:3' or not pin['board'] or not pin['alt']:problems.append('Incomplete static Pin card')\n        for osname in ['windows','macos','linux']:\n            card=cards.get(osname,{})\n            if not all(card.get(f) is not None for f in ['shell','cwd','prerequisites','command','expected_exit','expected_output','failure','scope']):problems.append('Incomplete command card '+osname)\n            if card.get('expected_exit')!=0:problems.append('Unexpected success exit '+osname)\n        rows=[json.loads(line) for line in (ROOT/'rag.jsonl').read_text(encoding='utf-8').splitlines() if line.strip()]\n        if len({r['id'] for r in rows})!=len(rows) or len(rows)<2:problems.append('RAG IDs duplicate or too few rows')\n        for r in rows:\n            if not all(r.get(f) for f in ['id','entity','question','answer','source']):problems.append('Incomplete retrieval row')\n            if r['entity'].casefold() not in r['answer'].casefold():problems.append('Retrieval answer not standalone')\n        score(rubric)\n        manifest=read('provenance.json')\n        actual={p.name:digest(p) for p in payloads()}\n        if manifest['sha256']!=actual:problems.append('Changed bytes or missing provenance entries; review before hash')\n    except (KeyError,ValueError,TypeError,OSError) as e:problems.append('Invalid input: '+str(e))\n    return problems\ndef score(rubric):\n    values=rubric['values'];names=rubric['dimensions']\n    if len(values)!=len(names) or not values:raise ValueError('Rubric dimensions/values mismatch')\n    if any(isinstance(v,bool) or not isinstance(v,(int,float)) or not math.isfinite(v) or not 0<=v<=10 for v in values):raise ValueError('Scores must be finite numbers from 0 to 10')\n    return round(100*sum(values)/(10*len(values)),2)\ndef main():\n    logging.basicConfig(filename=ROOT/'media-pack.log',encoding='utf-8',level=logging.INFO)\n    parser=argparse.ArgumentParser(description=__doc__);parser.add_argument('action',choices=['lint','hash','score','retrieve']);parser.add_argument('--query',default='');a=parser.parse_args()\n    if a.action=='hash':\n        data={'at':datetime.now(timezone.utc).isoformat(),'author':'learner draft','kind':'unsigned SHA256 integrity manifest; not C2PA or proof of truth','sha256':{p.name:digest(p) for p in payloads()}}\n        (ROOT/'provenance.json').write_text(json.dumps(data,indent=2),encoding='utf-8');print('HASH PASS: unsigned reviewed bytes')\n    elif a.action=='lint':\n        errors=issues();report={'result':'MEDIA FAIL' if errors else 'MEDIA PASS','issues':errors,'scope':'Structural local draft checks; no factual, publication, ranking, OCR/ASR or AI-training certification'}\n        (ROOT/'report.json').write_text(json.dumps(report,indent=2),encoding='utf-8');print(json.dumps(report,indent=2));logging.info('%s issues=%d',report['result'],len(errors));raise SystemExit(1 if errors else 0)\n    elif a.action=='score':print('READINESS '+str(score(read('rubric.json')))+' /100: subjective rubric; no distribution prediction')\n    else:\n        query=set(re.findall(r'\\w+',a.query.casefold()));rows=[json.loads(s) for s in (ROOT/'rag.jsonl').read_text(encoding='utf-8').splitlines() if s.strip()]\n        ranked=sorted([(len(query & set(re.findall(r'\\w+',r['question'].casefold()))),r) for r in rows],key=lambda x:x[0],reverse=True)\n        hits=[r for n,r in ranked if n>0][:2];print(json.dumps({'retrieval':'lexical demonstration, not vector embeddings','matches':hits,'abstained':not bool(hits)},indent=2))\nif __name__=='__main__':\n    try:main()\n    except Exception:logging.exception('Media pack failed');raise\n",
      "filename": "media_pack.py",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R007",
      "name": "studio.html",
      "type": "html",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "<!doctype html>\n<!-- VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original local native draft editor and score calculator.\n-->\n<html lang=\"en\"><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><title>Native draft studio</title>\n<style>body{font:17px system-ui,sans-serif;background:#10151d;color:#f4f6fb;margin:0;padding:24px;max-width:1000px}textarea,input{font:inherit;background:#202a38;color:inherit;border:1px solid #687789;border-radius:5px;box-sizing:border-box;width:100%;padding:12px}textarea{min-height:160px}section{padding:18px;border:1px solid #687789;border-radius:8px;margin:16px 0}button{padding:12px;margin:8px;background:#b7f48a;border:0;border-radius:5px;color:#10151d}label{display:block;margin:12px 0}h1{font-size:clamp(26px,6vw,42px)}.pair{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:16px}small{display:block;color:#bac8d7}output{font-weight:bold}a{color:#b7f48a}</style>\n<h1>Reddit draft studio</h1><p>A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.</p><p>One topic, one format, two versions. Keep the audience and promise fixed. These drafts are synthetic practice examples.</p>\n<label>Topic <input id=\"topic\"></label><label>Native format <input id=\"format\"></label>\n<div class=\"pair\"><section><h2>A · Human baseline</h2><textarea id=\"a\"></textarea><small id=\"ac\"></small></section><section><h2>B · Human and machine clarity</h2><textarea id=\"b\"></textarea><small id=\"bc\"></small></section></div>\n<p id=\"difference\"></p><button id=\"export\">Download versions.json</button><p id=\"status\" role=\"status\"></p>\n<section><h2>Readiness self-assessment</h2><p>Rate each dimension from 0 to 10 using your saved evidence. The result measures this rubric, not the chance of virality or AI citation. Facebook's eleven dimensions are normalized to 100.</p><div id=\"scores\"></div><output id=\"total\"></output><button id=\"rubric-export\">Download rubric.json</button></section>\n<section><h2>Review before publication</h2><p>Check factual claims, media consent, community rules, current format limits and destination links. A readable draft does not guarantee model training, indexing or recommendation. This page saves downloads only; it sends nothing to a platform. Return to the course in your other browser tab after downloading your drafts.</p></section>\n<script>\n// VERSION HISTORY\n// 2026-10-06 EDT | chatgpt_codex | media-catchup | v1: local-only editor; no API or storage.\nconst initial={\"A\": {\"topic\": \"Desktop PC case rattle\", \"format\": \"selftext troubleshooting post\", \"text\": \"My PC is rattling again and it is driving me nuts. Anyone know a quick fix?\"}, \"B\": {\"topic\": \"Desktop PC case rattle\", \"format\": \"selftext troubleshooting post\", \"text\": \"Desktop PC case rattle: I hear a vibration at idle but not when the PC is off. This teaching example has no verified cause yet. My draft report includes case model, a short audio clip and previous safe observations. Which additional information would help distinguish panel vibration from another source? I will not touch moving parts or assume the diagnosis.\"}}, dimensions=[\"Reddit native\", \"Community fit\", \"Conversation depth\", \"Technical value\", \"Transparency\", \"AI discoverability\", \"Agent readiness\", \"Low promotion\", \"Moderation compliance\", \"Reuse\"];\nconst $=id=>document.getElementById(id);\n$('topic').value=initial.A.topic;$('format').value=initial.A.format;$('a').value=initial.A.text;$('b').value=initial.B.text;\nfunction update(){for(const id of ['a','b'])$(id+'c').textContent=$(id).value.length+' characters';const entities=[\"desktop PC\", \"case rattle\"];const missing=entities.filter(e=>!$('b').value.toLowerCase().includes(e.toLowerCase()));$('difference').textContent=missing.length?'B is missing named entities: '+missing.join(', '):'B contains the named entities. Review human tone, factual claims and context manually.';const inputs=[...document.querySelectorAll('#scores input')];$('total').textContent=(100*inputs.reduce((sum,x)=>sum+Number(x.value),0)/(10*dimensions.length)).toFixed(2)+' /100 · self-assessment';}\ndimensions.forEach((name,i)=>{const label=document.createElement('label');label.textContent=name;const input=document.createElement('input');input.type='range';input.min=0;input.max=10;input.value=0;input.setAttribute('aria-label',name);const out=document.createElement('output');out.textContent='0';input.addEventListener('input',()=>{out.textContent=input.value;update()});label.append(input,out);$('scores').append(label)});\nfunction download(name,data){const link=document.createElement('a');const url=URL.createObjectURL(new Blob([JSON.stringify(data,null,2)+'\\n'],{type:'application/json'}));link.href=url;link.download=name;link.click();setTimeout(()=>URL.revokeObjectURL(url),1000);$('status').textContent='Downloaded '+name+'. Review and replace the matching file in the extracted resource folder.';}\n$('export').onclick=()=>download('versions.json',Object.fromEntries(['A','B'].map((v,i)=>[v,{topic:$('topic').value,format:$('format').value,text:$(i?'b':'a').value}])));\n$('rubric-export').onclick=()=>download('rubric.json',{dimensions,values:[...document.querySelectorAll('#scores input')].map(x=>Number(x.value)),kind:'self-assessment; review evidence before interpreting'});\nfor(const id of ['a','b'])$(id).addEventListener('input',update);update();\n</script></html>",
      "filename": "studio.html",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R008",
      "name": "versions.json",
      "type": "json",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "{\n  \"A\": {\n    \"topic\": \"Desktop PC case rattle\",\n    \"format\": \"selftext troubleshooting post\",\n    \"text\": \"My PC is rattling again and it is driving me nuts. Anyone know a quick fix?\"\n  },\n  \"B\": {\n    \"topic\": \"Desktop PC case rattle\",\n    \"format\": \"selftext troubleshooting post\",\n    \"text\": \"Desktop PC case rattle: I hear a vibration at idle but not when the PC is off. This teaching example has no verified cause yet. My draft report includes case model, a short audio clip and previous safe observations. Which additional information would help distinguish panel vibration from another source? I will not touch moving parts or assume the diagnosis.\"\n  }\n}\n",
      "filename": "versions.json",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R009",
      "name": "knowledge.json",
      "type": "json",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "{\n  \"platform\": \"reddit\",\n  \"topic\": \"Desktop PC case rattle\",\n  \"question\": \"What context helps a community investigate a desktop PC case rattle?\",\n  \"answer\": \"A desktop PC case rattle report should state the observed sound, when the sound occurs, the case model and what was checked safely. Sound alone does not prove a failed component; keep the diagnosis unresolved until verified.\",\n  \"context\": \"A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.\",\n  \"example\": \"Synthetic teaching example; replace with a checked observation before public use.\",\n  \"entities\": [\n    \"desktop PC\",\n    \"case rattle\"\n  ],\n  \"sources\": [\n    \"https://redditinc.com/news/introducing-reddit-answers\"\n  ],\n  \"related_topics\": [\n    \"community troubleshooting\",\n    \"PC noise\"\n  ],\n  \"keywords\": [\n    \"desktop PC\",\n    \"case rattle\"\n  ],\n  \"language\": \"en\",\n  \"author\": \"chatgpt_codex teaching fixture\",\n  \"date\": \"2026-10-06\",\n  \"next_action\": \"Check current subreddit rules and prepare a redacted observation log before asking for feedback.\"\n}\n",
      "filename": "knowledge.json",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R010",
      "name": "agent-card.json",
      "type": "json",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "{\n  \"windows\": {\n    \"shell\": \"PowerShell\",\n    \"cwd\": \"extracted course resource folder\",\n    \"prerequisites\": [\n      \"Python 3.10+\",\n      \"Reviewed local resource files\"\n    ],\n    \"command\": \"python media_pack.py lint\",\n    \"expected_exit\": 0,\n    \"expected_output\": \"MEDIA PASS\",\n    \"failure\": \"Read report.json. Restore a broken field; review the correction before running media_pack.py hash. Do not hash an unexplained change.\",\n    \"scope\": \"Validate draft metadata locally; never publish or change accounts.\"\n  },\n  \"macos\": {\n    \"shell\": \"zsh\",\n    \"cwd\": \"extracted course resource folder\",\n    \"prerequisites\": [\n      \"Python 3.10+\",\n      \"Reviewed local resource files\"\n    ],\n    \"command\": \"python3 media_pack.py lint\",\n    \"expected_exit\": 0,\n    \"expected_output\": \"MEDIA PASS\",\n    \"failure\": \"Read report.json. Restore a broken field; review the correction before running media_pack.py hash. Do not hash an unexplained change.\",\n    \"scope\": \"Validate draft metadata locally; never publish or change accounts.\"\n  },\n  \"linux\": {\n    \"shell\": \"bash\",\n    \"cwd\": \"extracted course resource folder\",\n    \"prerequisites\": [\n      \"Python 3.10+\",\n      \"Reviewed local resource files\"\n    ],\n    \"command\": \"python3 media_pack.py lint\",\n    \"expected_exit\": 0,\n    \"expected_output\": \"MEDIA PASS\",\n    \"failure\": \"Read report.json. Restore a broken field; review the correction before running media_pack.py hash. Do not hash an unexplained change.\",\n    \"scope\": \"Validate draft metadata locally; never publish or change accounts.\"\n  }\n}\n",
      "filename": "agent-card.json",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R011",
      "name": "rag.jsonl",
      "type": "jsonl",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "{\"id\": \"reddit-1\", \"entity\": \"desktop PC\", \"question\": \"What context helps a community investigate a desktop PC case rattle?\", \"answer\": \"A desktop PC case rattle report should state the observed sound, when the sound occurs, the case model and what was checked safely. Sound alone does not prove a failed component; keep the diagnosis unresolved until verified.\", \"source\": \"https://redditinc.com/news/introducing-reddit-answers\"}\n{\"id\": \"reddit-2\", \"entity\": \"desktop PC\", \"question\": \"What should the desktop PC audience do next?\", \"answer\": \"desktop PC: Check current subreddit rules and prepare a redacted observation log before asking for feedback.\", \"source\": \"https://redditinc.com/news/introducing-reddit-answers\"}\n",
      "filename": "rag.jsonl",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R012",
      "name": "rubric.json",
      "type": "json",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "{\n  \"dimensions\": [\n    \"Reddit native\",\n    \"Community fit\",\n    \"Conversation depth\",\n    \"Technical value\",\n    \"Transparency\",\n    \"AI discoverability\",\n    \"Agent readiness\",\n    \"Low promotion\",\n    \"Moderation compliance\",\n    \"Reuse\"\n  ],\n  \"values\": [\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  ],\n  \"kind\": \"unscored draft; score only after reviewing evidence\"\n}\n",
      "filename": "rubric.json",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R013",
      "name": "native.json",
      "type": "json",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "{\n  \"subreddit\": \"Choose an actual permitted troubleshooting community\",\n  \"format\": \"selftext\",\n  \"flair\": \"Verify available flair\",\n  \"rule_status\": \"NOT VERIFIED\",\n  \"diagnosis\": \"unresolved synthetic example\"\n}\n",
      "filename": "native.json",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R014",
      "name": "claims.json",
      "type": "json",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "{\n  \"taxonomy\": [\n    \"ESTABLISHED\",\n    \"EVIDENCE-SUPPORTED\",\n    \"EMERGING\",\n    \"HYPOTHESIS\",\n    \"SPECULATION\"\n  ],\n  \"claims\": [\n    {\n      \"claim\": \"Reddit Answers was introduced as a way to find information from Reddit conversations and communities.\",\n      \"label\": \"ESTABLISHED\",\n      \"source\": \"https://redditinc.com/news/introducing-reddit-answers\",\n      \"checked\": \"2026-10-06\"\n    },\n    {\n      \"claim\": \"A context-rich troubleshooting report will reduce repeated clarification requests.\",\n      \"label\": \"HYPOTHESIS\",\n      \"source\": \"Local experiment proposal; no result claimed\"\n    },\n    {\n      \"claim\": \"Future SI may coordinate knowledge across platforms\",\n      \"label\": \"SPECULATION\",\n      \"source\": \"Design possibility; no accepted forecast or training guarantee\"\n    }\n  ]\n}\n",
      "filename": "claims.json",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R015",
      "name": "metrics.json",
      "type": "json",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "{\n  \"status\": \"NOT RUN\",\n  \"topic\": \"Desktop PC case rattle\",\n  \"format\": \"selftext troubleshooting post\",\n  \"primary_metric\": \"useful diagnostic replies per post view\",\n  \"exposures\": null,\n  \"outcomes\": null,\n  \"rate\": null,\n  \"confounders\": [\n    \"audience mix\",\n    \"time of day\",\n    \"distribution\",\n    \"prior exposure\"\n  ],\n  \"stop_rule\": \"Set a observation window and minimum exposure count before starting. Report inconclusive when underpowered.\",\n  \"ai_citations\": [],\n  \"agent_execution\": {\n    \"attempts\": 0,\n    \"successes\": 0,\n    \"os_evidence\": []\n  }\n}\n",
      "filename": "metrics.json",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R016",
      "name": "provenance-notes.md",
      "type": "md",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n\nRecord author, real capture date, source URLs, permissions, AI assistance, changes and reviewed evidence. SHA256 detects changes to bytes. A C2PA signed manifest requires separate credentials and verification; no signature is supplied.\nPublic status does not grant universal crawler/API access or guarantee pretraining, fine-tuning, retrieval or AI citation. Synthetic Intelligence (SI) is a speculative course term; semantic indexing is a separate concept.\n",
      "filename": "provenance-notes.md",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R017",
      "name": "versions.json.VERSION_HISTORY.txt",
      "type": "txt",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n",
      "filename": "versions.json.VERSION_HISTORY.txt",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R018",
      "name": "knowledge.json.VERSION_HISTORY.txt",
      "type": "txt",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n",
      "filename": "knowledge.json.VERSION_HISTORY.txt",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R019",
      "name": "agent-card.json.VERSION_HISTORY.txt",
      "type": "txt",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n",
      "filename": "agent-card.json.VERSION_HISTORY.txt",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R020",
      "name": "rag.jsonl.VERSION_HISTORY.txt",
      "type": "txt",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n",
      "filename": "rag.jsonl.VERSION_HISTORY.txt",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R021",
      "name": "rubric.json.VERSION_HISTORY.txt",
      "type": "txt",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n",
      "filename": "rubric.json.VERSION_HISTORY.txt",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R022",
      "name": "native.json.VERSION_HISTORY.txt",
      "type": "txt",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n",
      "filename": "native.json.VERSION_HISTORY.txt",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R023",
      "name": "claims.json.VERSION_HISTORY.txt",
      "type": "txt",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n",
      "filename": "claims.json.VERSION_HISTORY.txt",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R024",
      "name": "metrics.json.VERSION_HISTORY.txt",
      "type": "txt",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n",
      "filename": "metrics.json.VERSION_HISTORY.txt",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R025",
      "name": "agent-training.json",
      "type": "json",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "{\n  \"schema_version\": 1,\n  \"agent_role\": \"Reddit Content Agent\",\n  \"topic\": \"Desktop PC case rattle\",\n  \"operating_points\": {\n    \"01_platform_identity\": \"Reddit Content Agent; create native selftext troubleshooting post drafts rather than swapping platform labels.\",\n    \"02_audience\": \"A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.\",\n    \"03_content_graph\": {\n      \"format\": \"selftext troubleshooting post\",\n      \"topic\": \"Desktop PC case rattle\",\n      \"alternatives\": \"First native surface/format exercises and native.json.\"\n    },\n    \"04_distribution_graph\": \"Subreddit governance, sorts/discovery, nested conversations and external thread search; moderation can end distribution.\",\n    \"05_algorithm\": {\n      \"source\": \"https://redditinc.com/news/introducing-reddit-answers\",\n      \"documented_claim\": \"Reddit Answers was introduced as a way to find information from Reddit conversations and communities.\",\n      \"private_weights\": \"UNKNOWN; never fabricate weights, thresholds or penalties.\"\n    },\n    \"06_engagement_graph\": {\n      \"actions\": [\n        \"Provide missing diagnostic context\",\n        \"Reply with a verified observation\",\n        \"Update after resolution\"\n      ],\n      \"useful_metric\": \"useful diagnostic replies per post view\",\n      \"valuation\": \"Predeclare useful outcomes and denominators; no fabricated platform point values.\"\n    },\n    \"07_native_formats\": {\n      \"subreddit\": \"Choose an actual permitted troubleshooting community\",\n      \"format\": \"selftext\",\n      \"flair\": \"Verify available flair\",\n      \"rule_status\": \"NOT VERIFIED\",\n      \"diagnosis\": \"unresolved synthetic example\"\n    },\n    \"08_creative_language\": \"Contributory and subreddit-specific; no fake votes, promotional spam, invented diagnostics or prohibited AI posts.\",\n    \"09_cta_system\": [\n      \"Provide missing diagnostic context\",\n      \"Reply with a verified observation\",\n      \"Update after resolution\"\n    ],\n    \"10_search\": {\n      \"entities\": [\n        \"desktop PC\",\n        \"case rattle\"\n      ],\n      \"query\": \"What context helps a community investigate a desktop PC case rattle?\",\n      \"task\": \"Observe current queries and record date/access limits before writing metadata.\"\n    },\n    \"11_platform_ai\": {\n      \"description\": \"Reddit Answers presents information from community conversations. A cited summary is retrieval, not evidence that a contribution entered model weights. Check actual feature availability.\",\n      \"source\": \"https://redditinc.com/news/introducing-reddit-answers\",\n      \"checked\": \"2026-10-06\",\n      \"status\": \"Documented description; actual account availability/execution UNVERIFIED.\"\n    },\n    \"12_ai_discovery\": {\n      \"input_output\": \"Accessible relevant conversations → community-based summaries and references requiring source verification.\",\n      \"rule\": \"Do not promise a private model will parse, recommend, cite or train on the object.\"\n    },\n    \"13_multimodal\": {\n      \"entities\": [\n        \"desktop PC\",\n        \"case rattle\"\n      ],\n      \"task\": \"Match visual labels, speech and captions; retain a text equivalent. Check actual media manually. No invented OCR/ASR results.\"\n    },\n    \"14_community\": {\n      \"task\": \"Review two public examples and current rules; obtain permission for private quotes.\",\n      \"fixture_status\": \"A/B and practice replies are synthetic, not real member observations.\"\n    },\n    \"15_native_patterns\": {\n      \"format\": \"selftext troubleshooting post\",\n      \"hypothesis\": \"A context-rich troubleshooting report will reduce repeated clarification requests.\",\n      \"status\": \"UNTESTED for this draft; empirical superiority not claimed.\"\n    },\n    \"16_failure_modes\": \"Contributory and subreddit-specific; no fake votes, promotional spam, invented diagnostics or prohibited AI posts. Also refuse unsupported source/rights claims and never invent algorithmic penalties.\",\n    \"17_experiments\": {\n      \"controls\": [\n        \"same topic\",\n        \"same audience\",\n        \"same format\",\n        \"same promise\"\n      ],\n      \"protocol\": \"Change one factor; predeclare metric, time window and minimum exposure. Log confounders and inconclusive results.\"\n    },\n    \"18_analytics\": {\n      \"primary_metric\": \"useful diagnostic replies per post view\",\n      \"observations\": \"NOT RUN; metrics.json uses nulls, not fabricated counts.\"\n    },\n    \"19_generation_rules\": {\n      \"inputs\": [\n        \"knowledge.json\",\n        \"actual audience observations\",\n        \"current rules\",\n        \"format limits\",\n        \"rights/permissions\",\n        \"source dates\"\n      ],\n      \"outputs\": [\n        \"native draft\",\n        \"controlled A/B\",\n        \"media/caption plan\",\n        \"sources and factual review\",\n        \"rubric with reasons\",\n        \"approval request\",\n        \"measurement plan\"\n      ],\n      \"state_machine\": [\n        \"DRAFT\",\n        \"REVIEW_REQUESTED\",\n        \"APPROVED_BY_AUTHORIZED_HUMAN\",\n        \"PUBLISHED_BY_AUTHORIZED_HUMAN\",\n        \"MEASURED\",\n        \"CORRECTED\"\n      ],\n      \"stop_conditions\": [\n        \"Missing audience/source\",\n        \"Unknown media rights\",\n        \"Unsupported claim\",\n        \"Unverified current publishing limit\",\n        \"No publication authorization\"\n      ],\n      \"scope\": \"Offline authoring and local validation only; no account connection or publishing tool provided.\"\n    },\n    \"20_b3_knowledge_layer\": {\n      \"artifacts\": [\n        \"knowledge.json\",\n        \"rag.jsonl\",\n        \"claims.json\",\n        \"agent-card.json\",\n        \"provenance-notes.md\"\n      ],\n      \"limits\": \"Lexical demonstration, unsigned integrity hashes, no guaranteed model training or future SI coordination.\"\n    }\n  },\n  \"source_scope\": \"Primary documentation and original editorial design. Feature description is not account-execution evidence.\"\n}\n",
      "filename": "agent-training.json",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R026",
      "name": "agent-training.json.VERSION_HISTORY.txt",
      "type": "txt",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n",
      "filename": "agent-training.json.VERSION_HISTORY.txt",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R027",
      "name": "AGENT_OPERATING_MANUAL.md",
      "type": "md",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n\n# Reddit Content Agent operating manual\n\nAudience: A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.\n\nRead all twenty points in agent-training.json before drafting. Preserve concrete inputs, native output, actual evidence and a review request. This pack has no publishing integration.\n\nNative action chain: Provide missing diagnostic context → Reply with a verified observation → Update after resolution\n\nNative AI: Reddit Answers presents information from community conversations. A cited summary is retrieval, not evidence that a contribution entered model weights. Check actual feature availability.\nPrimary source: https://redditinc.com/news/introducing-reddit-answers\n\nReview actual account availability, documented inputs/outputs and a privacy/failure limit. Keep NOT VERIFIED when access is absent. Generate a native draft, not an invented performance report. Submit source, rights and preflight evidence before publication; log real outcomes only after authorized use.\n",
      "filename": "AGENT_OPERATING_MANUAL.md",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R028",
      "name": "audience.md",
      "type": "md",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n\n# Reddit audience\n\nTopic: Desktop PC case rattle\nAudience: A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.\n\nThe worksheet is a production draft. Save specific decisions, source URLs, dates and observed results. Never fill a result with imagined analytics.\n\n## Understand the community architecture\nMap subreddits, posts, comments, nested replies, votes, karma, flair, moderators and AutoModerator. Inventory text, images, galleries, video, polls and AMAs. Treat Home/Popular and sort options as different discovery contexts; do not present a legacy public formula as the current full ranker.\n\nYour artifact / evidence:\n\n## Choose the subreddit audience\nAnswer which community, purpose, concerns, current discussions, terminology, rewarded posts, rejected posts, explicit rules, norms and native value. Choose a permitted PC-troubleshooting venue rather than assuming every subreddit welcomes the same post.\n\nYour artifact / evidence:\n\n## Write a community intelligence profile\nObserve two public threads and current sidebar/wiki. Record title style, depth, recurring questions, disagreements, account age/karma rules if published, flair, links and AI policies. Unknown thresholds remain unknown.\n\nYour artifact / evidence:\n\n## Choose a conversational contribution\nCompare a question, discovery, postmortem, comparison, experiment, breakdown, walkthrough, before/after, critique, compilation, misconception, data request, decision, lesson, resource review, update and synthesis. Pick troubleshooting for the rattle observation.\n\nYour artifact / evidence:\n\n## Select the native post type\nDraft selftext structure, possible audio/video proof, labeled image and gallery alternatives. Use an external link only when the source is the subject; compare native/external media friction and community permissions without assuming ranking penalties.\n\nYour artifact / evidence:\n\n## Write a descriptive title\nDraft three non-hype titles naming the desktop PC, sound and unresolved status. Avoid sensational claims, sales wording and unexplained abbreviations.\n\nYour artifact / evidence:\n\n",
      "filename": "audience.md",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R029",
      "name": "native-production.md",
      "type": "md",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n\n# Reddit native-production\n\nTopic: Desktop PC case rattle\nAudience: A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.\n\nThe worksheet is a production draft. Save specific decisions, source URLs, dates and observed results. Never fill a result with imagined analytics.\n\n## Understand the community architecture\nMap subreddits, posts, comments, nested replies, votes, karma, flair, moderators and AutoModerator. Inventory text, images, galleries, video, polls and AMAs. Treat Home/Popular and sort options as different discovery contexts; do not present a legacy public formula as the current full ranker.\n\nYour artifact / evidence:\n\n## Choose the subreddit audience\nAnswer which community, purpose, concerns, current discussions, terminology, rewarded posts, rejected posts, explicit rules, norms and native value. Choose a permitted PC-troubleshooting venue rather than assuming every subreddit welcomes the same post.\n\nYour artifact / evidence:\n\n## Write a community intelligence profile\nObserve two public threads and current sidebar/wiki. Record title style, depth, recurring questions, disagreements, account age/karma rules if published, flair, links and AI policies. Unknown thresholds remain unknown.\n\nYour artifact / evidence:\n\n## Choose a conversational contribution\nCompare a question, discovery, postmortem, comparison, experiment, breakdown, walkthrough, before/after, critique, compilation, misconception, data request, decision, lesson, resource review, update and synthesis. Pick troubleshooting for the rattle observation.\n\nYour artifact / evidence:\n\n## Select the native post type\nDraft selftext structure, possible audio/video proof, labeled image and gallery alternatives. Use an external link only when the source is the subject; compare native/external media friction and community permissions without assuming ranking penalties.\n\nYour artifact / evidence:\n\n## Write a descriptive title\nDraft three non-hype titles naming the desktop PC, sound and unresolved status. Avoid sensational claims, sales wording and unexplained abbreviations.\n\nYour artifact / evidence:\n\n## Compose the controlled selftext pair\nUse studio.html for A/B on the same case rattle. Keep the symptom and community constant; add context and a genuine request while retaining a conversational voice.\n\nYour artifact / evidence:\n\n## Make the observation reproducible\nWrite environment, sound conditions, safe prior observations, redacted evidence and unknowns in diagnostic-log.md. Do not touch moving hardware or assert a component failure from the example.\n\nYour artifact / evidence:\n\n## Treat comments as first-class content\nWrite three helpful replies: request missing model, clarify an assumption and explain how to report a safe observation. Avoid unsolicited product promotion or repetitive links.\n\nYour artifact / evidence:\n\n## Extract a nine-field knowledge object\nRecord core question, consensus, alternatives, evidence, examples, edge cases, root cause, unresolved questions and entities. Use three labeled synthetic replies for practice; consensus does not itself prove a diagnosis.\n\nYour artifact / evidence:\n\n## Support search and semantic discovery\nPut desktop PC, case rattle, model and conditions in natural title/body text. Define subject-predicate-object relationships and avoid vague instructions detached from context.\n\nYour artifact / evidence:\n\n## Evaluate Reddit AI with boundaries\nRead the Reddit Answers announcement. Contrast cited conversation summaries, search, recommendations, moderation and Pro features; check current availability separately. Licensed data or public access does not guarantee your post enters model weights.\n\nYour artifact / evidence:\n\n## Answer the six agent questions\nRecord what the object is, audience/environment, problem, mechanism, failure limits and deterministic next action. Keep the public selftext useful to humans; local draft validation is the companion action.\n\nYour artifact / evidence:\n\n## Respect contribution culture\nDraft a disclosure of AI editing and any affiliation. Write moderation responses for a removed post, criticism and a correction. No sockpuppets, fake votes, manufactured controversy or private-thread extraction.\n\nYour artifact / evidence:\n\n## Design a B3 technical variant\nAs a separate adaptation, outline a real builder postmortem with reproducible logs and context. Explain why a developer community needs a different example from the general PC-noise audience.\n\nYour artifact / evidence:\n\n## Plan the experimentation lab\nTest text/image/gallery/video, title, posting window and prompt independently. Record removal risk, exposure, vote availability, comment depth and useful corrections. Leave unavailable downvote counts as unavailable.\n\nYour artifact / evidence:\n\n## Apply the quality rubric and flywheel\nRate the ten dimensions in studio.html using evidence. Map build → experiment → contribution → critique → extraction → knowledge → improved build → next experiment. A high self-score is not moderator approval.\n\nYour artifact / evidence:\n\n## Recompose community knowledge\nAdapt the same verified observation into YouTube explanation, TikTok demo, Instagram carousel, professional LinkedIn case, X update, Facebook discussion and a canonical reference. Credit permitted source material and preserve uncertainty.\n\nYour artifact / evidence:\n\n## Specify the factory and seventeen gates\nMap source, intelligence, fit, strategy, post, reply, moderation, discussion, extraction, analytics and model feedback. Answer the seventeen brief gates for audience, rules, format, media, title, value, comments, cards, evidence and logs.\n\nYour artifact / evidence:\n\n## Execute the capstone as a draft rehearsal\nWrite a twenty-two-action plan from observation through rule check, evidence, post, responses, extraction of three edge cases, corrected object and platform recomposition. Use synthetic replies only when labelled; real community engagement remains an optional authorized follow-up.\n\nYour artifact / evidence:\n\n",
      "filename": "native-production.md",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R030",
      "name": "caption.md",
      "type": "md",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n\n# Reddit caption\n\nTopic: Desktop PC case rattle\nAudience: A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.\n\nThe worksheet is a production draft. Save specific decisions, source URLs, dates and observed results. Never fill a result with imagined analytics.\n\n## Select the native post type\nDraft selftext structure, possible audio/video proof, labeled image and gallery alternatives. Use an external link only when the source is the subject; compare native/external media friction and community permissions without assuming ranking penalties.\n\nYour artifact / evidence:\n\n## Compose the controlled selftext pair\nUse studio.html for A/B on the same case rattle. Keep the symptom and community constant; add context and a genuine request while retaining a conversational voice.\n\nYour artifact / evidence:\n\n",
      "filename": "caption.md",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R031",
      "name": "diagnostic-log.md",
      "type": "md",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n\n# Reddit diagnostic-log\n\nTopic: Desktop PC case rattle\nAudience: A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.\n\nThe worksheet is a production draft. Save specific decisions, source URLs, dates and observed results. Never fill a result with imagined analytics.\n\n## Make the observation reproducible\nWrite environment, sound conditions, safe prior observations, redacted evidence and unknowns in diagnostic-log.md. Do not touch moving hardware or assert a component failure from the example.\n\nYour artifact / evidence:\n\n",
      "filename": "diagnostic-log.md",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R032",
      "name": "capstone.md",
      "type": "md",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n\n# Reddit capstone\n\nTopic: Desktop PC case rattle\nAudience: A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.\n\nThe worksheet is a production draft. Save specific decisions, source URLs, dates and observed results. Never fill a result with imagined analytics.\n\n## Apply the quality rubric and flywheel\nRate the ten dimensions in studio.html using evidence. Map build → experiment → contribution → critique → extraction → knowledge → improved build → next experiment. A high self-score is not moderator approval.\n\nYour artifact / evidence:\n\n## Recompose community knowledge\nAdapt the same verified observation into YouTube explanation, TikTok demo, Instagram carousel, professional LinkedIn case, X update, Facebook discussion and a canonical reference. Credit permitted source material and preserve uncertainty.\n\nYour artifact / evidence:\n\n## Specify the factory and seventeen gates\nMap source, intelligence, fit, strategy, post, reply, moderation, discussion, extraction, analytics and model feedback. Answer the seventeen brief gates for audience, rules, format, media, title, value, comments, cards, evidence and logs.\n\nYour artifact / evidence:\n\n## Execute the capstone as a draft rehearsal\nWrite a twenty-two-action plan from observation through rule check, evidence, post, responses, extraction of three edge cases, corrected object and platform recomposition. Use synthetic replies only when labelled; real community engagement remains an optional authorized follow-up.\n\nYour artifact / evidence:\n\n",
      "filename": "capstone.md",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R033",
      "name": "experiments.md",
      "type": "md",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n\n# Reddit experiments\n\nTopic: Desktop PC case rattle\nAudience: A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.\n\nThe worksheet is a production draft. Save specific decisions, source URLs, dates and observed results. Never fill a result with imagined analytics.\n\n## Plan the experimentation lab\nTest text/image/gallery/video, title, posting window and prompt independently. Record removal risk, exposure, vote availability, comment depth and useful corrections. Leave unavailable downvote counts as unavailable.\n\nYour artifact / evidence:\n\n",
      "filename": "experiments.md",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R034",
      "name": "requirements-map.md",
      "type": "md",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n\n# Shared-brief coverage\n\n### Part 1: Understand Reddit Before Creating Content\nOwn exercise: Understand the community architecture\n\n### Part 2: The Subreddit Is the Audience\nOwn exercise: Choose the subreddit audience\n\n### Part 3: Reddit Community Intelligence\nOwn exercise: Write a community intelligence profile\n\n### Part 4: Reddit Is a Conversation Engine\nOwn exercise: Choose a conversational contribution\n\n### Part 5: Reddit Post Types\nOwn exercise: Select the native post type\n\n### Part 6: Native Reddit Video vs External Video\nOwn exercise: Select the native post type\n\n### Part 7: Reddit Titles Are a Specialized Skill\nOwn exercise: Write a descriptive title\n\n### Part 8: Reddit Comments Are Content\nOwn exercise: Treat comments as first-class content\n\n### Part 9: Comment-to-Knowledge (Knowledge Extraction)\nOwn exercise: Extract a nine-field knowledge object\n\n### Part 10: Reddit Search & Semantic Discovery\nOwn exercise: Support search and semantic discovery\n\n### Part 11: Reddit's AI Layer\nOwn exercise: Evaluate Reddit AI with boundaries\n\n### Part 12: Reddit as an AI Knowledge Source\nOwn exercise: Evaluate Reddit AI with boundaries\n\n### Part 13: Reddit + AI Discoverability\nOwn exercise: Support search and semantic discovery\n\n### Part 14: Reddit + Agent-Ready Content\nOwn exercise: Answer the six agent questions\n\n### Part 15: Reddit Culture vs Marketing Culture\nOwn exercise: Respect contribution culture\n\n### Part 16: Build Bots Better on Reddit\nOwn exercise: Design a B3 technical variant\n\n### Part 17: Reddit Experimentation Lab\nOwn exercise: Plan the experimentation lab\n\n### Part 18: Reddit Analytics & Knowledge Metrics\nOwn exercise: Plan the experimentation lab\n\n### Part 19: Reddit Content Quality Score\nOwn exercise: Apply the quality rubric and flywheel\n\n### Part 20: The Reddit Knowledge Flywheel\nOwn exercise: Apply the quality rubric and flywheel\n\n### Part 21: Reddit → Multi-Platform Knowledge\nOwn exercise: Recompose community knowledge\n\n### Part 22: The Reddit Content Factory Pipeline\nOwn exercise: Specify the factory and seventeen gates\n\n### Part 23: The Reddit Content Agent Operating System\nOwn exercise: Specify the factory and seventeen gates\n\n### Part 24: Final Capstone Project\nOwn exercise: Execute the capstone as a draft rehearsal\n\n",
      "filename": "requirements-map.md",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R035",
      "name": "strategy.json",
      "type": "json",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "{\n  \"platform\": \"Reddit\",\n  \"progression\": [\n    \"Human value\",\n    \"Community\",\n    \"Subreddit fit\",\n    \"Conversation\",\n    \"Search\",\n    \"Platform AI\",\n    \"AI discoverability\",\n    \"Agentic utility\",\n    \"Future SI (speculative)\"\n  ],\n  \"epistemic_status\": \"Editorial framework; optimization stages do not guarantee distribution or learning\",\n  \"audiences\": [\n    \"human\",\n    \"platform\",\n    \"search/retrieval\",\n    \"authorized agent\"\n  ],\n  \"human_utility\": \"A community member wants a reproducible explanation of a desktop PC rattling sound and peer troubleshooting. The example respects subreddit rules and does not offer risky hardware repair instructions.\",\n  \"measurement\": \"Compare the same topic, format, audience and promise. Change one independent variable per audience test.\"\n}\n",
      "filename": "strategy.json",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R036",
      "name": "strategy.json.VERSION_HISTORY.txt",
      "type": "txt",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n",
      "filename": "strategy.json.VERSION_HISTORY.txt",
      "generated_from": "BUILD_SPEC.json.resources",
      "version": "2.0"
    },
    {
      "resource_id": "R037",
      "name": "mechanisms.md",
      "type": "md",
      "purpose": "Working resource used by this Build; inspect before running.",
      "contents": "VERSION HISTORY\n2026-10-06 EDT | chatgpt_codex | media-catchup | v1: original learner production resource.\n\n# Discovery mechanisms and truth labels\n\nTraining and fine-tuning alter model weights; publishing a post cannot force either. RLHF/RLAIF uses preference data and is separate from inference. Crawling and public/in-app search build accessible indexes; private posts, robots rules, terms and APIs constrain access. Embeddings represent semantic similarity; vector databases retrieve vectors. RAG retrieves external chunks into context, while context windows are temporary inference inputs. Graphs encode named relationships. Recommendation systems rank candidate content for an audience. AI answers and citations may summarize accessible sources; citations are observed, not guaranteed. Provenance records origin and byte changes. Machine-readable schemas describe content but do not force rich results. Multimodal OCR/ASR interprets image/audio and requires human correction. Agent browsing/retrieval adds goal-driven tool actions. Licensed and enterprise repositories have explicit access contracts. Platform-specific AI features must be checked for account/region/version availability. Future SI learning and coordination is speculative.\n\nTaxonomy: ESTABLISHED requires a direct source; EVIDENCE-SUPPORTED requires reproducible observations; EMERGING describes a dated deployment; HYPOTHESIS is a proposed test; SPECULATION is a future possibility. The shared briefs use different counts/groupings (13,16,18); retain distinctions rather than inventing a uniform number. SI is not a promise of permanent model learning or a synonym for semantic indexing.\n",
      "filename": "mechanisms.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": "Produce your native selftext troubleshooting post and its same-topic comparison, complete the detailed capstone plan, then review source facts, rights, current community rules and actual media. Run the meaningful failure/repair and source-linked retrieval checks. Export course evidence. A structural pack pass is separate from live publication, audience results or independent quality approval.",
    "required_inputs": [
      "workspace_guard.py",
      "restore_drill.py",
      "onboarding-checklist.md",
      "media_pack.py",
      "versions.json",
      "knowledge.json",
      "agent-card.json",
      "rubric.json",
      "native.json",
      "claims.json",
      "metrics.json",
      "provenance-notes.md",
      "agent-training.json",
      "AGENT_OPERATING_MANUAL.md",
      "audience.md",
      "native-production.md",
      "caption.md",
      "diagnostic-log.md",
      "capstone.md",
      "experiments.md",
      "requirements-map.md",
      "strategy.json",
      "mechanisms.md"
    ],
    "success_conditions": [
      "A reviewed selftext troubleshooting post for Desktop PC case rattle, controlled A/B drafts, complete native production/capstone plans, an evidence rubric, source-linked retrieval objects and hash-checked companion resources.",
      "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 reviewed selftext troubleshooting post for Desktop PC case rattle, controlled A/B drafts, complete native production/capstone plans, an evidence rubric, source-linked retrieval objects and hash-checked companion resources.",
    "failure_paths": "Use the specific step diagnostic, retain failure evidence and stop when access is required."
  },
  "extensions": [
    {
      "title": "Use your own input",
      "action": "Replace the sample with one permitted real input and rerun the same checks."
    },
    {
      "title": "Add one failure case",
      "action": "Create a malformed or missing input; prove the workflow fails visibly and recovers."
    },
    {
      "title": "Automate after review",
      "action": "Write a bounded schedule with logging and a stop condition; obtain approval for external actions separately."
    }
  ],
  "metadata": {
    "SEO_title": "Creating Reddit Content for the AI, SI, and Agentic Era | BuildBotsBetter",
    "SEO_description": "A reviewed selftext troubleshooting post for Desktop PC case rattle, controlled A/B drafts, complete native production/capstone plans, an evidence rubric, source-linked retrieval objects and hash-checked companion resources.",
    "SEO_keywords": [
      "reddit-content-ai-si-agentic-era",
      "guided build",
      "verified outcome"
    ],
    "difficulty": "beginner",
    "related_builds": [
      "dogfooding",
      "buildbotsbetter-onboarding"
    ],
    "next_recommended_build": "dogfooding"
  },
  "automation_map": [
    {
      "output": "website",
      "generated_from": "BUILD_SPEC.json",
      "human_review_required": true
    },
    {
      "output": "walkthrough",
      "generated_from": "BUILD_SPEC.json",
      "human_review_required": true
    },
    {
      "output": "bot dialogue",
      "generated_from": "BUILD_SPEC.json",
      "human_review_required": true
    },
    {
      "output": "resources",
      "generated_from": "BUILD_SPEC.json",
      "human_review_required": true
    },
    {
      "output": "quiz",
      "generated_from": "BUILD_SPEC.json",
      "human_review_required": true
    },
    {
      "output": "captions",
      "generated_from": "BUILD_SPEC.json",
      "human_review_required": true
    },
    {
      "output": "metadata",
      "generated_from": "BUILD_SPEC.json",
      "human_review_required": true
    }
  ],
  "quality_assurance_report": {
    "scope": "Original instructional content, reviewed against shared brief; execution and browser receipts are stored under logs/catalog-acceptance.",
    "known_limits": [
      "Platform access, account features and upload limits require current account checks.",
      "No content was published and no genuine audience metrics or AI citations are claimed.",
      "Studio and lint check draft structure; factual accuracy, media quality, OCR/ASR and community fit need human review.",
      "The provided fixture is synthetic. Actual content creation and live feedback must not be inferred from a browser walkthrough."
    ]
  },
  "sources": [
    {
      "title": "Shared Reddit requirements",
      "url": "../../specs/reddit-content-ai-si-agentic-era.md"
    },
    {
      "title": "Reddit primary platform guidance",
      "url": "https://redditinc.com/news/introducing-reddit-answers"
    }
  ],
  "known_uncertainties": [
    "Platform access, account features and upload limits require current account checks.",
    "No content was published and no genuine audience metrics or AI citations are claimed.",
    "Studio and lint check draft structure; factual accuracy, media quality, OCR/ASR and community fit need human review.",
    "The provided fixture is synthetic. Actual content creation and live feedback must not be inferred from a browser walkthrough."
  ],
  "requirement_coverage": {
    "shared_parts": [
      "### Part 1: Understand Reddit Before Creating Content",
      "### Part 2: The Subreddit Is the Audience",
      "### Part 3: Reddit Community Intelligence",
      "### Part 4: Reddit Is a Conversation Engine",
      "### Part 5: Reddit Post Types",
      "### Part 6: Native Reddit Video vs External Video",
      "### Part 7: Reddit Titles Are a Specialized Skill",
      "### Part 8: Reddit Comments Are Content",
      "### Part 9: Comment-to-Knowledge (Knowledge Extraction)",
      "### Part 10: Reddit Search & Semantic Discovery",
      "### Part 11: Reddit's AI Layer",
      "### Part 12: Reddit as an AI Knowledge Source",
      "### Part 13: Reddit + AI Discoverability",
      "### Part 14: Reddit + Agent-Ready Content",
      "### Part 15: Reddit Culture vs Marketing Culture",
      "### Part 16: Build Bots Better on Reddit",
      "### Part 17: Reddit Experimentation Lab",
      "### Part 18: Reddit Analytics & Knowledge Metrics",
      "### Part 19: Reddit Content Quality Score",
      "### Part 20: The Reddit Knowledge Flywheel",
      "### Part 21: Reddit → Multi-Platform Knowledge",
      "### Part 22: The Reddit Content Factory Pipeline",
      "### Part 23: The Reddit Content Agent Operating System",
      "### Part 24: Final Capstone Project"
    ],
    "part_to_exercise": [
      {
        "requirement": "### Part 1: Understand Reddit Before Creating Content",
        "exercise": "Understand the community architecture"
      },
      {
        "requirement": "### Part 2: The Subreddit Is the Audience",
        "exercise": "Choose the subreddit audience"
      },
      {
        "requirement": "### Part 3: Reddit Community Intelligence",
        "exercise": "Write a community intelligence profile"
      },
      {
        "requirement": "### Part 4: Reddit Is a Conversation Engine",
        "exercise": "Choose a conversational contribution"
      },
      {
        "requirement": "### Part 5: Reddit Post Types",
        "exercise": "Select the native post type"
      },
      {
        "requirement": "### Part 6: Native Reddit Video vs External Video",
        "exercise": "Select the native post type"
      },
      {
        "requirement": "### Part 7: Reddit Titles Are a Specialized Skill",
        "exercise": "Write a descriptive title"
      },
      {
        "requirement": "### Part 8: Reddit Comments Are Content",
        "exercise": "Treat comments as first-class content"
      },
      {
        "requirement": "### Part 9: Comment-to-Knowledge (Knowledge Extraction)",
        "exercise": "Extract a nine-field knowledge object"
      },
      {
        "requirement": "### Part 10: Reddit Search & Semantic Discovery",
        "exercise": "Support search and semantic discovery"
      },
      {
        "requirement": "### Part 11: Reddit's AI Layer",
        "exercise": "Evaluate Reddit AI with boundaries"
      },
      {
        "requirement": "### Part 12: Reddit as an AI Knowledge Source",
        "exercise": "Evaluate Reddit AI with boundaries"
      },
      {
        "requirement": "### Part 13: Reddit + AI Discoverability",
        "exercise": "Support search and semantic discovery"
      },
      {
        "requirement": "### Part 14: Reddit + Agent-Ready Content",
        "exercise": "Answer the six agent questions"
      },
      {
        "requirement": "### Part 15: Reddit Culture vs Marketing Culture",
        "exercise": "Respect contribution culture"
      },
      {
        "requirement": "### Part 16: Build Bots Better on Reddit",
        "exercise": "Design a B3 technical variant"
      },
      {
        "requirement": "### Part 17: Reddit Experimentation Lab",
        "exercise": "Plan the experimentation lab"
      },
      {
        "requirement": "### Part 18: Reddit Analytics & Knowledge Metrics",
        "exercise": "Plan the experimentation lab"
      },
      {
        "requirement": "### Part 19: Reddit Content Quality Score",
        "exercise": "Apply the quality rubric and flywheel"
      },
      {
        "requirement": "### Part 20: The Reddit Knowledge Flywheel",
        "exercise": "Apply the quality rubric and flywheel"
      },
      {
        "requirement": "### Part 21: Reddit → Multi-Platform Knowledge",
        "exercise": "Recompose community knowledge"
      },
      {
        "requirement": "### Part 22: The Reddit Content Factory Pipeline",
        "exercise": "Specify the factory and seventeen gates"
      },
      {
        "requirement": "### Part 23: The Reddit Content Agent Operating System",
        "exercise": "Specify the factory and seventeen gates"
      },
      {
        "requirement": "### Part 24: Final Capstone Project",
        "exercise": "Execute the capstone as a draft rehearsal"
      }
    ],
    "native_exercises": [
      "Understand the community architecture",
      "Choose the subreddit audience",
      "Write a community intelligence profile",
      "Choose a conversational contribution",
      "Select the native post type",
      "Write a descriptive title",
      "Compose the controlled selftext pair",
      "Make the observation reproducible",
      "Treat comments as first-class content",
      "Extract a nine-field knowledge object",
      "Support search and semantic discovery",
      "Evaluate Reddit AI with boundaries",
      "Answer the six agent questions",
      "Respect contribution culture",
      "Design a B3 technical variant",
      "Plan the experimentation lab",
      "Apply the quality rubric and flywheel",
      "Recompose community knowledge",
      "Specify the factory and seventeen gates",
      "Execute the capstone as a draft rehearsal"
    ],
    "operational_safeguards": "Last lesson; resolved-path dry run, active tool guard check, scheduled off-volume backup and restore proof.",
    "time_allocation": "Native production exercises: 250 minutes; preparation: 6 minutes; knowledge pack: 24 minutes; operational safeguards: 30 minutes. Native work is 250/310 = 80.6% of planned instructional time."
  }
}
