Summary
Automated graph-health review of workshop/*.md (96 files, 334 edges/constraints, 56 potential findings, 3 cycles/feedback loops/weird cycles). After manually verifying the cited cycles and a sample of the missing_prerequisite_link findings against the actual file contents, most automated findings turned out to be false positives :
The 3 reported cycles / feedback loops / weird cycles (07-your-first-workflow.md ↔ 07d-confirm-model-access.md, 05-agentic-workflows-intro.md ↔ 05b-agentic-workflows-security.md, 02a-setup-codespace.md ↔ side-quest-02-01-local-terminal.md) are all mutual "Before You Start" / "Next" back-links between companion pages or parallel setup paths (Codespace vs. local terminal). These are intentional navigation aids, not real ordering bugs.
The 48 missing_prerequisite_link findings all stem from one heuristic over-trigger: any page mentioning gh aw compile is flagged for not re-linking back to Step 2/local-terminal setup, even though every core step already chains sequentially from a step that established gh auth/gh aw (Step 6 verifies gh auth status; Steps 7+ list Step 6 or the prior core step in "Before You Start"). Spot-checked 07-your-first-workflow.md, 08-run-your-workflow.md, 09-agentic-editing.md, 16-connect-data-source.md, 05-agentic-workflows-intro.md, 20-persistent-memory.md, 26-manage-costs-and-budgets.md — none is missing a real prerequisite link.
However, manual review surfaced one confirmed, real ordering problem not caught by the heuristic.
Confirmed ordering problem
File reviewed: workshop/05-agentic-workflows-intro.md
Exact instruction that appears too early: **Activity 1 — identify the parts:** Open any .lock.ymlfile in your repo and find theon: key.
Missing prerequisite / dependency: No .lock.yml file exists in the learner's practice repository at this point. The compiled .lock.yml is first produced in 07-your-first-workflow.md via gh aw compile, after installing the gh-aw extension in 06-install-gh-aw.md and authoring a workflow .md in Step 7. Steps 1–4 (01-prerequisites.md, 02a-setup-codespace.md, side-quest-02-01-local-terminal.md, 04-github-actions-intro.md) never create or reference a pre-seeded .lock.yml.
Why this could confuse or block a learner: Step 5's Activity 1 tells learners to open "any .lock.yml file in your repo," but at this point in the recommended path the repo contains no workflow files at all (only the default README created in Step 2). A learner following the instruction literally will find no such file and may think they missed a setup step or that their environment is broken.
Suggested fix: Either (a) reword Activity 1 to be conceptual/predictive only (e.g., "Imagine a .lock.yml file — where would the on: key come from?") without asking the learner to open a real file, (b) explicitly note the activity is deferred until after Step 7 once a .lock.yml exists, or (c) provide a small inline example .lock.yml snippet on the page itself for the learner to inspect instead of asking them to find one in their own repository.
Mermaid graph
graph TD
node_001["00 00-welcome.md\nWelcome to our Agent Factory Tour"]
node_002["01 01-prerequisites.md\nBefore we start"]
node_003["01-SQ01 side-quest-01-01-terminal-basics.md\nSide Quest: Terminal Basics"]
node_004["01-SQ02 side-quest-01-02-environment-reference.md\nSide Quest: Environment Reference"]
node_005["01-SQ03 side-quest-01-03-permission-errors.md\nSide Quest: Permission Errors"]
node_006["02a 02a-setup-codespace.md\nSet Up a Codespace"]
node_007["02-SQ01 side-quest-02-01-local-terminal.md\nSide Quest: Set Up Your Local Terminal"]
node_008["04 04-github-actions-intro.md\nGitHub Actions in 5 Minutes"]
node_009["05 05-agentic-workflows-intro.md\nWhat Are Agentic Workflows?"]
node_010["05b 05b-agentic-workflows-security.md\nHow Agentic Workflows Stay Safe"]
node_011["05c 05c-agentic-workflows-practice.md\nPractice: Recognize Agentic Workflows"]
node_012["05-SQ01 side-quest-05-01-actions-power-user.md\nSide Quest: Agentic Workflows for GitHub Actions Power Users"]
node_013["05-SQ02 side-quest-05-02-aw-deep-dive.md\nSide Quest: Classify Agentic vs. Standard Workflows"]
node_014["05-SQ03 side-quest-05-03-two-file-structure.md\nSide Quest: The Two-File Structure"]
node_015["06 06-install-gh-aw.md\nInstall the gh-aw CLI Extension"]
node_016["06-SQ01 side-quest-06-01-install-troubleshooting.md\nSide Quest: Install `gh-aw` Troubleshooting"]
node_017["06-SQ02 side-quest-06-02-cca-codespace.md\nSide Quest: Use `gh-aw` with the GitHub Copilot Cloud Agent"]
node_018["06-SQ03 side-quest-06-03-copilot-token.md\nSide Quest: Configure GitHub Copilot Authentication"]
node_019["06-SQ04 side-quest-06-04-install-local.md\nSide Quest: Install `gh-aw` in a Local Terminal"]
node_020["07 07-your-first-workflow.md\nWrite Your First Agentic Workflow"]
node_021["07d 07d-confirm-model-access.md\nConfirm Model Access"]
node_022["07-SQ01 side-quest-07-01-compile-workflow.md\nSide Quest: Using `gh aw compile` to Catch Errors Early"]
node_023["08 08-run-your-workflow.md\nRun and Watch Your Workflow"]
node_024["08b 08b-interpret-your-run.md\nInterpret Your First Run"]
node_025["08-SQ01 side-quest-08-01-codespaces-actions-write.md\nSide Quest: Fix Codespaces `actions:write` Errors When Running `gh aw run`"]
node_026["09 09-agentic-editing.md\nRefine, Test, and Improve Your Workflow"]
node_027["09-SQ01 side-quest-09-01-debug-output.md\nSide Quest: Diagnosing Common Agent Output Patterns"]
node_028["10-SQ01 side-quest-10-01-agent-brief.md\nSide Quest: Writing a Clear Agent Brief"]
node_029["10-SQ02 side-quest-10-02-jailbreak-brief.md\nSide Quest: Jailbreaking the Agent Brief"]
node_030["10-SQ03 side-quest-10-03-skill-dispatcher.md\nSide Quest: How the `agentic-workflows` Skill Dispatcher Works"]
node_031["11-SQ01 side-quest-11-01-frontmatter-deep-dive.md\nSide Quest: [Frontmatter](https://github.github.com/gh-aw/reference/frontmatter/) Deep Dive — Part A"]
node_032["11-SQ02 side-quest-11-02-yaml-frontmatter.md\nSide Quest: YAML [Frontmatter](https://github.github.com/gh-aw/reference/frontmatter/) Pitfalls"]
node_033["11-SQ03 side-quest-11-03-better-prompts.md\nSide Quest: Write Better AI Task Briefs"]
node_034["11-SQ04 side-quest-11-04-annotated-workflow.md\nSide Quest: Explore and Adapt an Annotated Workflow"]
node_035["11-SQ05 side-quest-11-05-event-triggers.md\nSide Quest: Event-Driven Triggers in Agentic Workflows"]
node_036["11-SQ06 side-quest-11-06-anthropic-key.md\nSide Quest: Configure an Anthropic API Key"]
node_037["11-SQ07 side-quest-11-07-openai-key.md\nSide Quest: Configure an OpenAI API Key"]
node_038["11-SQ08 side-quest-11-08-frontmatter-tools-outputs.md\nSide Quest: Frontmatter Deep Dive — Part B"]
node_039["11-SQ09 side-quest-11-09-agent-session-phases.md\nSide Quest: Agent Session Phases Explained"]
node_040["12-SQ01 side-quest-12-01-iterate-agent-output.md\nSide Quest: Evaluating and Iterating on Agent Output"]
node_041["13-SQ01 side-quest-13-01-pr-labeler-pattern.md\nSide Quest 13-01: Pattern — Auto-Label PRs by Content"]
node_042["13-SQ01 side-quest-13-01-schedule-expressions.md\nSide Quest: Fuzzy Schedule Expressions"]
node_043["13-SQ02 side-quest-13-02-pr-summary-pattern.md\nSide Quest 13-02: Pattern — Generate a PR Summary Comment"]
node_044["13-SQ03 side-quest-13-03-pr-checklist-pattern.md\nSide Quest 13-03: Pattern — PR Review Checklist"]
node_045["13-SQ04 side-quest-13-04-token-optimization.md\nSide Quest: Observe and Reduce Token Costs"]
node_046["14 14-next-steps.md\nWhat's Next? Keep Exploring"]
node_047["14b 14b-pr-reviewer-workflow.md\nBuild a PR Reviewer with an Agent and Skill"]
node_048["15 15-conditional-logic.md\nMake Your Workflow Smarter with Conditional Logic"]
node_049["15-SQ01 side-quest-15-01-expressions-and-contexts.md\nSide Quest: GitHub Actions Expressions and Contexts"]
node_050["15-SQ02 side-quest-15-02-chaining-conditions.md\nSide Quest: Chaining Conditions — Run an Agent Only When Security Findings Exist"]
node_051["16 16-connect-data-source.md\nConnect a Live Data Source to Your Workflow"]
node_052["16-SQ01 side-quest-16-01-github-output.md\nSide Quest: Passing Data Between Steps with $GITHUB_OUTPUT"]
node_053["16-SQ02 side-quest-16-02-secrets-and-permissions.md\nSide Quest: Storing Credentials with GitHub Secrets"]
node_054["16-SQ03 side-quest-16-03-token-exfiltration.md\nSide Quest: Token and Secret Exfiltration in Agentic Workflows"]
node_055["16-SQ04 side-quest-16-04-deterministic-vs-agentic-data-ops.md\nSide Quest: [Deterministic](https://github.github.com/gh-aw/patterns/deterministic-ops/) vs [Agentic](https://github.github.com/gh-aw/introduction/overview/#what-are-agentic-workflows) Data Ops"]
node_056["16-SQ05 side-quest-16-05-long-lived-credentials.md\nSide Quest: Long-Lived Credential Risks in Agentic Workflows"]
node_057["17 17-add-mcp-tools.md\nGive Your Agent More Tools with MCP"]
node_058["17-SQ01 side-quest-17-01-mcp-concepts.md\nSide Quest: How MCP Tool Servers Work"]
node_059["17-SQ02 side-quest-17-02-security-architecture.md\nSide Quest: Agentic Workflow Security Architecture (Explain Like You're 5)"]
node_060["17-SQ03 side-quest-17-03-prompt-injection.md\nSide Quest: [Prompt Injection](https://github.github.com/gh-aw/introduction/architecture/#threat-model) Attacks in Agentic Workflows"]
node_061["17-SQ04 side-quest-17-04-permission-escalation.md\nSide Quest: Permission Escalation in [Agentic Workflows](https://github.github.com/gh-aw/introduction/overview/#what-are-agentic-workflows)"]
node_062["17-SQ05 side-quest-17-05-supply-chain-mcp.md\nSide Quest: [Supply Chain](https://github.github.com/gh-aw/introduction/architecture/#threat-model) Attacks via MCP Tool Servers"]
node_063["17-SQ06 side-quest-17-06-output-injection.md\nSide Quest: Output Injection via Safe Outputs"]
node_064["17-SQ07 side-quest-17-07-repo-poisoning.md\nSide Quest: Repository Poisoning via Agentic Write Access"]
node_065["18 18-share-and-reuse.md\nShare and Reuse Your Agentic Workflows"]
node_066["19 19-research-driven-training-node.md\nBuild a Research-Driven Next Training Node"]
node_067["20 20-persistent-memory.md\nMake Your Workflow Remember Across Runs"]
node_068["20-SQ01 side-quest-20-01-memory-patterns.md\nSide Quest: Choosing Between [Cache Memory](https://github.github.com/gh-aw/reference/cache-memory/) and [Repo Memory](https://github.github.com/gh-aw/reference/repo-memory/)"]
node_069["21 21-inline-sub-agents.md\nSplit Complex Workflows with [Inline Sub-Agents](https://github.github.com/gh-aw/reference/inline-sub-agents/)"]
node_070["21-SQ01 side-quest-21-01-sub-agent-syntax.md\nSide Quest: Sub-Agent Syntax Reference"]
node_071["22 22-error-handling-and-resilience.md\nMake Your Workflows Resilient to Failure"]
node_072["22-SQ01 side-quest-22-01-failure-modes.md\nSide Quest: Recognizing Common Agentic Workflow Failure Modes"]
node_073["23 23-ab-experiments.md\nTest Your Prompt Ideas with [A/B Experiments](https://github.github.com/gh-aw/experimental/experiments/)"]
node_074["23-SQ01 side-quest-23-01-ab-roundrobin.md\nSide Quest: How A/B Experiment Round-Robin Assignment Works"]
node_075["24 24-self-hosted-runners.md\nRun Your Agentic Workflow on a Self-Hosted Runner"]
node_076["24-SQ01 side-quest-24-01-runner-infrastructure.md\nSide Quest: Self-Hosted Runner Infrastructure Deep Dive"]
node_077["25 25-audit-and-observability.md\nAudit and Monitor Your Agentic Workflows"]
node_078["25-SQ01 side-quest-25-01-audit-reference.md\nSide Quest: Audit Reference — Artifacts, Firewall Logs, and Report Contents"]
node_079["26 26-manage-costs-and-budgets.md\nManage Costs and AI Credit Budgets"]
node_080["26-SQ01 side-quest-26-01-forecast-costs.md\nSide Quest: Project Future AI Credit Costs with `gh aw forecast`"]
node_081["27 27-evaluate-workflow-quality.md\nVerify Your Workflow Quality with Evals"]
node_082["28 28-orchestrate-workflows.md\nOrchestrate Multiple Agentic Workflows"]
node_083["29 29-skills-and-domain-knowledge.md\nTeach Your Agent Domain Knowledge with Skills"]
node_084["29-SQ01 side-quest-29-01-skill-injection-strategies.md\nSide Quest: Skill Injection Strategies — Hint, Fusion, and Inline"]
node_085["side-quest-06-03a-copilot-requests-permission side-quest-06-03a-copilot-requests-permission.md\nSide Quest: Method 1 — Copilot Requests Permission"]
node_086["side-quest-06-03b-copilot-github-token side-quest-06-03b-copilot-github-token.md\nSide Quest: Method 2 — COPILOT_GITHUB_TOKEN Secret"]
node_087["side-quest-06-03c-copilot-github-token-ui-only side-quest-06-03c-copilot-github-token-ui-only.md\nSide Quest: Method 2 (UI-only) — COPILOT_GITHUB_TOKEN Secret"]
node_088["side-quest-07d-billing-paths side-quest-07d-billing-paths.md\nSide Quest: Copilot Billing Paths"]
node_089["side-quest-09-01a-pattern-long-plan-chain side-quest-09-01a-pattern-long-plan-chain.md\nSide Quest 09-01a: Pattern — Long `[plan]` Chains"]
node_090["side-quest-09-01b-pattern-empty-results side-quest-09-01b-pattern-empty-results.md\nSide Quest 09-01b: Pattern — Empty `[result]` Data"]
node_091["side-quest-09-01c-pattern-safe-output-blocked side-quest-09-01c-pattern-safe-output-blocked.md\nSide Quest 09-01c: Pattern — [Safe-output](https://github.github.com/gh-aw/reference/safe-outputs/) `limit reached`"]
node_092["side-quest-09-01d-pattern-permission-denied side-quest-09-01d-pattern-permission-denied.md\nSide Quest 09-01d: Pattern — `permission denied`"]
node_093["side-quest-09-01e-pattern-done-no-write side-quest-09-01e-pattern-done-no-write.md\nSide Quest 09-01e: Pattern — \"Done\" but Nothing Written"]
node_094["side-quest-09-01f-debugging-checklist side-quest-09-01f-debugging-checklist.md\nSide Quest 09-01f: Debugging Checklist"]
node_095["side-quest-11-01b-workflow-structure side-quest-11-01b-workflow-structure.md\nSide Quest: Workflow File Structure at a Glance"]
node_096["side-quest-enterprise-setup side-quest-enterprise-setup.md\nSide Quest: Enterprise Setup Considerations"]
node_001 -->|next| node_002
node_002 -->|next| node_006
node_006 -->|capability:environment_ready| node_004
node_006 -->|capability:gh_installed| node_004
node_006 -->|capability:gh_authenticated| node_004
node_003 -->|before| node_005
node_006 -->|next| node_008
node_007 -->|capability:environment_ready| node_006
node_007 -->|capability:gh_installed| node_006
node_007 -->|next| node_008
node_002 -->|before| node_007
node_006 -->|capability:environment_ready| node_007
node_006 -->|capability:gh_installed| node_007
node_006 -->|capability:gh_authenticated| node_007
node_008 -->|next| node_009
node_009 -->|next| node_010
node_008 -->|before| node_009
node_010 -->|before| node_009
node_006 -->|capability:environment_ready| node_009
node_006 -->|capability:gh_installed| node_009
node_006 -->|capability:gh_authenticated| node_009
node_010 -->|next| node_011
node_009 -->|before| node_010
node_011 -->|next| node_015
node_009 -->|before| node_011
node_008 -->|before| node_012
node_009 -->|before| node_012
node_009 -->|before| node_013
node_009 -->|before| node_014
node_006 -->|capability:environment_ready| node_014
node_006 -->|capability:gh_installed| node_014
node_006 -->|capability:gh_authenticated| node_014
node_015 -->|next| node_020
node_006 -->|before| node_015
node_009 -->|before| node_015
node_006 -->|capability:environment_ready| node_015
node_006 -->|capability:gh_installed| node_015
node_006 -->|capability:gh_authenticated| node_015
node_006 -->|capability:environment_ready| node_016
node_006 -->|capability:gh_installed| node_016
node_006 -->|capability:gh_authenticated| node_016
node_006 -->|capability:environment_ready| node_017
node_006 -->|capability:gh_installed| node_017
node_006 -->|capability:gh_authenticated| node_017
node_015 -->|before| node_018
node_006 -->|capability:environment_ready| node_018
node_006 -->|capability:gh_installed| node_018
node_006 -->|capability:gh_authenticated| node_018
node_019 -->|next| node_020
node_002 -->|before| node_019
node_009 -->|before| node_019
node_007 -->|before| node_019
node_006 -->|capability:environment_ready| node_019
node_006 -->|capability:gh_installed| node_019
node_006 -->|capability:gh_authenticated| node_019
node_020 -->|next| node_021
node_015 -->|before| node_020
node_021 -->|before| node_020
node_006 -->|capability:environment_ready| node_020
node_006 -->|capability:gh_installed| node_020
node_006 -->|capability:gh_authenticated| node_020
node_021 -->|next| node_023
node_020 -->|before| node_021
node_006 -->|capability:environment_ready| node_022
node_006 -->|capability:gh_installed| node_022
node_006 -->|capability:gh_authenticated| node_022
node_023 -->|next| node_024
node_021 -->|before| node_023
node_006 -->|capability:environment_ready| node_023
node_006 -->|capability:gh_installed| node_023
node_006 -->|capability:gh_authenticated| node_023
node_024 -->|next| node_026
node_023 -->|before| node_024
node_006 -->|capability:environment_ready| node_024
node_006 -->|capability:gh_installed| node_024
node_006 -->|capability:gh_authenticated| node_024
node_023 -->|before| node_025
node_006 -->|capability:environment_ready| node_025
node_006 -->|capability:gh_installed| node_025
node_006 -->|capability:gh_authenticated| node_025
node_026 -->|next| node_046
node_024 -->|before| node_026
node_006 -->|capability:environment_ready| node_026
node_006 -->|capability:gh_installed| node_026
node_006 -->|capability:gh_authenticated| node_026
node_024 -->|before| node_027
node_006 -->|before| node_028
node_024 -->|before| node_028
node_007 -->|before| node_028
node_026 -->|before| node_029
node_028 -->|before| node_029
node_020 -->|before| node_030
node_006 -->|capability:environment_ready| node_030
node_006 -->|capability:gh_installed| node_030
node_006 -->|capability:gh_authenticated| node_030
node_031 -->|next| node_038
node_020 -->|before| node_031
node_006 -->|capability:environment_ready| node_031
node_006 -->|capability:gh_installed| node_031
node_006 -->|capability:gh_authenticated| node_031
node_020 -->|before| node_033
node_026 -->|before| node_033
node_020 -->|before| node_034
node_006 -->|capability:environment_ready| node_034
node_006 -->|capability:gh_installed| node_034
node_006 -->|capability:gh_authenticated| node_034
node_006 -->|capability:environment_ready| node_035
node_006 -->|capability:gh_installed| node_035
node_006 -->|capability:gh_authenticated| node_035
node_006 -->|capability:environment_ready| node_036
node_006 -->|capability:gh_installed| node_036
node_006 -->|capability:gh_authenticated| node_036
node_015 -->|before| node_037
node_004 -->|before| node_037
node_031 -->|before| node_037
node_006 -->|capability:environment_ready| node_037
node_006 -->|capability:gh_installed| node_037
node_006 -->|capability:gh_authenticated| node_037
node_031 -->|before| node_038
node_006 -->|capability:environment_ready| node_038
node_006 -->|capability:gh_installed| node_038
node_006 -->|capability:gh_authenticated| node_038
node_009 -->|before| node_039
node_015 -->|before| node_039
node_006 -->|capability:environment_ready| node_039
node_006 -->|capability:gh_installed| node_039
node_006 -->|capability:gh_authenticated| node_039
node_026 -->|before| node_040
node_006 -->|capability:environment_ready| node_040
node_006 -->|capability:gh_installed| node_040
node_006 -->|capability:gh_authenticated| node_040
node_047 -->|before| node_041
node_006 -->|capability:environment_ready| node_041
node_006 -->|capability:gh_installed| node_041
node_006 -->|capability:gh_authenticated| node_041
node_026 -->|before| node_042
node_006 -->|capability:environment_ready| node_042
node_006 -->|capability:gh_installed| node_042
node_006 -->|capability:gh_authenticated| node_042
node_047 -->|before| node_043
node_006 -->|capability:environment_ready| node_043
node_006 -->|capability:gh_installed| node_043
node_006 -->|capability:gh_authenticated| node_043
node_047 -->|before| node_044
node_006 -->|capability:environment_ready| node_044
node_006 -->|capability:gh_installed| node_044
node_006 -->|capability:gh_authenticated| node_044
node_047 -->|before| node_045
node_077 -->|before| node_045
node_079 -->|before| node_045
node_006 -->|capability:environment_ready| node_045
node_006 -->|capability:gh_installed| node_045
node_006 -->|capability:gh_authenticated| node_045
node_046 -->|next| node_047
node_026 -->|before| node_046
node_047 -->|next| node_048
node_026 -->|before| node_047
node_006 -->|capability:environment_ready| node_047
node_006 -->|capability:gh_installed| node_047
node_006 -->|capability:gh_authenticated| node_047
node_048 -->|next| node_051
node_020 -->|before| node_048
node_026 -->|before| node_048
node_006 -->|capability:environment_ready| node_048
node_006 -->|capability:gh_installed| node_048
node_006 -->|capability:gh_authenticated| node_048
node_049 -->|next| node_051
node_048 -->|before| node_049
node_048 -->|before| node_050
node_006 -->|capability:environment_ready| node_050
node_006 -->|capability:gh_installed| node_050
node_006 -->|capability:gh_authenticated| node_050
node_051 -->|next| node_057
node_015 -->|before| node_051
node_020 -->|before| node_051
node_026 -->|before| node_051
node_006 -->|capability:environment_ready| node_051
node_006 -->|capability:gh_installed| node_051
node_006 -->|capability:gh_authenticated| node_051
node_051 -->|before| node_053
node_020 -->|before| node_054
node_051 -->|before| node_054
node_051 -->|before| node_055
node_051 -->|before| node_056
node_053 -->|before| node_056
node_057 -->|next| node_065
node_015 -->|before| node_057
node_020 -->|before| node_057
node_006 -->|capability:environment_ready| node_057
node_006 -->|capability:gh_installed| node_057
node_006 -->|capability:gh_authenticated| node_057
node_057 -->|before| node_058
node_006 -->|capability:environment_ready| node_058
node_006 -->|capability:gh_installed| node_058
node_006 -->|capability:gh_authenticated| node_058
node_009 -->|before| node_059
node_020 -->|before| node_059
node_057 -->|before| node_059
node_057 -->|before| node_061
node_058 -->|before| node_062
node_062 -->|before| node_063
node_057 -->|before| node_064
node_065 -->|next| node_066
node_026 -->|before| node_065
node_006 -->|capability:environment_ready| node_065
node_006 -->|capability:gh_installed| node_065
node_006 -->|capability:gh_authenticated| node_065
node_066 -->|next| node_067
node_065 -->|before| node_066
node_006 -->|capability:environment_ready| node_066
node_006 -->|capability:gh_installed| node_066
node_006 -->|capability:gh_authenticated| node_066
node_067 -->|next| node_069
node_020 -->|before| node_067
node_057 -->|before| node_067
node_038 -->|before| node_067
node_006 -->|capability:environment_ready| node_067
node_006 -->|capability:gh_installed| node_067
node_006 -->|capability:gh_authenticated| node_067
node_020 -->|before| node_068
node_067 -->|before| node_068
node_069 -->|next| node_071
node_020 -->|before| node_069
node_022 -->|before| node_069
node_006 -->|capability:environment_ready| node_069
node_006 -->|capability:gh_installed| node_069
node_006 -->|capability:gh_authenticated| node_069
node_069 -->|before| node_070
node_022 -->|before| node_070
node_006 -->|capability:environment_ready| node_070
node_006 -->|capability:gh_installed| node_070
node_006 -->|capability:gh_authenticated| node_070
node_071 -->|next| node_073
node_026 -->|before| node_071
node_006 -->|capability:environment_ready| node_071
node_006 -->|capability:gh_installed| node_071
node_006 -->|capability:gh_authenticated| node_071
node_026 -->|before| node_072
node_071 -->|before| node_072
node_073 -->|next| node_075
node_020 -->|before| node_073
node_022 -->|before| node_073
node_006 -->|capability:environment_ready| node_073
node_006 -->|capability:gh_installed| node_073
node_006 -->|capability:gh_authenticated| node_073
node_075 -->|next| node_077
node_026 -->|before| node_075
node_096 -->|before| node_075
node_006 -->|capability:environment_ready| node_075
node_006 -->|capability:gh_installed| node_075
node_006 -->|capability:gh_authenticated| node_075
node_075 -->|before| node_076
node_077 -->|next| node_079
node_015 -->|before| node_077
node_026 -->|before| node_077
node_006 -->|capability:environment_ready| node_077
node_006 -->|capability:gh_installed| node_077
node_006 -->|capability:gh_authenticated| node_077
node_015 -->|before| node_078
node_077 -->|before| node_078
node_006 -->|capability:environment_ready| node_078
node_006 -->|capability:gh_installed| node_078
node_006 -->|capability:gh_authenticated| node_078
node_077 -->|before| node_079
node_006 -->|capability:environment_ready| node_079
node_006 -->|capability:gh_installed| node_079
node_006 -->|capability:gh_authenticated| node_079
node_006 -->|capability:environment_ready| node_080
node_006 -->|capability:gh_installed| node_080
node_006 -->|capability:gh_authenticated| node_080
node_081 -->|next| node_082
node_023 -->|before| node_081
node_073 -->|before| node_081
node_079 -->|before| node_081
node_006 -->|capability:environment_ready| node_081
node_006 -->|capability:gh_installed| node_081
node_006 -->|capability:gh_authenticated| node_081
node_082 -->|next| node_083
node_047 -->|before| node_082
node_081 -->|before| node_082
node_022 -->|before| node_082
node_006 -->|capability:environment_ready| node_082
node_006 -->|capability:gh_installed| node_082
Loading
Ordering constraints (334 total, generated)
The full generated constraint list is large (334 edges across 96 pages). The constraints relevant to the confirmed problem and to the reviewed cycle nodes are excerpted below; the complete list was reviewed in full during this pass.
- 04-github-actions-intro.md must come before 05-agentic-workflows-intro.md (next-step link)
- 05-agentic-workflows-intro.md must come before 05b-agentic-workflows-security.md (next-step link + "Before You Start" back-reference — mutual link, reviewed as false-positive cycle)
- 06-install-gh-aw.md must come before 07-your-first-workflow.md (capability:gh_authenticated — gh auth verified in Step 6)
- 07-your-first-workflow.md must come before 07d-confirm-model-access.md (next-step link + "Before You Start" back-reference — mutual link, reviewed as false-positive cycle)
- 07-your-first-workflow.md must come before 16-connect-data-source.md (capability:gh_authenticated — .lock.yml first produced here)
- 02a-setup-codespace.md and side-quest-02-01-local-terminal.md mutually satisfy capability:environment_ready / gh_installed / gh_authenticated for each other (parallel alternative setup paths, reviewed as false-positive cycle)
Confirmed cycles, feedback loops, and weird cycles
All 3 reported instances were manually reviewed and found to be false positives (intentional companion-page or parallel-path back-links, not real ordering bugs):
Cycle/feedback loop/weird cycle: 07-your-first-workflow.md ↔ 07d-confirm-model-access.md (edge types: before, next) — 07d is an error-recovery companion page for Step 7's model-access check; the "Before You Start" back-link is intentional so learners can jump straight back after fixing access.
Cycle/feedback loop/weird cycle: 05-agentic-workflows-intro.md ↔ 05b-agentic-workflows-security.md (edge types: before, next) — sequential pages with a normal "you've read the prior page" back-reference, not a real dependency loop.
Cycle/feedback loop/weird cycle: 02a-setup-codespace.md ↔ side-quest-02-01-local-terminal.md (edge types: capability:environment_ready, capability:gh_authenticated, capability:gh_installed) — these are two mutually-exclusive alternative setup paths (Codespace vs. local machine), each recommending the other as a fallback; not a real ordering violation.
Ready for resolution
This issue is ready for an agent to resolve: reword or relocate the "Activity 1" .lock.yml exercise in workshop/05-agentic-workflows-intro.md so it does not ask learners to open a file that does not exist yet, run npx --yes markdownlint-cli2 "**/*.md" afterward, and confirm no other workshop step references a .lock.yml file before Step 7 creates one.
Generated by 🧭 Workshop Order Review · copilot · auto · 146.8 AIC · ⌖ 13.3 AIC · ⊞ 7.5K · ◷
Summary
Automated graph-health review of
workshop/*.md(96 files, 334 edges/constraints, 56 potential findings, 3 cycles/feedback loops/weird cycles). After manually verifying the cited cycles and a sample of themissing_prerequisite_linkfindings against the actual file contents, most automated findings turned out to be false positives:07-your-first-workflow.md↔07d-confirm-model-access.md,05-agentic-workflows-intro.md↔05b-agentic-workflows-security.md,02a-setup-codespace.md↔side-quest-02-01-local-terminal.md) are all mutual "Before You Start" / "Next" back-links between companion pages or parallel setup paths (Codespace vs. local terminal). These are intentional navigation aids, not real ordering bugs.missing_prerequisite_linkfindings all stem from one heuristic over-trigger: any page mentioninggh aw compileis flagged for not re-linking back to Step 2/local-terminal setup, even though every core step already chains sequentially from a step that establishedgh auth/gh aw(Step 6 verifiesgh auth status; Steps 7+ list Step 6 or the prior core step in "Before You Start"). Spot-checked07-your-first-workflow.md,08-run-your-workflow.md,09-agentic-editing.md,16-connect-data-source.md,05-agentic-workflows-intro.md,20-persistent-memory.md,26-manage-costs-and-budgets.md— none is missing a real prerequisite link.However, manual review surfaced one confirmed, real ordering problem not caught by the heuristic.
Confirmed ordering problem
workshop/05-agentic-workflows-intro.md**Activity 1 — identify the parts:** Open any.lock.ymlfile in your repo and find theon:key..lock.ymlfile exists in the learner's practice repository at this point. The compiled.lock.ymlis first produced in07-your-first-workflow.mdviagh aw compile, after installing thegh-awextension in06-install-gh-aw.mdand authoring a workflow.mdin Step 7. Steps 1–4 (01-prerequisites.md,02a-setup-codespace.md,side-quest-02-01-local-terminal.md,04-github-actions-intro.md) never create or reference a pre-seeded.lock.yml..lock.ymlfile in your repo," but at this point in the recommended path the repo contains no workflow files at all (only the default README created in Step 2). A learner following the instruction literally will find no such file and may think they missed a setup step or that their environment is broken..lock.ymlfile — where would theon:key come from?") without asking the learner to open a real file, (b) explicitly note the activity is deferred until after Step 7 once a.lock.ymlexists, or (c) provide a small inline example.lock.ymlsnippet on the page itself for the learner to inspect instead of asking them to find one in their own repository.Mermaid graph
Ordering constraints (334 total, generated)
The full generated constraint list is large (334 edges across 96 pages). The constraints relevant to the confirmed problem and to the reviewed cycle nodes are excerpted below; the complete list was reviewed in full during this pass.
Confirmed cycles, feedback loops, and weird cycles
All 3 reported instances were manually reviewed and found to be false positives (intentional companion-page or parallel-path back-links, not real ordering bugs):
07-your-first-workflow.md↔07d-confirm-model-access.md(edge types: before, next) —07dis an error-recovery companion page for Step 7's model-access check; the "Before You Start" back-link is intentional so learners can jump straight back after fixing access.05-agentic-workflows-intro.md↔05b-agentic-workflows-security.md(edge types: before, next) — sequential pages with a normal "you've read the prior page" back-reference, not a real dependency loop.02a-setup-codespace.md↔side-quest-02-01-local-terminal.md(edge types: capability:environment_ready, capability:gh_authenticated, capability:gh_installed) — these are two mutually-exclusive alternative setup paths (Codespace vs. local machine), each recommending the other as a fallback; not a real ordering violation.Ready for resolution
This issue is ready for an agent to resolve: reword or relocate the "Activity 1"
.lock.ymlexercise inworkshop/05-agentic-workflows-intro.mdso it does not ask learners to open a file that does not exist yet, runnpx --yes markdownlint-cli2 "**/*.md"afterward, and confirm no other workshop step references a.lock.ymlfile before Step 7 creates one.