Skip to content

Fix placeholder substitution ordering for runtime-imported workflows#16191

Merged
pelikhan merged 3 commits intocopilot/add-logging-in-template-renderingfrom
copilot/investigate-value-replacement-issue
Feb 16, 2026
Merged

Fix placeholder substitution ordering for runtime-imported workflows#16191
pelikhan merged 3 commits intocopilot/add-logging-in-template-renderingfrom
copilot/investigate-value-replacement-issue

Conversation

Copy link
Contributor

Copilot AI commented Feb 16, 2026

Placeholder substitution ran before runtime-import processing, leaving placeholders like __GH_AW_NEEDS_ACTIVATION_OUTPUTS_TEXT__ unreplaced in imported markdown files (e.g., changeset.md).

Changes

Reordered workflow steps

  • Moved placeholder substitution to run AFTER interpolation/runtime-import
  • Changed generateUnifiedPromptCreationStep() to return expression mappings instead of generating substitution step inline
  • Generate substitution step in compiler_yaml.go after interpolation step

Correct step order

- name: Create prompt with built-in context
  # Writes {{#runtime-import changeset.md}} to prompt file
  
- name: Interpolate variables and render templates  
  # Processes runtime-import, loads changeset.md with placeholders
  
- name: Substitute placeholders
  # NOW replaces __GH_AW_NEEDS_ACTIVATION_OUTPUTS_TEXT__ with actual value

Updated tests

  • Fixed 4 tests expecting old behavior where substitution was part of prompt creation
  • Tests now verify substitution step generates separately

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • https://api.github.com/graphql
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw st.cjs n_comment.cjs x_amd64/vet lper�� to_created_issues.cjs to_created_issues.test.cjs modules/@npmcli/run-script/lib/node-gyp-bin/sh (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw pkg/sliceutil/sl-c pkg/logger/slog_log.showsignature=false x_amd64/vet -5 pkg/logger/examp--format=%H:%ct pkg/logger/error_formatting.go x_amd64/vet pkg/logger/slog_gh pkg/logger/errorapi pkg/constants/co/repos/actions/setup-node/git/ref/tags/v6 x_amd64/vet (http block)
  • https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq .object.sha xterm-color 64/pkg/tool/linux_amd64/vet ache/go/1.25.0/x64/pkg/tool/linux_amd64/link 1e8cc027d829709fgit .cfg 64/pkg/tool/linu--show-toplevel ache/go/1.25.0/x64/pkg/tool/linux_amd64/link --no�� 221499/b412/styles.test 64/pkg/tool/linux_amd64/vet 221499/b412/importcfg.link --noprofile (http block)
  • https://api.github.com/repos/actions/ai-inference/git/ref/tags/v2
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v2 --jq .object.sha ate-value-replacement-issue (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v2 --jq .object.sha ate-value-replacremote.origin.url .yml 64/pkg/tool/linux_amd64/vet (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/11bd71901bbe5b1630ceea73d27597364c9af683
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/11bd71901bbe5b1630ceea73d27597364c9af683 --jq .object.sha rd (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq .object.sha 2761106834 rev-parse cfg --noprofile (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v4 --jq .object.sha -c 64/pkg/tool/linuconfig 0/x64/bin/node d -n 10 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v4 --jq .object.sha r/test-repo/actions/secrets 64/pkg/tool/linu-f 64/pkg/tool/linux_amd64/vet /add_reaction.tegit .cfg 64/pkg/tool/linu--show-toplevel 64/pkg/tool/linux_amd64/vet -C /home/REDACTED/work/gh-aw/gh-aw/.github/workflows config /usr/bin/infocmp remote.origin.urgit .cfg $name) { has--show-toplevel infocmp (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v4 --jq .object.sha test.txt /opt/hostedtoolcache/go/1.25.0/x64/pkg/tool/linurev-parse /usr/bin/git celain --ignore-git -trimpath ache/go/1.25.0/x--show-toplevel git conf�� user.email test@example.com /usr/bin/git -unreachable=falgit /tmp/go-build288rev-parse repository(owne--show-toplevel git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha ithub/workflows o x_amd64/compile le_test.go _formatting.go de/node/bin/bash-v x_amd64/compile api /repos/actions/setup-node/git/ref/tags/v6 --jq 64/pkg/tool/linux_amd64/link ywright_mcp_integit piler_orchestrat-C x_amd64/vet 64/pkg/tool/linuconfig (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha user --jq /usr/bin/git ent.js (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha --git-dir ache/go/1.25.0/x-tests /usr/bin/git -unreachable=falgit /tmp/go-build288rev-parse /opt/hostedtoolc--show-toplevel git rev-�� tup/sh/sanitize_path.sh' ':::/usr/bin:/usr/local/bin' && echo "$PATH" /opt/hostedtoolc-buildtags /usr/bin/infocmp ithub/workflows /tmp/go-build288rev-parse /snap/bin/git infocmp (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha pkg/workflow/compiler_safe_outputs_steps.go pkg/workflow/playwright_mcp_integration_test.go 64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha go .go x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha --noprofile .cfg 64/pkg/tool/linux_amd64/vet (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v7
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v7 --jq .object.sha submodules | head -n 10 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v7 --jq .object.sha submodules | head -n 10 ivation_outputs_always_declared_test.go x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v7 --jq .object.sha --noprofile .cfg 64/pkg/tool/linux_amd64/vet (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha se 1773065/b089/vet.cfg 0/x64/bin/bash pkg/workflow/actgit pkg/workflow/act-C pkg/workflow/act/home/REDACTED/work/gh-aw/gh-aw/.github/workflows ache/go/1.25.0/xrev-parse (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha se 1773065/b084/vet.cfg 64/pkg/tool/linux_amd64/asm it} thub.com> k/_temp/ghcca-no/home/REDACTED/work/gh-aw/gh-aw/.github/workflows 64/pkg/tool/linuconfig (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha se 1773065/b097/vet.cfg 0/x64/bin/npm (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/4dc6199c7b1a012772edbd06daecab0f50c9053c
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/4dc6199c7b1a012772edbd06daecab0f50c9053c --jq .object.sha --noprofile .cfg r: $owner, name: $name) { hasDiscussionsEnabled } } (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq .object.sha mcp/markitdown 64/pkg/tool/linux_amd64/compile /usr/bin/git d -n 10 (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v5 --jq .object.sha (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v5 --jq .object.sha --noprofile (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v6 --jq .object.sha ywright_mcp_integration_test.go piler_orchestrator_workflow.go x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v6 --jq .object.sha ywright_mcp_integration_test.go cjs x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v6 --jq .object.sha ions/setup/js/substitute_placeho-c=4 75-copilot-tool-output-d4zphl.tx-nolocalimports x_amd64/compile eset.lock.yml (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq .object.sha SameOutput964470238/001/stability-test.md 64/pkg/tool/linux_amd64/compile /usr/bin/gh d -n 10 (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq .object.sha ywright_mcp_integration_test.go piler_orchestrator_workflow.go x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq .object.sha ywright_mcp_integration_test.go piler_orchestrator_workflow.go x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq .object.sha -c=4 -nolocalimports -importcfg /tmp/go-build1232132451/b001/importcfg -pack /home/REDACTED/work/gh-aw/gh-aw/cmd/gh-aw/main.go x_amd64/vet -l GH_AW_NEEDS_ACTIVATION_OUTPUTS_TEXT -by: pelikhan <4175913+pelikhan@users.noreply.github.com> x_amd64/vet pkg/sliceutil/sl/opt/hostedtoolcache/go/1.25.0/x64/pkg/tool/linux_amd64/link pkg/sliceutil/sl-V=full pkg/logger/slog_adapter_test.go x_amd64/vet (http block)
  • https://api.github.com/repos/anchore/sbom-action/git/ref/tags/v0
    • Triggering command: /usr/bin/gh gh api /repos/anchore/sbom-action/git/ref/tags/v0 --jq .object.sha --noprofile .cfg 64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/anchore/sbom-action/git/ref/tags/v0 --jq .object.sha --noprofile (http block)
  • https://api.github.com/repos/docker/build-push-action/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/docker/build-push-action/git/ref/tags/v6 --jq .object.sha --noprofile .cfg x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/docker/build-push-action/git/ref/tags/v6 --jq .object.sha romptCreationSteremote.origin.url .cfg 64/pkg/tool/linux_amd64/vet ion_mode.go ion_pins.go ion_pins_integra/home/REDACTED/work/gh-aw/gh-aw/.github/workflows 64/pkg/tool/linurev-parse ion_�� ion_reference.go .cfg r: $owner, name: $name) { hasDiscussionsEnabled } } ion_resolver_tesdocker ion_sha_checker.image ion_sha_checker_inspect ion_sha_checker_mcp/context7 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/docker/build-push-action/git/ref/tags/v6 --jq .object.sha -t .cfg r: $owner, name: $name) { hasDiscussionsEnabled } } OUTPUT -d 168.63.129.16 64/pkg/tool/linu-f --no�� --noprofile .cfg /usr/lib/git-cor-f 0 -j ACCEPT /usr/lib/git-core/git (http block)
  • https://api.github.com/repos/docker/login-action/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/docker/login-action/git/ref/tags/v3 --jq .object.sha --noprofile .cfg 64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/docker/login-action/git/ref/tags/v3 --jq .object.sha --noprofile .cfg r: $owner, name: $name) { hasDiscussionsEnabled } } (http block)
  • https://api.github.com/repos/docker/metadata-action/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/docker/metadata-action/git/ref/tags/v5 --jq .object.sha --noprofile .cfg 64/pkg/tool/linux_amd64/vet actions/setup/js/usr/bin/gh actions/setup/jsapi actions/setup/jsgraphql 64/pkg/tool/linu-f --no�� --noprofile .cfg kflow.test (http block)
    • Triggering command: /usr/bin/gh gh api /repos/docker/metadata-action/git/ref/tags/v5 --jq .object.sha 1e8cc027d829709fremote.origin.url .cfg 64/pkg/tool/linux_amd64/vet (http block)
  • https://api.github.com/repos/docker/setup-buildx-action/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/docker/setup-buildx-action/git/ref/tags/v3 --jq .object.sha --noprofile .cfg x_amd64/link (http block)
    • Triggering command: /usr/bin/gh gh api /repos/docker/setup-buildx-action/git/ref/tags/v3 --jq .object.sha (http block)
    • Triggering command: /usr/bin/gh gh api /repos/docker/setup-buildx-action/git/ref/tags/v3 --jq .object.sha -t .cfg 64/pkg/tool/linux_amd64/vet OUTPUT -d 168.63.129.16 64/pkg/tool/linurev-parse --no�� --noprofile owner r: $owner, name: $name) { hasDiscussionsEnabled } } 0 -j ACCEPT git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/1/artifacts
    • Triggering command: /usr/bin/gh gh run download 1 --dir test-logs/run-1 --others repository(owner: $owner, name:-lang=go1.25 69 --log-level 0/x64/bin/bash bash stlo�� k/gh-aw/gh-aw/.github/workflows bash /usr/bin/chmod --noprofile (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12345/artifacts
    • Triggering command: /usr/bin/gh gh run download 12345 --dir test-logs/run-12345 --others repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } .logs_content (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12346/artifacts
    • Triggering command: /usr/bin/gh gh run download 12346 --dir test-logs/run-12346 --others (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/2/artifacts
    • Triggering command: /usr/bin/gh gh run download 2 --dir test-logs/run-2 l (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/22074698564
    • Triggering command: /usr/bin/gh gh run view 22074698564 --repo github/gh-aw --log-failed (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/22074698564/artifacts
    • Triggering command: /usr/bin/gh gh run download 22074698564 --repo github/gh-aw --dir /tmp/artifacts-22074698564 (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/3/artifacts
    • Triggering command: /usr/bin/gh gh run download 3 --dir test-logs/run-3 --others x_amd64/compile --noprofile (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/4/artifacts
    • Triggering command: /usr/bin/gh gh run download 4 --dir test-logs/run-4 --others 64/bin/node (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/5/artifacts
    • Triggering command: /usr/bin/gh gh run download 5 --dir test-logs/run-5 l x_amd64/compile tute_placeholdergit (http block)
  • https://api.github.com/repos/github/gh-aw/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path 597364c9af683 1773065/b014/vet.cfg .cfg (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 100 (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 6 (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/c4e091835c7a94dc7d3acb8ed3ae145afb4995f3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/c4e091835c7a94dc7d3acb8ed3ae145afb4995f3 --jq .object.sha --noprofile (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq .object.sha 3257921704/.github/workflows bash /home/REDACTED/.config/composer/vendor/bin/sh --noprofile (http block)
  • https://api.github.com/repos/githubnext/agentics/git/ref/tags/-
    • Triggering command: /usr/bin/gh gh api /repos/githubnext/agentics/git/ref/tags/- --jq .object.sha --noprofile (http block)
  • https://api.github.com/repos/nonexistent/repo/actions/runs/12345
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion rd uter,PaintHoldin-atomic k/_temp/ghcca-no-bool bash --no�� k/gh-aw/gh-aw/.g-errorsas bash me: String!) { -nilfunc l (http block)
  • https://api.github.com/repos/owner/repo/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo .cfg (http block)
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } llector.slice (http block)
    • Triggering command: /usr/bin/gh gh workflow list --repo owner/repo --json name,path,state /opt/hostedtoolcache/go/1.25.0/x64/pkg/tool/linux_amd64/cgo l -d 168.63.129.16 /opt/hostedtoolcache/go/1.25.0/x64/pkg/tool/linux_amd64/cgo -V=f�� k/gh-aw/gh-aw/.github/workflows conntrack me: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } l -j DROP node (http block)
  • https://api.github.com/repos/test-owner/test-repo/actions/secrets
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name se 1773065/b009/vet.cfg .cfg actions/setup/jsgit actions/setup/js-C actions/setup/js/home/REDACTED/work/gh-aw/gh-aw/.github/workflows ache/go/1.25.0/xconfig (http block)
  • https://api.github.com/user
    • Triggering command: /usr/bin/gh gh api user --jq .login get --local (http block)
    • Triggering command: /usr/bin/gh gh api user --jq .login get --local 64/bin/sh user.name (http block)
    • Triggering command: /usr/bin/gh gh api user --jq .login --noprofile (http block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

Reference: https://github.com/github/gh-aw/actions/runs/22074698564/job/63787177133#step:24:1

Investigate this run and why this value was not replaced.


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot AI and others added 2 commits February 16, 2026 19:29
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Investigate value replacement issue in action run Fix placeholder substitution ordering for runtime-imported workflows Feb 16, 2026
@pelikhan pelikhan marked this pull request as ready for review February 16, 2026 19:39
Copilot AI review requested due to automatic review settings February 16, 2026 19:39
Copilot AI requested a review from pelikhan February 16, 2026 19:39
@pelikhan pelikhan merged commit dadff46 into copilot/add-logging-in-template-rendering Feb 16, 2026
@pelikhan pelikhan deleted the copilot/investigate-value-replacement-issue branch February 16, 2026 19:39
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes placeholder substitution for runtime-imported markdown by changing the workflow step ordering so that runtime-import/template interpolation happens before placeholder substitution, ensuring placeholders inside imported files (e.g., __GH_AW_NEEDS_ACTIVATION_OUTPUTS_TEXT__ in changeset.md) get replaced.

Changes:

  • Refactored unified prompt step generation to return the combined set of expression mappings instead of emitting the placeholder-substitution step inline.
  • Emitted the placeholder substitution step after the interpolation/runtime-import step in compiler_yaml.go.
  • Regenerated workflow lockfiles to reflect the corrected step order (Interpolate → Substitute → Validate).

Reviewed changes

Copilot reviewed 157 out of 157 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
pkg/workflow/unified_prompt_step.go Returns combined expression mappings so placeholder substitution can be generated later (after runtime-import).
pkg/workflow/compiler_yaml.go Reorders steps to run interpolation/runtime-import before placeholder substitution.
.github/workflows/workflow-skill-extractor.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/workflow-normalizer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/workflow-health-manager.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/workflow-generator.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/weekly-safe-outputs-spec-review.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/weekly-issue-summary.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/video-analyzer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/unbloat-docs.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/ubuntu-image-analyzer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/typist.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/tidy.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/test-workflow.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/test-project-url-default.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/test-dispatcher.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/test-create-pr-error-handling.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/terminal-stylist.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/technical-doc-writer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/super-linter.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/sub-issue-closer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/step-name-alignment.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/static-analysis-report.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/stale-repo-identifier.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/smoke-test-tools.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/smoke-temporary-id.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/smoke-project.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/smoke-copilot-sdk.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/smoke-codex.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/sergo.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/semantic-function-refactor.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/security-review.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/schema-consistency-checker.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/safe-output-health.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/research.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/repository-quality-improver.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/repo-tree-map.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/repo-audit-analyzer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/release.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/refiner.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/python-data-charts.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/prompt-clustering-analysis.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/pr-triage-agent.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/portfolio-analyst.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/org-health-report.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/notion-issue-summary.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/metrics-collector.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/mergefest.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/mcp-inspector.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/lockfile-stats.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/layout-spec-maintainer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/jsweep.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/issue-triage-agent.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/issue-classifier.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/issue-arborist.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/instructions-janitor.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/grumpy-reviewer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/gpclean.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/go-pattern-detector.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/go-logger.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/go-fan.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/glossary-maintainer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/github-remote-mcp-auth-test.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/github-mcp-tools-report.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/github-mcp-structural-analysis.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/functional-pragmatist.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/firewall.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/firewall-escape.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/example-workflow-analyzer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/example-permissions-warning.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/example-custom-error-patterns.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/duplicate-code-detector.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/draft-pr-cleanup.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/docs-noob-tester.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/discussion-task-miner.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/dictation-prompt.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/developer-docs-consolidator.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/dev.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/dependabot-go-checker.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/dependabot-burner.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/delight.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/deep-report.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-workflow-updater.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-testify-uber-super-expert.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-team-status.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-team-evolution-insights.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-syntax-error-quality.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-semgrep-scan.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-security-red-team.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-secrets-analysis.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-safe-outputs-conformance.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-safe-output-optimizer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-repo-chronicle.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-regulatory.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-performance-summary.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-observability-report.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-news.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-mcp-concurrency-analysis.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-malicious-code-scan.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-issues-report.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-firewall-report.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-file-diet.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-fact.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-doc-updater.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-copilot-token-report.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-compiler-quality.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-code-metrics.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-cli-tools-tester.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-cli-performance.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-choice-test.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/daily-assign-issue-to-user.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/craft.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/copilot-session-insights.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/copilot-pr-prompt-analysis.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/copilot-pr-nlp-analysis.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/copilot-pr-merged-report.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/copilot-cli-deep-research.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/copilot-agent-analysis.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/commit-changes-analyzer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/codex-github-remote-mcp-test.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/code-simplifier.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/code-scanning-fixer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/cli-version-checker.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/cli-consistency-checker.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/claude-code-user-docs-review.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/ci-coach.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/chroma-issue-indexer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/changeset.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/breaking-change-checker.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/brave.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/blog-auditor.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/auto-triage-issues.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/audit-workflows.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/artifacts-summary.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/ai-moderator.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/agent-persona-explorer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.
.github/workflows/agent-performance-analyzer.lock.yml Moves “Interpolate variables and render templates” before “Substitute placeholders”.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 354 to 356
// Add combined interpolation and template rendering step
// This step processes runtime-import macros, so it must run BEFORE placeholder substitution
c.generateInterpolationAndTemplateStep(yaml, expressionMappings, data)
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

generateInterpolationAndTemplateStep can be skipped when there are no extracted expressions and no template conditionals in data.MarkdownContent, but this step is also responsible for processing {{#runtime-import ...}} macros (as noted in the new comment). Since generatePrompt always emits a runtime-import macro for the main workflow markdown, skipping this step would leave runtime-imports unprocessed and the prompt file incomplete. Consider updating the step-generation condition to also run when runtime-import macros are present (e.g., track a hasRuntimeImports flag in generatePrompt/userPromptChunks, or conservatively always emit the step whenever you add the main runtime-import macro).

Copilot uses AI. Check for mistakes.
Comment on lines +387 to +388
// Returns the combined expression mappings for use in the placeholder substitution step.
func (c *Compiler) generateUnifiedPromptCreationStep(yaml *strings.Builder, builtinSections []PromptSection, userPromptChunks []string, expressionMappings []*ExpressionMapping, data *WorkflowData) []*ExpressionMapping {
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This function now both emits YAML and returns data used by a later step, but the name/signature still reads like a pure "generate step" helper. To avoid misuse/confusion (especially since callers may ignore the return value), consider separating concerns (e.g., a helper that computes/merges expression mappings and a helper that only writes the YAML), or rename to reflect that it returns mappings needed by subsequent steps.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants