Repository navigation
Description
Source squad: desharpe/HealthAgent
Request type: cross-repository task delegation
Routing: Booster (CI/CD), with CONTROL/RETRO review
Related: #1493, #1462
Problem
@bradygaster/squad-cli and @bradygaster/squad-sdk currently emit GitHub Actions workflows with hardcoded hosted runners and mutable action tags. CLI upgrade also duplicates non-NPM workflow stubs, so repository-local template hardening is not preserved for standalone/global installs. This blocks downstream repositories that require organization-specific self-hosted runner labels and secure checkout defaults.
HealthAgent confirmed that patching installed package files from postinstall is not an acceptable fix: it is repository-specific, misses standalone/global CLI usage, and can generate the wrong ecosystem workflow.
Requested generic fix
- Add shared workflow-generation options supporting scalar or multi-label
runs-onvalues without hardcoding a downstream repository's policy. - Make secure checkout defaults explicit: immutable action references and
persist-credentials: false. - Consolidate CLI init/upgrade and non-NPM stubs on the shared generic renderer instead of duplicating workflow YAML generation.
- Expose equivalent runner/security options through the public SDK CI generator.
- Persist optional workflow-generation configuration in
.squad/config.jsonsosquad upgradecan reproduce the intended policy. - Validate configured runner/action values and reject control characters or mutable action references where custom refs are accepted.
- Keep generated workflows ecosystem-aware for npm, .NET, Go, Python, Java, and unknown projects.
Acceptance criteria
- Fresh init and upgrade from a globally installed CLI honor configured scalar and multi-label runners.
- Public SDK generation produces the same runner and checkout-security behavior as the CLI.
- Upgrade no longer replaces a configured self-hosted policy with
ubuntu-latest. - Generated checkout steps use immutable pins and disable persisted credentials by default.
- Generic ecosystem tests cover init, upgrade, standalone/global package behavior, and SDK generation.
- CLI and SDK receive changesets and the fix is published on npm.
Downstream dependency: desharpe/HealthAgent#190. HealthAgent will remove its rejected local postinstall patch and upgrade to the published fixed packages before its runner-policy PR can merge.
Activity
bradygaster commentedon Aug 23, 2026
Owner & rationale
Owner: Booster (
squad:booster). This is a workflow-generation policy/configuration problem: emitted GitHub Actions runners and checkout security defaults are hardcoded today. CONTROL and RETRO should review the final design, but Booster should own the CI/CD behavior and verification gate.Readiness: go:needs-research. The ask is RFC-shaped because it spans CLI templates, CLI upgrade config persistence, SDK CI generation, scheduler-generated workflows, validation rules, and security defaults.
Files in scope
Verified existing paths:
packages/squad-cli/src/cli/core/upgrade.tspackages/squad-cli/src/cli/core/templates.tspackages/squad-cli/templates/workflows/squad-ci.ymlpackages/squad-cli/templates/workflows/squad-docs.ymlpackages/squad-cli/templates/workflows/squad-heartbeat.ymlpackages/squad-cli/templates/workflows/squad-insider-release.ymlpackages/squad-cli/templates/workflows/squad-issue-assign.ymlpackages/squad-cli/templates/workflows/squad-label-enforce.ymlpackages/squad-cli/templates/workflows/squad-preview.ymlpackages/squad-cli/templates/workflows/squad-promote.ymlpackages/squad-cli/templates/workflows/squad-release.ymlpackages/squad-cli/templates/workflows/squad-triage.ymlpackages/squad-cli/templates/workflows/sync-squad-labels.ymlpackages/squad-sdk/src/build/ci-pipeline.tspackages/squad-sdk/src/runtime/scheduler.tspackages/squad-sdk/templates/workflows/squad-ci.ymlpackages/squad-sdk/templates/workflows/squad-docs.ymlpackages/squad-sdk/templates/workflows/squad-heartbeat.ymlpackages/squad-sdk/templates/workflows/squad-insider-release.ymlpackages/squad-sdk/templates/workflows/squad-issue-assign.ymlpackages/squad-sdk/templates/workflows/squad-label-enforce.ymlpackages/squad-sdk/templates/workflows/squad-preview.ymlpackages/squad-sdk/templates/workflows/squad-promote.ymlpackages/squad-sdk/templates/workflows/squad-release.ymlpackages/squad-sdk/templates/workflows/squad-triage.ymlpackages/squad-sdk/templates/workflows/sync-squad-labels.yml.github/workflows/squad-workflow-lint.ymlReproduction / measurement
Execution-tested command:
Relevant output excerpt:
No
persist-credentialsmatches were returned by that command.Verification bar
The design/implementation should add tests that fail against today’s hardcoded behavior and pass only when:
runs-onconfig values.generateProjectWorkflowStubhonor the same runner and checkout-security policy.generateGitHubActionsWorkflowcan emit the same runner and checkout-security policy as the CLI.persist-credentials: falseby default, unless an explicitly validated policy says otherwise.Traps
.github/workflows/squad-workflow-lint.ymlalready exists. Reconcile generated-output validation with it rather than adding a parallel lint path..lock.ymlactionlint schema questions do not define the CLI/SDK runner/checkout configuration model.Out of scope
.github/workflows/*#1493 local-edit preservation..lock.ymlactionlint suppressions from Emitted .lock.yml fails actionlint with 6 errors (copilot-requests scope, concurrency.queue) #1827.desharpe/HealthAgentbefore Squad publishes the generic fix.Session-stall guard
Before starting: this repo has phantom CRLF diffs (#1793). If
git statusshows files modified that you did not touch, rungit diff --ignore-cr-at-eol. If that output is empty, the diff is line-ending churn, not real edits — rungit add --renormalize .and continue. Do not halt and ask for confirmation; halting on phantom diffs is the documented cause of stuck sessions in this repo.bradygaster commentedon Aug 30, 2026
Consolidation note (Ralph triage): Two completed/superseded issues are consolidated here to preserve their unresolved requirements:
uns-on\ per-workflow, and bootstrap dependencies (Node, gh CLI) must be declared or pre-installed. These requirements carry forward here.
Both issues are being closed. This issue (#1502) is the authoritative tracker for runner selection, checkout version pinning, and upgrade-survival behavior.
github-actions commentedon Sep 10, 2026
🔄 Ralph — Auto-Triage
Assigned to: Flight
Reason: No module, routing, or role keyword match — routed to Lead/Architect
Source: lead-fallback
6 remaining items
github-actions commentedon Sep 11, 2026
🔄 Ralph — Auto-Triage
Assigned to: Flight
Reason: No module, routing, or role keyword match — routed to Lead/Architect
Source: lead-fallback
github-actions commentedon Sep 11, 2026
🔄 Ralph — Auto-Triage
Assigned to: Flight
Reason: No module, routing, or role keyword match — routed to Lead/Architect
Source: lead-fallback
github-actions commentedon Sep 11, 2026
🔄 Ralph — Auto-Triage
Assigned to: Flight
Reason: No module, routing, or role keyword match — routed to Lead/Architect
Source: lead-fallback
github-actions commentedon Sep 11, 2026
🔄 Ralph — Auto-Triage
Assigned to: Flight
Reason: No module, routing, or role keyword match — routed to Lead/Architect
Source: lead-fallback
github-actions commentedon Sep 13, 2026
🔄 Ralph — Auto-Triage
Assigned to: architect
Reason: No module, routing, or role keyword match — routed to Lead/Architect
Source: lead-fallback
github-actions commentedon Sep 24, 2026
📋 Assigned to agentic-workflows-dev (Agentic Workflows Engineer)
Issue: #1502 — [Cross-Squad] Make generated workflow runners and checkout security configurable
agentic-workflows-dev will pick this up in the next Copilot session.