Skip to content

Always configure OTLP from enterprise default variables and secrets - #56353

Open
pelikhan with Copilot wants to merge 8 commits into
mainfrom
copilot/update-compiler-config-otel
Open

Always configure OTLP from enterprise default variables and secrets#56353
pelikhan with Copilot wants to merge 8 commits into
mainfrom
copilot/update-compiler-config-otel

Conversation

Copilot AI commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

OTLP telemetry previously had to be opted into per workflow via observability.otlp frontmatter (typically through a shared import). This makes the compiler always emit OTEL configuration, falling back to org/enterprise-level Actions defaults so telemetry can be configured once and inherited by every agentic workflow.

Two new default env entries, reusing the existing compilerenv default-env infrastructure:

Name Kind Purpose
GH_AW_DEFAULT_OTLP_ENDPOINT variable Default OTLP collector endpoint
GH_AW_DEFAULT_OTLP_HEADERS secret Default OTLP export credentials

A workflow with no OTLP frontmatter now compiles to:

env:
  OTEL_EXPORTER_OTLP_ENDPOINT: ${{ vars.GH_AW_DEFAULT_OTLP_ENDPOINT }}
  OTEL_EXPORTER_OTLP_HEADERS: ${{ secrets.GH_AW_DEFAULT_OTLP_HEADERS }}
  GH_AW_OTLP_ENDPOINTS: '[{"url":"${{ vars.GH_AW_DEFAULT_OTLP_ENDPOINT }}","headers":"${{ secrets.GH_AW_DEFAULT_OTLP_HEADERS }}"}]'
  GH_AW_OTLP_IF_MISSING: ignore

Semantics

  • Fallback only — any observability.otlp endpoint from frontmatter or an import wins; precedence is unchanged for workflows already configuring OTLP.
  • No-op when unset — the default path forces GH_AW_OTLP_IF_MISSING: ignore, so unresolved expressions collapse to empty strings and the existing runtime parsers drop endpoints with an empty URL.
  • Fail when half-configured — endpoint set without headers errors out. This has to be a runtime bash guard (actions/setup/sh/check_otlp_default_credentials.sh) rather than a step if:, since the secrets context isn't available in step-level expressions.

Changes

  • pkg/workflow/compilerenv/manager.go — constants and expression builders for the default endpoint/headers.
  • pkg/workflow/observability_otlp.goresolveOTLPEndpointEntries() holds the fallback decision; env-line construction split into buildOTLPHeaderEnvLines() / buildOTLPPayloadEnvLines(); new credentials-check step generator.
  • pkg/workflow/compiler_yaml_checkout.go — emits the OTLP telemetry steps (mask + credentials check) in the agent job.
  • pkg/workflow/safe_update_enforcement.goGH_AW_DEFAULT_OTLP_HEADERS registered as compiler-internal so safe-update doesn't flag every compile as introducing a new secret.
  • pkg/cli/env_command.godefault_otlp_endpoint binding for gh aw env.
  • Docs: new "Organization-wide defaults" section in open-telemetry.mdx; table rows and precedence notes in compiler-enterprise-environment-controls.md.
  • .lock.yml files regenerated.

Review notes

  • Secret values are never printed; the guard only tests for emptiness, and masking is already handled by the existing mask_otlp_headers.sh step.
  • Expression-valued endpoints deliberately add no firewall allowlist entry — the collector domain isn't known at compile time, so enterprises must add it to network.allowed themselves. This is documented but worth a look.
  • Failing hard on endpoint-without-headers may be too strict for unauthenticated internal collectors; it's scoped to the enterprise-default path only, per the stated requirement.

Run: https://github.com/github/gh-aw/actions/runs/33081464762

Generated by 👨‍🍳 PR Sous Chef · pi · gpt54 · 18.6 AIC · ⌖ 8.23 AIC · ⊞ 8.7K ·
Comment /souschef to run again

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title Always configure OTEL from enterprise default variables and secrets Always configure OTLP from enterprise default variables and secrets Aug 27, 2026
Copilot AI requested a review from pelikhan August 27, 2026 13:39
@pelikhan
pelikhan marked this pull request as ready for review August 27, 2026 14:06
Copilot AI balanced review requested due to automatic review settings August 27, 2026 14:06
@github-actions

github-actions Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

PR Code Quality Reviewer completed the code quality review.

🔎 Code quality review by PR Code Quality Reviewer

@github-actions

github-actions Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Ponytail Reviewer completed successfully!

Generated by Ponytail Reviewer for #56353

@github-actions

github-actions Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Design Decision Gate 🏗️ completed the design decision gate check. See the comment below for the result and any generated ADR draft.

🏗️ ADR gate enforced by Design Decision Gate 🏗️

@github-actions

github-actions Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Test Quality Sentinel completed test quality analysis.

Test Quality Sentinel skipped because pre-fetch PR data was unavailable: unable to fetch test file diff

🧪 Test quality analysis by Test Quality Sentinel

@github-actions

github-actions Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer

@github-actions

Copy link
Copy Markdown
Contributor

Comment Memory

reviewed_at: 2026-08-27T00:00:00Z
review_event: COMMENT
top_themes:
  - no actionable changed-line issues found
  - OTLP enterprise-default fallback wiring reviewed
files_reviewed:
  - actions/setup/sh/check_otlp_default_credentials.sh
  - pkg/workflow/compiler_yaml_checkout.go
  - pkg/workflow/compilerenv/manager.go
  - pkg/workflow/observability_otlp.go
  - pkg/workflow/observability_otlp_test.go
  - pkg/workflow/observability_otlp_default_credentials_script_test.go
  - pkg/workflow/safe_update_enforcement.go
  - pkg/workflow/workflow_data.go
comment_count: 0

Note

This comment is managed by comment memory.

It stores persistent context for this thread in the code block at the top of this comment.
Edit only the text inside the backtick fences; workflow metadata and the footer are regenerated automatically.

Learn more about comment memory

🔎 Code quality review by PR Code Quality Reviewer · pi · gpt54 · 34.7 AIC · ⌖ 6.87 AIC · ⊞ 7K ·
Comment /review to run again

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Verdict

No blocking changed-line issues found in this OTLP enterprise-default fallback change.

Themes reviewed
  • default OTLP fallback precedence and no-op behavior when defaults are unset
  • runtime failure path when endpoint is configured without headers
  • early masking / checkout ordering interactions
  • MCP gateway env propagation and observability summary gating
  • safe-update allowlisting for compiler-injected secret references

I did not find a correctness regression in the changed lines that justifies blocking merge.

🔎 Code quality review by PR Code Quality Reviewer · pi · gpt54 · 34.7 AIC · ⌖ 6.87 AIC · ⊞ 7K
Comment /review to run again

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ponytail review: two tiny abstractions can be collapsed without losing clarity. net: -24 lines possible.

Generated by ✂️ Ponytail Reviewer for #56353 · codex · mai10 · 12 AIC · ⌖ 0.943 AIC · ⊞ 16.7K
Comment /ponytail to run again

// GH_AW_OTLP_ALL_HEADERS = all endpoint headers comma-joined (for masking).
if firstHeaders != "" {
otlpEnvLines += "\n OTEL_EXPORTER_OTLP_HEADERS: " + firstHeaders
// buildOTLPHeaderEnvLines returns the workflow env: lines carrying OTLP header values.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

pkg/workflow/observability_otlp.go:839: yagni: two tiny env-builder helpers with one caller each. Inline their string assembly into injectOTLPConfig.

// The credentials check then fails fast when the enterprise default OTLP endpoint is
// configured without the matching credentials secret; it is a no-op when the endpoint
// variable is unset.
func (c *Compiler) generateOTLPTelemetrySteps(yaml *strings.Builder, data *WorkflowData) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

pkg/workflow/compiler_yaml_checkout.go:22: yagni: generateOTLPTelemetrySteps is a one-call wrapper around three step emissions. Inline those writes in generateInitialAndCheckoutSteps and drop the helper.

…efaults

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

🏗️ Design Decision Gate — ADR Required

This PR makes significant changes to core business logic (376 new lines in business logic directories) but does not have a linked Architecture Decision Record (ADR).

📄 Draft ADR committed: docs/adr/56353-always-configure-otlp-from-enterprise-defaults.md — review and complete it before merging.

🔒 This PR cannot merge until an ADR is linked in the PR body.

📋 What to do next
  1. Review the draft ADR committed to your branch — it was generated from the PR diff
  2. Complete the missing sections — add context the AI couldn't infer, refine the decision rationale, and list real alternatives you considered
  3. Commit the finalized ADR to docs/adr/ on your branch
  4. Reference the ADR in this PR body by adding a line such as:

    ADR: ADR-56353: Always Configure OTLP from Enterprise Default Variables and Secrets

Once an ADR is linked in the PR body, this gate will re-run and verify the implementation matches the decision.

❓ Why ADRs Matter

"AI made me procrastinate on key design decisions. Because refactoring was cheap, I could always say 'I'll deal with this later.' Deferring decisions corroded my ability to think clearly."

ADRs create a searchable, permanent record of why the codebase looks the way it does. Future contributors (and your future self) will thank you.

📋 Michael Nygard ADR Format Reference

An ADR must contain these four sections to be considered complete:

  • Context — What is the problem? What forces are at play?
  • Decision — What did you decide? Why?
  • Alternatives Considered — What else could have been done?
  • Consequences — What are the trade-offs (positive and negative)?

All ADRs are stored in docs/adr/ as Markdown files numbered by PR number (e.g., 0042-use-postgresql.md for PR #42).

🏗️ ADR gate enforced by Design Decision Gate 🏗️ · claude · sonnet46 · 80 AIC · ⌖ 30.2 AIC · ⊞ 8.4K ·
Comment /review to run again

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds enterprise-wide OTLP defaults so compiled workflows inherit telemetry configuration without frontmatter.

Changes:

  • Adds default OTLP endpoint/header expressions and runtime credential validation.
  • Integrates telemetry steps, tests, CLI configuration, and documentation.
  • Regenerates affected workflow lock files.
Show a summary per file
File Description
pkg/workflow/workflow_data.go Tracks enterprise-default OTLP usage.
pkg/workflow/safe_update_enforcement.go Registers the internal OTLP secret.
pkg/workflow/observability_otlp.go Implements fallback resolution and env generation.
pkg/workflow/observability_otlp_test.go Tests fallback injection.
pkg/workflow/observability_otlp_default_credentials_script_test.go Tests the credential guard.
pkg/workflow/observability_job_summary_test.go Updates summary expectations.
pkg/workflow/compilerenv/manager.go Defines default OTLP expressions.
pkg/workflow/compiler_yaml_checkout.go Emits telemetry validation steps.
pkg/workflow/checkout_runtime_order_test.go Accounts for injected telemetry steps.
pkg/cli/env_command.go Adds endpoint management to gh aw env.
docs/src/content/docs/reference/open-telemetry.mdx Documents organization-wide defaults.
docs/src/content/docs/reference/compiler-enterprise-environment-controls.md Documents controls and precedence.
actions/setup/sh/check_otlp_default_credentials.sh Validates endpoint/header pairing.
.github/workflows/smoke-copilot-small.lock.yml Regenerates compiled OTLP configuration.
.github/workflows/smoke-copilot-sdk.lock.yml Regenerates compiled OTLP configuration.
.github/workflows/sighthound-security-scan.lock.yml Regenerates compiled OTLP configuration.
.github/workflows/pr-description-caveman.lock.yml Regenerates compiled OTLP configuration.
.github/workflows/example-failure-category-filter.lock.yml Regenerates compiled OTLP configuration.
.github/workflows/designer-drift-audit.lock.yml Regenerates compiled OTLP configuration.
.github/workflows/daily-trajectory-grader-implementer.lock.yml Regenerates compiled OTLP configuration.
.github/workflows/daily-team-status.lock.yml Regenerates compiled OTLP configuration.
.github/workflows/daily-squid-image-scan.lock.yml Regenerates compiled OTLP configuration.
.github/workflows/daily-max-ai-credits-test.lock.yml Regenerates compiled OTLP configuration.
.github/workflows/daily-github-docs-seo-optimizer.lock.yml Regenerates compiled OTLP configuration.
.github/workflows/daily-byok-ollama-test.lock.yml Regenerates compiled OTLP configuration.
.github/workflows/copilot-centralization-optimizer.lock.yml Regenerates compiled OTLP configuration.
.github/workflows/copilot-centralization-drilldown.lock.yml Regenerates compiled OTLP configuration.

Review details

  • Files reviewed: 60/60 changed files
  • Comments generated: 3
  • Review effort level: Balanced

Comment on lines +26 to +27
if isOTLPDefaultCredentialsCheckNeeded(data) {
yaml.WriteString(generateOTLPDefaultCredentialsCheckStep())
Comment thread pkg/workflow/observability_otlp.go Outdated
// workflow-specific when WorkflowID is available.
// If the user has already defined OTEL_SERVICE_NAME in their env block,
// we respect their value and skip injection to avoid duplicate key errors.
otlpEnvLines := " OTEL_EXPORTER_OTLP_ENDPOINT: " + firstEndpoint
Comment on lines +805 to +808
return []otlpEndpointEntry{{
URL: compilerenv.BuildDefaultOTLPEndpointExpression(),
Headers: compilerenv.BuildDefaultOTLPHeadersExpression(),
}}, true

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Skills-Based Review 🧠

Applied /tdd and /codebase-design — overall solid implementation with one important test gap and two minor hardening opportunities.

📋 Key Themes & Highlights

Key Themes

  • Missing regression guard: no test asserts OTLPUsesEnterpriseDefaults == false when explicit frontmatter OTLP is configured — the most important invariant of the precedence contract is not verified.
  • GH_AW_OTLP_IF_MISSING mask step always emits: the enterprise-default headers expression ${{ secrets.GH_AW_DEFAULT_OTLP_HEADERS }} is non-empty at compile time, so isOTLPHeadersPresent is always true and the mask step fires for every workflow. This is correct runtime behaviour (masking an empty resolved value is harmless), but it's surprising enough to warrant a comment.
  • safe_update_enforcement.go omits the variable entry: DefaultOTLPHeaders is registered but DefaultOTLPEndpoint is not. Variables don't require the same secrecy treatment, but the surrounding map is documented as covering "infrastructure secrets/vars managed by gh-aw itself", so consistency argues for adding the entry.

Positive Highlights

  • GH_AW_OTLP_IF_MISSING: ignore correctly forced for the enterprise-defaults path.
  • ✅ Expression endpoints skip the firewall allowlist — correct and documented.
  • setup.sh copies all sh/*.sh via glob, so no explicit registration is needed for the new script.
  • ✅ Shell script test coverage is thorough and uses filteredEnv isolation.
  • safe_update_enforcement.go registers the secret to avoid spurious safe-update failures.
  • ✅ Documentation clearly explains the fallback semantics and the unauthenticated-collector limitation.

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · copilot · sonnet46 · 105.3 AIC · ⌖ 10.2 AIC · ⊞ 7.6K
Comment /matt to run again

assert.True(t, wd.OTLPUsesEnterpriseDefaults, "enterprise defaults should be flagged")
assert.Contains(t, wd.Env, "OTEL_EXPORTER_OTLP_ENDPOINT: ${{ vars.GH_AW_DEFAULT_OTLP_ENDPOINT }}")
})

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[/tdd] Missing regression guard: no test asserts OTLPUsesEnterpriseDefaults == false when explicit frontmatter OTLP is configured.

This is the most important invariant of the precedence contract — frontmatter always wins over enterprise defaults — and it goes unverified. A future refactor of resolveOTLPEndpointEntries could silently break it.

💡 Suggested test case
t.Run("does not use enterprise defaults when OTLP is configured in frontmatter", func(t *testing.T) {
    c := newCompiler()
    wd := &WorkflowData{
        ParsedFrontmatter: &FrontmatterConfig{
            Observability: &ObservabilityConfig{
                OTLP: &OTLPConfig{Endpoint: "(traces.example.com/redacted)"},
            },
        },
    }
    c.injectOTLPConfig(wd)
    assert.False(t, wd.OTLPUsesEnterpriseDefaults, "frontmatter endpoint must suppress enterprise defaults")
    assert.NotContains(t, wd.Env, "GH_AW_DEFAULT_OTLP_ENDPOINT")
})

@copilot please address this.

"COPILOT_GITHUB_TOKEN": true,
// Enterprise-wide OTLP exporter credentials injected by injectOTLPConfig when
// no observability.otlp endpoint is configured in frontmatter.
compilerenv.DefaultOTLPHeaders: true,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[/codebase-design] DefaultOTLPEndpoint (the variable) is not registered here, only DefaultOTLPHeaders (the secret).

The surrounding map is documented as covering all infrastructure env/vars managed by gh-aw. Omitting the endpoint variable creates an asymmetry: if safe-update ever gains variable checking, this entry will need adding under pressure. Registering it now keeps the map complete and consistent.

💡 Suggested addition
// Enterprise-wide OTLP endpoint variable injected by injectOTLPConfig when
// no observability.otlp endpoint is configured in frontmatter.
compilerenv.DefaultOTLPEndpoint: true,
// Enterprise-wide OTLP exporter credentials injected by injectOTLPConfig when
// no observability.otlp endpoint is configured in frontmatter.
compilerenv.DefaultOTLPHeaders: true,

@copilot please address this.

// GH_AW_OTLP_ALL_HEADERS holds all endpoint headers comma-joined (used for masking).
func buildOTLPHeaderEnvLines(entries []otlpEndpointEntry) string {
var lines string
if firstHeaders := entries[0].Headers; firstHeaders != "" {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[/codebase-design] The mask step will always be emitted for every workflow, even those where the enterprise-default secret resolves to empty at runtime.

Because entries[0].Headers is always ${{ secrets.GH_AW_DEFAULT_OTLP_HEADERS }} (a non-empty string at compile time) on the enterprise-defaults path, isOTLPHeadersPresent will always return true. Masking an empty string is harmless, but a brief comment here would prevent future readers from wondering whether the mask step is redundant.

💡 Suggested comment
// Note: when usesEnterpriseDefaults is true, entries[0].Headers is always the
// expression "${{ secrets.GH_AW_DEFAULT_OTLP_HEADERS }}", which is non-empty at
// compile time. The mask step therefore always emits; masking an empty resolved
// value at runtime is a no-op.

@copilot please address this.

@github-actions github-actions Bot mentioned this pull request Aug 27, 2026
@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot

I also attempted a branch refresh where allowed. After addressing the above, please run the pr-finisher skill.

Generated by 👨‍🍳 PR Sous Chef · pi · gpt54 · 18.6 AIC · ⌖ 8.23 AIC · ⊞ 8.7K ·
Comment /souschef to run again

@pelikhan

Copy link
Copy Markdown
Collaborator

@copilot update docs and specs

…tials leak

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>

Copilot AI commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

@copilot

I also attempted a branch refresh where allowed. After addressing the above, please run the pr-finisher skill....

Addressed the three review threads:

  1. Updated TestOTLPHeadersEnvVarNotPassedWithoutOTLP to expect the enterprise-default headers fallback.
  2. injectOTLPConfig now checks the user's env: block for every injected key (not just OTEL_SERVICE_NAME) before appending, avoiding duplicate YAML mapping keys.
  3. Centralized the half-configured-default guard inside parseOTLPEndpoints() in send_otlp_span.cjs (used by every span emitter — setup, conclusion, outcome, MCP gateway), so an enterprise-default endpoint with no headers is dropped everywhere, not just after the agent job's bash check runs.

Note: I don't have a pr-finisher skill available in my toolset, so I can't run that step — let me know if there's something specific you'd like me to follow up on there.

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
…ized guard + env dedup

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>

Copilot AI commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

@copilot update docs and specs

Updated docs and specs to reflect the guard fixes:

  • docs/src/content/docs/reference/open-telemetry.mdx and compiler-enterprise-environment-controls.md now describe that a half-configured default endpoint is dropped from every span-emitting job (not just failed in the agent job), and that env keys already defined by the user are skipped.
  • Added normative §5.8 "Enterprise Default Fallback" to specs/otel-observability-spec.md, cross-referenced from §6.1/§6.4, bumped to version 0.5.0 with a changelog entry.
  • Updated ADR-56353 to describe the centralized guard and env-dedup fixes.

@pelikhan

Copy link
Copy Markdown
Collaborator

@copilot resolve the merge conflicts on this branch.

Copilot AI and others added 3 commits August 27, 2026 15:19
…er-config-otel

# Conflicts:
#	.github/workflows/agentic-token-audit.lock.yml
#	.github/workflows/agentic-token-optimizer.lock.yml
#	.github/workflows/agentic-token-trend-audit.lock.yml
#	.github/workflows/archivx-agentic-workflows-analyzer.lock.yml
#	.github/workflows/copilot-centralization-drilldown.lock.yml
#	.github/workflows/copilot-centralization-optimizer.lock.yml
#	.github/workflows/daily-arxiv-researcher.lock.yml
#	.github/workflows/daily-byok-ollama-test.lock.yml
#	.github/workflows/daily-credit-limit-test.lock.yml
#	.github/workflows/daily-dashboard-language-spec-review.lock.yml
#	.github/workflows/daily-documentation-diagram.lock.yml
#	.github/workflows/daily-elixir-credo-snippet-audit.lock.yml
#	.github/workflows/daily-github-docs-seo-optimizer.lock.yml
#	.github/workflows/daily-go-test-parallelizer.lock.yml
#	.github/workflows/daily-graft-intelligence.lock.yml
#	.github/workflows/daily-max-ai-credits-test.lock.yml
#	.github/workflows/daily-safeoutputs-git-simulator.lock.yml
#	.github/workflows/daily-spending-forecast.lock.yml
#	.github/workflows/daily-squid-image-scan.lock.yml
#	.github/workflows/daily-team-status.lock.yml
#	.github/workflows/daily-trajectory-grader-implementer.lock.yml
#	.github/workflows/daily-windows-terminal-integration-builder.lock.yml
#	.github/workflows/designer-drift-audit.lock.yml
#	.github/workflows/eslint-miner.lock.yml
#	.github/workflows/evoskill-evolver.lock.yml
#	.github/workflows/example-failure-category-filter.lock.yml
#	.github/workflows/objective-impact-report.lock.yml
#	.github/workflows/portfolio-analyst.lock.yml
#	.github/workflows/pr-description-caveman.lock.yml
#	.github/workflows/ruflo-backed-task.lock.yml
#	.github/workflows/sighthound-security-scan.lock.yml
#	.github/workflows/smoke-aider.lock.yml
#	.github/workflows/smoke-claude-on-copilot.lock.yml
#	.github/workflows/smoke-copilot-auto.lock.yml
#	.github/workflows/smoke-copilot-mai.lock.yml
#	.github/workflows/smoke-copilot-sdk.lock.yml
#	.github/workflows/smoke-copilot-small.lock.yml
#	.github/workflows/smoke-copilot-sub-agents.lock.yml
#	.github/workflows/smoke-drive.lock.yml
#	.github/workflows/smoke-github-claude.lock.yml
#	.github/workflows/smoke-pydantic.lock.yml
#	.github/workflows/squad-game-planner.lock.yml
#	.github/workflows/squad-implement-worker.lock.yml
#	.github/workflows/squad-plan.lock.yml
#	.github/workflows/squad.lock.yml
#	.github/workflows/weekly-network-domains-audit.lock.yml

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>

Copilot AI commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

@copilot resolve the merge conflicts on this branch.

Resolved in 092fca9. Unshallowed the repo, merged origin/main; all conflicts were confined to generated .lock.yml files, resolved by regenerating them with make recompile. Also fixed a couple of duplicate keys in .github/aw/actions-lock.json surfaced by that recompile (fixed in a follow-up commit). Build and full pkg/workflow + JS test suites pass post-merge.

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.

4 participants