diff --git a/.changeset/fix-nested-import-order.md b/.changeset/fix-nested-import-order.md new file mode 100644 index 00000000000..d77388ab294 --- /dev/null +++ b/.changeset/fix-nested-import-order.md @@ -0,0 +1,5 @@ +--- +"gh-aw": patch +--- + +Order nested imported steps by dependency and reject import cycles in subdirectories. diff --git a/.github/workflows/ab-testing-advisor.lock.yml b/.github/workflows/ab-testing-advisor.lock.yml index 1723a234ae0..96292f488c5 100644 --- a/.github/workflows/ab-testing-advisor.lock.yml +++ b/.github/workflows/ab-testing-advisor.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: +# - shared/otlp.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/ace-editor.lock.yml b/.github/workflows/ace-editor.lock.yml index 2b8fddfd7c6..6799e4cdaf3 100644 --- a/.github/workflows/ace-editor.lock.yml +++ b/.github/workflows/ace-editor.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: +# - shared/otlp.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/agent-job-health.lock.yml b/.github/workflows/agent-job-health.lock.yml index ac7c9152113..1d6193c8624 100644 --- a/.github/workflows/agent-job-health.lock.yml +++ b/.github/workflows/agent-job-health.lock.yml @@ -27,16 +27,16 @@ # # Resolved workflow manifest: # Imports: -# - ../skills/jqschema/SKILL.md # - shared/aw-logs-24h-fetch.md +# - ../skills/jqschema/SKILL.md # - shared/daily-audit-discussion.md +# - shared/reporting.md +# - shared/otlp.md +# - shared/daily-audit-base.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/reporting.md -# - shared/daily-audit-base.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/agent-performance-analyzer.lock.yml b/.github/workflows/agent-performance-analyzer.lock.yml index 19acc4eef53..0a26a8c80ac 100644 --- a/.github/workflows/agent-performance-analyzer.lock.yml +++ b/.github/workflows/agent-performance-analyzer.lock.yml @@ -27,14 +27,14 @@ # # Resolved workflow manifest: # Imports: +# - shared/meta-analysis-base.md +# - shared/reporting.md +# - shared/otlp.md # - shared/default-ai-credits-pricing.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/meta-analysis-base.md -# - shared/otlp.md -# - shared/reporting.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/agent-persona-explorer.lock.yml b/.github/workflows/agent-persona-explorer.lock.yml index a4ecb1f1798..7d1d01c8e0a 100644 --- a/.github/workflows/agent-persona-explorer.lock.yml +++ b/.github/workflows/agent-persona-explorer.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: +# - shared/reporting.md +# - shared/otlp.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/reporting.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/agentic-token-trend-audit.lock.yml b/.github/workflows/agentic-token-trend-audit.lock.yml index 84174461a97..84953b5ce9d 100644 --- a/.github/workflows/agentic-token-trend-audit.lock.yml +++ b/.github/workflows/agentic-token-trend-audit.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md # # Secrets used: diff --git a/.github/workflows/ai-moderator.lock.yml b/.github/workflows/ai-moderator.lock.yml index 90394652e88..f5c174ec75c 100644 --- a/.github/workflows/ai-moderator.lock.yml +++ b/.github/workflows/ai-moderator.lock.yml @@ -26,12 +26,12 @@ # # Resolved workflow manifest: # Imports: +# - shared/otlp.md +# - shared/reporting.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/reporting.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/api-consumption-report.lock.yml b/.github/workflows/api-consumption-report.lock.yml index 224938cbcea..84542fbd45e 100644 --- a/.github/workflows/api-consumption-report.lock.yml +++ b/.github/workflows/api-consumption-report.lock.yml @@ -27,17 +27,17 @@ # # Resolved workflow manifest: # Imports: -# - ../skills/jqschema/SKILL.md # - shared/cache-memory-trending.md -# - shared/daily-audit-discussion.md +# - ../skills/jqschema/SKILL.md +# - shared/reporting.md +# - shared/otlp.md +# - shared/trending-charts-simple.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/reporting.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md -# - shared/trending-charts-simple.md # - shared/daily-audit-charts.md # # Secrets used: diff --git a/.github/workflows/approach-validator.lock.yml b/.github/workflows/approach-validator.lock.yml index ae5df42c065..d2ded296531 100644 --- a/.github/workflows/approach-validator.lock.yml +++ b/.github/workflows/approach-validator.lock.yml @@ -27,13 +27,13 @@ # # Resolved workflow manifest: # Imports: +# - shared/safe-output-upload-artifact.md +# - shared/reporting.md +# - shared/otlp.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/reporting.md -# - shared/safe-output-upload-artifact.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml index 482840d0889..aa9dd6ddad5 100644 --- a/.github/workflows/archie.lock.yml +++ b/.github/workflows/archie.lock.yml @@ -27,13 +27,13 @@ # # Resolved workflow manifest: # Imports: +# - shared/otlp.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md -# - shared/otlp.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/architecture-guardian.lock.yml b/.github/workflows/architecture-guardian.lock.yml index 4d9b49f3081..5b67cb2a06b 100644 --- a/.github/workflows/architecture-guardian.lock.yml +++ b/.github/workflows/architecture-guardian.lock.yml @@ -27,15 +27,15 @@ # # Resolved workflow manifest: # Imports: +# - shared/skip-if-issue-open.md +# - shared/otlp.md # - shared/activation-app.md +# - shared/reporting.md +# - shared/daily-issue-base.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/reporting.md -# - shared/daily-issue-base.md -# - shared/skip-if-issue-open.md # # Secrets used: # - GH_AW_AGENT_TOKEN diff --git a/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml b/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml index 0594d4d5f3c..f4e4784eaf3 100644 --- a/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml +++ b/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md # # Secrets used: diff --git a/.github/workflows/artifacts-summary.lock.yml b/.github/workflows/artifacts-summary.lock.yml index cd9d62ea603..d7662645b95 100644 --- a/.github/workflows/artifacts-summary.lock.yml +++ b/.github/workflows/artifacts-summary.lock.yml @@ -27,13 +27,13 @@ # # Resolved workflow manifest: # Imports: +# - shared/reporting.md +# - shared/safe-output-app.md +# - shared/otlp.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/reporting.md -# - shared/safe-output-app.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/audit-workflows.lock.yml b/.github/workflows/audit-workflows.lock.yml index 1c3d1f94d5c..5acdb9fc04e 100644 --- a/.github/workflows/audit-workflows.lock.yml +++ b/.github/workflows/audit-workflows.lock.yml @@ -27,18 +27,18 @@ # # Resolved workflow manifest: # Imports: +# - shared/repo-memory-standard.md # - ../skills/jqschema/SKILL.md -# - shared/daily-audit-discussion.md +# - shared/reporting.md +# - shared/otlp.md # - shared/default-ai-credits-pricing.md +# - shared/trending-charts-simple.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/repo-memory-standard.md -# - shared/reporting.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md -# - shared/trending-charts-simple.md # - shared/daily-audit-charts.md # # Secrets used: diff --git a/.github/workflows/auto-triage-issues.lock.yml b/.github/workflows/auto-triage-issues.lock.yml index 2770a333dbc..4bcbc2ff0f8 100644 --- a/.github/workflows/auto-triage-issues.lock.yml +++ b/.github/workflows/auto-triage-issues.lock.yml @@ -27,14 +27,14 @@ # # Resolved workflow manifest: # Imports: +# - shared/mcp-pagination.md # - shared/github-guard-policy.md +# - shared/reporting.md +# - shared/otlp.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/mcp-pagination.md -# - shared/otlp.md -# - shared/reporting.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/avenger.lock.yml b/.github/workflows/avenger.lock.yml index cde82857898..bdb9e91b7d3 100644 --- a/.github/workflows/avenger.lock.yml +++ b/.github/workflows/avenger.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: +# - shared/otlp.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md # # Frontmatter env variables: # - GH_AW_HARNESS_MAX_RETRIES: (main workflow) diff --git a/.github/workflows/aw-failure-investigator.lock.yml b/.github/workflows/aw-failure-investigator.lock.yml index 79d4d185d6a..9f672895cb6 100644 --- a/.github/workflows/aw-failure-investigator.lock.yml +++ b/.github/workflows/aw-failure-investigator.lock.yml @@ -27,14 +27,14 @@ # # Resolved workflow manifest: # Imports: +# - shared/meta-analysis-base.md +# - shared/reporting.md +# - shared/otlp.md # - shared/default-ai-credits-pricing.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/meta-analysis-base.md -# - shared/otlp.md -# - shared/reporting.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/blog-auditor.lock.yml b/.github/workflows/blog-auditor.lock.yml index 7e46bd7939f..6846adb7a23 100644 --- a/.github/workflows/blog-auditor.lock.yml +++ b/.github/workflows/blog-auditor.lock.yml @@ -27,14 +27,14 @@ # # Resolved workflow manifest: # Imports: +# - shared/otlp.md # - shared/daily-audit-discussion.md +# - shared/reporting.md +# - shared/daily-audit-base.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/reporting.md -# - shared/daily-audit-base.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/bot-detection.lock.yml b/.github/workflows/bot-detection.lock.yml index 7dfc98e80b2..a4e2dedbbc0 100644 --- a/.github/workflows/bot-detection.lock.yml +++ b/.github/workflows/bot-detection.lock.yml @@ -27,13 +27,13 @@ # # Resolved workflow manifest: # Imports: -# - shared/graders/recurrence-determinism.md -# - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md -# - shared/graders.md # - shared/mcp-pagination.md # - shared/otlp.md # - shared/reporting.md +# - shared/graders/state-revisit-probability-rep.md +# - shared/graders/recurrence-determinism.md +# - shared/graders/recurrence-laminarity.md +# - shared/graders.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml index c1a168e8470..49cbe967dd8 100644 --- a/.github/workflows/breaking-change-checker.lock.yml +++ b/.github/workflows/breaking-change-checker.lock.yml @@ -27,15 +27,15 @@ # # Resolved workflow manifest: # Imports: +# - shared/skip-if-issue-open.md +# - shared/otlp.md # - shared/activation-app.md +# - shared/reporting.md +# - shared/daily-issue-base.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/reporting.md -# - shared/daily-issue-base.md -# - shared/skip-if-issue-open.md # # Secrets used: # - GH_AW_AGENT_TOKEN diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml index c076fb5f026..157c3107b1e 100644 --- a/.github/workflows/changeset.lock.yml +++ b/.github/workflows/changeset.lock.yml @@ -27,13 +27,13 @@ # # Resolved workflow manifest: # Imports: -# - ../skills/jqschema/SKILL.md # - shared/changeset-format.md +# - ../skills/jqschema/SKILL.md +# - shared/otlp.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml index c906671cf35..52ba9723d1d 100644 --- a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml +++ b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: +# - shared/otlp.md +# - shared/reporting.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/reporting.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/ci-coach.lock.yml b/.github/workflows/ci-coach.lock.yml index e2e9ec9ed15..b738303a0a6 100644 --- a/.github/workflows/ci-coach.lock.yml +++ b/.github/workflows/ci-coach.lock.yml @@ -27,15 +27,15 @@ # # Resolved workflow manifest: # Imports: +# - shared/ci-optimization-strategies.md +# - shared/reporting.md +# - shared/otlp.md # - ../skills/jqschema/SKILL.md # - shared/ci-data-analysis.md -# - shared/ci-optimization-strategies.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/reporting.md # # Secrets used: # - GH_AW_CI_TRIGGER_TOKEN diff --git a/.github/workflows/claude-code-user-docs-review.lock.yml b/.github/workflows/claude-code-user-docs-review.lock.yml index db3654f04cd..a45b4100cfd 100644 --- a/.github/workflows/claude-code-user-docs-review.lock.yml +++ b/.github/workflows/claude-code-user-docs-review.lock.yml @@ -27,14 +27,14 @@ # # Resolved workflow manifest: # Imports: +# - shared/otlp.md # - shared/daily-audit-discussion.md +# - shared/reporting.md +# - shared/daily-audit-base.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/reporting.md -# - shared/daily-audit-base.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/cli-consistency-checker.lock.yml b/.github/workflows/cli-consistency-checker.lock.yml index fbe080422ff..2617323b1f4 100644 --- a/.github/workflows/cli-consistency-checker.lock.yml +++ b/.github/workflows/cli-consistency-checker.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: +# - shared/otlp.md +# - shared/reporting.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/reporting.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/cli-version-checker.lock.yml b/.github/workflows/cli-version-checker.lock.yml index 74dda16d66d..9d78e46a5e3 100644 --- a/.github/workflows/cli-version-checker.lock.yml +++ b/.github/workflows/cli-version-checker.lock.yml @@ -28,12 +28,12 @@ # Resolved workflow manifest: # Imports: # - ../skills/jqschema/SKILL.md +# - shared/reporting.md +# - shared/otlp.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md -# - shared/reporting.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index e66803527c2..5ff6e549503 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -27,14 +27,14 @@ # Resolved workflow manifest: # Imports: # - ../skills/jqschema/SKILL.md +# - shared/reporting.md +# - shared/otlp.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md -# - shared/otlp.md -# - shared/reporting.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml index e656d9b71ff..2923ab916cf 100644 --- a/.github/workflows/code-scanning-fixer.lock.yml +++ b/.github/workflows/code-scanning-fixer.lock.yml @@ -27,17 +27,17 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md -# - shared/graders/recurrence-determinism.md -# - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md -# - shared/graders.md # - shared/mcp-pagination.md +# - shared/skip-if-issue-open.md +# - shared/security-analysis-base.md # - shared/otlp.md +# - shared/activation-app.md # - shared/reporting.md # - shared/daily-pr-base.md -# - shared/security-analysis-base.md -# - shared/skip-if-issue-open.md +# - shared/graders/state-revisit-probability-rep.md +# - shared/graders/recurrence-determinism.md +# - shared/graders/recurrence-laminarity.md +# - shared/graders.md # # Secrets used: # - GH_AW_CI_TRIGGER_TOKEN diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml index dd3643bb16b..a88dc8af2f6 100644 --- a/.github/workflows/code-simplifier.lock.yml +++ b/.github/workflows/code-simplifier.lock.yml @@ -27,16 +27,16 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md -# - shared/graders/recurrence-determinism.md -# - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md -# - shared/graders.md # - shared/mcp-pagination.md +# - shared/skip-if-issue-open.md # - shared/otlp.md +# - shared/activation-app.md # - shared/reporting.md # - shared/daily-pr-base.md -# - shared/skip-if-issue-open.md +# - shared/graders/state-revisit-probability-rep.md +# - shared/graders/recurrence-determinism.md +# - shared/graders/recurrence-laminarity.md +# - shared/graders.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/codex-github-remote-mcp-test.lock.yml b/.github/workflows/codex-github-remote-mcp-test.lock.yml index d43504bc1fa..dc188869afe 100644 --- a/.github/workflows/codex-github-remote-mcp-test.lock.yml +++ b/.github/workflows/codex-github-remote-mcp-test.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: +# - shared/otlp.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/commit-changes-analyzer.lock.yml b/.github/workflows/commit-changes-analyzer.lock.yml index a8866502278..c14fe9ff3a9 100644 --- a/.github/workflows/commit-changes-analyzer.lock.yml +++ b/.github/workflows/commit-changes-analyzer.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/copilot-agent-analysis.lock.yml b/.github/workflows/copilot-agent-analysis.lock.yml index 11e1bcd2d68..0f447572765 100644 --- a/.github/workflows/copilot-agent-analysis.lock.yml +++ b/.github/workflows/copilot-agent-analysis.lock.yml @@ -27,13 +27,13 @@ # # Resolved workflow manifest: # Imports: -# - shared/copilot-pr-data-fetch.md -# - shared/daily-audit-discussion.md -# - shared/otlp.md # - shared/repo-memory-standard.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md -# - shared/copilot-pr-analysis-base.md # - shared/daily-audit-base.md +# - shared/copilot-pr-data-fetch.md +# - shared/copilot-pr-analysis-base.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/copilot-cli-deep-research.lock.yml b/.github/workflows/copilot-cli-deep-research.lock.yml index 03901601e6f..6939eddf118 100644 --- a/.github/workflows/copilot-cli-deep-research.lock.yml +++ b/.github/workflows/copilot-cli-deep-research.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/copilot-opt.lock.yml b/.github/workflows/copilot-opt.lock.yml index c6ae9379afc..8411344b407 100644 --- a/.github/workflows/copilot-opt.lock.yml +++ b/.github/workflows/copilot-opt.lock.yml @@ -28,10 +28,10 @@ # Resolved workflow manifest: # Imports: # - ../skills/jqschema/SKILL.md -# - shared/copilot-pr-data-fetch.md # - shared/copilot-session-data-fetch.md -# - shared/otlp.md +# - shared/copilot-pr-data-fetch.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/copilot-pr-merged-report.lock.yml b/.github/workflows/copilot-pr-merged-report.lock.yml index c28a980b1cf..483fb7aee8d 100644 --- a/.github/workflows/copilot-pr-merged-report.lock.yml +++ b/.github/workflows/copilot-pr-merged-report.lock.yml @@ -27,13 +27,13 @@ # # Resolved workflow manifest: # Imports: -# - shared/copilot-pr-data-fetch.md -# - shared/daily-audit-discussion.md +# - shared/reporting.md # - shared/gh.md # - shared/otlp.md -# - shared/reporting.md -# - shared/copilot-pr-analysis-base.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md +# - shared/copilot-pr-data-fetch.md +# - shared/copilot-pr-analysis-base.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/copilot-pr-nlp-analysis.lock.yml b/.github/workflows/copilot-pr-nlp-analysis.lock.yml index 46c83f13410..599ab2e9b3c 100644 --- a/.github/workflows/copilot-pr-nlp-analysis.lock.yml +++ b/.github/workflows/copilot-pr-nlp-analysis.lock.yml @@ -27,15 +27,15 @@ # # Resolved workflow manifest: # Imports: -# - shared/copilot-pr-data-fetch.md -# - shared/daily-audit-discussion.md -# - shared/otlp.md +# - shared/repo-memory-standard.md # - shared/python-dataviz.md # - shared/python-nlp.md -# - shared/repo-memory-standard.md # - shared/reporting.md -# - shared/copilot-pr-analysis-base.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md +# - shared/copilot-pr-data-fetch.md +# - shared/copilot-pr-analysis-base.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/copilot-pr-prompt-analysis.lock.yml b/.github/workflows/copilot-pr-prompt-analysis.lock.yml index 279b96547fe..70dada575a6 100644 --- a/.github/workflows/copilot-pr-prompt-analysis.lock.yml +++ b/.github/workflows/copilot-pr-prompt-analysis.lock.yml @@ -27,13 +27,13 @@ # # Resolved workflow manifest: # Imports: -# - shared/copilot-pr-data-fetch.md -# - shared/daily-audit-discussion.md -# - shared/otlp.md # - shared/repo-memory-standard.md # - shared/reporting.md -# - shared/copilot-pr-analysis-base.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md +# - shared/copilot-pr-data-fetch.md +# - shared/copilot-pr-analysis-base.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/copilot-session-insights.lock.yml b/.github/workflows/copilot-session-insights.lock.yml index 95bb708a170..b6302bf7540 100644 --- a/.github/workflows/copilot-session-insights.lock.yml +++ b/.github/workflows/copilot-session-insights.lock.yml @@ -27,17 +27,17 @@ # # Resolved workflow manifest: # Imports: -# - ../skills/jqschema/SKILL.md -# - shared/copilot-session-data-fetch.md -# - shared/daily-audit-discussion.md # - shared/mcp-pagination.md -# - shared/otlp.md -# - shared/python-dataviz.md # - shared/repo-memory-standard.md +# - ../skills/jqschema/SKILL.md +# - shared/copilot-session-data-fetch.md +# - shared/session-analysis-strategies.md # - shared/reporting.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md +# - shared/python-dataviz.md # - shared/session-analysis-charts.md -# - shared/session-analysis-strategies.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/daily-agentrx-trace-optimizer.lock.yml b/.github/workflows/daily-agentrx-trace-optimizer.lock.yml index 994432c8949..d7f8aee54e4 100644 --- a/.github/workflows/daily-agentrx-trace-optimizer.lock.yml +++ b/.github/workflows/daily-agentrx-trace-optimizer.lock.yml @@ -29,8 +29,8 @@ # Imports: # - shared/aw-logs-24h-fetch-setup.md # - shared/daily-audit-discussion.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # - shared/daily-audit-base.md # # Secrets used: diff --git a/.github/workflows/daily-architecture-diagram.lock.yml b/.github/workflows/daily-architecture-diagram.lock.yml index 52035c8eea1..77040434559 100644 --- a/.github/workflows/daily-architecture-diagram.lock.yml +++ b/.github/workflows/daily-architecture-diagram.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md # # Secrets used: diff --git a/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml b/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml index 3a6f0849e69..b85d170323a 100644 --- a/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml +++ b/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/daily-cache-strategy-analyzer.lock.yml b/.github/workflows/daily-cache-strategy-analyzer.lock.yml index 88a45169d0d..5853d21da79 100644 --- a/.github/workflows/daily-cache-strategy-analyzer.lock.yml +++ b/.github/workflows/daily-cache-strategy-analyzer.lock.yml @@ -29,8 +29,8 @@ # Imports: # - shared/aw-logs-24h-fetch-setup.md # - shared/meta-analysis-base.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/daily-cli-performance.lock.yml b/.github/workflows/daily-cli-performance.lock.yml index e3b2f6e545d..63fe97aff14 100644 --- a/.github/workflows/daily-cli-performance.lock.yml +++ b/.github/workflows/daily-cli-performance.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md -# - shared/go-make.md # - shared/mcp-pagination.md +# - shared/go-make.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/daily-cli-tools-tester.lock.yml b/.github/workflows/daily-cli-tools-tester.lock.yml index c47ef03638a..f32a8c6682e 100644 --- a/.github/workflows/daily-cli-tools-tester.lock.yml +++ b/.github/workflows/daily-cli-tools-tester.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md # # Secrets used: diff --git a/.github/workflows/daily-code-metrics.lock.yml b/.github/workflows/daily-code-metrics.lock.yml index 0729a38cb06..b91bda9c45d 100644 --- a/.github/workflows/daily-code-metrics.lock.yml +++ b/.github/workflows/daily-code-metrics.lock.yml @@ -28,11 +28,11 @@ # Resolved workflow manifest: # Imports: # - shared/crush.md -# - shared/daily-audit-discussion.md # - shared/otlp.md -# - shared/python-dataviz.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md +# - shared/python-dataviz.md # - shared/trends.md # # Secrets used: diff --git a/.github/workflows/daily-community-attribution.lock.yml b/.github/workflows/daily-community-attribution.lock.yml index 92aac4daa87..e286e87c89a 100644 --- a/.github/workflows/daily-community-attribution.lock.yml +++ b/.github/workflows/daily-community-attribution.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/community-attribution.md -# - shared/issue-dedup.md # - shared/otlp.md +# - shared/issue-dedup.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/daily-compiler-quality.lock.yml b/.github/workflows/daily-compiler-quality.lock.yml index bba6618a3d5..868c1fc59a9 100644 --- a/.github/workflows/daily-compiler-quality.lock.yml +++ b/.github/workflows/daily-compiler-quality.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # - shared/go-source-analysis.md # # Secrets used: diff --git a/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml b/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml index 369d1fd963e..fcef34eac6b 100644 --- a/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml +++ b/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/daily-doc-healer.lock.yml b/.github/workflows/daily-doc-healer.lock.yml index 2dcc6893fa5..7c89a9e09a1 100644 --- a/.github/workflows/daily-doc-healer.lock.yml +++ b/.github/workflows/daily-doc-healer.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index aba99082e85..e1d3fd6c33b 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/ai-coding-dictionary.md # - shared/github-guard-policy.md +# - shared/ai-coding-dictionary.md # - shared/otlp.md # # Secrets used: diff --git a/.github/workflows/daily-evals-report.lock.yml b/.github/workflows/daily-evals-report.lock.yml index cb47daf4943..31d69b14289 100644 --- a/.github/workflows/daily-evals-report.lock.yml +++ b/.github/workflows/daily-evals-report.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/meta-analysis-base.md -# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md +# - shared/otlp.md # - shared/daily-audit-base.md # # Secrets used: diff --git a/.github/workflows/daily-experiment-report.lock.yml b/.github/workflows/daily-experiment-report.lock.yml index 42a55cefa64..f5b9f656895 100644 --- a/.github/workflows/daily-experiment-report.lock.yml +++ b/.github/workflows/daily-experiment-report.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/otlp.md +# - shared/trending-charts-simple.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md -# - shared/trending-charts-simple.md # - shared/daily-audit-charts.md # # Secrets used: diff --git a/.github/workflows/daily-fact.lock.yml b/.github/workflows/daily-fact.lock.yml index 2798f6ea910..59f7a0c8db2 100644 --- a/.github/workflows/daily-fact.lock.yml +++ b/.github/workflows/daily-fact.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/mcp/mempalace.md # - shared/otlp.md +# - shared/mcp/mempalace.md # - shared/reporting.md # # inlined-imports: true diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml index a6c0c86cc7a..113e004e1ef 100644 --- a/.github/workflows/daily-file-diet.lock.yml +++ b/.github/workflows/daily-file-diet.lock.yml @@ -27,15 +27,15 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md +# - shared/skip-if-issue-open.md +# - shared/safe-output-app.md # - shared/otlp.md +# - shared/activation-app.md # - shared/reporting.md # - shared/daily-issue-base.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # - shared/go-source-analysis.md -# - shared/safe-output-app.md -# - shared/skip-if-issue-open.md # # Secrets used: # - DOCKER_PAT diff --git a/.github/workflows/daily-formal-spec-verifier.lock.yml b/.github/workflows/daily-formal-spec-verifier.lock.yml index d65190da926..f3430761a78 100644 --- a/.github/workflows/daily-formal-spec-verifier.lock.yml +++ b/.github/workflows/daily-formal-spec-verifier.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md # - shared/otlp.md +# - shared/activation-app.md # - shared/reporting.md # - shared/daily-issue-base.md # diff --git a/.github/workflows/daily-function-namer.lock.yml b/.github/workflows/daily-function-namer.lock.yml index a9ff3904ce6..c129a29b95a 100644 --- a/.github/workflows/daily-function-namer.lock.yml +++ b/.github/workflows/daily-function-namer.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/daily-geo-optimizer.lock.yml b/.github/workflows/daily-geo-optimizer.lock.yml index 22e426123c1..f203caa8260 100644 --- a/.github/workflows/daily-geo-optimizer.lock.yml +++ b/.github/workflows/daily-geo-optimizer.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/daily-graft-intelligence.lock.yml b/.github/workflows/daily-graft-intelligence.lock.yml index a8e7ffcf17c..d3abd6c8d56 100644 --- a/.github/workflows/daily-graft-intelligence.lock.yml +++ b/.github/workflows/daily-graft-intelligence.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md # - shared/gh.md # - shared/mcp/graft.md # - shared/noop-reminder.md +# - shared/activation-app.md # - shared/reporting.md # - shared/daily-issue-base.md # diff --git a/.github/workflows/daily-hippo-learn.lock.yml b/.github/workflows/daily-hippo-learn.lock.yml index a38355ffe70..ab896668d5f 100644 --- a/.github/workflows/daily-hippo-learn.lock.yml +++ b/.github/workflows/daily-hippo-learn.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/hippo-memory.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml index f104f09c149..57067937b26 100644 --- a/.github/workflows/daily-issues-report.lock.yml +++ b/.github/workflows/daily-issues-report.lock.yml @@ -27,15 +27,15 @@ # # Resolved workflow manifest: # Imports: -# - ../skills/jqschema/SKILL.md -# - shared/daily-audit-discussion.md # - shared/github-guard-policy.md +# - ../skills/jqschema/SKILL.md # - shared/issues-data-fetch.md -# - shared/otlp.md -# - shared/python-dataviz.md # - shared/python-nlp.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md +# - shared/python-dataviz.md # - shared/trends.md # # Secrets used: diff --git a/.github/workflows/daily-malicious-code-scan.lock.yml b/.github/workflows/daily-malicious-code-scan.lock.yml index f8e6a771eeb..71512ac17f8 100644 --- a/.github/workflows/daily-malicious-code-scan.lock.yml +++ b/.github/workflows/daily-malicious-code-scan.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md +# - shared/security-analysis-base.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md -# - shared/security-analysis-base.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml index 3ec88435400..1cd423c7ac3 100644 --- a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml +++ b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md +# - shared/reporting.md +# - shared/safe-output-app.md # - shared/mcp/serena.md # - shared/otlp.md -# - shared/reporting.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md -# - shared/safe-output-app.md # # Secrets used: # - GH_AW_AGENT_TOKEN diff --git a/.github/workflows/daily-multi-device-docs-tester.lock.yml b/.github/workflows/daily-multi-device-docs-tester.lock.yml index 5e212545d18..2718dc02449 100644 --- a/.github/workflows/daily-multi-device-docs-tester.lock.yml +++ b/.github/workflows/daily-multi-device-docs-tester.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/daily-news.lock.yml b/.github/workflows/daily-news.lock.yml index 9597de90768..1cdfe7232b1 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -27,14 +27,14 @@ # # Resolved workflow manifest: # Imports: -# - ../skills/jqschema/SKILL.md -# - shared/daily-audit-discussion.md +# - shared/repo-memory-standard.md # - shared/mcp/tavily.md +# - ../skills/jqschema/SKILL.md # - shared/otlp.md -# - shared/python-dataviz.md -# - shared/repo-memory-standard.md # - shared/reporting.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md +# - shared/python-dataviz.md # - shared/trends.md # # Secrets used: diff --git a/.github/workflows/daily-observability-report.lock.yml b/.github/workflows/daily-observability-report.lock.yml index fb67ec2e554..7206e0d4228 100644 --- a/.github/workflows/daily-observability-report.lock.yml +++ b/.github/workflows/daily-observability-report.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/meta-analysis-base.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md # # Secrets used: diff --git a/.github/workflows/daily-performance-summary.lock.yml b/.github/workflows/daily-performance-summary.lock.yml index fab7e627964..f16529ceade 100644 --- a/.github/workflows/daily-performance-summary.lock.yml +++ b/.github/workflows/daily-performance-summary.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/github-queries-mcp-script.md -# - shared/otlp.md # - shared/reporting.md -# - shared/daily-audit-base.md +# - shared/otlp.md # - shared/trending-charts-simple.md +# - shared/daily-audit-discussion.md +# - shared/daily-audit-base.md # - shared/daily-audit-charts.md # # Secrets used: diff --git a/.github/workflows/daily-regulatory.lock.yml b/.github/workflows/daily-regulatory.lock.yml index 1adf543ad55..2159e5d3e65 100644 --- a/.github/workflows/daily-regulatory.lock.yml +++ b/.github/workflows/daily-regulatory.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/github-queries-mcp-script.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md # # Secrets used: diff --git a/.github/workflows/daily-reliability-review.lock.yml b/.github/workflows/daily-reliability-review.lock.yml index b41929ee987..bcc68e1d417 100644 --- a/.github/workflows/daily-reliability-review.lock.yml +++ b/.github/workflows/daily-reliability-review.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md -# - shared/mcp/sentry.md # - shared/opencode.md +# - shared/sentry.md +# - shared/mcp/sentry.md # - shared/reporting.md +# - shared/activation-app.md # - shared/daily-issue-base.md -# - shared/sentry.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml index fe0fd5009ad..dae56e9884f 100644 --- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml +++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml @@ -27,14 +27,14 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md -# - shared/daily-audit-discussion.md # - shared/meta-analysis-base.md +# - shared/skip-if-issue-open.md # - shared/otlp.md +# - shared/activation-app.md # - shared/reporting.md -# - shared/daily-audit-base.md # - shared/daily-pr-base.md -# - shared/skip-if-issue-open.md +# - shared/daily-audit-discussion.md +# - shared/daily-audit-base.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/daily-repo-chronicle.lock.yml b/.github/workflows/daily-repo-chronicle.lock.yml index d8a5f14d4ca..8ea362d807f 100644 --- a/.github/workflows/daily-repo-chronicle.lock.yml +++ b/.github/workflows/daily-repo-chronicle.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/otlp.md -# - shared/python-dataviz.md # - shared/reporting.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md +# - shared/python-dataviz.md # - shared/trends.md # # Secrets used: diff --git a/.github/workflows/daily-safe-output-integrator.lock.yml b/.github/workflows/daily-safe-output-integrator.lock.yml index 727b9dc241b..34a6eb540ea 100644 --- a/.github/workflows/daily-safe-output-integrator.lock.yml +++ b/.github/workflows/daily-safe-output-integrator.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/daily-safe-output-optimizer.lock.yml b/.github/workflows/daily-safe-output-optimizer.lock.yml index 26ba9d3bf7d..8618a793fcc 100644 --- a/.github/workflows/daily-safe-output-optimizer.lock.yml +++ b/.github/workflows/daily-safe-output-optimizer.lock.yml @@ -27,14 +27,14 @@ # # Resolved workflow manifest: # Imports: -# - ../skills/jqschema/SKILL.md -# - shared/activation-app.md +# - shared/skip-if-issue-open.md # - shared/aw-logs-24h-fetch-setup.md -# - shared/daily-audit-discussion.md +# - shared/activation-app.md +# - ../skills/jqschema/SKILL.md # - shared/otlp.md # - shared/reporting.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md -# - shared/skip-if-issue-open.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/daily-safe-outputs-conformance.lock.yml b/.github/workflows/daily-safe-outputs-conformance.lock.yml index 33dc182281f..88b98e86620 100644 --- a/.github/workflows/daily-safe-outputs-conformance.lock.yml +++ b/.github/workflows/daily-safe-outputs-conformance.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md # # Secrets used: diff --git a/.github/workflows/daily-secrets-analysis.lock.yml b/.github/workflows/daily-secrets-analysis.lock.yml index 2d7f2590e6e..35cfa61be32 100644 --- a/.github/workflows/daily-secrets-analysis.lock.yml +++ b/.github/workflows/daily-secrets-analysis.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/otlp.md # - shared/reporting.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md # # Secrets used: diff --git a/.github/workflows/daily-security-observability.lock.yml b/.github/workflows/daily-security-observability.lock.yml index 388254a6ec5..745ae8987a8 100644 --- a/.github/workflows/daily-security-observability.lock.yml +++ b/.github/workflows/daily-security-observability.lock.yml @@ -27,13 +27,13 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/meta-analysis-base.md -# - shared/otlp.md # - shared/python-dataviz.md +# - shared/otlp.md +# - shared/trending-charts-simple.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md -# - shared/trending-charts-simple.md # - shared/daily-audit-charts.md # # Frontmatter env variables: diff --git a/.github/workflows/daily-security-red-team.lock.yml b/.github/workflows/daily-security-red-team.lock.yml index 43d2713768c..75d1fc0498f 100644 --- a/.github/workflows/daily-security-red-team.lock.yml +++ b/.github/workflows/daily-security-red-team.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/opencode.md -# - shared/otlp.md +# - shared/security-analysis-base.md # - shared/reporting.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md -# - shared/security-analysis-base.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/daily-semgrep-scan.lock.yml b/.github/workflows/daily-semgrep-scan.lock.yml index 09ed324801a..6eee3f4fe95 100644 --- a/.github/workflows/daily-semgrep-scan.lock.yml +++ b/.github/workflows/daily-semgrep-scan.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: +# - shared/security-analysis-base.md # - shared/mcp/semgrep.md # - shared/otlp.md -# - shared/security-analysis-base.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/daily-spdd-spec-planner.lock.yml b/.github/workflows/daily-spdd-spec-planner.lock.yml index b3762550744..886065e7fb0 100644 --- a/.github/workflows/daily-spdd-spec-planner.lock.yml +++ b/.github/workflows/daily-spdd-spec-planner.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md # - shared/otlp.md +# - shared/activation-app.md # - shared/reporting.md # - shared/daily-issue-base.md # diff --git a/.github/workflows/daily-storify.lock.yml b/.github/workflows/daily-storify.lock.yml index cb6ce30f4ab..268feb9e2bf 100644 --- a/.github/workflows/daily-storify.lock.yml +++ b/.github/workflows/daily-storify.lock.yml @@ -29,8 +29,8 @@ # Imports: # - shared/aw-logs-24h-fetch.md # - shared/daily-audit-discussion.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # - shared/daily-audit-base.md # # Secrets used: diff --git a/.github/workflows/daily-syntax-error-quality.lock.yml b/.github/workflows/daily-syntax-error-quality.lock.yml index 603ea3f978e..c1613059a0f 100644 --- a/.github/workflows/daily-syntax-error-quality.lock.yml +++ b/.github/workflows/daily-syntax-error-quality.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/daily-team-evolution-insights.lock.yml b/.github/workflows/daily-team-evolution-insights.lock.yml index e859e46fcae..3bf7ec3f8c6 100644 --- a/.github/workflows/daily-team-evolution-insights.lock.yml +++ b/.github/workflows/daily-team-evolution-insights.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/goose.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md # # Secrets used: diff --git a/.github/workflows/daily-testify-uber-super-expert.lock.yml b/.github/workflows/daily-testify-uber-super-expert.lock.yml index 66ffc3527f6..238797097cf 100644 --- a/.github/workflows/daily-testify-uber-super-expert.lock.yml +++ b/.github/workflows/daily-testify-uber-super-expert.lock.yml @@ -27,15 +27,15 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md +# - shared/skip-if-issue-open.md +# - shared/safe-output-app.md # - shared/otlp.md +# - shared/activation-app.md # - shared/reporting.md # - shared/daily-issue-base.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # - shared/go-source-analysis.md -# - shared/safe-output-app.md -# - shared/skip-if-issue-open.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/daily-token-consumption-report.lock.yml b/.github/workflows/daily-token-consumption-report.lock.yml index 2d921da9386..1dfb84324ff 100644 --- a/.github/workflows/daily-token-consumption-report.lock.yml +++ b/.github/workflows/daily-token-consumption-report.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/goose.md -# - shared/mcp/grafana.md # - shared/mcp/sentry.md -# - shared/otlp.md +# - shared/mcp/grafana.md # - shared/reporting.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md # # Secrets used: diff --git a/.github/workflows/dataflow-pr-discussion-dataset.lock.yml b/.github/workflows/dataflow-pr-discussion-dataset.lock.yml index 75c2cee35ec..30d67844a4a 100644 --- a/.github/workflows/dataflow-pr-discussion-dataset.lock.yml +++ b/.github/workflows/dataflow-pr-discussion-dataset.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/discussions-data-fetch.md -# - shared/otlp.md # - shared/pmg.md +# - shared/discussions-data-fetch.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml index 14f0e1ab280..1bfcbbbe0af 100644 --- a/.github/workflows/dead-code-remover.lock.yml +++ b/.github/workflows/dead-code-remover.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md +# - shared/skip-if-issue-open.md # - shared/otlp.md +# - shared/activation-app.md # - shared/reporting.md # - shared/daily-pr-base.md -# - shared/skip-if-issue-open.md # # Secrets used: # - GH_AW_CI_TRIGGER_TOKEN diff --git a/.github/workflows/deep-report.lock.yml b/.github/workflows/deep-report.lock.yml index 42624ac9a24..b7f65187816 100644 --- a/.github/workflows/deep-report.lock.yml +++ b/.github/workflows/deep-report.lock.yml @@ -27,15 +27,15 @@ # # Resolved workflow manifest: # Imports: +# - shared/meta-analysis-base.md # - ../skills/jqschema/SKILL.md -# - shared/default-ai-credits-pricing.md # - shared/discussions-data-fetch.md -# - shared/github-mcp-pagination-wrappers.md # - shared/mcp/agentdb.md -# - shared/meta-analysis-base.md -# - shared/otlp.md -# - shared/reporting.md # - shared/weekly-issues-data-fetch.md +# - shared/reporting.md +# - shared/github-mcp-pagination-wrappers.md +# - shared/otlp.md +# - shared/default-ai-credits-pricing.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/delight.lock.yml b/.github/workflows/delight.lock.yml index 6e139bb1563..a77a7c37639 100644 --- a/.github/workflows/delight.lock.yml +++ b/.github/workflows/delight.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md -# - shared/otlp.md -# - shared/repo-memory-standard.md # - shared/reporting.md +# - shared/repo-memory-standard.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md # # Secrets used: diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml index 3d1ab284255..bb2475fbd10 100644 --- a/.github/workflows/dependabot-burner.lock.yml +++ b/.github/workflows/dependabot-burner.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md # - shared/mcp-pagination.md # - shared/otlp.md # - shared/reporting.md +# - shared/activation-app.md # - shared/daily-pr-base.md # # Secrets used: diff --git a/.github/workflows/dependabot-go-checker.lock.yml b/.github/workflows/dependabot-go-checker.lock.yml index ad2f3721f8f..108281f5bae 100644 --- a/.github/workflows/dependabot-go-checker.lock.yml +++ b/.github/workflows/dependabot-go-checker.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/deployment-incident-monitor.lock.yml b/.github/workflows/deployment-incident-monitor.lock.yml index 639493ef33d..1d76a4eb024 100644 --- a/.github/workflows/deployment-incident-monitor.lock.yml +++ b/.github/workflows/deployment-incident-monitor.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/mcp-pagination.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/design-decision-gate.lock.yml b/.github/workflows/design-decision-gate.lock.yml index 1b5af44abdd..0aca497c563 100644 --- a/.github/workflows/design-decision-gate.lock.yml +++ b/.github/workflows/design-decision-gate.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - ../agents/adr-writer.agent.md # - shared/mcp-pagination.md -# - shared/otlp.md +# - ../agents/adr-writer.agent.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/detection-analysis-report.lock.yml b/.github/workflows/detection-analysis-report.lock.yml index f7d7e31b08e..8a05673c5fb 100644 --- a/.github/workflows/detection-analysis-report.lock.yml +++ b/.github/workflows/detection-analysis-report.lock.yml @@ -28,11 +28,11 @@ # Resolved workflow manifest: # Imports: # - shared/aw-logs-24h-fetch-setup.md +# - shared/reporting.md +# - shared/trending-charts-simple.md # - shared/daily-audit-discussion.md # - shared/otlp.md -# - shared/reporting.md # - shared/daily-audit-base.md -# - shared/trending-charts-simple.md # - shared/daily-audit-charts.md # # Secrets used: diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml index 39ee3ec76b7..24f6ee70bf3 100644 --- a/.github/workflows/dev-hawk.lock.yml +++ b/.github/workflows/dev-hawk.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/meta-analysis-base.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - DOCKER_PAT diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index e36d1f1790b..d822e9a4208 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml index 13a8c8a5ec8..ef575a1c5f7 100644 --- a/.github/workflows/dictation-prompt.lock.yml +++ b/.github/workflows/dictation-prompt.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - GH_AW_CI_TRIGGER_TOKEN diff --git a/.github/workflows/docs-noob-tester.lock.yml b/.github/workflows/docs-noob-tester.lock.yml index c2fcbd723db..f3fa341743e 100644 --- a/.github/workflows/docs-noob-tester.lock.yml +++ b/.github/workflows/docs-noob-tester.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/docs-server-lifecycle.md # - shared/keep-it-short.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/duplicate-code-detector.lock.yml b/.github/workflows/duplicate-code-detector.lock.yml index 3ba4c9f3595..7ffdfeb44f9 100644 --- a/.github/workflows/duplicate-code-detector.lock.yml +++ b/.github/workflows/duplicate-code-detector.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md # - shared/otlp.md # - shared/reporting.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # - shared/go-source-analysis.md # # Secrets used: diff --git a/.github/workflows/eslint-refiner.lock.yml b/.github/workflows/eslint-refiner.lock.yml index f2d9a2e18bb..6d4426e3c12 100644 --- a/.github/workflows/eslint-refiner.lock.yml +++ b/.github/workflows/eslint-refiner.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/otlp.md # - shared/reporting.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md # # Secrets used: diff --git a/.github/workflows/example-workflow-analyzer.lock.yml b/.github/workflows/example-workflow-analyzer.lock.yml index 66ae83c156c..e9f542eb292 100644 --- a/.github/workflows/example-workflow-analyzer.lock.yml +++ b/.github/workflows/example-workflow-analyzer.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/meta-analysis-base.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/functional-pragmatist.lock.yml b/.github/workflows/functional-pragmatist.lock.yml index d3462c5ab60..69d06606a8d 100644 --- a/.github/workflows/functional-pragmatist.lock.yml +++ b/.github/workflows/functional-pragmatist.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/github-mcp-structural-analysis.lock.yml b/.github/workflows/github-mcp-structural-analysis.lock.yml index 55f18d8f2d2..8315b867abc 100644 --- a/.github/workflows/github-mcp-structural-analysis.lock.yml +++ b/.github/workflows/github-mcp-structural-analysis.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md -# - shared/github-mcp-pagination-wrappers.md # - shared/mcp-pagination.md -# - shared/otlp.md +# - shared/github-mcp-pagination-wrappers.md # - shared/python-dataviz.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index cfee5f74b8d..07092fd077a 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/github-remote-mcp-auth-test.lock.yml b/.github/workflows/github-remote-mcp-auth-test.lock.yml index 826f3a901b2..13e42c38cd9 100644 --- a/.github/workflows/github-remote-mcp-auth-test.lock.yml +++ b/.github/workflows/github-remote-mcp-auth-test.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index fe5e625bd98..db9326dd977 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -27,13 +27,13 @@ # # Resolved workflow manifest: # Imports: -# - ../agents/technical-doc-writer.agent.md # - ../skills/documentation/SKILL.md +# - ../agents/technical-doc-writer.agent.md # - shared/ai-coding-dictionary.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md # - shared/otlp.md # - shared/reporting.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/go-fan.lock.yml b/.github/workflows/go-fan.lock.yml index 51a12651b06..743d1eb4f1d 100644 --- a/.github/workflows/go-fan.lock.yml +++ b/.github/workflows/go-fan.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md # - shared/otlp.md +# - shared/activation-app.md # - shared/reporting.md # - shared/daily-issue-base.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # - shared/go-source-analysis.md # # Secrets used: diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index 0b006e483bc..8900ae871b2 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Frontmatter env variables: # - GOTOOLCHAIN: (main workflow) diff --git a/.github/workflows/go-pattern-detector.lock.yml b/.github/workflows/go-pattern-detector.lock.yml index aae27ca4370..67821c89c54 100644 --- a/.github/workflows/go-pattern-detector.lock.yml +++ b/.github/workflows/go-pattern-detector.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/mcp/ast-grep.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/gpclean.lock.yml b/.github/workflows/gpclean.lock.yml index ab9b2fc1118..7c76eab0ed2 100644 --- a/.github/workflows/gpclean.lock.yml +++ b/.github/workflows/gpclean.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/grumpy-reviewer.lock.yml b/.github/workflows/grumpy-reviewer.lock.yml index f7b92424437..b3da46a1ce7 100644 --- a/.github/workflows/grumpy-reviewer.lock.yml +++ b/.github/workflows/grumpy-reviewer.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/github-guard-policy.md # - shared/otlp.md +# - shared/github-guard-policy.md # - shared/pr-code-review-config.md # - shared/pr-review-base.md # diff --git a/.github/workflows/hippo-embed.lock.yml b/.github/workflows/hippo-embed.lock.yml index 997b837c956..7bfcb3ddaad 100644 --- a/.github/workflows/hippo-embed.lock.yml +++ b/.github/workflows/hippo-embed.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: +# - shared/pmg.md # - shared/hippo-memory.md # - shared/otlp.md -# - shared/pmg.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/impeccable-skills-reviewer.lock.yml b/.github/workflows/impeccable-skills-reviewer.lock.yml index f5bce2d8b36..1488bbe9843 100644 --- a/.github/workflows/impeccable-skills-reviewer.lock.yml +++ b/.github/workflows/impeccable-skills-reviewer.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - shared/github-guard-policy.md +# - shared/reporting.md # - shared/otlp.md -# - shared/pr-code-review-config.md # - shared/pr-diff-data-fetch.md +# - shared/github-guard-policy.md +# - shared/pr-code-review-config.md # - shared/pr-review-base.md -# - shared/reporting.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index 2b426d6c0f7..c7f363a47f2 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/issue-arborist.lock.yml b/.github/workflows/issue-arborist.lock.yml index 3f3faaed4f9..00e9d79e1d8 100644 --- a/.github/workflows/issue-arborist.lock.yml +++ b/.github/workflows/issue-arborist.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - ../skills/jqschema/SKILL.md # - shared/github-guard-policy.md -# - shared/otlp.md +# - ../skills/jqschema/SKILL.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml index a483796d610..ac7064935ff 100644 --- a/.github/workflows/issue-monster.lock.yml +++ b/.github/workflows/issue-monster.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md -# - shared/github-guard-policy.md # - shared/mcp-pagination.md +# - shared/github-guard-policy.md +# - shared/activation-app.md # - shared/otlp.md # # Secrets used: diff --git a/.github/workflows/issue-triage-agent.lock.yml b/.github/workflows/issue-triage-agent.lock.yml index 4bfe8656a65..7537501b5f8 100644 --- a/.github/workflows/issue-triage-agent.lock.yml +++ b/.github/workflows/issue-triage-agent.lock.yml @@ -27,8 +27,8 @@ # Resolved workflow manifest: # Imports: # - shared/github-guard-policy.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index 6a0b271b9d1..db25fe5a716 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/linter-miner.lock.yml b/.github/workflows/linter-miner.lock.yml index cb359714eea..649a2f444c7 100644 --- a/.github/workflows/linter-miner.lock.yml +++ b/.github/workflows/linter-miner.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md # - shared/otlp.md # - shared/reporting.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # # Secrets used: # - DOCKER_PAT diff --git a/.github/workflows/lockfile-stats.lock.yml b/.github/workflows/lockfile-stats.lock.yml index 573cc56410c..206aba3b605 100644 --- a/.github/workflows/lockfile-stats.lock.yml +++ b/.github/workflows/lockfile-stats.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/mattpocock-skills-reviewer.lock.yml b/.github/workflows/mattpocock-skills-reviewer.lock.yml index ff57551c507..1533e9e01c3 100644 --- a/.github/workflows/mattpocock-skills-reviewer.lock.yml +++ b/.github/workflows/mattpocock-skills-reviewer.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/github-guard-policy.md # - shared/otlp.md -# - shared/pr-code-review-config.md # - shared/pr-diff-data-fetch.md +# - shared/github-guard-policy.md +# - shared/pr-code-review-config.md # - shared/pr-review-base.md # # Secrets used: diff --git a/.github/workflows/mcp-inspector.lock.yml b/.github/workflows/mcp-inspector.lock.yml index 787a9e516e1..814a3ae9d19 100644 --- a/.github/workflows/mcp-inspector.lock.yml +++ b/.github/workflows/mcp-inspector.lock.yml @@ -27,19 +27,19 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/mcp/ast-grep.md # - shared/mcp/datadog.md # - shared/mcp/deepwiki.md # - shared/mcp/microsoft-docs.md # - shared/mcp/sentry.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md # - shared/mcp/slack.md # - shared/mcp/tavily.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/org-health-report.lock.yml b/.github/workflows/org-health-report.lock.yml index c5c6e3e5064..62c4d607d93 100644 --- a/.github/workflows/org-health-report.lock.yml +++ b/.github/workflows/org-health-report.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - ../skills/jqschema/SKILL.md -# - shared/github-guard-policy.md # - shared/mcp-pagination.md -# - shared/otlp.md +# - shared/github-guard-policy.md # - shared/python-dataviz.md +# - ../skills/jqschema/SKILL.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index 29f6259fe6d..258015e0f37 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index 88a4c10031a..49f4c28a759 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/ponytail-reviewer.lock.yml b/.github/workflows/ponytail-reviewer.lock.yml index 1b6b54f4583..1083e1be057 100644 --- a/.github/workflows/ponytail-reviewer.lock.yml +++ b/.github/workflows/ponytail-reviewer.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/github-guard-policy.md # - shared/otlp.md -# - shared/pr-code-review-config.md # - shared/pr-diff-data-fetch.md +# - shared/github-guard-policy.md +# - shared/pr-code-review-config.md # - shared/pr-review-base.md # # Secrets used: diff --git a/.github/workflows/portfolio-analyst.lock.yml b/.github/workflows/portfolio-analyst.lock.yml index 1c821a1ba1a..376598e751d 100644 --- a/.github/workflows/portfolio-analyst.lock.yml +++ b/.github/workflows/portfolio-analyst.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/mcp/grafana.md # - shared/mcp/sentry.md -# - shared/python-dataviz.md +# - shared/mcp/grafana.md # - shared/reporting.md +# - shared/python-dataviz.md # - shared/trends.md # # Secrets used: diff --git a/.github/workflows/pr-code-quality-reviewer.lock.yml b/.github/workflows/pr-code-quality-reviewer.lock.yml index 48e862d5a23..735c67759e7 100644 --- a/.github/workflows/pr-code-quality-reviewer.lock.yml +++ b/.github/workflows/pr-code-quality-reviewer.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/github-guard-policy.md # - shared/otlp.md -# - shared/pr-code-review-config.md # - shared/pr-diff-data-fetch.md +# - shared/github-guard-policy.md +# - shared/pr-code-review-config.md # - shared/pr-review-base.md # # Secrets used: diff --git a/.github/workflows/pr-nitpick-reviewer.lock.yml b/.github/workflows/pr-nitpick-reviewer.lock.yml index 9df542dd117..c494b019cfc 100644 --- a/.github/workflows/pr-nitpick-reviewer.lock.yml +++ b/.github/workflows/pr-nitpick-reviewer.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: -# - shared/github-guard-policy.md +# - shared/reporting.md # - shared/otlp.md +# - shared/github-guard-policy.md # - shared/pr-code-review-config.md # - shared/pr-review-base.md -# - shared/reporting.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/pr-sous-chef.lock.yml b/.github/workflows/pr-sous-chef.lock.yml index d306194a760..8bf8cbbe1bd 100644 --- a/.github/workflows/pr-sous-chef.lock.yml +++ b/.github/workflows/pr-sous-chef.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: +# - shared/mcp-pagination.md +# - shared/otlp.md +# - shared/graders/state-revisit-probability-rep.md # - shared/graders/recurrence-determinism.md # - shared/graders/recurrence-laminarity.md -# - shared/graders/state-revisit-probability-rep.md # - shared/graders.md -# - shared/mcp-pagination.md -# - shared/otlp.md # # Secrets used: # - AWI_MAINTENANCE_TOKEN diff --git a/.github/workflows/pr-triage-agent.lock.yml b/.github/workflows/pr-triage-agent.lock.yml index b268e0c60b4..7db7fc7381f 100644 --- a/.github/workflows/pr-triage-agent.lock.yml +++ b/.github/workflows/pr-triage-agent.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: -# - shared/github-guard-policy.md +# - shared/reporting.md # - shared/otlp.md +# - shared/github-guard-policy.md # - shared/pr-code-review-config.md # - shared/pr-review-base.md -# - shared/reporting.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/prompt-clustering-analysis.lock.yml b/.github/workflows/prompt-clustering-analysis.lock.yml index c6bfec1df53..9d0883e8f7c 100644 --- a/.github/workflows/prompt-clustering-analysis.lock.yml +++ b/.github/workflows/prompt-clustering-analysis.lock.yml @@ -27,15 +27,15 @@ # # Resolved workflow manifest: # Imports: +# - shared/meta-analysis-base.md # - ../skills/jqschema/SKILL.md # - shared/copilot-pr-data-fetch.md -# - shared/daily-audit-discussion.md -# - shared/meta-analysis-base.md -# - shared/otlp.md # - shared/python-nlp.md +# - shared/otlp.md +# - shared/trending-charts-simple.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md -# - shared/trending-charts-simple.md # - shared/daily-audit-charts.md # # Secrets used: diff --git a/.github/workflows/purelock.lock.yml b/.github/workflows/purelock.lock.yml index de05e9fd762..bb1aae591b3 100644 --- a/.github/workflows/purelock.lock.yml +++ b/.github/workflows/purelock.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md # - shared/otlp.md # - shared/reporting.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # # Secrets used: # - GH_AW_CI_TRIGGER_TOKEN diff --git a/.github/workflows/python-data-charts.lock.yml b/.github/workflows/python-data-charts.lock.yml index cf55ca3e257..20bf0513fe7 100644 --- a/.github/workflows/python-data-charts.lock.yml +++ b/.github/workflows/python-data-charts.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/otlp.md -# - shared/python-dataviz.md # - shared/reporting.md +# - shared/python-dataviz.md # - shared/trends.md # - shared/charts-with-trending.md # diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index ae9bb01aa62..b4c9d88719a 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/q-safe-outputs.md +# - shared/otlp.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/refactoring-cadence.lock.yml b/.github/workflows/refactoring-cadence.lock.yml index 3f64b87028a..c49a4868593 100644 --- a/.github/workflows/refactoring-cadence.lock.yml +++ b/.github/workflows/refactoring-cadence.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md +# - shared/skip-if-issue-open.md # - shared/otlp.md +# - shared/activation-app.md # - shared/reporting.md # - shared/daily-issue-base.md -# - shared/skip-if-issue-open.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml index 8314519b3c0..d6580f86894 100644 --- a/.github/workflows/refiner.lock.yml +++ b/.github/workflows/refiner.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: -# - shared/github-guard-policy.md # - shared/otlp.md +# - shared/reporting.md +# - shared/github-guard-policy.md # - shared/pr-code-review-config.md # - shared/pr-review-base.md -# - shared/reporting.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/repo-audit-analyzer.lock.yml b/.github/workflows/repo-audit-analyzer.lock.yml index 8d649c07680..a913b4b590a 100644 --- a/.github/workflows/repo-audit-analyzer.lock.yml +++ b/.github/workflows/repo-audit-analyzer.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/mcp-pagination.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/repo-tree-map.lock.yml b/.github/workflows/repo-tree-map.lock.yml index 4eef987d132..73046795480 100644 --- a/.github/workflows/repo-tree-map.lock.yml +++ b/.github/workflows/repo-tree-map.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/repository-quality-improver.lock.yml b/.github/workflows/repository-quality-improver.lock.yml index 4dab12e8f5a..3ec43cddf5d 100644 --- a/.github/workflows/repository-quality-improver.lock.yml +++ b/.github/workflows/repository-quality-improver.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md +# - shared/repository-quality-report-template.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md -# - shared/repository-quality-report-template.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/research.lock.yml b/.github/workflows/research.lock.yml index 6ad985c9e4a..edc5fa8bd37 100644 --- a/.github/workflows/research.lock.yml +++ b/.github/workflows/research.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/mcp/tavily.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/safe-output-health.lock.yml b/.github/workflows/safe-output-health.lock.yml index 6f2e4c8b44e..793a31a7b03 100644 --- a/.github/workflows/safe-output-health.lock.yml +++ b/.github/workflows/safe-output-health.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - ../skills/jqschema/SKILL.md # - shared/aw-logs-24h-fetch.md -# - shared/daily-audit-discussion.md +# - ../skills/jqschema/SKILL.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/schema-consistency-checker.lock.yml b/.github/workflows/schema-consistency-checker.lock.yml index 73a8f9887db..b4e34873906 100644 --- a/.github/workflows/schema-consistency-checker.lock.yml +++ b/.github/workflows/schema-consistency-checker.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md # diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index 17e581accec..6914afb45f2 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: +# - shared/reporting.md +# - shared/mcp/tavily.md # - shared/mcp/deepwiki.md # - shared/mcp/microsoft-docs.md -# - shared/mcp/tavily.md # - shared/otlp.md -# - shared/reporting.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/security-review.lock.yml b/.github/workflows/security-review.lock.yml index 52f416e31cf..d20f40c20a2 100644 --- a/.github/workflows/security-review.lock.yml +++ b/.github/workflows/security-review.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: -# - shared/github-guard-policy.md +# - shared/security-analysis-base.md # - shared/otlp.md +# - shared/github-guard-policy.md # - shared/pr-code-review-config.md # - shared/pr-review-base.md -# - shared/security-analysis-base.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/semantic-function-refactor.lock.yml b/.github/workflows/semantic-function-refactor.lock.yml index af8e133b90a..7b6818fc569 100644 --- a/.github/workflows/semantic-function-refactor.lock.yml +++ b/.github/workflows/semantic-function-refactor.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md # - shared/otlp.md # - shared/reporting.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # - shared/go-source-analysis.md # # Secrets used: diff --git a/.github/workflows/sergo.lock.yml b/.github/workflows/sergo.lock.yml index 5ce275e5136..695d92ef510 100644 --- a/.github/workflows/sergo.lock.yml +++ b/.github/workflows/sergo.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md # - shared/otlp.md # - shared/reporting.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/skillet.lock.yml b/.github/workflows/skillet.lock.yml index 667fc2034db..77193acf794 100644 --- a/.github/workflows/skillet.lock.yml +++ b/.github/workflows/skillet.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/github-guard-policy.md # - shared/otlp.md +# - shared/github-guard-policy.md # - shared/pr-code-review-config.md # - shared/pr-review-base.md # diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml index af75af4f93d..15a284b41c1 100644 --- a/.github/workflows/slide-deck-maintainer.lock.yml +++ b/.github/workflows/slide-deck-maintainer.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md +# - shared/skip-if-issue-open.md # - shared/otlp.md +# - shared/activation-app.md # - shared/reporting.md # - shared/daily-pr-base.md -# - shared/skip-if-issue-open.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-agent-scoped-approved.lock.yml b/.github/workflows/smoke-agent-scoped-approved.lock.yml index ccc481451f3..7cd4b6748c3 100644 --- a/.github/workflows/smoke-agent-scoped-approved.lock.yml +++ b/.github/workflows/smoke-agent-scoped-approved.lock.yml @@ -29,8 +29,8 @@ # Imports: # - shared/github-guard-policy.md # - shared/otlp.md -# - shared/playwright-title-test.md # - shared/reporting.md +# - shared/playwright-title-test.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/smoke-aider.lock.yml b/.github/workflows/smoke-aider.lock.yml index 9d4fc5c62c4..40ef7a73962 100644 --- a/.github/workflows/smoke-aider.lock.yml +++ b/.github/workflows/smoke-aider.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/aider.md -# - shared/reporting.md # - shared/smoke-test-brevity.md +# - shared/reporting.md # # Secrets used: # - GH_AW_DEFAULT_OTLP_HEADERS diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index cdf4ddc053b..f98b4179f99 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -28,14 +28,14 @@ # Resolved workflow manifest: # Imports: # - shared/gh.md -# - shared/github-mcp-app.md -# - shared/go-make.md # - shared/mcp/tavily.md +# - shared/go-make.md +# - shared/github-mcp-app.md # - shared/otlp.md +# - shared/token-telemetry-check.md +# - shared/smoke-test-brevity.md # - shared/playwright-title-test.md # - shared/reporting.md -# - shared/smoke-test-brevity.md -# - shared/token-telemetry-check.md # # inlined-imports: true # diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index 492068f6c73..05416682706 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -28,15 +28,15 @@ # Resolved workflow manifest: # Imports: # - shared/gh.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md +# - shared/trufflehog.md # - shared/otlp.md +# - shared/token-telemetry-check.md +# - shared/smoke-test-brevity.md # - shared/playwright-title-test.md # - shared/reporting.md # - shared/reporting-otlp.md -# - shared/smoke-test-brevity.md -# - shared/token-telemetry-check.md -# - shared/trufflehog.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml index 13bb5390819..82bb3025c8d 100644 --- a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml @@ -27,15 +27,15 @@ # # Resolved workflow manifest: # Imports: -# - shared/gh.md # - shared/github-guard-policy.md +# - shared/gh.md +# - shared/reporting.md # - shared/github-queries-mcp-script.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md # - shared/otlp.md -# - shared/reporting.md -# - shared/smoke-test-brevity.md # - shared/token-telemetry-check.md +# - shared/smoke-test-brevity.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-copilot-aoai-entra.lock.yml b/.github/workflows/smoke-copilot-aoai-entra.lock.yml index 0b47e24e04b..d36775e95ce 100644 --- a/.github/workflows/smoke-copilot-aoai-entra.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-entra.lock.yml @@ -27,16 +27,16 @@ # # Resolved workflow manifest: # Imports: -# - shared/azure-auth.md -# - shared/gh.md # - shared/github-guard-policy.md +# - shared/gh.md +# - shared/reporting.md # - shared/github-queries-mcp-script.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md # - shared/otlp.md -# - shared/reporting.md -# - shared/smoke-test-brevity.md # - shared/token-telemetry-check.md +# - shared/azure-auth.md +# - shared/smoke-test-brevity.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # # Frontmatter env variables: # - AZURE_CONFIG_DIR: shared/azure-auth.md @@ -804,6 +804,11 @@ jobs: env: GH_AW_SKILL_DIR: ".github/skills" run: bash "${RUNNER_TEMP}/gh-aw/actions/restore_inline_skills.sh" + - env: + GH_AW_AZURE_CLIENT_ID: adb907fd-188c-4029-b67f-2559d96b2f1b + GH_AW_AZURE_TENANT_ID: 398a6654-997b-47e9-b12b-9515b896b4de + name: Re-authenticate Azure CLI with OIDC + run: "if [ -z \"$GH_AW_AZURE_OIDC_TOKEN_FILE\" ] || [ ! -f \"$GH_AW_AZURE_OIDC_TOKEN_FILE\" ]; then\n echo \"::error::Azure OIDC token file not found — the Fetch Azure OIDC token step may have failed\"\n exit 1\nfi\nmkdir -p \"$AZURE_CONFIG_DIR\"\nchmod 700 \"$AZURE_CONFIG_DIR\"\ncleanup() {\n rm -f \"$GH_AW_AZURE_OIDC_TOKEN_FILE\"\n}\ntrap cleanup EXIT\naz login --service-principal \\\n --username \"$GH_AW_AZURE_CLIENT_ID\" \\\n --tenant \"$GH_AW_AZURE_TENANT_ID\" \\\n --federated-token \"$(cat \"$GH_AW_AZURE_OIDC_TOKEN_FILE\")\" \\\n --output none \\\n --only-show-errors\naz account show --output table\n" - name: Setup Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: @@ -811,11 +816,6 @@ jobs: go-version-file: go.mod - name: Verify Go installation run: go version - - env: - GH_AW_AZURE_CLIENT_ID: adb907fd-188c-4029-b67f-2559d96b2f1b - GH_AW_AZURE_TENANT_ID: 398a6654-997b-47e9-b12b-9515b896b4de - name: Re-authenticate Azure CLI with OIDC - run: "if [ -z \"$GH_AW_AZURE_OIDC_TOKEN_FILE\" ] || [ ! -f \"$GH_AW_AZURE_OIDC_TOKEN_FILE\" ]; then\n echo \"::error::Azure OIDC token file not found — the Fetch Azure OIDC token step may have failed\"\n exit 1\nfi\nmkdir -p \"$AZURE_CONFIG_DIR\"\nchmod 700 \"$AZURE_CONFIG_DIR\"\ncleanup() {\n rm -f \"$GH_AW_AZURE_OIDC_TOKEN_FILE\"\n}\ntrap cleanup EXIT\naz login --service-principal \\\n --username \"$GH_AW_AZURE_CLIENT_ID\" \\\n --tenant \"$GH_AW_AZURE_TENANT_ID\" \\\n --federated-token \"$(cat \"$GH_AW_AZURE_OIDC_TOKEN_FILE\")\" \\\n --output none \\\n --only-show-errors\naz account show --output table\n" - name: Download container images run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/gh-aw-firewall/agent:0.28.12@sha256:390051be4ed1847f774fd8980b61d3a3523574c0175d00c3fc7cdf2002a88202 ghcr.io/github/gh-aw-firewall/api-proxy:0.28.12@sha256:d7d533d87c80d87ff91ac0e21e9299055c3beedff1536262b97ed700fb065a32 ghcr.io/github/gh-aw-firewall/cli-proxy:0.28.12@sha256:5250629d48eaedfedf2e948785228e8da29eec2a83cbab58ea0751c14a7b021d ghcr.io/github/gh-aw-firewall/squid:0.28.12@sha256:52c34aca98d2a6833c329f1505912a6949c4fda16618c010c979bd59ea99254f ghcr.io/github/gh-aw-mcpg:v0.4.14@sha256:b2f0c2b2f17b5fbe809e5bb99dc185b6ddd70df25295dc63a6d526350334eff5 ghcr.io/github/gh-aw-node@sha256:bac2192f6374d6262116399b34fc5e143d576f82719e90a18261cae7480f4d4e ghcr.io/github/github-mcp-server:v1.11.0@sha256:fbec75de11c255213fa08d80fb166abe73d851fff631c51c0079872967720699 ghcr.io/oraios/serena:1.7.0@sha256:6c9459e4246a39c9deaa4f23fb05a526ac6e237b24c8e84a927a098fa1ab6730 diff --git a/.github/workflows/smoke-copilot-arm.lock.yml b/.github/workflows/smoke-copilot-arm.lock.yml index 5f546acf84f..245caaf044e 100644 --- a/.github/workflows/smoke-copilot-arm.lock.yml +++ b/.github/workflows/smoke-copilot-arm.lock.yml @@ -29,13 +29,13 @@ # Imports: # - shared/gh.md # - shared/github-queries-mcp-script.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md # - shared/otlp.md +# - shared/token-telemetry-check.md +# - shared/smoke-test-brevity.md # - shared/reporting.md # - shared/reporting-otlp.md -# - shared/smoke-test-brevity.md -# - shared/token-telemetry-check.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-copilot-auto.lock.yml b/.github/workflows/smoke-copilot-auto.lock.yml index 107472994d0..ce1c7e900c1 100644 --- a/.github/workflows/smoke-copilot-auto.lock.yml +++ b/.github/workflows/smoke-copilot-auto.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/reporting.md # - shared/smoke-test-brevity.md +# - shared/reporting.md # # Secrets used: # - GH_AW_DEFAULT_OTLP_HEADERS diff --git a/.github/workflows/smoke-copilot-mai.lock.yml b/.github/workflows/smoke-copilot-mai.lock.yml index 3dd9d5cbfbf..9d529713128 100644 --- a/.github/workflows/smoke-copilot-mai.lock.yml +++ b/.github/workflows/smoke-copilot-mai.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/reporting.md # - shared/smoke-test-brevity.md +# - shared/reporting.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-copilot-sdk.lock.yml b/.github/workflows/smoke-copilot-sdk.lock.yml index 8d0814b3e85..e994a948eff 100644 --- a/.github/workflows/smoke-copilot-sdk.lock.yml +++ b/.github/workflows/smoke-copilot-sdk.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/reporting.md # - shared/smoke-test-brevity.md +# - shared/reporting.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-copilot-small.lock.yml b/.github/workflows/smoke-copilot-small.lock.yml index 180aa1c5834..80e3befc4d3 100644 --- a/.github/workflows/smoke-copilot-small.lock.yml +++ b/.github/workflows/smoke-copilot-small.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: -# - shared/playwright-title-test.md -# - shared/reporting.md # - shared/smoke-test-brevity.md +# - shared/reporting.md +# - shared/playwright-title-test.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index 2eb23ffa623..64dfd561110 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -27,16 +27,16 @@ # # Resolved workflow manifest: # Imports: -# - shared/gh.md # - shared/github-guard-policy.md +# - shared/gh.md +# - shared/reporting.md # - shared/github-queries-mcp-script.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md # - shared/otlp.md -# - shared/playwright-title-test.md -# - shared/reporting.md -# - shared/smoke-test-brevity.md # - shared/token-telemetry-check.md +# - shared/smoke-test-brevity.md +# - shared/playwright-title-test.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-create-cross-repo-pr.lock.yml b/.github/workflows/smoke-create-cross-repo-pr.lock.yml index 31a722757d9..3c2f595f13c 100644 --- a/.github/workflows/smoke-create-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-create-cross-repo-pr.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/otlp.md -# - shared/reporting.md # - shared/smoke-test-brevity.md +# - shared/reporting.md # # Secrets used: # - GH_AW_CI_TRIGGER_TOKEN diff --git a/.github/workflows/smoke-crush.lock.yml b/.github/workflows/smoke-crush.lock.yml index 488592dcffb..9e135e5de11 100644 --- a/.github/workflows/smoke-crush.lock.yml +++ b/.github/workflows/smoke-crush.lock.yml @@ -30,10 +30,10 @@ # - shared/crush.md # - shared/gh.md # - shared/otlp.md +# - shared/token-telemetry-check.md +# - shared/smoke-test-brevity.md # - shared/reporting.md # - shared/reporting-otlp.md -# - shared/smoke-test-brevity.md -# - shared/token-telemetry-check.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/smoke-cursor.lock.yml b/.github/workflows/smoke-cursor.lock.yml index dfac3983fb4..76b9767f870 100644 --- a/.github/workflows/smoke-cursor.lock.yml +++ b/.github/workflows/smoke-cursor.lock.yml @@ -30,10 +30,10 @@ # - shared/cursor.md # - shared/gh.md # - shared/otlp.md +# - shared/token-telemetry-check.md +# - shared/smoke-test-brevity.md # - shared/reporting.md # - shared/reporting-otlp.md -# - shared/smoke-test-brevity.md -# - shared/token-telemetry-check.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-deepseek-harness.lock.yml b/.github/workflows/smoke-deepseek-harness.lock.yml index 6fb2d4bf3d3..26e17f3e1ab 100644 --- a/.github/workflows/smoke-deepseek-harness.lock.yml +++ b/.github/workflows/smoke-deepseek-harness.lock.yml @@ -30,10 +30,10 @@ # - shared/deepseek-harness.md # - shared/gh.md # - shared/otlp.md +# - shared/token-telemetry-check.md +# - shared/smoke-test-brevity.md # - shared/reporting.md # - shared/reporting-otlp.md -# - shared/smoke-test-brevity.md -# - shared/token-telemetry-check.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/smoke-drive.lock.yml b/.github/workflows/smoke-drive.lock.yml index 4c2b014219c..e1b7ff9b95e 100644 --- a/.github/workflows/smoke-drive.lock.yml +++ b/.github/workflows/smoke-drive.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/reporting.md # - shared/smoke-test-brevity.md +# - shared/reporting.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-gemini.lock.yml b/.github/workflows/smoke-gemini.lock.yml index 574fef248db..4837a8ac161 100644 --- a/.github/workflows/smoke-gemini.lock.yml +++ b/.github/workflows/smoke-gemini.lock.yml @@ -28,11 +28,11 @@ # Resolved workflow manifest: # Imports: # - shared/otlp.md +# - shared/token-telemetry-check.md +# - shared/smoke-test-brevity.md # - shared/playwright-title-test.md # - shared/reporting.md # - shared/reporting-otlp.md -# - shared/smoke-test-brevity.md -# - shared/token-telemetry-check.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-goose.lock.yml b/.github/workflows/smoke-goose.lock.yml index ccef6e7c947..91f72bf730f 100644 --- a/.github/workflows/smoke-goose.lock.yml +++ b/.github/workflows/smoke-goose.lock.yml @@ -27,13 +27,13 @@ # # Resolved workflow manifest: # Imports: -# - shared/gh.md # - shared/goose.md +# - shared/gh.md # - shared/otlp.md +# - shared/token-telemetry-check.md +# - shared/smoke-test-brevity.md # - shared/reporting.md # - shared/reporting-otlp.md -# - shared/smoke-test-brevity.md -# - shared/token-telemetry-check.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/smoke-kiro.lock.yml b/.github/workflows/smoke-kiro.lock.yml index b80e67c5f76..ec272c8ea77 100644 --- a/.github/workflows/smoke-kiro.lock.yml +++ b/.github/workflows/smoke-kiro.lock.yml @@ -27,13 +27,13 @@ # # Resolved workflow manifest: # Imports: -# - shared/gh.md # - shared/kiro.md +# - shared/gh.md # - shared/otlp.md +# - shared/token-telemetry-check.md +# - shared/smoke-test-brevity.md # - shared/reporting.md # - shared/reporting-otlp.md -# - shared/smoke-test-brevity.md -# - shared/token-telemetry-check.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-opencode.lock.yml b/.github/workflows/smoke-opencode.lock.yml index e3fc8e5041c..10d2796fae8 100644 --- a/.github/workflows/smoke-opencode.lock.yml +++ b/.github/workflows/smoke-opencode.lock.yml @@ -27,13 +27,13 @@ # # Resolved workflow manifest: # Imports: -# - shared/gh.md # - shared/opencode.md +# - shared/gh.md # - shared/otlp.md +# - shared/token-telemetry-check.md +# - shared/smoke-test-brevity.md # - shared/reporting.md # - shared/reporting-otlp.md -# - shared/smoke-test-brevity.md -# - shared/token-telemetry-check.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-otel-backends.lock.yml b/.github/workflows/smoke-otel-backends.lock.yml index 5104ea0a745..c7e7113bdf6 100644 --- a/.github/workflows/smoke-otel-backends.lock.yml +++ b/.github/workflows/smoke-otel-backends.lock.yml @@ -27,14 +27,14 @@ # # Resolved workflow manifest: # Imports: -# - shared/datadog.md -# - shared/grafana.md # - shared/mcp/datadog.md # - shared/mcp/grafana.md # - shared/mcp/sentry.md # - shared/otel-queries.md -# - shared/reporting.md # - shared/sentry.md +# - shared/grafana.md +# - shared/datadog.md +# - shared/reporting.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-pi.lock.yml b/.github/workflows/smoke-pi.lock.yml index 6e37fcf237c..571605b8de5 100644 --- a/.github/workflows/smoke-pi.lock.yml +++ b/.github/workflows/smoke-pi.lock.yml @@ -29,9 +29,9 @@ # Imports: # - shared/gh.md # - shared/otlp.md +# - shared/smoke-test-brevity.md # - shared/reporting.md # - shared/reporting-otlp.md -# - shared/smoke-test-brevity.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml index 9801f19472c..7b940bf165a 100644 --- a/.github/workflows/smoke-project.lock.yml +++ b/.github/workflows/smoke-project.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/otlp.md -# - shared/reporting.md # - shared/token-telemetry-check.md +# - shared/reporting.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-pydantic.lock.yml b/.github/workflows/smoke-pydantic.lock.yml index 761f0dd349f..1659c3b3c07 100644 --- a/.github/workflows/smoke-pydantic.lock.yml +++ b/.github/workflows/smoke-pydantic.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/pydantic.md -# - shared/reporting.md # - shared/smoke-test-brevity.md +# - shared/reporting.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-service-ports.lock.yml b/.github/workflows/smoke-service-ports.lock.yml index 861b3178ba2..4dfff6622ae 100644 --- a/.github/workflows/smoke-service-ports.lock.yml +++ b/.github/workflows/smoke-service-ports.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/otlp.md -# - shared/reporting.md # - shared/token-telemetry-check.md +# - shared/reporting.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-temporary-id.lock.yml b/.github/workflows/smoke-temporary-id.lock.yml index 096c5a7f5b7..48617c455e8 100644 --- a/.github/workflows/smoke-temporary-id.lock.yml +++ b/.github/workflows/smoke-temporary-id.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/otlp.md -# - shared/reporting.md # - shared/token-telemetry-check.md +# - shared/reporting.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-test-tools.lock.yml b/.github/workflows/smoke-test-tools.lock.yml index aa5d5ea4ac4..72db5fa3f67 100644 --- a/.github/workflows/smoke-test-tools.lock.yml +++ b/.github/workflows/smoke-test-tools.lock.yml @@ -28,9 +28,9 @@ # Resolved workflow manifest: # Imports: # - shared/otlp.md -# - shared/playwright-title-test.md -# - shared/reporting.md # - shared/token-telemetry-check.md +# - shared/reporting.md +# - shared/playwright-title-test.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/smoke-update-cross-repo-pr.lock.yml b/.github/workflows/smoke-update-cross-repo-pr.lock.yml index d5529b2234b..cd6ad9d5b22 100644 --- a/.github/workflows/smoke-update-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-update-cross-repo-pr.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/otlp.md -# - shared/reporting.md # - shared/smoke-test-brevity.md +# - shared/reporting.md # # Secrets used: # - GH_AW_CI_TRIGGER_TOKEN diff --git a/.github/workflows/spec-enforcer.lock.yml b/.github/workflows/spec-enforcer.lock.yml index ad791fcf405..388f81b4c19 100644 --- a/.github/workflows/spec-enforcer.lock.yml +++ b/.github/workflows/spec-enforcer.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/spec-extractor.lock.yml b/.github/workflows/spec-extractor.lock.yml index a001703d9d2..01b51171e1b 100644 --- a/.github/workflows/spec-extractor.lock.yml +++ b/.github/workflows/spec-extractor.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # - shared/go-source-analysis.md # # Secrets used: diff --git a/.github/workflows/spec-librarian.lock.yml b/.github/workflows/spec-librarian.lock.yml index 4cbf02d681f..1cf9a8f6ac2 100644 --- a/.github/workflows/spec-librarian.lock.yml +++ b/.github/workflows/spec-librarian.lock.yml @@ -27,14 +27,14 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md -# - shared/otlp.md # - shared/reporting.md +# - shared/skip-if-issue-open.md +# - shared/otlp.md +# - shared/activation-app.md # - shared/daily-issue-base.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # - shared/go-source-analysis.md -# - shared/skip-if-issue-open.md # # Secrets used: # - GH_AW_AGENT_TOKEN diff --git a/.github/workflows/squad-game-planner.lock.yml b/.github/workflows/squad-game-planner.lock.yml index 157393d03b1..49017384e0e 100644 --- a/.github/workflows/squad-game-planner.lock.yml +++ b/.github/workflows/squad-game-planner.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/reporting.md # - shared/squad.md +# - shared/reporting.md # # Secrets used: # - GH_AW_DEFAULT_OTLP_HEADERS diff --git a/.github/workflows/squad-plan.lock.yml b/.github/workflows/squad-plan.lock.yml index d37638f610b..04be93f8c92 100644 --- a/.github/workflows/squad-plan.lock.yml +++ b/.github/workflows/squad-plan.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/reporting.md # - shared/squad.md +# - shared/reporting.md # # Secrets used: # - GH_AW_DEFAULT_OTLP_HEADERS diff --git a/.github/workflows/squad.lock.yml b/.github/workflows/squad.lock.yml index 86f7c94a150..3bdca189787 100644 --- a/.github/workflows/squad.lock.yml +++ b/.github/workflows/squad.lock.yml @@ -29,9 +29,9 @@ # # Resolved workflow manifest: # Imports: +# - shared/squad.md # - shared/planning-ontology.md # - shared/planning-policy.md -# - shared/squad.md # # Secrets used: # - GH_AW_CI_TRIGGER_TOKEN diff --git a/.github/workflows/stale-repo-identifier.lock.yml b/.github/workflows/stale-repo-identifier.lock.yml index 2bbc655df4e..d8dc9593d8f 100644 --- a/.github/workflows/stale-repo-identifier.lock.yml +++ b/.github/workflows/stale-repo-identifier.lock.yml @@ -27,14 +27,14 @@ # # Resolved workflow manifest: # Imports: -# - ../skills/jqschema/SKILL.md -# - shared/daily-audit-discussion.md -# - shared/github-guard-policy.md # - shared/mcp-pagination.md +# - shared/github-guard-policy.md +# - ../skills/jqschema/SKILL.md # - shared/otlp.md # - shared/reporting.md -# - shared/daily-audit-base.md # - shared/trending-charts-simple.md +# - shared/daily-audit-discussion.md +# - shared/daily-audit-base.md # - shared/daily-audit-charts.md # # Frontmatter env variables: diff --git a/.github/workflows/static-analysis-report.lock.yml b/.github/workflows/static-analysis-report.lock.yml index e331cdaa89a..95d9e77a337 100644 --- a/.github/workflows/static-analysis-report.lock.yml +++ b/.github/workflows/static-analysis-report.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/meta-analysis-base.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/step-name-alignment.lock.yml b/.github/workflows/step-name-alignment.lock.yml index 3b536225b89..031e8f24542 100644 --- a/.github/workflows/step-name-alignment.lock.yml +++ b/.github/workflows/step-name-alignment.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: -# - shared/ai-coding-dictionary.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md +# - shared/ai-coding-dictionary.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/super-linter.lock.yml b/.github/workflows/super-linter.lock.yml index f200333f4f1..2432f278af1 100644 --- a/.github/workflows/super-linter.lock.yml +++ b/.github/workflows/super-linter.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index f7c78174133..734b5ec4c9a 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - ../agents/technical-doc-writer.agent.md # - ../skills/documentation/SKILL.md +# - ../agents/technical-doc-writer.agent.md # - shared/ai-coding-dictionary.md # - shared/otlp.md # - shared/reporting.md diff --git a/.github/workflows/terminal-stylist.lock.yml b/.github/workflows/terminal-stylist.lock.yml index 4bdedb02f5e..26e481d7bca 100644 --- a/.github/workflows/terminal-stylist.lock.yml +++ b/.github/workflows/terminal-stylist.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # # Secrets used: # - CODEX_API_KEY diff --git a/.github/workflows/test-quality-sentinel.lock.yml b/.github/workflows/test-quality-sentinel.lock.yml index b45a622d5f2..412be9c0f76 100644 --- a/.github/workflows/test-quality-sentinel.lock.yml +++ b/.github/workflows/test-quality-sentinel.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/typist.lock.yml b/.github/workflows/typist.lock.yml index c22226302bc..e9af110c3a1 100644 --- a/.github/workflows/typist.lock.yml +++ b/.github/workflows/typist.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md -# - shared/mcp/serena-go.md -# - shared/mcp/serena.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md +# - shared/mcp/serena.md +# - shared/mcp/serena-go.md # # Secrets used: # - ANTHROPIC_API_KEY diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml index 64912f86f39..880f97058d8 100644 --- a/.github/workflows/ubuntu-image-analyzer.lock.yml +++ b/.github/workflows/ubuntu-image-analyzer.lock.yml @@ -27,11 +27,11 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md +# - shared/skip-if-issue-open.md # - shared/otlp.md +# - shared/activation-app.md # - shared/reporting.md # - shared/daily-pr-base.md -# - shared/skip-if-issue-open.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/uk-ai-operational-resilience.lock.yml b/.github/workflows/uk-ai-operational-resilience.lock.yml index bc02a5ec241..e8805e5461d 100644 --- a/.github/workflows/uk-ai-operational-resilience.lock.yml +++ b/.github/workflows/uk-ai-operational-resilience.lock.yml @@ -27,10 +27,10 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/mcp-pagination.md # - shared/otlp.md # - shared/reporting.md +# - shared/daily-audit-discussion.md # - shared/daily-audit-base.md # # Secrets used: diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index d2650b4d792..fc7a15872ca 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: -# - shared/activation-app.md # - shared/otlp.md # - shared/reporting.md +# - shared/activation-app.md # - shared/daily-pr-base.md # # Secrets used: diff --git a/.github/workflows/weekly-blog-post-writer.lock.yml b/.github/workflows/weekly-blog-post-writer.lock.yml index cda1e62c369..146519d05cb 100644 --- a/.github/workflows/weekly-blog-post-writer.lock.yml +++ b/.github/workflows/weekly-blog-post-writer.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/github-guard-policy.md # - shared/mcp-pagination.md +# - shared/github-guard-policy.md # - shared/otlp.md # # Secrets used: diff --git a/.github/workflows/weekly-issue-summary.lock.yml b/.github/workflows/weekly-issue-summary.lock.yml index 5b47911c887..aba771757ba 100644 --- a/.github/workflows/weekly-issue-summary.lock.yml +++ b/.github/workflows/weekly-issue-summary.lock.yml @@ -27,12 +27,12 @@ # # Resolved workflow manifest: # Imports: -# - shared/daily-audit-discussion.md # - shared/github-guard-policy.md # - shared/otlp.md -# - shared/python-dataviz.md +# - shared/daily-audit-discussion.md # - shared/reporting.md # - shared/daily-audit-base.md +# - shared/python-dataviz.md # - shared/trends.md # # Secrets used: diff --git a/.github/workflows/workflow-health-manager.lock.yml b/.github/workflows/workflow-health-manager.lock.yml index b70a1f74f7b..06e7717f524 100644 --- a/.github/workflows/workflow-health-manager.lock.yml +++ b/.github/workflows/workflow-health-manager.lock.yml @@ -27,9 +27,9 @@ # # Resolved workflow manifest: # Imports: -# - shared/default-ai-credits-pricing.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md +# - shared/default-ai-credits-pricing.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/.github/workflows/workflow-normalizer.lock.yml b/.github/workflows/workflow-normalizer.lock.yml index 30b2dd8e65f..03c0da2b270 100644 --- a/.github/workflows/workflow-normalizer.lock.yml +++ b/.github/workflows/workflow-normalizer.lock.yml @@ -28,8 +28,8 @@ # Resolved workflow manifest: # Imports: # - shared/aw-logs-24h-fetch.md -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - GH_AW_GITHUB_MCP_SERVER_TOKEN diff --git a/.github/workflows/workflow-skill-extractor.lock.yml b/.github/workflows/workflow-skill-extractor.lock.yml index 1a243bb1d6c..a05649ac2b3 100644 --- a/.github/workflows/workflow-skill-extractor.lock.yml +++ b/.github/workflows/workflow-skill-extractor.lock.yml @@ -27,8 +27,8 @@ # # Resolved workflow manifest: # Imports: -# - shared/otlp.md # - shared/reporting.md +# - shared/otlp.md # # Secrets used: # - COPILOT_GITHUB_TOKEN diff --git a/CHANGELOG.md b/CHANGELOG.md index 257e80ff265..bdca68ad54c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -536,6 +536,12 @@ MCP Gateway v0.1.5 introduces stricter MCP server validation: ### Bug Fixes +#### Order nested imported steps by dependency and detect subdirectory cycles + +Imported `steps`, `pre-agent-steps`, and `post-steps` now place prerequisites +before the files that import them, regardless of traversal order. Import cycles +in subdirectories now fail compilation instead of producing a lock file. + #### Create organization and enterprise defaults with explicit variable visibility `gh aw env update` now sends the required visibility when creating organization diff --git a/docs/adr/57746-fix-nested-import-dependency-order-and-cycle-detection.md b/docs/adr/57746-fix-nested-import-dependency-order-and-cycle-detection.md new file mode 100644 index 00000000000..643edf8a201 --- /dev/null +++ b/docs/adr/57746-fix-nested-import-dependency-order-and-cycle-detection.md @@ -0,0 +1,50 @@ +# ADR-57746: Fix Nested Import Dependency Order and Cycle Detection + +**Date**: 2026-09-01 +**Status**: Draft +**Deciders**: pelikhan, adr-writer agent + +--- + +### Context + +This pull request changes how `gh-aw` resolves and merges nested workflow imports in the parser and compiler pipeline. The PR body states that the existing breadth-first merge order allowed dependents to run before their prerequisites and that relative dependency edges from subdirectories were being lost, which prevented reliable cycle detection. The diff updates the parser’s topological ordering and cycle detection behavior, adds contract and regression tests for diamond graphs, sibling declaration order, scalar precedence, role invariance, and nested cycles, and regenerates compiled workflow manifests to reflect the new deterministic import order. Because import ordering affects compiled workflow behavior across many workflows, the resolution strategy should be recorded explicitly. + +### Decision + +We will preserve breadth-first discovery for import collection, but apply dependency-aware topological ordering when emitting imported workflow artifacts and merged step fields. Nested imports will retain their canonical full-path dependency edges so subdirectory relationships participate in cycle detection and ordering, and tie-breaks among simultaneously ready nodes will follow declaration/discovery order for deterministic first-wins scalar semantics. We chose this approach because it fixes prerequisite-before-dependent ordering bugs and restores actionable cycle diagnostics without giving up deterministic merge behavior. + +### Alternatives Considered + +#### Alternative 1: Keep Pure BFS Emission Order + +Continue emitting imported files and merged fields in the order discovered by breadth-first traversal. + +This was considered because BFS discovery is simple and already documented in the compilation process reference. It was not chosen because the PR evidence shows BFS emission let dependents appear before their prerequisites, which broke step ordering and scalar precedence in nested import graphs. + +#### Alternative 2: Use Lexical or Path-Sorted Ordering After Discovery + +Sort imported files alphabetically or by normalized path after collecting the import graph. + +This was considered because lexical ordering is deterministic and easy to explain. It was not chosen because the tests in this PR explicitly show lexical order can violate dependency constraints in diamond and branch-shaped graphs, and it would not preserve declaration-order tie-breaks that current merge semantics depend on. + +### Consequences + +#### Positive +- Imported `steps`, `pre-agent-steps`, and `post-steps` now run in dependency order, so prerequisites appear before the workflows that depend on them. +- Cycle detection works across nested subdirectories using canonical full-path edges, producing more reliable and actionable diagnostics. +- Deterministic declaration-order tie-breaks preserve first-wins behavior for scalar fields such as `max-turns` while still honoring dependency constraints. + +#### Negative +- Import processing logic becomes more complex because discovery order and emission order are now distinct concepts that must both remain correct. +- Existing generated workflow manifests change order in many files, creating broad lockfile churn even though the semantic change is localized. +- Documentation that previously described BFS processing as the effective ordering model now needs clarification so future contributors do not reintroduce the bug. + +#### Neutral +- Breadth-first traversal remains the collection mechanism for discovering imports, but topological sort becomes the authoritative merge/emission order. +- The repository adds more contract-style tests around import ordering, scalar precedence, role invariance, and nested cycles. +- The user-visible change is primarily in deterministic ordering and diagnostics rather than in new workflow surface area. + +--- + +*ADR created by [adr-writer agent]. Review and finalize before changing status from Draft to Accepted.* diff --git a/docs/src/content/docs/reference/imports.md b/docs/src/content/docs/reference/imports.md index d3614ddb785..3776e7816df 100644 --- a/docs/src/content/docs/reference/imports.md +++ b/docs/src/content/docs/reference/imports.md @@ -312,7 +312,7 @@ Shared workflow files (without `on:` field) can define the fields below. Other f ### Field-Specific Merge Semantics -Imports are processed using breadth-first traversal: direct imports first, then nested. Earlier imports in the list take precedence; circular imports fail at compile time. +Imported step fields use dependency order: a file's steps are processed after the steps from everything it imports and before the steps from anything that imports it. Ties retain declaration order, and circular imports fail at compile time. Other fields keep discovery order (direct imports first, then nested), so first-wins scalar precedence remains backward compatible. | Field | Merge strategy | |-------|---------------| @@ -327,9 +327,9 @@ Imports are processed using breadth-first traversal: direct imports first, then | `github-app:` | Main workflow's `github-app` takes precedence; first imported value fills in if main does not define one. | | `checkout:` | Imported checkout entries are appended after the main workflow's entries. For duplicate (repository, path) pairs, the main workflow's entry takes precedence: first-seen wins for `ref`, and auth is mutually exclusive — once `github-token` or `github-app` is set by the main workflow, an imported duplicate cannot add the other auth method. `checkout: false` in the main workflow disables all checkout including imported entries. | | `engine.mcp` | First-wins across imports. Shared files may define `engine:` with only `mcp.tool-timeout` and/or `mcp.session-timeout` (no engine identifier). The importing workflow's own engine setting always takes precedence; the first imported value fills in if the main workflow does not set a value. | -| `steps:` | Imported steps prepended to main; concatenated in import order. | -| `pre-agent-steps:` | Imported pre-agent-steps prepended to main; concatenated in import order. | -| `post-steps:` | Imported post-steps appended after main; concatenated in import order. | +| `steps:` | Imported steps are prepended to main in dependency order; prerequisites precede dependents and unrelated siblings retain declaration order. | +| `pre-agent-steps:` | Imported pre-agent steps are prepended to main in dependency order; prerequisites precede dependents and unrelated siblings retain declaration order. | +| `post-steps:` | Imported post-steps are appended after main in dependency order; prerequisites precede dependents and unrelated siblings retain declaration order. | | `jobs:` | Not merged — define only in the main workflow. Use `safe-outputs.jobs` for importable jobs. | | `safe-outputs.jobs` | Names must be unique; duplicates fail. Order determined by `needs:` dependencies. | | `env:` | Main workflow env vars take precedence over imports. Duplicate keys across different imports fail compilation — move to the main workflow to override imported values. | @@ -380,7 +380,7 @@ steps: Process the issue using the rotated token from the imported step. ``` -Steps from imports run **before** steps defined in the main workflow, in import declaration order. +Steps from imports run **before** steps defined in the main workflow. Imported prerequisites run before the files that depend on them, while unrelated sibling imports retain declaration order. ### Importing MCP Servers diff --git a/pkg/parser/import_bfs.go b/pkg/parser/import_bfs.go index 22cbab8fdd1..8345f9ce819 100644 --- a/pkg/parser/import_bfs.go +++ b/pkg/parser/import_bfs.go @@ -43,12 +43,26 @@ func processImportsFromFrontmatterWithManifestAndSource(frontmatter map[string]a return nil, err } parserLog.Printf("Completed BFS traversal. Processed %d imports in total", len(state.processedOrder)) - topologicalOrder, err := topologicalSortImports(state.processedOrder, baseDir, cache, workflowFilePath) + priorities := make(map[string]int, len(state.processedOrder)) + for fullPath, item := range state.processedItems { + priorities[fullPath] = item.priority + } + topologicalOrder, err := topologicalSortImports(state.processedOrder, state.dependencies, state.importPaths, priorities, workflowFilePath) if err != nil { return nil, err } - parserLog.Printf("Sorted imports in topological order: %v", topologicalOrder) - return state.acc.toImportsResult(topologicalOrder), nil + for _, fullPath := range topologicalOrder { + item := state.processedItems[fullPath] + if item.frontmatter != nil { + state.acc.extractOrderedStepFields(item.frontmatter) + } + } + displayOrder := make([]string, 0, len(topologicalOrder)) + for _, fullPath := range topologicalOrder { + displayOrder = append(displayOrder, state.importPaths[fullPath]) + } + parserLog.Printf("Sorted imports in topological order: %v", displayOrder) + return state.acc.toImportsResult(displayOrder), nil } type nestedImportEntry struct { @@ -61,14 +75,20 @@ type importBFSState struct { visited map[string]struct{} visitedInputs map[string]map[string]any processedOrder []string + processedItems map[string]importQueueItem + dependencies map[string][]string + importPaths map[string]string acc *importAccumulator } func newImportBFSState() *importBFSState { return &importBFSState{ - visited: make(map[string]struct{}), - visitedInputs: make(map[string]map[string]any), - acc: newImportAccumulator(), + visited: make(map[string]struct{}), + visitedInputs: make(map[string]map[string]any), + processedItems: make(map[string]importQueueItem), + dependencies: make(map[string][]string), + importPaths: make(map[string]string), + acc: newImportAccumulator(), } } @@ -113,15 +133,15 @@ func importSpecsFromStringSlice(paths []string) []ImportSpec { } func seedInitialImportQueue(importSpecs []ImportSpec, baseDir string, cache *ImportCache, workflowFilePath string, yamlContent string, state *importBFSState) error { - for _, importSpec := range importSpecs { - if err := seedSingleImportSpec(importSpec, baseDir, cache, workflowFilePath, yamlContent, state); err != nil { + for index, importSpec := range importSpecs { + if err := seedSingleImportSpec(importSpec, index, baseDir, cache, workflowFilePath, yamlContent, state); err != nil { return err } } return nil } -func seedSingleImportSpec(importSpec ImportSpec, baseDir string, cache *ImportCache, workflowFilePath string, yamlContent string, state *importBFSState) error { +func seedSingleImportSpec(importSpec ImportSpec, priority int, baseDir string, cache *ImportCache, workflowFilePath string, yamlContent string, state *importBFSState) error { importPath := importSpec.Path filePath, sectionName := splitPathAndSection(importPath) fullPath, err := resolveSeedImportPath(filePath, importPath, baseDir, cache, workflowFilePath, yamlContent) @@ -137,7 +157,7 @@ func seedSingleImportSpec(importSpec ImportSpec, baseDir string, cache *ImportCa if err != nil { return err } - return enqueueImportPath(state, importPath, fullPath, sectionName, baseDir, importSpec.Inputs, origin) + return enqueueImportPath(state, importPath, fullPath, sectionName, baseDir, importSpec.Inputs, origin, priority) } func resolveSeedImportPath(filePath, importPath, baseDir string, cache *ImportCache, workflowFilePath string, yamlContent string) (string, error) { @@ -193,12 +213,12 @@ func detectRemoteImportOrigin(filePath string) (*remoteImportOrigin, error) { return origin, nil } -func enqueueImportPath(state *importBFSState, importPath, fullPath, sectionName, baseDir string, inputs map[string]any, origin *remoteImportOrigin) error { +func enqueueImportPath(state *importBFSState, importPath, fullPath, sectionName, baseDir string, inputs map[string]any, origin *remoteImportOrigin, priority int) error { if !setutil.Contains(state.visited, fullPath) { state.visited[fullPath] = struct{}{} state.visitedInputs[fullPath] = inputs state.queue = append(state.queue, importQueueItem{ - importPath: importPath, fullPath: fullPath, sectionName: sectionName, baseDir: baseDir, inputs: inputs, remoteOrigin: origin, + importPath: importPath, fullPath: fullPath, sectionName: sectionName, baseDir: baseDir, inputs: inputs, remoteOrigin: origin, priority: priority, }) parserLog.Printf("Queued import: %s (resolved to %s)", importPath, fullPath) return nil @@ -224,7 +244,9 @@ func processImportQueue(baseDir string, cache *ImportCache, workflowFilePath str func processQueueItem(item importQueueItem, baseDir string, cache *ImportCache, workflowFilePath string, yamlContent string, state *importBFSState) error { parserLog.Printf("Processing import from queue: %s", item.fullPath) maps.Copy(state.acc.importInputs, item.inputs) - state.processedOrder = append(state.processedOrder, item.importPath) + state.processedOrder = append(state.processedOrder, item.fullPath) + state.importPaths[item.fullPath] = item.importPath + state.processedItems[item.fullPath] = item handled, err := handleAgentImportItem(item, state) if handled || err != nil { return err @@ -326,14 +348,17 @@ func handleStandardImportItem(item importQueueItem, baseDir string, cache *Impor return fmt.Errorf("failed to read imported file '%s': %w", item.fullPath, err) } result, parseErr := extractImportFrontmatterForNested(content, item) + item.content = content if parseErr != nil { parserLog.Printf("Failed to extract frontmatter from %s: %v", item.fullPath, parseErr) } else if result.Frontmatter != nil { + item.frontmatter = result.Frontmatter if err := enqueueNestedImports(result.Frontmatter, item, baseDir, cache, workflowFilePath, yamlContent, state); err != nil { return err } } - return state.acc.extractAllImportFields(content, item, state.visited) + state.processedItems[item.fullPath] = item + return state.acc.extractImportFields(content, item, state.visited, false) } func extractImportFrontmatterForNested(content []byte, item importQueueItem) (*FrontmatterResult, error) { @@ -401,8 +426,9 @@ func enqueueNestedImportEntry(entry nestedImportEntry, item importQueueItem, bas if err != nil { return formatNestedResolveError(nestedImportPath, nestedFilePath, item, workflowFilePath, yamlContent, err) } + state.dependencies[item.fullPath] = append(state.dependencies[item.fullPath], nestedFullPath) canonicalImportPath := canonicalizeNestedImportPath(nestedImportPath, nestedBaseDir, baseDir, nestedRemoteOrigin, nestedFullPath) - return enqueueNestedVisitedPath(state, canonicalImportPath, nestedFullPath, nestedSectionName, baseDir, entry.inputs, nestedRemoteOrigin) + return enqueueNestedVisitedPath(state, canonicalImportPath, nestedFullPath, nestedSectionName, baseDir, entry.inputs, nestedRemoteOrigin, item.priority) } func resolveNestedImportPathAndOrigin(item importQueueItem, nestedFilePath string) (string, *remoteImportOrigin, error) { @@ -470,12 +496,12 @@ func canonicalizeNestedImportPath(nestedImportPath, nestedBaseDir, baseDir strin return filepath.ToSlash(rel) } -func enqueueNestedVisitedPath(state *importBFSState, nestedImportPath, nestedFullPath, nestedSectionName, baseDir string, inputs map[string]any, nestedRemoteOrigin *remoteImportOrigin) error { +func enqueueNestedVisitedPath(state *importBFSState, nestedImportPath, nestedFullPath, nestedSectionName, baseDir string, inputs map[string]any, nestedRemoteOrigin *remoteImportOrigin, priority int) error { if !setutil.Contains(state.visited, nestedFullPath) { state.visited[nestedFullPath] = struct{}{} state.visitedInputs[nestedFullPath] = inputs state.queue = append(state.queue, importQueueItem{ - importPath: nestedImportPath, fullPath: nestedFullPath, sectionName: nestedSectionName, baseDir: baseDir, inputs: inputs, remoteOrigin: nestedRemoteOrigin, + importPath: nestedImportPath, fullPath: nestedFullPath, sectionName: nestedSectionName, baseDir: baseDir, inputs: inputs, remoteOrigin: nestedRemoteOrigin, priority: priority, }) parserLog.Printf("Discovered nested import: %s (queued)", nestedFullPath) return nil diff --git a/pkg/parser/import_cycle.go b/pkg/parser/import_cycle.go index a357d97692a..cfd2c84c014 100644 --- a/pkg/parser/import_cycle.go +++ b/pkg/parser/import_cycle.go @@ -16,25 +16,23 @@ func findCyclePath(cycleNodes map[string]struct { }, dependencies map[string][]string) []string { importLog.Printf("Finding cycle path among %d cycle nodes", len(cycleNodes)) - // Pick any node in the cycle as a starting point (use sorted order for determinism) - var startNode string + // Try nodes in sorted order for determinism. Kahn's unprocessed set can also + // contain files that depend on a cycle without participating in it. sortedNodes := sliceutil.SortedKeys(cycleNodes) - if len(sortedNodes) > 0 { - startNode = sortedNodes[0] - } else { + if len(sortedNodes) == 0 { importLog.Print("No cycle nodes found, cannot determine cycle path") return nil } - importLog.Printf("Starting DFS cycle detection from node: %s", startNode) - - // Use DFS to find a path from startNode back to itself - visited := make(map[string]struct { - }) - path := []string{} - if dfsForCycle(startNode, startNode, cycleNodes, dependencies, visited, &path, true) { - importLog.Printf("Cycle path found: %v", path) - return path + for _, startNode := range sortedNodes { + importLog.Printf("Starting DFS cycle detection from node: %s", startNode) + visited := make(map[string]struct { + }) + path := []string{} + if dfsForCycle(startNode, startNode, cycleNodes, dependencies, visited, &path, true) { + importLog.Printf("Cycle path found: %v", path) + return path + } } importLog.Print("DFS completed but no cycle path could be constructed") @@ -63,8 +61,10 @@ func dfsForCycle(current, target string, cycleNodes map[string]struct { // Explore each dependency for _, dep := range sortedDeps { - // Found the cycle - we've reached the target again - if !isFirst && dep == target { + // Found the cycle - we've reached the target again. A direct self-edge + // (dep == current) always counts as a cycle, even on the first call, + // so that self-imports (e.g. a.md importing a.md) are detected. + if dep == target && (!isFirst || dep == current) { importLog.Printf("Cycle back-edge found: %s -> %s", current, dep) *path = append(*path, dep) // Add the back-edge return true diff --git a/pkg/parser/import_cycle_test.go b/pkg/parser/import_cycle_test.go index 6faebacda3e..6c5a5eee74c 100644 --- a/pkg/parser/import_cycle_test.go +++ b/pkg/parser/import_cycle_test.go @@ -62,6 +62,34 @@ imports: } } +// TestImportCycleDetection_SelfImport tests that a file importing itself is detected +// as a cycle and reported with an actionable chain (e.g. ["a.md", "a.md"]). +func TestImportCycleDetection_SelfImport(t *testing.T) { + tempDir := testutil.TempDir(t, "test-self-import-*") + + fileA := filepath.Join(tempDir, "a.md") + fileAContent := `--- +imports: + - a.md +--- +# File A +` + require.NoError(t, os.WriteFile(fileA, []byte(fileAContent), 0644), "Failed to write file A") + + frontmatter := map[string]any{ + "imports": []string{"a.md"}, + } + + _, err := parser.ProcessImportsFromFrontmatterWithSource(frontmatter, tempDir, nil, fileA, fileAContent) + require.Error(t, err, "Should detect self-import cycle") + + var cycleErr *parser.ImportCycleError + require.ErrorAs(t, err, &cycleErr, "Error should be ImportCycleError") + require.NotNil(t, cycleErr) + assert.Equal(t, []string{"a.md", "a.md"}, cycleErr.Chain) + assert.Contains(t, err.Error(), "remove the import of 'a.md' from 'a.md'") +} + // TestImportCycleDetection_FourFiles tests that a 4-file cycle (A→B→C→D→B) is detected // This is the exact scenario from the issue requirements func TestImportCycleDetection_FourFiles(t *testing.T) { @@ -138,11 +166,12 @@ imports: require.Error(t, formattedErr, "Formatted error should not be nil") errMsg := formattedErr.Error() - assert.Contains(t, errMsg, "Import cycle detected", "Error should mention import cycle") + assert.Contains(t, errMsg, "circular import detected", "Error should mention import cycle") assert.Contains(t, errMsg, "b.md", "Error should mention b.md") assert.Contains(t, errMsg, "c.md", "Error should mention c.md") assert.Contains(t, errMsg, "d.md", "Error should mention d.md") - assert.Contains(t, errMsg, "cycles back", "Error should mention the back-edge") + assert.Contains(t, errMsg, "Imports must form a directed acyclic graph", "Error should state the expected structure") + assert.Contains(t, errMsg, "Example:", "Error should include an actionable example") } // TestImportCycleDetection_Deterministic verifies that cycle detection is deterministic @@ -199,6 +228,55 @@ imports: } } +func TestImportCycleDetection_InSubdirectories(t *testing.T) { + tests := []struct { + name string + files map[string]string + mainImport string + expectedCycle []string + }{ + { + name: "two file cycle reached through entry", + files: map[string]string{ + "entry.md": "---\nimports:\n - shared/sub-a.md\n---", + "shared/sub-a.md": "---\nimports:\n - sub-b.md\n---", + "shared/sub-b.md": "---\nimports:\n - sub-a.md\n---", + }, + mainImport: "entry.md", + expectedCycle: []string{"shared/sub-a.md", "shared/sub-b.md", "shared/sub-a.md"}, + }, + { + name: "three file cycle spanning two directories", + files: map[string]string{ + "entry.md": "---\nimports:\n - one/a.md\n---", + "one/a.md": "---\nimports:\n - two/b.md\n---", + "two/b.md": "---\nimports:\n - two/c.md\n---", + "two/c.md": "---\nimports:\n - one/a.md\n---", + }, + mainImport: "entry.md", + expectedCycle: []string{"one/a.md", "two/b.md", "two/c.md", "one/a.md"}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tempDir := testutil.TempDir(t, "import-subdirectory-cycle-*") + for name, content := range tt.files { + fullPath := filepath.Join(tempDir, name) + require.NoError(t, os.MkdirAll(filepath.Dir(fullPath), 0755)) + require.NoError(t, os.WriteFile(fullPath, []byte(content), 0600)) + } + + _, err := parser.ProcessImportsFromFrontmatterWithSource( + map[string]any{"imports": []string{tt.mainImport}}, tempDir, nil, "", "") + require.Error(t, err) + var cycleErr *parser.ImportCycleError + require.ErrorAs(t, err, &cycleErr) + assert.Equal(t, tt.expectedCycle, cycleErr.Chain) + }) + } +} + // TestImportCycleError_FormattedOutput tests the formatted error message func TestImportCycleError_FormattedOutput(t *testing.T) { tests := []struct { @@ -210,22 +288,18 @@ func TestImportCycleError_FormattedOutput(t *testing.T) { name: "simple 2-file cycle", chain: []string{"a.md", "b.md", "a.md"}, expectedParts: []string{ - "Import cycle detected", - "a.md (starting point)", - "imports b.md", - "cycles back to a.md", - "To fix this issue:", + "circular import detected: a.md → b.md → a.md", + "Imports must form a directed acyclic graph", + "remove the import of 'a.md' from 'b.md'", }, }, { name: "4-file cycle as per issue", chain: []string{"b.md", "c.md", "d.md", "b.md"}, expectedParts: []string{ - "Import cycle detected", - "b.md (starting point)", - "imports c.md", - "imports d.md", - "cycles back to b.md", + "circular import detected: b.md → c.md → d.md → b.md", + "Imports must form a directed acyclic graph", + "remove the import of 'b.md' from 'd.md'", }, }, } @@ -245,11 +319,7 @@ func TestImportCycleError_FormattedOutput(t *testing.T) { assert.Contains(t, errMsg, part, "Error message should contain: %s", part) } - // Verify multiline format - assert.Contains(t, errMsg, "\n", "Error should be multiline") - - // Verify indentation is present (agent-friendly formatting) - assert.Contains(t, errMsg, " ↳", "Error should use indented arrows") + assert.NotContains(t, errMsg, "\n", "Error should follow the concise validation message style") }) } } diff --git a/pkg/parser/import_error.go b/pkg/parser/import_error.go index 23d913e0891..d52eede981c 100644 --- a/pkg/parser/import_error.go +++ b/pkg/parser/import_error.go @@ -1,7 +1,6 @@ package parser import ( - "errors" "fmt" "strings" @@ -28,44 +27,20 @@ type ImportCycleError struct { // Error returns the error message for ImportCycleError func (e *ImportCycleError) Error() string { - if len(e.Chain) == 0 { - return "circular import detected" + if len(e.Chain) < 2 { + return "circular import detected. Imports must form a directed acyclic graph. Example: remove an import that completes the cycle" } - return "circular import detected: " + strings.Join(e.Chain, " → ") + importer := e.Chain[len(e.Chain)-2] + imported := e.Chain[len(e.Chain)-1] + return fmt.Sprintf( + "circular import detected: %s. Imports must form a directed acyclic graph. Example: remove the import of '%s' from '%s'", + strings.Join(e.Chain, " → "), imported, importer) } -// FormatImportCycleError formats an import cycle error with a delightful multiline indented display +// FormatImportCycleError marks an import cycle error as ready for CLI display. func FormatImportCycleError(err *ImportCycleError) error { importErrorLog.Printf("Formatting import cycle error: chain=%v, workflow=%s", err.Chain, err.WorkflowFile) - - if len(err.Chain) < 2 { - return errors.New("circular import detected (invalid chain)") - } - - // Build a multiline, indented representation of the import chain - var messageBuilder strings.Builder - messageBuilder.WriteString("Import cycle detected\n\n") - messageBuilder.WriteString("The following import chain creates a circular dependency:\n\n") - - // Show each step in the chain with indentation to emphasize the flow - for i, file := range err.Chain { - indent := strings.Repeat(" ", i) - if i == 0 { - fmt.Fprintf(&messageBuilder, "%s%s (starting point)\n", indent, file) - } else if i == len(err.Chain)-1 { - // Last item is the back-edge - highlight it - fmt.Fprintf(&messageBuilder, "%s↳ %s ⚠️ cycles back to %s\n", indent, file, err.Chain[0]) - } else { - fmt.Fprintf(&messageBuilder, "%s↳ imports %s\n", indent, file) - } - } - - messageBuilder.WriteString("\nTo fix this issue:\n") - messageBuilder.WriteString("1. Review the import dependencies in the files listed above\n") - messageBuilder.WriteString("2. Remove one of the imports to break the cycle\n") - messageBuilder.WriteString("3. Consider restructuring your workflow imports to avoid circular dependencies\n") - - return &FormattedParserError{formatted: messageBuilder.String(), cause: err} + return &FormattedParserError{formatted: err.Error(), cause: err} } // FormattedParserError is a sentinel error type returned by FormatImportError (and similar diff --git a/pkg/parser/import_field_extractor.go b/pkg/parser/import_field_extractor.go index e4c125dd8a3..62107269a5f 100644 --- a/pkg/parser/import_field_extractor.go +++ b/pkg/parser/import_field_extractor.go @@ -128,6 +128,10 @@ func newImportAccumulator() *importAccumulator { // skip-roles, skip-bots, pre-steps, pre-agent-steps, post-steps, labels, cache, and features. // The work is delegated to focused helper methods, each handling one logical phase. func (acc *importAccumulator) extractAllImportFields(content []byte, item importQueueItem, visited map[string]struct{}) error { + return acc.extractImportFields(content, item, visited, true) +} + +func (acc *importAccumulator) extractImportFields(content []byte, item importQueueItem, visited map[string]struct{}, includeOrderedSteps bool) error { parserLog.Printf("Extracting all import fields: path=%s, section=%s, inputs=%d, content_size=%d bytes", item.fullPath, item.sectionName, len(item.inputs), len(content)) // Phase 1: Parse, apply defaults, substitute inputs, extract tools and markdown. @@ -162,6 +166,10 @@ func (acc *importAccumulator) extractAllImportFields(content []byte, item import // Phase 7: Extract feature flags, model aliases, run-install-scripts, and observability. acc.extractFeatureAndObservabilityFields(fm, item.fullPath) + if includeOrderedSteps { + acc.extractOrderedStepFields(fm) + } + return nil } @@ -410,7 +418,6 @@ func (acc *importAccumulator) extractConfigFields(fm map[string]any, fullPath st acc.appendJSONSliceField(fm, "safe-outputs", "{}", &acc.safeOutputs) acc.appendJSONBuilderField(fm, "graders", "{}", &acc.gradersBuilder) acc.appendJSONSliceField(fm, "mcp-scripts", "{}", &acc.mcpScripts) - acc.appendYAMLBuilderField(fm, "steps", &acc.stepsBuilder) acc.appendJSONBuilderField(fm, "runtimes", "{}", &acc.runtimesBuilder) acc.appendYAMLBuilderField(fm, "services", &acc.servicesBuilder) acc.appendJSONBuilderField(fm, "network", "{}", &acc.networkBuilder) @@ -672,16 +679,6 @@ func (acc *importAccumulator) extractStepAndJobFields(fm map[string]any, importP acc.preStepsBuilder.WriteString(preStepsContent + "\n") } - // Extract pre-agent-steps (prepend in order). - if preAgentStepsContent, err := extractYAMLFieldFromMap(fm, "pre-agent-steps"); err == nil && preAgentStepsContent != "" { - acc.preAgentStepsBuilder.WriteString(preAgentStepsContent + "\n") - } - - // Extract post-steps (append in order). - if postStepsContent, err := extractYAMLFieldFromMap(fm, "post-steps"); err == nil && postStepsContent != "" { - acc.postStepsBuilder.WriteString(postStepsContent + "\n") - } - // Extract jobs (append in order; merged into custom jobs map). if jobsContent, err := extractFieldJSONFromMap(fm, "jobs", "{}"); err == nil && jobsContent != "" && jobsContent != "{}" { acc.jobsBuilder.WriteString(jobsContent + "\n") @@ -706,6 +703,16 @@ func (acc *importAccumulator) extractStepAndJobFields(fm map[string]any, importP return nil } +func (acc *importAccumulator) extractOrderedStepFields(fm map[string]any) { + acc.appendYAMLBuilderField(fm, "steps", &acc.stepsBuilder) + if preAgentStepsContent, err := extractYAMLFieldFromMap(fm, "pre-agent-steps"); err == nil && preAgentStepsContent != "" { + acc.preAgentStepsBuilder.WriteString(preAgentStepsContent + "\n") + } + if postStepsContent, err := extractYAMLFieldFromMap(fm, "post-steps"); err == nil && postStepsContent != "" { + acc.postStepsBuilder.WriteString(postStepsContent + "\n") + } +} + // extractFeatureAndObservabilityFields extracts labels, cache, feature flags, model // aliases, the run-install-scripts flag, observability configuration, and excluded-env // from the frontmatter map. diff --git a/pkg/parser/import_remote.go b/pkg/parser/import_remote.go index 07679e9835c..a9be319d4c6 100644 --- a/pkg/parser/import_remote.go +++ b/pkg/parser/import_remote.go @@ -31,6 +31,9 @@ type importQueueItem struct { baseDir string // Base directory for resolving nested imports inputs map[string]any // Optional input values from parent import remoteOrigin *remoteImportOrigin // Remote origin context (non-nil when imported from a remote repo) + content []byte // Cached file content for dependency-ordered field merging + frontmatter map[string]any // Parsed frontmatter after input substitution + priority int // Declaration-order priority of the top-level sibling branch that discovered this import } // parseRemoteOrigin extracts the remote origin (owner, repo, ref, basePath) from a workflowspec path. diff --git a/pkg/parser/import_topological.go b/pkg/parser/import_topological.go index 74d8a449715..eeb3dd47d85 100644 --- a/pkg/parser/import_topological.go +++ b/pkg/parser/import_topological.go @@ -6,10 +6,8 @@ package parser import ( "errors" "slices" - "sort" "github.com/github/gh-aw/pkg/setutil" - "github.com/github/gh-aw/pkg/sliceutil" ) // topologicalSortImports sorts imports in topological order using Kahn's algorithm. @@ -18,14 +16,13 @@ import ( // workflowFile is the path to the top-level workflow file, used for error context // when a circular import is detected. // Returns an error if a circular import is detected. -func topologicalSortImports(imports []string, baseDir string, cache *ImportCache, workflowFile string) ([]string, error) { +func topologicalSortImports(imports []string, dependencies map[string][]string, importPaths map[string]string, priorities map[string]int, workflowFile string) ([]string, error) { importLog.Printf("Starting topological sort of %d imports", len(imports)) allImportsSet := toImportSet(imports) - dependencies := buildImportDependencies(imports, baseDir, cache) inDegree := calculateInDegree(imports, dependencies, allImportsSet) importLog.Printf("Calculated in-degrees: %v", inDegree) queue := collectRootImports(imports, inDegree) - result := runKahnTopologicalSort(imports, dependencies, allImportsSet, inDegree, queue) + result := runKahnTopologicalSort(imports, dependencies, allImportsSet, inDegree, queue, priorities) importLog.Printf("Topological sort complete: %v", result) if len(result) < len(imports) { @@ -34,7 +31,7 @@ func topologicalSortImports(imports []string, baseDir string, cache *ImportCache cyclePath := findCyclePath(cycleNodes, dependencies) if len(cyclePath) > 0 { return nil, &ImportCycleError{ - Chain: cyclePath, + Chain: displayImportPaths(cyclePath, importPaths), WorkflowFile: workflowFile, } } @@ -57,46 +54,13 @@ func toImportSet(imports []string) map[string]struct { return allImportsSet } -func buildImportDependencies(imports []string, baseDir string, cache *ImportCache) map[string][]string { - dependencies := make(map[string][]string, len(imports)) - for _, importPath := range imports { - nestedImports, err := resolveNestedImportPaths(importPath, baseDir, cache) - if err != nil { - importLog.Printf("Failed to resolve dependencies for %s during topological sort: %v", importPath, err) - dependencies[importPath] = []string{} - continue - } - dependencies[importPath] = nestedImports - importLog.Printf("Import %s has %d dependencies: %v", importPath, len(nestedImports), nestedImports) - } - return dependencies -} - -func resolveNestedImportPaths(importPath, baseDir string, cache *ImportCache) ([]string, error) { - filePath, _ := splitPathAndSection(importPath) - fullPath, err := ResolveIncludePath(filePath, baseDir, cache) - if err != nil { - return nil, err - } - content, err := readFileFunc(fullPath) - if err != nil { - return nil, err - } - result, err := extractFrontmatterForImport(fullPath, content) - if err != nil { - return nil, err - } - return extractImportPaths(result.Frontmatter), nil -} - func calculateInDegree(imports []string, dependencies map[string][]string, allImportsSet map[string]struct { }) map[string]int { inDegree := make(map[string]int, len(imports)) for _, imp := range imports { inDegree[imp] = 0 } - sortedImports := sortedDependencyKeys(dependencies) - for _, imp := range sortedImports { + for _, imp := range imports { for _, dep := range dependencies[imp] { if setutil.Contains(allImportsSet, dep) { inDegree[imp]++ @@ -106,11 +70,6 @@ func calculateInDegree(imports []string, dependencies map[string][]string, allIm return inDegree } -func sortedDependencyKeys(dependencies map[string][]string) []string { - sortedImports := sliceutil.SortedKeys(dependencies) - return sortedImports -} - func collectRootImports(imports []string, inDegree map[string]int) []string { var queue []string for _, imp := range imports { @@ -128,29 +87,38 @@ func runKahnTopologicalSort( allImportsSet map[string]struct { }, inDegree map[string]int, queue []string, + priorities map[string]int, ) []string { result := make([]string, 0, len(imports)) - sortedImports := sortedDependencyKeys(dependencies) + declarationOrder := make(map[string]int, len(imports)) + for index, imp := range imports { + declarationOrder[imp] = index + } for len(queue) > 0 { - sort.Strings(queue) + slices.SortStableFunc(queue, func(a, b string) int { + if diff := priorities[a] - priorities[b]; diff != 0 { + return diff + } + return declarationOrder[a] - declarationOrder[b] + }) current := queue[0] queue = queue[1:] result = append(result, current) importLog.Printf("Processing import %s (in-degree was 0)", current) - queue = reduceDependentInDegrees(current, sortedImports, dependencies, allImportsSet, inDegree, queue) + queue = reduceDependentInDegrees(current, imports, dependencies, allImportsSet, inDegree, queue) } return result } func reduceDependentInDegrees( current string, - sortedImports []string, + imports []string, dependencies map[string][]string, allImportsSet map[string]struct { }, inDegree map[string]int, queue []string, ) []string { - for _, imp := range sortedImports { + for _, imp := range imports { for _, dep := range dependencies[imp] { if dep == current && setutil.Contains(allImportsSet, imp) { inDegree[imp]-- @@ -165,6 +133,18 @@ func reduceDependentInDegrees( return queue } +func displayImportPaths(paths []string, importPaths map[string]string) []string { + displayPaths := make([]string, 0, len(paths)) + for _, fullPath := range paths { + if importPath, ok := importPaths[fullPath]; ok { + displayPaths = append(displayPaths, importPath) + } else { + displayPaths = append(displayPaths, fullPath) + } + } + return displayPaths +} + func findCycleNodes(imports, result []string) map[string]struct { } { cycleNodes := make(map[string]struct { @@ -177,42 +157,3 @@ func findCycleNodes(imports, result []string) map[string]struct { } return cycleNodes } - -// extractImportPaths extracts just the import paths from frontmatter. -func extractImportPaths(frontmatter map[string]any) []string { - var imports []string - - if frontmatter == nil { - return imports - } - - importsField, exists := frontmatter["imports"] - if !exists { - return imports - } - - // Parse imports field - can be array of strings or objects with path - switch v := importsField.(type) { - case []any: - for _, item := range v { - switch importItem := item.(type) { - case string: - imports = append(imports, importItem) - case map[string]any: - if pathValue, hasPath := importItem["path"]; hasPath { - if pathStr, ok := pathValue.(string); ok { - imports = append(imports, pathStr) - } - } else if usesValue, hasUses := importItem["uses"]; hasUses { - if pathStr, ok := usesValue.(string); ok { - imports = append(imports, pathStr) - } - } - } - } - case []string: - imports = v - } - - return imports -} diff --git a/pkg/parser/import_topological_contract_test.go b/pkg/parser/import_topological_contract_test.go index a81fea5e2e8..c955ee2687f 100644 --- a/pkg/parser/import_topological_contract_test.go +++ b/pkg/parser/import_topological_contract_test.go @@ -7,9 +7,7 @@ // of lexical filename ordering. // // Tie-break rule (documented contract): when multiple nodes are ready at the same -// time (in-degree 0 in Kahn's algorithm), they are ordered alphabetically by their -// relative filename. Tests that verify this rule use fixtures where the tie-break -// outcome differs from the declaration order. +// time (in-degree 0 in Kahn's algorithm), they retain declaration order. // // Cross-path contract: each fixture is verified via // @@ -250,13 +248,9 @@ tools: "z-leaf-a.md": {}, "y-leaf-b.md": {}, }, - // Kahn's algorithm: queue is sorted globally after each emit. - // y-leaf-b.md is emitted first (y < z alphabetically). That immediately - // makes b-parent.md ready; after sorting, the queue becomes - // [b-parent.md, z-leaf-a.md] (b < z), so b-parent.md is emitted next. - // Then z-leaf-a.md is emitted, making a-parent.md ready. + // The branch rooted at the first declared parent is emitted first. // Key invariant: every leaf precedes its own parent (topological guarantee). - wantOrder: []string{"y-leaf-b.md", "b-parent.md", "z-leaf-a.md", "a-parent.md"}, + wantOrder: []string{"z-leaf-a.md", "a-parent.md", "y-leaf-b.md", "b-parent.md"}, }, { // Diamond: two parents share the same leaf. Lexical sort would not @@ -286,7 +280,7 @@ tools: "y-right.md": {"a-base.md"}, "a-base.md": {}, }, - wantOrder: []string{"a-base.md", "y-right.md", "z-left.md"}, + wantOrder: []string{"a-base.md", "z-left.md", "y-right.md"}, }, } @@ -309,25 +303,23 @@ tools: } // --------------------------------------------------------------------------- -// TestImportTopologicalContractTieBreakIsAlphabetical +// TestImportTopologicalContractTieBreakIsDeclarationOrder // --------------------------------------------------------------------------- -// TestImportTopologicalContractTieBreakIsAlphabetical explicitly documents and +// TestImportTopologicalContractTieBreakIsDeclarationOrder explicitly documents and // verifies the tie-break rule: when multiple nodes are simultaneously ready -// (in-degree 0 in Kahn's algorithm), they are sorted alphabetically by their -// relative filename. +// (in-degree 0 in Kahn's algorithm), they retain declaration order. // // This test uses fixtures where all nodes are roots (no dependencies), so the // only ordering constraint is the tie-break rule itself. -func TestImportTopologicalContractTieBreakIsAlphabetical(t *testing.T) { - t.Run("all-roots ordered alphabetically regardless of declaration order", func(t *testing.T) { +func TestImportTopologicalContractTieBreakIsDeclarationOrder(t *testing.T) { + t.Run("all roots retain declaration order", func(t *testing.T) { files := map[string]string{ "omega.md": "---\ntools:\n t: {}\n---", "alpha.md": "---\ntools:\n t: {}\n---", "gamma.md": "---\ntools:\n t: {}\n---", "beta.md": "---\ntools:\n t: {}\n---", } - // Declaration order is deliberately not alphabetical. topImports := []string{"omega.md", "alpha.md", "gamma.md", "beta.md"} dir := testutil.TempDir(t, "contract-tiebreak-*") @@ -336,15 +328,11 @@ func TestImportTopologicalContractTieBreakIsAlphabetical(t *testing.T) { got := runImportProcessor(t, dir, topImports) require.Len(t, got, 4, "all four files must appear in the result") - // Tie-break rule: alphabetical by filename. - assert.Equal(t, []string{"alpha.md", "beta.md", "gamma.md", "omega.md"}, got, - "independent nodes must be sorted alphabetically (documented tie-break rule)") + assert.Equal(t, topImports, got, + "independent nodes must retain declaration order") }) - t.Run("ready nodes at each wave are alphabetically sorted", func(t *testing.T) { - // Build a two-wave structure: first wave (leaves) has {z-leaf, a-leaf}, - // second wave (parents) has {c-parent, b-parent}. - // Within each wave, alphabetical order must apply. + t.Run("independent branches retain declaration order", func(t *testing.T) { files := map[string]string{ "c-parent.md": `--- imports: @@ -369,14 +357,8 @@ tools: got := runImportProcessor(t, dir, topImports) require.Len(t, got, 4) - // Wave 1 (leaves): a-leaf < z-leaf alphabetically. - // Wave 2 (parents become ready after their respective leaf): b-parent - // and c-parent become ready at different points because each parent - // depends only on its own leaf. - // After a-leaf is emitted, b-parent (in-degree drops to 0) is queued. - // After z-leaf is emitted, c-parent (in-degree drops to 0) is queued. - assert.Equal(t, []string{"a-leaf.md", "b-parent.md", "z-leaf.md", "c-parent.md"}, got, - "within each Kahn wave, nodes must be sorted alphabetically") + assert.Equal(t, []string{"z-leaf.md", "c-parent.md", "a-leaf.md", "b-parent.md"}, got, + "independent branches must retain declaration order") // Property check: no dependency constraint violated. verifyTopologicalConstraints(t, got, map[string][]string{ diff --git a/pkg/parser/import_topological_test.go b/pkg/parser/import_topological_test.go index ca737042087..998de259e28 100644 --- a/pkg/parser/import_topological_test.go +++ b/pkg/parser/import_topological_test.go @@ -5,6 +5,7 @@ package parser_test import ( "os" "path/filepath" + "strings" "testing" "github.com/github/gh-aw/pkg/parser" @@ -126,7 +127,7 @@ tools: // Expected: roots (d, e, f) first, then their dependents // Multiple valid orderings exist due to independence between branches // Key constraints: f before c, c and d before a, e before b - expectedOrder: []string{"d.md", "e.md", "b.md", "f.md", "c.md", "a.md"}, + expectedOrder: []string{"d.md", "f.md", "c.md", "a.md", "e.md", "b.md"}, }, { name: "wide tree with many independent branches", @@ -193,9 +194,9 @@ tools: ---`, }, mainImports: []string{"z-parent.md", "y-parent.md"}, - // Children come first in alphabetical order (a, b), - // then parents in alphabetical order (y, z) - expectedOrder: []string{"a-child.md", "b-child.md", "y-parent.md", "z-parent.md"}, + // Each dependency precedes its parent, with independent branches + // retaining the declaration order of their parents. + expectedOrder: []string{"a-child.md", "z-parent.md", "b-child.md", "y-parent.md"}, }, { name: "multi-level dependency chain", @@ -377,9 +378,9 @@ Tool configuration here.`, assert.Equal(t, "a.md", result.ImportedFiles[1]) } -// TestImportTopologicalSortPreservesAlphabeticalForSameLevel tests that -// imports at the same level (same in-degree) are sorted alphabetically -func TestImportTopologicalSortPreservesAlphabeticalForSameLevel(t *testing.T) { +// TestImportTopologicalSortPreservesDeclarationOrder tests that independent +// imports retain their declaration order. +func TestImportTopologicalSortPreservesDeclarationOrder(t *testing.T) { tempDir := testutil.TempDir(t, "import-topo-alpha-*") // Create multiple root files (no dependencies) @@ -411,11 +412,11 @@ tools: result, err := parser.ProcessImportsFromFrontmatterWithSource(frontmatter, tempDir, nil, "", "") require.NoError(t, err) - // All are roots, should be sorted alphabetically + // All are roots, so declaration order is preserved. assert.Len(t, result.ImportedFiles, 3) - assert.Equal(t, "a-root.md", result.ImportedFiles[0]) - assert.Equal(t, "m-root.md", result.ImportedFiles[1]) - assert.Equal(t, "z-root.md", result.ImportedFiles[2]) + assert.Equal(t, "z-root.md", result.ImportedFiles[0]) + assert.Equal(t, "a-root.md", result.ImportedFiles[1]) + assert.Equal(t, "m-root.md", result.ImportedFiles[2]) } // TestImportTopologicalSortBeatsLexicalParentOrdering ensures that dependency @@ -499,3 +500,136 @@ tools: assert.Equal(t, baseline, result.ImportedFiles) } } + +func TestImportedStepFieldsFollowDependencyOrder(t *testing.T) { + files := map[string]string{ + "shared/base.md": `--- +steps: + - name: STEP-BASE +pre-agent-steps: + - name: PRE-BASE +post-steps: + - name: POST-BASE +---`, + "shared/a.md": `--- +imports: + - base.md +steps: + - name: STEP-A +pre-agent-steps: + - name: PRE-A +post-steps: + - name: POST-A +max-turns: 10 +---`, + "shared/b.md": `--- +imports: + - base.md +steps: + - name: STEP-B +pre-agent-steps: + - name: PRE-B +post-steps: + - name: POST-B +max-turns: 20 +---`, + } + tests := []struct { + name string + imports []string + expectedFiles []string + expectedNames []string + expectedMax string + }{ + { + name: "diamond preserves sibling declaration order", + imports: []string{"shared/a.md", "shared/b.md"}, + expectedFiles: []string{"shared/base.md", "shared/a.md", "shared/b.md"}, + expectedNames: []string{"BASE", "A", "B"}, + expectedMax: "10", + }, + { + name: "reversed diamond preserves sibling declaration order", + imports: []string{"shared/b.md", "shared/a.md"}, + expectedFiles: []string{"shared/base.md", "shared/b.md", "shared/a.md"}, + expectedNames: []string{"BASE", "B", "A"}, + expectedMax: "20", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tempDir := testutil.TempDir(t, "import-step-order-*") + for name, content := range files { + fullPath := filepath.Join(tempDir, name) + require.NoError(t, os.MkdirAll(filepath.Dir(fullPath), 0755)) + require.NoError(t, os.WriteFile(fullPath, []byte(content), 0600)) + } + + result, err := parser.ProcessImportsFromFrontmatterWithSource( + map[string]any{"imports": tt.imports}, tempDir, nil, "", "") + require.NoError(t, err) + assert.Equal(t, tt.expectedFiles, result.ImportedFiles) + assert.Equal(t, tt.expectedMax, result.MergedMaxTurns, "scalar precedence must remain discovery-order first-wins") + assertNamesInOrder(t, result.MergedSteps, "STEP-", tt.expectedNames) + assertNamesInOrder(t, result.MergedPreAgentSteps, "PRE-", tt.expectedNames) + assertNamesInOrder(t, result.MergedPostSteps, "POST-", tt.expectedNames) + }) + } +} + +func TestImportedStepsAreRoleInvariant(t *testing.T) { + tempDir := testutil.TempDir(t, "import-role-order-*") + files := map[string]string{ + "a.md": `--- +imports: + - b.md +steps: + - name: STEP-A +---`, + "b.md": `--- +steps: + - name: STEP-B +---`, + } + for name, content := range files { + require.NoError(t, os.WriteFile(filepath.Join(tempDir, name), []byte(content), 0600)) + } + + importedA, err := parser.ProcessImportsFromFrontmatterWithSource( + map[string]any{"imports": []string{"a.md"}}, tempDir, nil, "", "") + require.NoError(t, err) + assertNamesInOrder(t, importedA.MergedSteps, "STEP-", []string{"B", "A"}) + + rootA, err := parser.ProcessImportsFromFrontmatterWithSource( + map[string]any{"imports": []string{"b.md"}}, tempDir, nil, "", "") + require.NoError(t, err) + assertNamesInOrder(t, rootA.MergedSteps+"\n"+files["a.md"], "STEP-", []string{"B", "A"}) +} + +func TestUnrelatedImportedStepsPreserveDeclarationOrder(t *testing.T) { + tempDir := testutil.TempDir(t, "import-sibling-order-*") + files := map[string]string{ + "z.md": "---\nsteps:\n - name: STEP-Z\n---", + "a.md": "---\nsteps:\n - name: STEP-A\n---", + } + for name, content := range files { + require.NoError(t, os.WriteFile(filepath.Join(tempDir, name), []byte(content), 0600)) + } + + result, err := parser.ProcessImportsFromFrontmatterWithSource( + map[string]any{"imports": []string{"z.md", "a.md"}}, tempDir, nil, "", "") + require.NoError(t, err) + assert.Equal(t, []string{"z.md", "a.md"}, result.ImportedFiles) + assertNamesInOrder(t, result.MergedSteps, "STEP-", []string{"Z", "A"}) +} + +func assertNamesInOrder(t *testing.T, content, prefix string, names []string) { + t.Helper() + previous := -1 + for _, name := range names { + current := strings.Index(content, "name: "+prefix+name+"\n") + assert.Greater(t, current, previous, "%s%s must follow the previous entry in %q", prefix, name, content) + previous = current + } +}