{
  "schema_version": 2,
  "meta": {
    "build_id": "CODEX-THREADS-CONTENT-AI-SI-AGENTIC-ERA",
    "slug": "threads-content-ai-si-agentic-era",
    "title": "Creating Threads Content for the AI, SI, and Agentic Era",
    "subtitle": "Make a native standalone conversational post and a checked companion knowledge pack.",
    "description": "A reviewed standalone conversational post for Short science-fiction reading choices, 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 standalone conversational post for Short science-fiction reading choices, 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: Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.",
    "skill_level": "beginner",
    "estimated_time": "4–6 hours including native production; live publication optional",
    "category": "Guided Build",
    "tags": [
      "threads-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 standalone conversational post for Short science-fiction reading choices, 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 threads content for the ai, si, and agentic era.",
    "after": "A reviewed standalone conversational post for Short science-fiction reading choices, 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 standalone conversational post for Short science-fiction reading choices, 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.",
    "Five identities and a surface map explain the reader persona.",
    "Two dated observations support an audience-native choice.",
    "A reply-first objective and claim boundary are explicit.",
    "Two adaptations serve conversation rather than identical cross-posting.",
    "A media decision distinguishes usability from unverified ranking claims."
  ],
  "lessons": [
    {
      "lesson_id": "L01",
      "title": "Start with the native creation experience",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.",
      "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": "Map the five Threads identities",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Five identities and a surface map explain the reader persona.",
      "lessons_before_this": [
        "L01"
      ],
      "lessons_after_this": [
        "L03"
      ]
    },
    {
      "lesson_id": "L03",
      "title": "Observe real reading conversations",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Two dated observations support an audience-native choice.",
      "lessons_before_this": [
        "L02"
      ],
      "lessons_after_this": [
        "L04"
      ]
    },
    {
      "lesson_id": "L04",
      "title": "Design conversation before broadcast",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A reply-first objective and claim boundary are explicit.",
      "lessons_before_this": [
        "L03"
      ],
      "lessons_after_this": [
        "L05"
      ]
    },
    {
      "lesson_id": "L05",
      "title": "Adapt from X and Instagram thoughtfully",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Two adaptations serve conversation rather than identical cross-posting.",
      "lessons_before_this": [
        "L04"
      ],
      "lessons_after_this": [
        "L06"
      ]
    },
    {
      "lesson_id": "L06",
      "title": "Choose native video or a direct reference",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A media decision distinguishes usability from unverified ranking claims.",
      "lessons_before_this": [
        "L05"
      ],
      "lessons_after_this": [
        "L07"
      ]
    },
    {
      "lesson_id": "L07",
      "title": "Add useful context to media",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Media and meaningful root text support one conversation.",
      "lessons_before_this": [
        "L06"
      ],
      "lessons_after_this": [
        "L08"
      ]
    },
    {
      "lesson_id": "L08",
      "title": "Build the standalone post",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Sixteen archetype sketches support a complete root post.",
      "lessons_before_this": [
        "L07"
      ],
      "lessons_after_this": [
        "L09"
      ]
    },
    {
      "lesson_id": "L09",
      "title": "Compare the same-topic post pair",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. This is a controlled same-topic exercise; no publication result is assumed.",
      "estimated_time": "12 min",
      "learning_objective": "Both versions keep an authentic reading question and B has usable criteria.",
      "lessons_before_this": [
        "L08"
      ],
      "lessons_after_this": [
        "L10"
      ]
    },
    {
      "lesson_id": "L10",
      "title": "Write three constructive replies",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Three replies contribute rather than market a link.",
      "lessons_before_this": [
        "L09"
      ],
      "lessons_after_this": [
        "L11"
      ]
    },
    {
      "lesson_id": "L11",
      "title": "Design seven honest question types",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Seven prompts avoid engagement bait and invented consensus.",
      "lessons_before_this": [
        "L10"
      ],
      "lessons_after_this": [
        "L12"
      ]
    },
    {
      "lesson_id": "L12",
      "title": "Verify topic placement",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A five-point gate explains a specific topic choice.",
      "lessons_before_this": [
        "L11"
      ],
      "lessons_after_this": [
        "L13"
      ]
    },
    {
      "lesson_id": "L13",
      "title": "Choose between four text formats",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Four format options have a reason and a verification note.",
      "lessons_before_this": [
        "L12"
      ],
      "lessons_after_this": [
        "L14"
      ]
    },
    {
      "lesson_id": "L14",
      "title": "Write an eight-post narrative",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Eight standalone posts form a coherent reading conversation.",
      "lessons_before_this": [
        "L13"
      ],
      "lessons_after_this": [
        "L15"
      ]
    },
    {
      "lesson_id": "L15",
      "title": "Build in public without invented progress",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A builder-style update contains an honest observation boundary.",
      "lessons_before_this": [
        "L14"
      ],
      "lessons_after_this": [
        "L16"
      ]
    },
    {
      "lesson_id": "L16",
      "title": "Make the conversation retrievable",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "An extracted chunk retains context and source.",
      "lessons_before_this": [
        "L15"
      ],
      "lessons_after_this": [
        "L17"
      ]
    },
    {
      "lesson_id": "L17",
      "title": "Close the conversational flywheel",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Three labeled observations improve the source object.",
      "lessons_before_this": [
        "L16"
      ],
      "lessons_after_this": [
        "L18"
      ]
    },
    {
      "lesson_id": "L18",
      "title": "Recompose six platform sources",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Six adaptations supply interesting context and a reason to reply.",
      "lessons_before_this": [
        "L17"
      ],
      "lessons_after_this": [
        "L19"
      ]
    },
    {
      "lesson_id": "L19",
      "title": "Plan honest CTAs and Insights",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "A CTA choice and metric dictionary match the conversation goal.",
      "lessons_before_this": [
        "L18"
      ],
      "lessons_after_this": [
        "L20"
      ]
    },
    {
      "lesson_id": "L20",
      "title": "Specify experiments and ten-stage factory",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "Five controlled tests and ten stages have evidence and stop rules.",
      "lessons_before_this": [
        "L19"
      ],
      "lessons_after_this": [
        "L21"
      ]
    },
    {
      "lesson_id": "L21",
      "title": "Complete seventeen gates and nineteen actions",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "estimated_time": "12 min",
      "learning_objective": "The approval record has seventeen answered checks and nineteen capstone actions.",
      "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": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.",
      "user_action": "Download the resource ZIP and extract it into a new private folder. Open studio.html directly in your browser. Compare the two standalone conversational post drafts for Short science-fiction reading choices. 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": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.",
      "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 standalone conversational post drafts for Short science-fiction reading choices. 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 standalone conversational post drafts for Short science-fiction reading choices. 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 standalone conversational post drafts for Short science-fiction reading choices. 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 standalone conversational post drafts for Short science-fiction reading choices. 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": "Map the five Threads identities",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Describe conversation, discovery, interest network, text/media publishing and community building. Inventory posts, replies, quotes, topics, profiles, feeds, search, media, links, attachments and Insights.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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": "Five identities and a surface map explain the reader persona.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Map the five Threads identities",
        "success_condition": "Five identities and a surface map explain the reader persona.",
        "how_to_verify": "Record five identities and a surface map explain the reader persona. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Five identities and a surface map explain the reader persona.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Five identities and a surface map explain the reader persona.",
        "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 map the five threads identities?",
          "answer": "Five identities and a surface map explain the reader persona. 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 map the five Threads identities. Five identities and a surface map explain the reader persona.",
        "demo": "Describe conversation, discovery, interest network, text/media publishing and community building. Inventory posts, replies, quotes, topics, profiles, feeds, search, media, links, attachments and Insights.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate map the five threads identities",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Describe conversation, discovery, interest network, text/media publishing and community building. Inventory posts, replies, quotes, topics, profiles, feeds, search, media, links, attachments and Insights. Five identities and a surface map explain the reader persona.",
        "on_screen_text": [
          "Map the five Threads identities",
          "Five identities and a surface map explain the reader persona."
        ],
        "screen_recording_instructions": [
          "Describe conversation, discovery, interest network, text/media publishing and community building. Inventory posts, replies, quotes, topics, profiles, feeds, search, media, links, attachments and Insights.",
          "Inspect the result: Five identities and a surface map explain the reader persona.",
          "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": [
          "Five identities and a surface map explain the reader persona."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Describe conversation, discovery, interest network, text/media publishing and community building. Inventory posts, replies, quotes, topics, profiles, feeds, search, media, links, attachments and Insights.",
          "Five identities and a surface map explain the reader persona."
        ]
      },
      "step_id": "L02-S01",
      "lesson_id": "L02"
    },
    {
      "title": "Observe real reading conversations",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Review two public reading threads and the official creator insights. Record specific questions, reply quality and topic placement. Do not treat a niche community as the universal number-one platform use.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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": "Two dated observations support an audience-native choice.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Observe real reading conversations",
        "success_condition": "Two dated observations support an audience-native choice.",
        "how_to_verify": "Record two dated observations support an audience-native choice. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Two dated observations support an audience-native choice.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Two dated observations support an audience-native choice.",
        "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 observe real reading conversations?",
          "answer": "Two dated observations support an audience-native choice. 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 observe real reading conversations. Two dated observations support an audience-native choice.",
        "demo": "Review two public reading threads and the official creator insights. Record specific questions, reply quality and topic placement. Do not treat a niche community as the universal number-one platform use.",
        "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 observe real reading conversations",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Review two public reading threads and the official creator insights. Record specific questions, reply quality and topic placement. Do not treat a niche community as the universal number-one platform use. Two dated observations support an audience-native choice.",
        "on_screen_text": [
          "Observe real reading conversations",
          "Two dated observations support an audience-native choice."
        ],
        "screen_recording_instructions": [
          "Review two public reading threads and the official creator insights. Record specific questions, reply quality and topic placement. Do not treat a niche community as the universal number-one platform use.",
          "Inspect the result: Two dated observations support an audience-native choice.",
          "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": [
          "Two dated observations support an audience-native choice."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Review two public reading threads and the official creator insights. Record specific questions, reply quality and topic placement. Do not treat a niche community as the universal number-one platform use.",
          "Two dated observations support an audience-native choice."
        ]
      },
      "step_id": "L03-S01",
      "lesson_id": "L03"
    },
    {
      "title": "Design conversation before broadcast",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Draw post → reply → conversation → discovery. Explain Meta’s reply observation as a reported aggregate, not a promise about this draft’s reach. Choose a useful answer target rather than like bait.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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 reply-first objective and claim boundary are explicit.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Design conversation before broadcast",
        "success_condition": "A reply-first objective and claim boundary are explicit.",
        "how_to_verify": "Record a reply-first objective and claim boundary are explicit. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A reply-first objective and claim boundary are explicit.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A reply-first objective and claim boundary 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": "What is a useful result for design conversation before broadcast?",
          "answer": "A reply-first objective and claim boundary are explicit. 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 conversation before broadcast. A reply-first objective and claim boundary are explicit.",
        "demo": "Draw post → reply → conversation → discovery. Explain Meta’s reply observation as a reported aggregate, not a promise about this draft’s reach. Choose a useful answer target rather than like bait.",
        "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 conversation before broadcast",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Draw post → reply → conversation → discovery. Explain Meta’s reply observation as a reported aggregate, not a promise about this draft’s reach. Choose a useful answer target rather than like bait. A reply-first objective and claim boundary are explicit.",
        "on_screen_text": [
          "Design conversation before broadcast",
          "A reply-first objective and claim boundary are explicit."
        ],
        "screen_recording_instructions": [
          "Draw post → reply → conversation → discovery. Explain Meta’s reply observation as a reported aggregate, not a promise about this draft’s reach. Choose a useful answer target rather than like bait.",
          "Inspect the result: A reply-first objective and claim boundary 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 reply-first objective and claim boundary are explicit."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Draw post → reply → conversation → discovery. Explain Meta’s reply observation as a reported aggregate, not a promise about this draft’s reach. Choose a useful answer target rather than like bait.",
          "A reply-first objective and claim boundary are explicit."
        ]
      },
      "step_id": "L04-S01",
      "lesson_id": "L04"
    },
    {
      "title": "Adapt from X and Instagram thoughtfully",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Transform a terse X opinion and a decorative Instagram book photo into a text-led reading question. Run the media utility test: include a cover only when it clarifies the specific book discussion.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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": "Two adaptations serve conversation rather than identical cross-posting.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Adapt from X and Instagram thoughtfully",
        "success_condition": "Two adaptations serve conversation rather than identical cross-posting.",
        "how_to_verify": "Record two adaptations serve conversation rather than identical cross-posting. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Two adaptations serve conversation rather than identical cross-posting.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Two adaptations serve conversation rather than identical cross-posting.",
        "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 adapt from x and instagram thoughtfully?",
          "answer": "Two adaptations serve conversation rather than identical cross-posting. 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 adapt from X and Instagram thoughtfully. Two adaptations serve conversation rather than identical cross-posting.",
        "demo": "Transform a terse X opinion and a decorative Instagram book photo into a text-led reading question. Run the media utility test: include a cover only when it clarifies the specific book discussion.",
        "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 adapt from x and instagram thoughtfully",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Transform a terse X opinion and a decorative Instagram book photo into a text-led reading question. Run the media utility test: include a cover only when it clarifies the specific book discussion. Two adaptations serve conversation rather than identical cross-posting.",
        "on_screen_text": [
          "Adapt from X and Instagram thoughtfully",
          "Two adaptations serve conversation rather than identical cross-posting."
        ],
        "screen_recording_instructions": [
          "Transform a terse X opinion and a decorative Instagram book photo into a text-led reading question. Run the media utility test: include a cover only when it clarifies the specific book discussion.",
          "Inspect the result: Two adaptations serve conversation rather than identical cross-posting.",
          "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": [
          "Two adaptations serve conversation rather than identical cross-posting."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Transform a terse X opinion and a decorative Instagram book photo into a text-led reading question. Run the media utility test: include a cover only when it clarifies the specific book discussion.",
          "Two adaptations serve conversation rather than identical cross-posting."
        ]
      },
      "step_id": "L05-S01",
      "lesson_id": "L05"
    },
    {
      "title": "Choose native video or a direct reference",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Compare a 30-second reading reaction, a silent flip-through and an external full review. Check current upload limits in the composer; the brief’s five-minute example needs current verification. Do not assert an unexplained external-link penalty.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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 media decision distinguishes usability from unverified ranking claims.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Choose native video or a direct reference",
        "success_condition": "A media decision distinguishes usability from unverified ranking claims.",
        "how_to_verify": "Record a media decision distinguishes usability from unverified ranking claims. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A media decision distinguishes usability from unverified ranking claims.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A media decision distinguishes usability from unverified ranking claims.",
        "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 native video or a direct reference?",
          "answer": "A media decision distinguishes usability from unverified ranking claims. 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 native video or a direct reference. A media decision distinguishes usability from unverified ranking claims.",
        "demo": "Compare a 30-second reading reaction, a silent flip-through and an external full review. Check current upload limits in the composer; the brief’s five-minute example needs current verification. Do not assert an unexplained external-link penalty.",
        "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 native video or a direct reference",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Compare a 30-second reading reaction, a silent flip-through and an external full review. Check current upload limits in the composer; the brief’s five-minute example needs current verification. Do not assert an unexplained external-link penalty. A media decision distinguishes usability from unverified ranking claims.",
        "on_screen_text": [
          "Choose native video or a direct reference",
          "A media decision distinguishes usability from unverified ranking claims."
        ],
        "screen_recording_instructions": [
          "Compare a 30-second reading reaction, a silent flip-through and an external full review. Check current upload limits in the composer; the brief’s five-minute example needs current verification. Do not assert an unexplained external-link penalty.",
          "Inspect the result: A media decision distinguishes usability from unverified ranking claims.",
          "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 media decision distinguishes usability from unverified ranking claims."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Compare a 30-second reading reaction, a silent flip-through and an external full review. Check current upload limits in the composer; the brief’s five-minute example needs current verification. Do not assert an unexplained external-link penalty.",
          "A media decision distinguishes usability from unverified ranking claims."
        ]
      },
      "step_id": "L06-S01",
      "lesson_id": "L06"
    },
    {
      "title": "Add useful context to media",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Write matched speech, overlay and root text for a book recommendation clip. Explain the reading criteria even when the viewer does not play the video.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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": "Media and meaningful root text support one conversation.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Add useful context to media",
        "success_condition": "Media and meaningful root text support one conversation.",
        "how_to_verify": "Record media and meaningful root text support one conversation. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Media and meaningful root text support one conversation.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Media and meaningful root text support one conversation.",
        "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 add useful context to media?",
          "answer": "Media and meaningful root text support one conversation. 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 add useful context to media. Media and meaningful root text support one conversation.",
        "demo": "Write matched speech, overlay and root text for a book recommendation clip. Explain the reading criteria even when the viewer does not play the video.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate add useful context to media",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Write matched speech, overlay and root text for a book recommendation clip. Explain the reading criteria even when the viewer does not play the video. Media and meaningful root text support one conversation.",
        "on_screen_text": [
          "Add useful context to media",
          "Media and meaningful root text support one conversation."
        ],
        "screen_recording_instructions": [
          "Write matched speech, overlay and root text for a book recommendation clip. Explain the reading criteria even when the viewer does not play the video.",
          "Inspect the result: Media and meaningful root text support one conversation.",
          "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": [
          "Media and meaningful root text support one conversation."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Write matched speech, overlay and root text for a book recommendation clip. Explain the reading criteria even when the viewer does not play the video.",
          "Media and meaningful root text support one conversation."
        ]
      },
      "step_id": "L07-S01",
      "lesson_id": "L07"
    },
    {
      "title": "Build the standalone post",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Draft hook, two context sentences and a low-friction question. Try observation, question, lesson, opinion, discovery, prediction, experiment, insight, business lesson, development, failure, success, counter-intuition, explanation, humor and demo archetypes.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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": "Sixteen archetype sketches support a complete root post.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Build the standalone post",
        "success_condition": "Sixteen archetype sketches support a complete root post.",
        "how_to_verify": "Record sixteen archetype sketches support a complete root post. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Sixteen archetype sketches support a complete root post.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Sixteen archetype sketches support a complete root post.",
        "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 build the standalone post?",
          "answer": "Sixteen archetype sketches support a complete root post. 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 build the standalone post. Sixteen archetype sketches support a complete root post.",
        "demo": "Draft hook, two context sentences and a low-friction question. Try observation, question, lesson, opinion, discovery, prediction, experiment, insight, business lesson, development, failure, success, counter-intuition, explanation, humor and demo archetypes.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate build the standalone post",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Draft hook, two context sentences and a low-friction question. Try observation, question, lesson, opinion, discovery, prediction, experiment, insight, business lesson, development, failure, success, counter-intuition, explanation, humor and demo archetypes. Sixteen archetype sketches support a complete root post.",
        "on_screen_text": [
          "Build the standalone post",
          "Sixteen archetype sketches support a complete root post."
        ],
        "screen_recording_instructions": [
          "Draft hook, two context sentences and a low-friction question. Try observation, question, lesson, opinion, discovery, prediction, experiment, insight, business lesson, development, failure, success, counter-intuition, explanation, humor and demo archetypes.",
          "Inspect the result: Sixteen archetype sketches support a complete root post.",
          "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": [
          "Sixteen archetype sketches support a complete root post."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Draft hook, two context sentences and a low-friction question. Try observation, question, lesson, opinion, discovery, prediction, experiment, insight, business lesson, development, failure, success, counter-intuition, explanation, humor and demo archetypes.",
          "Sixteen archetype sketches support a complete root post."
        ]
      },
      "step_id": "L08-S01",
      "lesson_id": "L08"
    },
    {
      "title": "Compare the same-topic post pair",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. This is a controlled same-topic exercise; no publication result is assumed.",
      "user_action": "Open studio.html and compare A/B for the same short science-fiction choice. Preserve the reading mood and format; add length, tone and explicit genre without sounding like a database card.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. This is a controlled same-topic exercise; no publication result is assumed.",
      "estimated_time": "12 min",
      "action_type": "inspect",
      "commands": {
        "all": ""
      },
      "command_type": "shell",
      "required_inputs": [
        "studio.html",
        "versions.json"
      ],
      "expected_result": "Both versions keep an authentic reading question and B has usable criteria.",
      "resources": [
        "studio.html",
        "versions.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Compare the same-topic post pair",
        "success_condition": "Both versions keep an authentic reading question and B has usable criteria.",
        "how_to_verify": "Record both versions keep an authentic reading question and B has usable criteria. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Both versions keep an authentic reading question and B has usable criteria.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Both versions keep an authentic reading question and B has usable criteria.",
        "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 compare the same-topic post pair?",
          "answer": "Both versions keep an authentic reading question and B has usable criteria. 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 compare the same-topic post pair. Both versions keep an authentic reading question and B has usable criteria.",
        "demo": "Open studio.html and compare A/B for the same short science-fiction choice. Preserve the reading mood and format; add length, tone and explicit genre without sounding like a database card.",
        "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 compare the same-topic post pair",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Open studio.html and compare A/B for the same short science-fiction choice. Preserve the reading mood and format; add length, tone and explicit genre without sounding like a database card. Both versions keep an authentic reading question and B has usable criteria.",
        "on_screen_text": [
          "Compare the same-topic post pair",
          "Both versions keep an authentic reading question and B has usable criteria."
        ],
        "screen_recording_instructions": [
          "Open studio.html and compare A/B for the same short science-fiction choice. Preserve the reading mood and format; add length, tone and explicit genre without sounding like a database card.",
          "Inspect the result: Both versions keep an authentic reading question and B has usable criteria.",
          "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": [
          "Both versions keep an authentic reading question and B has usable criteria."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Open studio.html and compare A/B for the same short science-fiction choice. Preserve the reading mood and format; add length, tone and explicit genre without sounding like a database card.",
          "Both versions keep an authentic reading question and B has usable criteria."
        ]
      },
      "step_id": "L09-S01",
      "lesson_id": "L09"
    },
    {
      "title": "Write three constructive replies",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Draft one specific reading experience, one clarifying question and one respectful counterpoint. Keep any unread-book claim out of your reply; do not invent personal experience.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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 contribute rather than market a link.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Write three constructive replies",
        "success_condition": "Three replies contribute rather than market a link.",
        "how_to_verify": "Record three replies contribute rather than market a link. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Three replies contribute rather than market a link.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Three replies contribute rather than market a link.",
        "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 three constructive replies?",
          "answer": "Three replies contribute rather than market a link. 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 three constructive replies. Three replies contribute rather than market a link.",
        "demo": "Draft one specific reading experience, one clarifying question and one respectful counterpoint. Keep any unread-book claim out of your reply; do not invent personal experience.",
        "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 three constructive replies",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Draft one specific reading experience, one clarifying question and one respectful counterpoint. Keep any unread-book claim out of your reply; do not invent personal experience. Three replies contribute rather than market a link.",
        "on_screen_text": [
          "Write three constructive replies",
          "Three replies contribute rather than market a link."
        ],
        "screen_recording_instructions": [
          "Draft one specific reading experience, one clarifying question and one respectful counterpoint. Keep any unread-book claim out of your reply; do not invent personal experience.",
          "Inspect the result: Three replies contribute rather than market a link.",
          "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 contribute rather than market a link."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Draft one specific reading experience, one clarifying question and one respectful counterpoint. Keep any unread-book claim out of your reply; do not invent personal experience.",
          "Three replies contribute rather than market a link."
        ]
      },
      "step_id": "L10-S01",
      "lesson_id": "L10"
    },
    {
      "title": "Design seven honest question types",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Try a specific ask, challenge, comparison, experiment, reveal, lesson and humility invite on the same reading topic. Pick the question easiest for a reader to answer from actual experience.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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 prompts avoid engagement bait and invented consensus.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Design seven honest question types",
        "success_condition": "Seven prompts avoid engagement bait and invented consensus.",
        "how_to_verify": "Record seven prompts avoid engagement bait and invented consensus. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Seven prompts avoid engagement bait and invented consensus.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Seven prompts avoid engagement bait and invented consensus.",
        "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 seven honest question types?",
          "answer": "Seven prompts avoid engagement bait and invented consensus. 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 seven honest question types. Seven prompts avoid engagement bait and invented consensus.",
        "demo": "Try a specific ask, challenge, comparison, experiment, reveal, lesson and humility invite on the same reading topic. Pick the question easiest for a reader to answer from actual experience.",
        "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 seven honest question types",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Try a specific ask, challenge, comparison, experiment, reveal, lesson and humility invite on the same reading topic. Pick the question easiest for a reader to answer from actual experience. Seven prompts avoid engagement bait and invented consensus.",
        "on_screen_text": [
          "Design seven honest question types",
          "Seven prompts avoid engagement bait and invented consensus."
        ],
        "screen_recording_instructions": [
          "Try a specific ask, challenge, comparison, experiment, reveal, lesson and humility invite on the same reading topic. Pick the question easiest for a reader to answer from actual experience.",
          "Inspect the result: Seven prompts avoid engagement bait and invented consensus.",
          "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 prompts avoid engagement bait and invented consensus."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Try a specific ask, challenge, comparison, experiment, reveal, lesson and humility invite on the same reading topic. Pick the question easiest for a reader to answer from actual experience.",
          "Seven prompts avoid engagement bait and invented consensus."
        ]
      },
      "step_id": "L11-S01",
      "lesson_id": "L11"
    },
    {
      "title": "Verify topic placement",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Check relevance, valid syntax, active discussion, useful discovery and tone for a currently available reading topic. Topic tags are not a license to attach irrelevant trends or imply permanent knowledge ingestion.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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 five-point gate explains a specific topic choice.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Verify topic placement",
        "success_condition": "A five-point gate explains a specific topic choice.",
        "how_to_verify": "Record a five-point gate explains a specific topic choice. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A five-point gate explains a specific topic choice.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A five-point gate explains a specific topic choice.",
        "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 verify topic placement?",
          "answer": "A five-point gate explains a specific topic choice. 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 verify topic placement. A five-point gate explains a specific topic choice.",
        "demo": "Check relevance, valid syntax, active discussion, useful discovery and tone for a currently available reading topic. Topic tags are not a license to attach irrelevant trends or imply permanent knowledge ingestion.",
        "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 topic placement",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Check relevance, valid syntax, active discussion, useful discovery and tone for a currently available reading topic. Topic tags are not a license to attach irrelevant trends or imply permanent knowledge ingestion. A five-point gate explains a specific topic choice.",
        "on_screen_text": [
          "Verify topic placement",
          "A five-point gate explains a specific topic choice."
        ],
        "screen_recording_instructions": [
          "Check relevance, valid syntax, active discussion, useful discovery and tone for a currently available reading topic. Topic tags are not a license to attach irrelevant trends or imply permanent knowledge ingestion.",
          "Inspect the result: A five-point gate explains a specific topic choice.",
          "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 five-point gate explains a specific topic choice."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Check relevance, valid syntax, active discussion, useful discovery and tone for a currently available reading topic. Topic tags are not a license to attach irrelevant trends or imply permanent knowledge ingestion.",
          "A five-point gate explains a specific topic choice."
        ]
      },
      "step_id": "L12-S01",
      "lesson_id": "L12"
    },
    {
      "title": "Choose between four text formats",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Compare a root under 500 characters, root plus attachment, connected sequence and canonical reference. Check attachment availability and current limits; distinguish the brief’s 10,000-character figure from a tested account feature.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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": "Four format options have a reason and a verification note.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Choose between four text formats",
        "success_condition": "Four format options have a reason and a verification note.",
        "how_to_verify": "Record four format options have a reason and a verification note. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Four format options have a reason and a verification note.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Four format options have a reason and a verification note.",
        "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 between four text formats?",
          "answer": "Four format options have a reason and a verification note. 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 between four text formats. Four format options have a reason and a verification note.",
        "demo": "Compare a root under 500 characters, root plus attachment, connected sequence and canonical reference. Check attachment availability and current limits; distinguish the brief’s 10,000-character figure from a tested account feature.",
        "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 between four text formats",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Compare a root under 500 characters, root plus attachment, connected sequence and canonical reference. Check attachment availability and current limits; distinguish the brief’s 10,000-character figure from a tested account feature. Four format options have a reason and a verification note.",
        "on_screen_text": [
          "Choose between four text formats",
          "Four format options have a reason and a verification note."
        ],
        "screen_recording_instructions": [
          "Compare a root under 500 characters, root plus attachment, connected sequence and canonical reference. Check attachment availability and current limits; distinguish the brief’s 10,000-character figure from a tested account feature.",
          "Inspect the result: Four format options have a reason and a verification note.",
          "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 format options have a reason and a verification note."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Compare a root under 500 characters, root plus attachment, connected sequence and canonical reference. Check attachment availability and current limits; distinguish the brief’s 10,000-character figure from a tested account feature.",
          "Four format options have a reason and a verification note."
        ]
      },
      "step_id": "L13-S01",
      "lesson_id": "L13"
    },
    {
      "title": "Write an eight-post narrative",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Build hook, context, problem, discovery, explanation, example, implication and open question. Keep each post useful alone and under the practice character limit.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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": "Eight standalone posts form a coherent reading conversation.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Write an eight-post narrative",
        "success_condition": "Eight standalone posts form a coherent reading conversation.",
        "how_to_verify": "Record eight standalone posts form a coherent reading conversation. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Eight standalone posts form a coherent reading conversation.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Eight standalone posts form a coherent reading conversation.",
        "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 an eight-post narrative?",
          "answer": "Eight standalone posts form a coherent reading conversation. 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 an eight-post narrative. Eight standalone posts form a coherent reading conversation.",
        "demo": "Build hook, context, problem, discovery, explanation, example, implication and open question. Keep each post useful alone and under the practice character limit.",
        "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 an eight-post narrative",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Build hook, context, problem, discovery, explanation, example, implication and open question. Keep each post useful alone and under the practice character limit. Eight standalone posts form a coherent reading conversation.",
        "on_screen_text": [
          "Write an eight-post narrative",
          "Eight standalone posts form a coherent reading conversation."
        ],
        "screen_recording_instructions": [
          "Build hook, context, problem, discovery, explanation, example, implication and open question. Keep each post useful alone and under the practice character limit.",
          "Inspect the result: Eight standalone posts form a coherent reading conversation.",
          "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": [
          "Eight standalone posts form a coherent reading conversation."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Build hook, context, problem, discovery, explanation, example, implication and open question. Keep each post useful alone and under the practice character limit.",
          "Eight standalone posts form a coherent reading conversation."
        ]
      },
      "step_id": "L14-S01",
      "lesson_id": "L14"
    },
    {
      "title": "Build in public without invented progress",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Describe a real reading-choice experiment or explicitly keep the fixture synthetic. Plan what changed, what failed and what you learned instead of a fabricated success announcement.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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 builder-style update contains an honest observation boundary.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Build in public without invented progress",
        "success_condition": "A builder-style update contains an honest observation boundary.",
        "how_to_verify": "Record a builder-style update contains an honest observation boundary. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A builder-style update contains an honest observation boundary.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A builder-style update contains an honest observation boundary.",
        "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 build in public without invented progress?",
          "answer": "A builder-style update contains an honest observation boundary. 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 build in public without invented progress. A builder-style update contains an honest observation boundary.",
        "demo": "Describe a real reading-choice experiment or explicitly keep the fixture synthetic. Plan what changed, what failed and what you learned instead of a fabricated success announcement.",
        "handoff": "Try this in your own practice workspace, then compare the result.",
        "success": "Keep that result with your evidence.",
        "failure": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
        "help": "What is the current directory, exact command, exit code and complete output?"
      },
      "video": {
        "purpose": "Demonstrate build in public without invented progress",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Describe a real reading-choice experiment or explicitly keep the fixture synthetic. Plan what changed, what failed and what you learned instead of a fabricated success announcement. A builder-style update contains an honest observation boundary.",
        "on_screen_text": [
          "Build in public without invented progress",
          "A builder-style update contains an honest observation boundary."
        ],
        "screen_recording_instructions": [
          "Describe a real reading-choice experiment or explicitly keep the fixture synthetic. Plan what changed, what failed and what you learned instead of a fabricated success announcement.",
          "Inspect the result: A builder-style update contains an honest observation boundary.",
          "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 builder-style update contains an honest observation boundary."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Describe a real reading-choice experiment or explicitly keep the fixture synthetic. Plan what changed, what failed and what you learned instead of a fabricated success announcement.",
          "A builder-style update contains an honest observation boundary."
        ]
      },
      "step_id": "L15-S01",
      "lesson_id": "L15"
    },
    {
      "title": "Make the conversation retrievable",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Name genre, format, reader preference and question in a standalone answer. Draft roughly 256-token-sized companion chunks where suitable; chunk size is a design choice, not a universal optimal embedding length.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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": "An extracted chunk retains context and source.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Make the conversation retrievable",
        "success_condition": "An extracted chunk retains context and source.",
        "how_to_verify": "Record an extracted chunk retains context and source. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "An extracted chunk retains context and source.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. An extracted chunk retains context and source.",
        "failure_message": "Compare the observed output with the required result before continuing.",
        "troubleshooting_path": "Open the help for this step."
      },
      "troubleshooting": [
        {
          "problem": "The result differs from the checkpoint",
          "likely_cause": "You may be in a different folder or using a different input/version.",
          "diagnostic_question": "What is the current directory, exact command, exit code and complete output?",
          "fix": "Compare the input filename and working directory with this step. Rerun only after correcting that difference.",
          "alternative_fix": "Open the supplied resource and inspect the input manually; use the expected-result example to narrow the difference.",
          "when_to_escalate": "Stop after two explained attempts if the problem needs account access, permissions or changes outside this workspace. Share redacted evidence.",
          "bot_coach_response": "Compare the input filename and working directory with this step. Rerun only after correcting that difference."
        }
      ],
      "faqs": [
        {
          "question": "What is a useful result for make the conversation retrievable?",
          "answer": "An extracted chunk retains context and source. 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 conversation retrievable. An extracted chunk retains context and source.",
        "demo": "Name genre, format, reader preference and question in a standalone answer. Draft roughly 256-token-sized companion chunks where suitable; chunk size is a design choice, not a universal optimal embedding length.",
        "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 conversation retrievable",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Name genre, format, reader preference and question in a standalone answer. Draft roughly 256-token-sized companion chunks where suitable; chunk size is a design choice, not a universal optimal embedding length. An extracted chunk retains context and source.",
        "on_screen_text": [
          "Make the conversation retrievable",
          "An extracted chunk retains context and source."
        ],
        "screen_recording_instructions": [
          "Name genre, format, reader preference and question in a standalone answer. Draft roughly 256-token-sized companion chunks where suitable; chunk size is a design choice, not a universal optimal embedding length.",
          "Inspect the result: An extracted chunk retains context and source.",
          "Record the evidence and check each criterion."
        ],
        "animation_instructions": "Highlight the action, then the corresponding result; avoid motion during command copying.",
        "cursor_instructions": "Point to the exact input and checkpoint; do not hide errors.",
        "important_visuals": [
          "An extracted chunk retains context and source."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Name genre, format, reader preference and question in a standalone answer. Draft roughly 256-token-sized companion chunks where suitable; chunk size is a design choice, not a universal optimal embedding length.",
          "An extracted chunk retains context and source."
        ]
      },
      "step_id": "L16-S01",
      "lesson_id": "L16"
    },
    {
      "title": "Close the conversational flywheel",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Use three synthetic replies to record a new question, counterexample and correction. Route discussion → extraction → canonical object → updated course → native redistributions. Preserve real-member permissions.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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 labeled observations improve the source object.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Close the conversational flywheel",
        "success_condition": "Three labeled observations improve the source object.",
        "how_to_verify": "Record three labeled observations improve the source object. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Three labeled observations improve the source object.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Three labeled observations improve the source object.",
        "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 close the conversational flywheel?",
          "answer": "Three labeled observations improve the source object. 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 close the conversational flywheel. Three labeled observations improve the source object.",
        "demo": "Use three synthetic replies to record a new question, counterexample and correction. Route discussion → extraction → canonical object → updated course → native redistributions. Preserve real-member permissions.",
        "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 close the conversational flywheel",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Use three synthetic replies to record a new question, counterexample and correction. Route discussion → extraction → canonical object → updated course → native redistributions. Preserve real-member permissions. Three labeled observations improve the source object.",
        "on_screen_text": [
          "Close the conversational flywheel",
          "Three labeled observations improve the source object."
        ],
        "screen_recording_instructions": [
          "Use three synthetic replies to record a new question, counterexample and correction. Route discussion → extraction → canonical object → updated course → native redistributions. Preserve real-member permissions.",
          "Inspect the result: Three labeled observations improve the source object.",
          "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 labeled observations improve the source object."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Use three synthetic replies to record a new question, counterexample and correction. Route discussion → extraction → canonical object → updated course → native redistributions. Preserve real-member permissions.",
          "Three labeled observations improve the source object."
        ]
      },
      "step_id": "L17-S01",
      "lesson_id": "L17"
    },
    {
      "title": "Recompose six platform sources",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Transform YouTube finding, TikTok moment, Instagram image, Reddit consensus, LinkedIn lesson and Pinterest plan into six text-led Threads prompts. Credit actual sources when used; no automated syndication dump.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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 adaptations supply interesting context and a reason to reply.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Recompose six platform sources",
        "success_condition": "Six adaptations supply interesting context and a reason to reply.",
        "how_to_verify": "Record six adaptations supply interesting context and a reason to reply. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Six adaptations supply interesting context and a reason to reply.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Six adaptations supply interesting context and a reason to reply.",
        "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 six platform sources?",
          "answer": "Six adaptations supply interesting context and a reason to reply. 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 six platform sources. Six adaptations supply interesting context and a reason to reply.",
        "demo": "Transform YouTube finding, TikTok moment, Instagram image, Reddit consensus, LinkedIn lesson and Pinterest plan into six text-led Threads prompts. Credit actual sources when used; no automated syndication dump.",
        "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 six platform sources",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Transform YouTube finding, TikTok moment, Instagram image, Reddit consensus, LinkedIn lesson and Pinterest plan into six text-led Threads prompts. Credit actual sources when used; no automated syndication dump. Six adaptations supply interesting context and a reason to reply.",
        "on_screen_text": [
          "Recompose six platform sources",
          "Six adaptations supply interesting context and a reason to reply."
        ],
        "screen_recording_instructions": [
          "Transform YouTube finding, TikTok moment, Instagram image, Reddit consensus, LinkedIn lesson and Pinterest plan into six text-led Threads prompts. Credit actual sources when used; no automated syndication dump.",
          "Inspect the result: Six adaptations supply interesting context and a reason to reply.",
          "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 adaptations supply interesting context and a reason to reply."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Transform YouTube finding, TikTok moment, Instagram image, Reddit consensus, LinkedIn lesson and Pinterest plan into six text-led Threads prompts. Credit actual sources when used; no automated syndication dump.",
          "Six adaptations supply interesting context and a reason to reply."
        ]
      },
      "step_id": "L18-S01",
      "lesson_id": "L18"
    },
    {
      "title": "Plan honest CTAs and Insights",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Compare reply, quote, repost, follow and bookmark prompts. Define views, reply velocity, quotes, profile/link clicks and available video metrics; unavailable fields remain unknown.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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 CTA choice and metric dictionary match the conversation goal.",
      "resources": [
        "native-production.md",
        "native.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Plan honest CTAs and Insights",
        "success_condition": "A CTA choice and metric dictionary match the conversation goal.",
        "how_to_verify": "Record a CTA choice and metric dictionary match the conversation goal. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "A CTA choice and metric dictionary match the conversation goal.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. A CTA choice and metric dictionary match the conversation goal.",
        "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 honest ctas and insights?",
          "answer": "A CTA choice and metric dictionary match the conversation goal. 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 honest CTAs and Insights. A CTA choice and metric dictionary match the conversation goal.",
        "demo": "Compare reply, quote, repost, follow and bookmark prompts. Define views, reply velocity, quotes, profile/link clicks and available video metrics; unavailable fields 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 plan honest ctas and insights",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Compare reply, quote, repost, follow and bookmark prompts. Define views, reply velocity, quotes, profile/link clicks and available video metrics; unavailable fields remain unknown. A CTA choice and metric dictionary match the conversation goal.",
        "on_screen_text": [
          "Plan honest CTAs and Insights",
          "A CTA choice and metric dictionary match the conversation goal."
        ],
        "screen_recording_instructions": [
          "Compare reply, quote, repost, follow and bookmark prompts. Define views, reply velocity, quotes, profile/link clicks and available video metrics; unavailable fields remain unknown.",
          "Inspect the result: A CTA choice and metric dictionary match the conversation goal.",
          "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 CTA choice and metric dictionary match the conversation goal."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Compare reply, quote, repost, follow and bookmark prompts. Define views, reply velocity, quotes, profile/link clicks and available video metrics; unavailable fields remain unknown.",
          "A CTA choice and metric dictionary match the conversation goal."
        ]
      },
      "step_id": "L19-S01",
      "lesson_id": "L19"
    },
    {
      "title": "Specify experiments and ten-stage factory",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Test hook, text/media, topic, format and timing separately. Map source validation, audience, extraction, idea, native draft, media, topic, review, publication decision and logged feedback.",
      "explanation": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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": "Five controlled tests and ten stages have evidence and stop rules.",
      "resources": [
        "experiments.md",
        "metrics.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Specify experiments and ten-stage factory",
        "success_condition": "Five controlled tests and ten stages have evidence and stop rules.",
        "how_to_verify": "Record five controlled tests and ten stages have evidence and stop rules. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "Five controlled tests and ten stages have evidence and stop rules.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. Five controlled tests and ten stages have evidence and stop 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 specify experiments and ten-stage factory?",
          "answer": "Five controlled tests and ten stages have evidence and stop 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 specify experiments and ten-stage factory. Five controlled tests and ten stages have evidence and stop rules.",
        "demo": "Test hook, text/media, topic, format and timing separately. Map source validation, audience, extraction, idea, native draft, media, topic, review, publication decision and logged feedback.",
        "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 experiments and ten-stage factory",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Test hook, text/media, topic, format and timing separately. Map source validation, audience, extraction, idea, native draft, media, topic, review, publication decision and logged feedback. Five controlled tests and ten stages have evidence and stop rules.",
        "on_screen_text": [
          "Specify experiments and ten-stage factory",
          "Five controlled tests and ten stages have evidence and stop rules."
        ],
        "screen_recording_instructions": [
          "Test hook, text/media, topic, format and timing separately. Map source validation, audience, extraction, idea, native draft, media, topic, review, publication decision and logged feedback.",
          "Inspect the result: Five controlled tests and ten stages have evidence and stop 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": [
          "Five controlled tests and ten stages have evidence and stop rules."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Test hook, text/media, topic, format and timing separately. Map source validation, audience, extraction, idea, native draft, media, topic, review, publication decision and logged feedback.",
          "Five controlled tests and ten stages have evidence and stop rules."
        ]
      },
      "step_id": "L20-S01",
      "lesson_id": "L20"
    },
    {
      "title": "Complete seventeen gates and nineteen actions",
      "purpose": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. Keep the saved artifact and a specific observation together.",
      "user_action": "Write seventeen checks covering source, audience, platform fit, discussion, topic, media, format, context, standalone value, entities, CTA, limits, truth labels, attribution, quality, measurement and feedback. Produce a nineteen-action draft capstone from object to native conversation and recomposition. 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": "Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic. 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",
        "AGENT_OPERATING_MANUAL.md",
        "agent-training.json"
      ],
      "expected_result": "The approval record has seventeen answered checks and nineteen capstone actions.",
      "resources": [
        "native-production.md",
        "native.json",
        "AGENT_OPERATING_MANUAL.md",
        "agent-training.json"
      ],
      "checkpoint": {
        "what_is_being_checked": "Complete seventeen gates and nineteen actions",
        "success_condition": "The approval record has seventeen answered checks and nineteen capstone actions.",
        "how_to_verify": "Record the approval record has seventeen answered checks and nineteen capstone actions. Include the actual result or a specific observation; do not paste credentials.",
        "criteria": [
          "The approval record has seventeen answered checks and nineteen capstone actions.",
          "I can repeat this action from the saved input."
        ],
        "tokens": [],
        "user_visible_success_message": "Evidence saved. The approval record has seventeen answered checks and nineteen capstone actions.",
        "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 complete seventeen gates and nineteen actions?",
          "answer": "The approval record has seventeen answered checks and nineteen capstone actions. 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 complete seventeen gates and nineteen actions. The approval record has seventeen answered checks and nineteen capstone actions.",
        "demo": "Write seventeen checks covering source, audience, platform fit, discussion, topic, media, format, context, standalone value, entities, CTA, limits, truth labels, attribution, quality, measurement and feedback. Produce a nineteen-action draft capstone from object to native conversation and recomposition. 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 complete seventeen gates and nineteen actions",
        "duration_target": "45–75 seconds",
        "visual_type": "step walkthrough with optional browser narration; no rendered video is claimed",
        "narration_script": "Write seventeen checks covering source, audience, platform fit, discussion, topic, media, format, context, standalone value, entities, CTA, limits, truth labels, attribution, quality, measurement and feedback. Produce a nineteen-action draft capstone from object to native conversation and recomposition. 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. The approval record has seventeen answered checks and nineteen capstone actions.",
        "on_screen_text": [
          "Complete seventeen gates and nineteen actions",
          "The approval record has seventeen answered checks and nineteen capstone actions."
        ],
        "screen_recording_instructions": [
          "Write seventeen checks covering source, audience, platform fit, discussion, topic, media, format, context, standalone value, entities, CTA, limits, truth labels, attribution, quality, measurement and feedback. Produce a nineteen-action draft capstone from object to native conversation and recomposition. 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: The approval record has seventeen answered checks and nineteen capstone actions.",
          "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 approval record has seventeen answered checks and nineteen capstone actions."
        ],
        "bot_position": "right sidebar",
        "bot_expression": "calm",
        "transition": "Continue after checkpoint",
        "captions": [
          "Write seventeen checks covering source, audience, platform fit, discussion, topic, media, format, context, standalone value, entities, CTA, limits, truth labels, attribution, quality, measurement and feedback. Produce a nineteen-action draft capstone from object to native conversation and recomposition. 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.",
          "The approval record has seventeen answered checks and nineteen capstone actions."
        ]
      },
      "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 makes a science fiction recommendation question easier to answer?\"\npython media_pack.py retrieve --query \"quasar waffle weather\"",
        "macos": "python3 media_pack.py retrieve --query \"What context makes a science fiction recommendation question easier to answer?\"\npython3 media_pack.py retrieve --query \"quasar waffle weather\"",
        "linux": "python3 media_pack.py retrieve --query \"What context makes a science fiction recommendation question easier to answer?\"\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>Threads draft studio</h1><p>Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.</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\": \"Short science-fiction reading choices\", \"format\": \"standalone conversational post\", \"text\": \"In a reading slump again. Everything feels so long lately. What should I pick up next?\"}, \"B\": {\"topic\": \"Short science-fiction reading choices\", \"format\": \"standalone conversational post\", \"text\": \"I am choosing a science fiction novella for a weekend reading reset. I want hopeful world-building and a short commitment, rather than a long series. Which novella did you finish and keep thinking about, and what made the tone work for you?\"}}, dimensions=[\"Conversational value\", \"Native fit\", \"Reply invitation\", \"Topic relevance\", \"Context\", \"Semantic clarity\", \"Knowledge reuse\", \"Media utility\", \"Provenance\", \"Learning loop\"];\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=[\"science fiction\", \"novella\"];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\": \"Short science-fiction reading choices\",\n    \"format\": \"standalone conversational post\",\n    \"text\": \"In a reading slump again. Everything feels so long lately. What should I pick up next?\"\n  },\n  \"B\": {\n    \"topic\": \"Short science-fiction reading choices\",\n    \"format\": \"standalone conversational post\",\n    \"text\": \"I am choosing a science fiction novella for a weekend reading reset. I want hopeful world-building and a short commitment, rather than a long series. Which novella did you finish and keep thinking about, and what made the tone work for you?\"\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\": \"threads\",\n  \"topic\": \"Short science-fiction reading choices\",\n  \"question\": \"What context makes a science fiction recommendation question easier to answer?\",\n  \"answer\": \"A science fiction recommendation question should name the reader’s preferred length and tone. Asking for a novella with hopeful world-building gives respondents more useful criteria than asking for any book.\",\n  \"context\": \"Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.\",\n  \"example\": \"Synthetic teaching example; replace with a checked observation before public use.\",\n  \"entities\": [\n    \"science fiction\",\n    \"novella\"\n  ],\n  \"sources\": [\n    \"https://about.fb.com/news/2024/10/find-your-community-with-new-threads-educational-insights/\"\n  ],\n  \"related_topics\": [\n    \"reading communities\",\n    \"recommendation questions\"\n  ],\n  \"keywords\": [\n    \"science fiction\",\n    \"novella\"\n  ],\n  \"language\": \"en\",\n  \"author\": \"chatgpt_codex teaching fixture\",\n  \"date\": \"2026-10-06\",\n  \"next_action\": \"Review two real reading discussions and ask a specific question with your own genuine preferences.\"\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\": \"threads-1\", \"entity\": \"science fiction\", \"question\": \"What context makes a science fiction recommendation question easier to answer?\", \"answer\": \"A science fiction recommendation question should name the reader’s preferred length and tone. Asking for a novella with hopeful world-building gives respondents more useful criteria than asking for any book.\", \"source\": \"https://about.fb.com/news/2024/10/find-your-community-with-new-threads-educational-insights/\"}\n{\"id\": \"threads-2\", \"entity\": \"science fiction\", \"question\": \"What should the science fiction audience do next?\", \"answer\": \"science fiction: Review two real reading discussions and ask a specific question with your own genuine preferences.\", \"source\": \"https://about.fb.com/news/2024/10/find-your-community-with-new-threads-educational-insights/\"}\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    \"Conversational value\",\n    \"Native fit\",\n    \"Reply invitation\",\n    \"Topic relevance\",\n    \"Context\",\n    \"Semantic clarity\",\n    \"Knowledge reuse\",\n    \"Media utility\",\n    \"Provenance\",\n    \"Learning loop\"\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  \"topic\": \"Reading, verify available tag\",\n  \"root_max_for_practice\": 500,\n  \"media\": \"optional cover image with permission\",\n  \"attachment\": \"optional reading criteria note\",\n  \"reply_policy\": \"contribute actual reading experience\"\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\": \"Meta reports that replies account for almost half of Threads views.\",\n      \"label\": \"ESTABLISHED\",\n      \"source\": \"https://about.fb.com/news/2024/10/find-your-community-with-new-threads-educational-insights/\",\n      \"checked\": \"2026-10-06\"\n    },\n    {\n      \"claim\": \"A length-and-tone question will elicit more relevant book replies than a generic reading-slump prompt.\",\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\": \"Short science-fiction reading choices\",\n  \"format\": \"standalone conversational post\",\n  \"primary_metric\": \"relevant replies per view within a predeclared window\",\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\": \"Threads Content Agent\",\n  \"topic\": \"Short science-fiction reading choices\",\n  \"operating_points\": {\n    \"01_platform_identity\": \"Threads Content Agent; create native standalone conversational post drafts rather than swapping platform labels.\",\n    \"02_audience\": \"Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.\",\n    \"03_content_graph\": {\n      \"format\": \"standalone conversational post\",\n      \"topic\": \"Short science-fiction reading choices\",\n      \"alternatives\": \"First native surface/format exercises and native.json.\"\n    },\n    \"04_distribution_graph\": \"Root posts, replies, quotes, reposts, topic discovery and follower/For You contexts support conversation.\",\n    \"05_algorithm\": {\n      \"source\": \"https://about.fb.com/news/2024/10/find-your-community-with-new-threads-educational-insights/\",\n      \"documented_claim\": \"Meta reports that replies account for almost half of Threads views.\",\n      \"private_weights\": \"UNKNOWN; never fabricate weights, thresholds or penalties.\"\n    },\n    \"06_engagement_graph\": {\n      \"actions\": [\n        \"Reply with specific reading experience\",\n        \"Quote with a thoughtful alternative\",\n        \"Repost for relevant readers\",\n        \"Follow the discussion\"\n      ],\n      \"useful_metric\": \"relevant replies per view within a predeclared window\",\n      \"valuation\": \"Predeclare useful outcomes and denominators; no fabricated platform point values.\"\n    },\n    \"07_native_formats\": {\n      \"topic\": \"Reading, verify available tag\",\n      \"root_max_for_practice\": 500,\n      \"media\": \"optional cover image with permission\",\n      \"attachment\": \"optional reading criteria note\",\n      \"reply_policy\": \"contribute actual reading experience\"\n    },\n    \"08_creative_language\": \"Approachable and text-led; context plus a genuine question, no invented reading experience or irrelevant topic tags.\",\n    \"09_cta_system\": [\n      \"Reply with specific reading experience\",\n      \"Quote with a thoughtful alternative\",\n      \"Repost for relevant readers\",\n      \"Follow the discussion\"\n    ],\n    \"10_search\": {\n      \"entities\": [\n        \"science fiction\",\n        \"novella\"\n      ],\n      \"query\": \"What context makes a science fiction recommendation question easier to answer?\",\n      \"task\": \"Observe current queries and record date/access limits before writing metadata.\"\n    },\n    \"11_platform_ai\": {\n      \"description\": \"Meta’s creator insights document reply-related discovery and format guidance. They do not establish a creator-controlled ingestion switch or per-post AI-summary guarantee. Verify actual account capabilities before naming them.\",\n      \"source\": \"https://about.fb.com/news/2024/10/find-your-community-with-new-threads-educational-insights/\",\n      \"checked\": \"2026-10-06\",\n      \"status\": \"Documented description; actual account availability/execution UNVERIFIED.\"\n    },\n    \"12_ai_discovery\": {\n      \"input_output\": \"Conversation/engagement context → recommended discovery; classifier internals and a dedicated AI-answer feature are not established here.\",\n      \"rule\": \"Do not promise a private model will parse, recommend, cite or train on the object.\"\n    },\n    \"13_multimodal\": {\n      \"entities\": [\n        \"science fiction\",\n        \"novella\"\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\": \"standalone conversational post\",\n      \"hypothesis\": \"A length-and-tone question will elicit more relevant book replies than a generic reading-slump prompt.\",\n      \"status\": \"UNTESTED for this draft; empirical superiority not claimed.\"\n    },\n    \"16_failure_modes\": \"Approachable and text-led; context plus a genuine question, no invented reading experience or irrelevant topic tags. 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\": \"relevant replies per view within a predeclared window\",\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# Threads Content Agent operating manual\n\nAudience: Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.\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: Reply with specific reading experience → Quote with a thoughtful alternative → Repost for relevant readers → Follow the discussion\n\nNative AI: Meta’s creator insights document reply-related discovery and format guidance. They do not establish a creator-controlled ingestion switch or per-post AI-summary guarantee. Verify actual account capabilities before naming them.\nPrimary source: https://about.fb.com/news/2024/10/find-your-community-with-new-threads-educational-insights/\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# Threads audience\n\nTopic: Short science-fiction reading choices\nAudience: Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.\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## Map the five Threads identities\nDescribe conversation, discovery, interest network, text/media publishing and community building. Inventory posts, replies, quotes, topics, profiles, feeds, search, media, links, attachments and Insights.\n\nYour artifact / evidence:\n\n## Observe real reading conversations\nReview two public reading threads and the official creator insights. Record specific questions, reply quality and topic placement. Do not treat a niche community as the universal number-one platform use.\n\nYour artifact / evidence:\n\n## Design conversation before broadcast\nDraw post → reply → conversation → discovery. Explain Meta’s reply observation as a reported aggregate, not a promise about this draft’s reach. Choose a useful answer target rather than like bait.\n\nYour artifact / evidence:\n\n## Adapt from X and Instagram thoughtfully\nTransform a terse X opinion and a decorative Instagram book photo into a text-led reading question. Run the media utility test: include a cover only when it clarifies the specific book discussion.\n\nYour artifact / evidence:\n\n## Choose native video or a direct reference\nCompare a 30-second reading reaction, a silent flip-through and an external full review. Check current upload limits in the composer; the brief’s five-minute example needs current verification. Do not assert an unexplained external-link penalty.\n\nYour artifact / evidence:\n\n## Add useful context to media\nWrite matched speech, overlay and root text for a book recommendation clip. Explain the reading criteria even when the viewer does not play the video.\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# Threads native-production\n\nTopic: Short science-fiction reading choices\nAudience: Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.\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## Map the five Threads identities\nDescribe conversation, discovery, interest network, text/media publishing and community building. Inventory posts, replies, quotes, topics, profiles, feeds, search, media, links, attachments and Insights.\n\nYour artifact / evidence:\n\n## Observe real reading conversations\nReview two public reading threads and the official creator insights. Record specific questions, reply quality and topic placement. Do not treat a niche community as the universal number-one platform use.\n\nYour artifact / evidence:\n\n## Design conversation before broadcast\nDraw post → reply → conversation → discovery. Explain Meta’s reply observation as a reported aggregate, not a promise about this draft’s reach. Choose a useful answer target rather than like bait.\n\nYour artifact / evidence:\n\n## Adapt from X and Instagram thoughtfully\nTransform a terse X opinion and a decorative Instagram book photo into a text-led reading question. Run the media utility test: include a cover only when it clarifies the specific book discussion.\n\nYour artifact / evidence:\n\n## Choose native video or a direct reference\nCompare a 30-second reading reaction, a silent flip-through and an external full review. Check current upload limits in the composer; the brief’s five-minute example needs current verification. Do not assert an unexplained external-link penalty.\n\nYour artifact / evidence:\n\n## Add useful context to media\nWrite matched speech, overlay and root text for a book recommendation clip. Explain the reading criteria even when the viewer does not play the video.\n\nYour artifact / evidence:\n\n## Build the standalone post\nDraft hook, two context sentences and a low-friction question. Try observation, question, lesson, opinion, discovery, prediction, experiment, insight, business lesson, development, failure, success, counter-intuition, explanation, humor and demo archetypes.\n\nYour artifact / evidence:\n\n## Compare the same-topic post pair\nOpen studio.html and compare A/B for the same short science-fiction choice. Preserve the reading mood and format; add length, tone and explicit genre without sounding like a database card.\n\nYour artifact / evidence:\n\n## Write three constructive replies\nDraft one specific reading experience, one clarifying question and one respectful counterpoint. Keep any unread-book claim out of your reply; do not invent personal experience.\n\nYour artifact / evidence:\n\n## Design seven honest question types\nTry a specific ask, challenge, comparison, experiment, reveal, lesson and humility invite on the same reading topic. Pick the question easiest for a reader to answer from actual experience.\n\nYour artifact / evidence:\n\n## Verify topic placement\nCheck relevance, valid syntax, active discussion, useful discovery and tone for a currently available reading topic. Topic tags are not a license to attach irrelevant trends or imply permanent knowledge ingestion.\n\nYour artifact / evidence:\n\n## Choose between four text formats\nCompare a root under 500 characters, root plus attachment, connected sequence and canonical reference. Check attachment availability and current limits; distinguish the brief’s 10,000-character figure from a tested account feature.\n\nYour artifact / evidence:\n\n## Write an eight-post narrative\nBuild hook, context, problem, discovery, explanation, example, implication and open question. Keep each post useful alone and under the practice character limit.\n\nYour artifact / evidence:\n\n## Build in public without invented progress\nDescribe a real reading-choice experiment or explicitly keep the fixture synthetic. Plan what changed, what failed and what you learned instead of a fabricated success announcement.\n\nYour artifact / evidence:\n\n## Make the conversation retrievable\nName genre, format, reader preference and question in a standalone answer. Draft roughly 256-token-sized companion chunks where suitable; chunk size is a design choice, not a universal optimal embedding length.\n\nYour artifact / evidence:\n\n## Close the conversational flywheel\nUse three synthetic replies to record a new question, counterexample and correction. Route discussion → extraction → canonical object → updated course → native redistributions. Preserve real-member permissions.\n\nYour artifact / evidence:\n\n## Recompose six platform sources\nTransform YouTube finding, TikTok moment, Instagram image, Reddit consensus, LinkedIn lesson and Pinterest plan into six text-led Threads prompts. Credit actual sources when used; no automated syndication dump.\n\nYour artifact / evidence:\n\n## Plan honest CTAs and Insights\nCompare reply, quote, repost, follow and bookmark prompts. Define views, reply velocity, quotes, profile/link clicks and available video metrics; unavailable fields remain unknown.\n\nYour artifact / evidence:\n\n## Specify experiments and ten-stage factory\nTest hook, text/media, topic, format and timing separately. Map source validation, audience, extraction, idea, native draft, media, topic, review, publication decision and logged feedback.\n\nYour artifact / evidence:\n\n## Complete seventeen gates and nineteen actions\nWrite seventeen checks covering source, audience, platform fit, discussion, topic, media, format, context, standalone value, entities, CTA, limits, truth labels, attribution, quality, measurement and feedback. Produce a nineteen-action draft capstone from object to native conversation and recomposition.\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# Threads caption\n\nTopic: Short science-fiction reading choices\nAudience: Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.\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## Choose native video or a direct reference\nCompare a 30-second reading reaction, a silent flip-through and an external full review. Check current upload limits in the composer; the brief’s five-minute example needs current verification. Do not assert an unexplained external-link penalty.\n\nYour artifact / evidence:\n\n## Add useful context to media\nWrite matched speech, overlay and root text for a book recommendation clip. Explain the reading criteria even when the viewer does not play the video.\n\nYour artifact / evidence:\n\n## Build the standalone post\nDraft hook, two context sentences and a low-friction question. Try observation, question, lesson, opinion, discovery, prediction, experiment, insight, business lesson, development, failure, success, counter-intuition, explanation, humor and demo archetypes.\n\nYour artifact / evidence:\n\n## Compare the same-topic post pair\nOpen studio.html and compare A/B for the same short science-fiction choice. Preserve the reading mood and format; add length, tone and explicit genre without sounding like a database card.\n\nYour artifact / evidence:\n\n## Choose between four text formats\nCompare a root under 500 characters, root plus attachment, connected sequence and canonical reference. Check attachment availability and current limits; distinguish the brief’s 10,000-character figure from a tested account feature.\n\nYour artifact / evidence:\n\n## Write an eight-post narrative\nBuild hook, context, problem, discovery, explanation, example, implication and open question. Keep each post useful alone and under the practice character limit.\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# Threads diagnostic-log\n\nTopic: Short science-fiction reading choices\nAudience: Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.\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## Observe real reading conversations\nReview two public reading threads and the official creator insights. Record specific questions, reply quality and topic placement. Do not treat a niche community as the universal number-one platform use.\n\nYour artifact / evidence:\n\n## Verify topic placement\nCheck relevance, valid syntax, active discussion, useful discovery and tone for a currently available reading topic. Topic tags are not a license to attach irrelevant trends or imply permanent knowledge ingestion.\n\nYour artifact / evidence:\n\n## Recompose six platform sources\nTransform YouTube finding, TikTok moment, Instagram image, Reddit consensus, LinkedIn lesson and Pinterest plan into six text-led Threads prompts. Credit actual sources when used; no automated syndication dump.\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# Threads capstone\n\nTopic: Short science-fiction reading choices\nAudience: Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.\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## Recompose six platform sources\nTransform YouTube finding, TikTok moment, Instagram image, Reddit consensus, LinkedIn lesson and Pinterest plan into six text-led Threads prompts. Credit actual sources when used; no automated syndication dump.\n\nYour artifact / evidence:\n\n## Plan honest CTAs and Insights\nCompare reply, quote, repost, follow and bookmark prompts. Define views, reply velocity, quotes, profile/link clicks and available video metrics; unavailable fields remain unknown.\n\nYour artifact / evidence:\n\n## Specify experiments and ten-stage factory\nTest hook, text/media, topic, format and timing separately. Map source validation, audience, extraction, idea, native draft, media, topic, review, publication decision and logged feedback.\n\nYour artifact / evidence:\n\n## Complete seventeen gates and nineteen actions\nWrite seventeen checks covering source, audience, platform fit, discussion, topic, media, format, context, standalone value, entities, CTA, limits, truth labels, attribution, quality, measurement and feedback. Produce a nineteen-action draft capstone from object to native conversation and recomposition.\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# Threads experiments\n\nTopic: Short science-fiction reading choices\nAudience: Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.\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## Specify experiments and ten-stage factory\nTest hook, text/media, topic, format and timing separately. Map source validation, audience, extraction, idea, native draft, media, topic, review, publication decision and logged feedback.\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 Threads\nOwn exercise: Map the five Threads identities\n\n### Part 2: The Fundamental Threads Behavior: Conversation Over Broadcast\nOwn exercise: Design conversation before broadcast\n\n### Part 3: Threads Is NOT X (Twitter)\nOwn exercise: Adapt from X and Instagram thoughtfully\n\n### Part 4: Threads Is NOT Instagram\nOwn exercise: Adapt from X and Instagram thoughtfully\n\n### Part 5: Native Video Architecture\nOwn exercise: Choose native video or a direct reference\n\n### Part 6: Video for Threads: Formats & Contextual Text\nOwn exercise: Add useful context to media\n\n### Part 7: The Anatomy of a Standalone Threads Post\nOwn exercise: Build the standalone post\n\n### Part 8: Replies Are First-Class Content\nOwn exercise: Write three constructive replies\n\n### Part 9: Conversation Design & The Prompt Architecture\nOwn exercise: Design seven honest question types\n\n### Part 10: Threads Topics: Graph Placement & Tagging\nOwn exercise: Verify topic placement\n\n### Part 11: Threads Text Attachments: Long-Form Technical Utility\nOwn exercise: Choose between four text formats\n\n### Part 12: Threads Multi-Post Sequences\nOwn exercise: Write an eight-post narrative\n\n### Part 13: Threads + Build Bots Better: Documenting the Journey\nOwn exercise: Build in public without invented progress\n\n### Part 14: Threads + AI Discovery (SI & Vector Search)\nOwn exercise: Make the conversation retrievable\n\n### Part 15: Threads as a Knowledge Network & The Flywheel\nOwn exercise: Close the conversational flywheel\n\n### Part 16: Original Threads-Native Content\nOwn exercise: Adapt from X and Instagram thoughtfully\n\n### Part 17: Cross-Platform Knowledge Transformation Matrix\nOwn exercise: Recompose six platform sources\n\n### Part 18: The Threads Call-to-Action (CTA) Architecture\nOwn exercise: Plan honest CTAs and Insights\n\n### Part 19: Analytics & Threads Insights\nOwn exercise: Plan honest CTAs and Insights\n\n### Part 20: The B3 Threads Content Score (0-100)\nOwn exercise: Use the readiness calculator; studio.html and rubric.json\n\n### Part 21: The Threads Experimentation Lab\nOwn exercise: Specify experiments and ten-stage factory\n\n### Part 22: The Threads Content Factory Pipeline\nOwn exercise: Specify experiments and ten-stage factory\n\n### Part 23: Multi-Platform Knowledge Recomposition\nOwn exercise: Recompose six platform sources\n\n### Part 24: The Threads Content Agent Operating System\nOwn exercise: Complete seventeen gates and nineteen actions\n\n### Part 25: Capstone Project: End-to-End Execution\nOwn exercise: Complete seventeen gates and nineteen actions\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\": \"Threads\",\n  \"progression\": [\n    \"Conversational appeal\",\n    \"Reply friction\",\n    \"Topic placement\",\n    \"Recommendation\",\n    \"Dual readability\",\n    \"Semantic indexing\",\n    \"Agentic retrieval\",\n    \"Future SI coordination (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\": \"Readers want an approachable book conversation and specific recommendations, not a broadcast slogan. Our example asks about short science-fiction reading choices without assuming all Threads users belong to one demographic.\",\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 standalone conversational 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 standalone conversational post for Short science-fiction reading choices, 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 standalone conversational post for Short science-fiction reading choices, 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 Threads Content for the AI, SI, and Agentic Era | BuildBotsBetter",
    "SEO_description": "A reviewed standalone conversational post for Short science-fiction reading choices, controlled A/B drafts, complete native production/capstone plans, an evidence rubric, source-linked retrieval objects and hash-checked companion resources.",
    "SEO_keywords": [
      "threads-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 Threads requirements",
      "url": "../../specs/threads-content-ai-si-agentic-era.md"
    },
    {
      "title": "Threads primary platform guidance",
      "url": "https://about.fb.com/news/2024/10/find-your-community-with-new-threads-educational-insights/"
    }
  ],
  "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 Threads",
      "### Part 2: The Fundamental Threads Behavior: Conversation Over Broadcast",
      "### Part 3: Threads Is NOT X (Twitter)",
      "### Part 4: Threads Is NOT Instagram",
      "### Part 5: Native Video Architecture",
      "### Part 6: Video for Threads: Formats & Contextual Text",
      "### Part 7: The Anatomy of a Standalone Threads Post",
      "### Part 8: Replies Are First-Class Content",
      "### Part 9: Conversation Design & The Prompt Architecture",
      "### Part 10: Threads Topics: Graph Placement & Tagging",
      "### Part 11: Threads Text Attachments: Long-Form Technical Utility",
      "### Part 12: Threads Multi-Post Sequences",
      "### Part 13: Threads + Build Bots Better: Documenting the Journey",
      "### Part 14: Threads + AI Discovery (SI & Vector Search)",
      "### Part 15: Threads as a Knowledge Network & The Flywheel",
      "### Part 16: Original Threads-Native Content",
      "### Part 17: Cross-Platform Knowledge Transformation Matrix",
      "### Part 18: The Threads Call-to-Action (CTA) Architecture",
      "### Part 19: Analytics & Threads Insights",
      "### Part 20: The B3 Threads Content Score (0-100)",
      "### Part 21: The Threads Experimentation Lab",
      "### Part 22: The Threads Content Factory Pipeline",
      "### Part 23: Multi-Platform Knowledge Recomposition",
      "### Part 24: The Threads Content Agent Operating System",
      "### Part 25: Capstone Project: End-to-End Execution"
    ],
    "part_to_exercise": [
      {
        "requirement": "### Part 1: Understand Threads",
        "exercise": "Map the five Threads identities"
      },
      {
        "requirement": "### Part 2: The Fundamental Threads Behavior: Conversation Over Broadcast",
        "exercise": "Design conversation before broadcast"
      },
      {
        "requirement": "### Part 3: Threads Is NOT X (Twitter)",
        "exercise": "Adapt from X and Instagram thoughtfully"
      },
      {
        "requirement": "### Part 4: Threads Is NOT Instagram",
        "exercise": "Adapt from X and Instagram thoughtfully"
      },
      {
        "requirement": "### Part 5: Native Video Architecture",
        "exercise": "Choose native video or a direct reference"
      },
      {
        "requirement": "### Part 6: Video for Threads: Formats & Contextual Text",
        "exercise": "Add useful context to media"
      },
      {
        "requirement": "### Part 7: The Anatomy of a Standalone Threads Post",
        "exercise": "Build the standalone post"
      },
      {
        "requirement": "### Part 8: Replies Are First-Class Content",
        "exercise": "Write three constructive replies"
      },
      {
        "requirement": "### Part 9: Conversation Design & The Prompt Architecture",
        "exercise": "Design seven honest question types"
      },
      {
        "requirement": "### Part 10: Threads Topics: Graph Placement & Tagging",
        "exercise": "Verify topic placement"
      },
      {
        "requirement": "### Part 11: Threads Text Attachments: Long-Form Technical Utility",
        "exercise": "Choose between four text formats"
      },
      {
        "requirement": "### Part 12: Threads Multi-Post Sequences",
        "exercise": "Write an eight-post narrative"
      },
      {
        "requirement": "### Part 13: Threads + Build Bots Better: Documenting the Journey",
        "exercise": "Build in public without invented progress"
      },
      {
        "requirement": "### Part 14: Threads + AI Discovery (SI & Vector Search)",
        "exercise": "Make the conversation retrievable"
      },
      {
        "requirement": "### Part 15: Threads as a Knowledge Network & The Flywheel",
        "exercise": "Close the conversational flywheel"
      },
      {
        "requirement": "### Part 16: Original Threads-Native Content",
        "exercise": "Adapt from X and Instagram thoughtfully"
      },
      {
        "requirement": "### Part 17: Cross-Platform Knowledge Transformation Matrix",
        "exercise": "Recompose six platform sources"
      },
      {
        "requirement": "### Part 18: The Threads Call-to-Action (CTA) Architecture",
        "exercise": "Plan honest CTAs and Insights"
      },
      {
        "requirement": "### Part 19: Analytics & Threads Insights",
        "exercise": "Plan honest CTAs and Insights"
      },
      {
        "requirement": "### Part 20: The B3 Threads Content Score (0-100)",
        "exercise": "Use the readiness calculator; studio.html and rubric.json"
      },
      {
        "requirement": "### Part 21: The Threads Experimentation Lab",
        "exercise": "Specify experiments and ten-stage factory"
      },
      {
        "requirement": "### Part 22: The Threads Content Factory Pipeline",
        "exercise": "Specify experiments and ten-stage factory"
      },
      {
        "requirement": "### Part 23: Multi-Platform Knowledge Recomposition",
        "exercise": "Recompose six platform sources"
      },
      {
        "requirement": "### Part 24: The Threads Content Agent Operating System",
        "exercise": "Complete seventeen gates and nineteen actions"
      },
      {
        "requirement": "### Part 25: Capstone Project: End-to-End Execution",
        "exercise": "Complete seventeen gates and nineteen actions"
      }
    ],
    "native_exercises": [
      "Map the five Threads identities",
      "Observe real reading conversations",
      "Design conversation before broadcast",
      "Adapt from X and Instagram thoughtfully",
      "Choose native video or a direct reference",
      "Add useful context to media",
      "Build the standalone post",
      "Compare the same-topic post pair",
      "Write three constructive replies",
      "Design seven honest question types",
      "Verify topic placement",
      "Choose between four text formats",
      "Write an eight-post narrative",
      "Build in public without invented progress",
      "Make the conversation retrievable",
      "Close the conversational flywheel",
      "Recompose six platform sources",
      "Plan honest CTAs and Insights",
      "Specify experiments and ten-stage factory",
      "Complete seventeen gates and nineteen actions"
    ],
    "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."
  }
}
