Skip to content

fix: correct YAML syntax in agents-issue-intake.yml template#602

Merged
stranske merged 2 commits intomainfrom
fix/agents-issue-intake-yaml-syntax
Jan 6, 2026
Merged

fix: correct YAML syntax in agents-issue-intake.yml template#602
stranske merged 2 commits intomainfrom
fix/agents-issue-intake-yaml-syntax

Conversation

@stranske
Copy link
Copy Markdown
Owner

@stranske stranske commented Jan 6, 2026

Problem

The agents-issue-intake.yml workflow template has a YAML syntax error that causes startup_failure in consumer repositories like Travel-Plan-Permission.

Root Cause: The if condition in the check_labels job (line 109) was too long and wrapped incorrectly, with runs-on: ubuntu-latest ending up on the same line as the closing parenthesis of the condition. This is invalid YAML syntax.

Solution

  • Use multiline scalar (|) for the complex if condition
  • Properly indent continuation lines for readability
  • Ensure runs-on is on its own line as required by YAML spec

Impact

This fixes workflow failures in:

  • stranske/Travel-Plan-Permission (all recent runs showing startup_failure)
  • Any other consumer repositories using this template

Testing

  • ✅ YAML syntax validation passes
  • ✅ Pre-commit hooks pass
  • Template will auto-sync to consumer repos once merged

Related Issues

Fixes: https://github.com/stranske/Travel-Plan-Permission/actions/workflows/agents-issue-intake.yml

The 'if' condition in the check_labels job was improperly formatted,
causing the line to wrap incorrectly with 'runs-on' ending up on the
same line. This resulted in startup_failure errors when the workflow
was deployed to consumer repos.

Changes:
- Use multiline scalar (|) for complex if condition
- Properly indent continuation lines
- Ensure runs-on is on its own line

Fixes workflow failures in stranske/Travel-Plan-Permission and other
consumer repositories using this template.
Copilot AI review requested due to automatic review settings January 6, 2026 13:00
@agents-workflows-bot
Copy link
Copy Markdown
Contributor

⚠️ Action Required: Unable to determine source issue for PR #602. The PR title, branch name, or body must contain the issue number (e.g. #123, branch: issue-123, or the hidden marker ).

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Jan 6, 2026

Automated Status Summary

Head SHA: 4e88aed
Latest Runs: ⏳ pending — Gate
Required contexts: Gate / gate, Health 45 Agents Guard / Enforce agents workflow protections
Required: core tests (3.11): ⏳ pending, core tests (3.12): ⏳ pending, docker smoke: ⏳ pending, gate: ⏳ pending

Workflow / Job Result Logs
(no jobs reported) ⏳ pending

Coverage Overview

  • Coverage history entries: 1

Coverage Trend

Metric Value
Current 92.21%
Baseline 85.00%
Delta +7.21%
Minimum 70.00%
Status ✅ Pass

Top Coverage Hotspots (lowest coverage)

File Coverage Missing
scripts/workflow_health_check.py 62.6% 28
scripts/classify_test_failures.py 62.9% 37
scripts/ledger_validate.py 65.3% 63
scripts/mypy_return_autofix.py 82.6% 11
scripts/ledger_migrate_base.py 85.5% 13
scripts/fix_cosmetic_aggregate.py 92.3% 1
scripts/coverage_history_append.py 92.8% 2
scripts/workflow_validator.py 93.3% 4
scripts/update_autofix_expectations.py 93.9% 1
scripts/pr_metrics_tracker.py 95.7% 3
scripts/generate_residual_trend.py 96.6% 1
scripts/build_autofix_pr_comment.py 97.0% 2
scripts/aggregate_agent_metrics.py 97.2% 0
scripts/fix_numpy_asserts.py 98.1% 0
scripts/sync_test_dependencies.py 98.3% 1

Updated automatically; will refresh on subsequent CI/Docker completions.


Keepalive checklist

Scope

No scope information available

Tasks

  • No tasks defined

Acceptance criteria

  • No acceptance criteria defined

Copy link
Copy Markdown
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 a YAML syntax error in the agents-issue-intake.yml workflow template that was causing startup failures in consumer repositories. The fix converts a problematic long single-line if condition to a multiline format using the YAML literal block scalar (|), ensuring proper separation of the condition from the runs-on directive.

Key Changes:

  • Reformatted the if condition in the check_labels job from a single line to a multiline format
  • Used YAML literal block scalar syntax (|) with proper indentation for improved readability
  • Ensured runs-on: ubuntu-latest appears on its own line as required

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Jan 6, 2026

🤖 Keepalive Loop Status

PR #602 | Agent: Codex | Iteration 0/5

Current State

Metric Value
Iteration progress [----------] 0/5
Action wait (missing-agent-label)
Disposition skipped (transient)
Gate success
Tasks 0/5 complete
Keepalive ❌ disabled
Autofix ❌ disabled

🔍 Failure Classification

| Error type | infrastructure |
| Error category | resource |
| Suggested recovery | Confirm the referenced resource exists (repo, PR, branch, workflow, or file). |

Problem: Template changes sync to 4+ consumer repos. A syntax error
in agents-issue-intake.yml caused startup_failure in all consumer
repos because there was no validation preventing bad templates.

Changes:
1. Fix YAML syntax error in check_labels job (multiline if condition)
2. Add validate_workflow_yaml.py script to catch YAML/style issues
3. Add pre-commit hook to validate templates before commit
4. Add CRITICAL section to CLAUDE.md about template changes

Safeguards added:
- Pre-commit hook blocks template commits with validation errors
- Script checks: YAML syntax, line length (100), runs-on placement
- Clear warning in CLAUDE.md with validation commands
- Enforces repo standards before sync

Related: Travel-Plan-Permission#253, Workflows#602
@github-actions github-actions bot added the autofix Opt-in automated formatting & lint remediation label Jan 6, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Jan 6, 2026

Status | ✅ no new diagnostics
History points | 1
Timestamp | 2026-01-06 13:10:41 UTC
Report artifact | autofix-report-pr-602
Remaining | 0
New | 0
No additional artifacts

@stranske stranske merged commit 3472d43 into main Jan 6, 2026
37 checks passed
@stranske stranske deleted the fix/agents-issue-intake-yaml-syntax branch January 6, 2026 13:11
stranske added a commit that referenced this pull request Jan 6, 2026
* fix: correct YAML syntax in agents-issue-intake.yml template

The 'if' condition in the check_labels job was improperly formatted,
causing the line to wrap incorrectly with 'runs-on' ending up on the
same line. This resulted in startup_failure errors when the workflow
was deployed to consumer repos.

Changes:
- Use multiline scalar (|) for complex if condition
- Properly indent continuation lines
- Ensure runs-on is on its own line

Fixes workflow failures in stranske/Travel-Plan-Permission and other
consumer repositories using this template.

* fix: add validation safeguards for template changes

Problem: Template changes sync to 4+ consumer repos. A syntax error
in agents-issue-intake.yml caused startup_failure in all consumer
repos because there was no validation preventing bad templates.

Changes:
1. Fix YAML syntax error in check_labels job (multiline if condition)
2. Add validate_workflow_yaml.py script to catch YAML/style issues
3. Add pre-commit hook to validate templates before commit
4. Add CRITICAL section to CLAUDE.md about template changes

Safeguards added:
- Pre-commit hook blocks template commits with validation errors
- Script checks: YAML syntax, line length (100), runs-on placement
- Clear warning in CLAUDE.md with validation commands
- Enforces repo standards before sync

Related: Travel-Plan-Permission#253, Workflows#602
stranske added a commit that referenced this pull request Jan 6, 2026
* fix: correct YAML syntax in agents-issue-intake.yml template

The 'if' condition in the check_labels job was improperly formatted,
causing the line to wrap incorrectly with 'runs-on' ending up on the
same line. This resulted in startup_failure errors when the workflow
was deployed to consumer repos.

Changes:
- Use multiline scalar (|) for complex if condition
- Properly indent continuation lines
- Ensure runs-on is on its own line

Fixes workflow failures in stranske/Travel-Plan-Permission and other
consumer repositories using this template.

* fix: add validation safeguards for template changes

Problem: Template changes sync to 4+ consumer repos. A syntax error
in agents-issue-intake.yml caused startup_failure in all consumer
repos because there was no validation preventing bad templates.

Changes:
1. Fix YAML syntax error in check_labels job (multiline if condition)
2. Add validate_workflow_yaml.py script to catch YAML/style issues
3. Add pre-commit hook to validate templates before commit
4. Add CRITICAL section to CLAUDE.md about template changes

Safeguards added:
- Pre-commit hook blocks template commits with validation errors
- Script checks: YAML syntax, line length (100), runs-on placement
- Clear warning in CLAUDE.md with validation commands
- Enforces repo standards before sync

Related: Travel-Plan-Permission#253, Workflows#602
stranske added a commit that referenced this pull request Jan 6, 2026
…workflow (#603)

* fix: correct YAML syntax in agents-issue-intake.yml template (#602)

* fix: correct YAML syntax in agents-issue-intake.yml template

The 'if' condition in the check_labels job was improperly formatted,
causing the line to wrap incorrectly with 'runs-on' ending up on the
same line. This resulted in startup_failure errors when the workflow
was deployed to consumer repos.

Changes:
- Use multiline scalar (|) for complex if condition
- Properly indent continuation lines
- Ensure runs-on is on its own line

Fixes workflow failures in stranske/Travel-Plan-Permission and other
consumer repositories using this template.

* fix: add validation safeguards for template changes

Problem: Template changes sync to 4+ consumer repos. A syntax error
in agents-issue-intake.yml caused startup_failure in all consumer
repos because there was no validation preventing bad templates.

Changes:
1. Fix YAML syntax error in check_labels job (multiline if condition)
2. Add validate_workflow_yaml.py script to catch YAML/style issues
3. Add pre-commit hook to validate templates before commit
4. Add CRITICAL section to CLAUDE.md about template changes

Safeguards added:
- Pre-commit hook blocks template commits with validation errors
- Script checks: YAML syntax, line length (100), runs-on placement
- Clear warning in CLAUDE.md with validation commands
- Enforces repo standards before sync

Related: Travel-Plan-Permission#253, Workflows#602

* fix: correct YAML syntax in agents-issue-intake.yml template (#602)

* fix: correct YAML syntax in agents-issue-intake.yml template

The 'if' condition in the check_labels job was improperly formatted,
causing the line to wrap incorrectly with 'runs-on' ending up on the
same line. This resulted in startup_failure errors when the workflow
was deployed to consumer repos.

Changes:
- Use multiline scalar (|) for complex if condition
- Properly indent continuation lines
- Ensure runs-on is on its own line

Fixes workflow failures in stranske/Travel-Plan-Permission and other
consumer repositories using this template.

* fix: add validation safeguards for template changes

Problem: Template changes sync to 4+ consumer repos. A syntax error
in agents-issue-intake.yml caused startup_failure in all consumer
repos because there was no validation preventing bad templates.

Changes:
1. Fix YAML syntax error in check_labels job (multiline if condition)
2. Add validate_workflow_yaml.py script to catch YAML/style issues
3. Add pre-commit hook to validate templates before commit
4. Add CRITICAL section to CLAUDE.md about template changes

Safeguards added:
- Pre-commit hook blocks template commits with validation errors
- Script checks: YAML syntax, line length (100), runs-on placement
- Clear warning in CLAUDE.md with validation commands
- Enforces repo standards before sync

Related: Travel-Plan-Permission#253, Workflows#602

* fix: use CODESPACES_WORKFLOWS token for merge permissions

The workflow now uses the CODESPACES_WORKFLOWS secret which has
merge permissions, falling back to GITHUB_TOKEN if not available.

Successfully merged sync PRs in Manager-Database, Template, and
trip-planner using this token.

* fix: use REGISTERED_CONSUMER_REPOS and add stale PR cleanup

- Parse multiline REGISTERED_CONSUMER_REPOS env var instead of hardcoded list
- Add stale PR cleanup: close and delete branches for older sync PRs
- Process repos in order from REGISTERED_CONSUMER_REPOS (7 repos total)
- Increase per_page to 20 to catch multiple stale PRs
- Add stale_closed status tracking in summary

* fix: dynamically read REGISTERED_CONSUMER_REPOS from source file

- Extract consumer repo list from maint-68-sync-consumer-repos.yml at runtime
- Use yq to parse the authoritative REGISTERED_CONSUMER_REPOS env var
- Remove duplicated hardcoded list to maintain single source of truth

* fix: address bot review comments in validation script

- Change default max_length from 150 to 100 to match repo standards (black, ruff, isort)
- Add explicit encoding='utf-8' to all file operations for cross-platform compatibility
- Remove redundant condition check (already verified by elif condition)

* docs: add workflow artifact checklist to prevent .gitignore conflicts

- Add critical section to CLAUDE.md about checking new workflows for file artifacts
- Create comprehensive WORKFLOW_ARTIFACT_CHECKLIST.md with decision trees and examples
- Document common artifact patterns that cause merge conflicts in consumer repos
- Provide recovery procedures for artifact pollution
- Emphasize template workflows sync to 7+ repos (one mistake = 7+ conflicts)

* docs: add critical section on handling agent bot review comments

- Require addressing ALL bot comments before merging PRs
- Document that bot comments are mandatory fixes, not suggestions
- Provide process for evaluating and resolving bot feedback
- Emphasize impact: ignored comments → bugs in 7+ consumer repos
- Add examples of critical issues bots catch (encoding, defaults, logic)

* fix: register maint-71-merge-sync-prs.yml in tests and docs

- Add workflow to EXPECTED_NAMES test mapping
- Document in docs/ci/WORKFLOWS.md with description
- Add to docs/ci/WORKFLOW_SYSTEM.md workflow table
- Fixes test failures: test_canonical_workflow_names_match_expected_mapping, test_workflow_names_match_filename_convention, test_inventory_docs_list_all_workflows

* fix: quote shell variables in maint-71-merge-sync-prs.yml

- Quote $repos variable in yq pipeline to prevent word splitting (SC2086)
- Quote $GITHUB_OUTPUT and $GITHUB_STEP_SUMMARY variables
- Fixes shellcheck warnings in actionlint
stranske added a commit that referenced this pull request Jan 6, 2026
* fix: correct YAML syntax in agents-issue-intake.yml template (#602)

* fix: correct YAML syntax in agents-issue-intake.yml template

The 'if' condition in the check_labels job was improperly formatted,
causing the line to wrap incorrectly with 'runs-on' ending up on the
same line. This resulted in startup_failure errors when the workflow
was deployed to consumer repos.

Changes:
- Use multiline scalar (|) for complex if condition
- Properly indent continuation lines
- Ensure runs-on is on its own line

Fixes workflow failures in stranske/Travel-Plan-Permission and other
consumer repositories using this template.

* fix: add validation safeguards for template changes

Problem: Template changes sync to 4+ consumer repos. A syntax error
in agents-issue-intake.yml caused startup_failure in all consumer
repos because there was no validation preventing bad templates.

Changes:
1. Fix YAML syntax error in check_labels job (multiline if condition)
2. Add validate_workflow_yaml.py script to catch YAML/style issues
3. Add pre-commit hook to validate templates before commit
4. Add CRITICAL section to CLAUDE.md about template changes

Safeguards added:
- Pre-commit hook blocks template commits with validation errors
- Script checks: YAML syntax, line length (100), runs-on placement
- Clear warning in CLAUDE.md with validation commands
- Enforces repo standards before sync

Related: Travel-Plan-Permission#253, Workflows#602

* fix: correct YAML syntax in agents-issue-intake.yml template (#602)

* fix: correct YAML syntax in agents-issue-intake.yml template

The 'if' condition in the check_labels job was improperly formatted,
causing the line to wrap incorrectly with 'runs-on' ending up on the
same line. This resulted in startup_failure errors when the workflow
was deployed to consumer repos.

Changes:
- Use multiline scalar (|) for complex if condition
- Properly indent continuation lines
- Ensure runs-on is on its own line

Fixes workflow failures in stranske/Travel-Plan-Permission and other
consumer repositories using this template.

* fix: add validation safeguards for template changes

Problem: Template changes sync to 4+ consumer repos. A syntax error
in agents-issue-intake.yml caused startup_failure in all consumer
repos because there was no validation preventing bad templates.

Changes:
1. Fix YAML syntax error in check_labels job (multiline if condition)
2. Add validate_workflow_yaml.py script to catch YAML/style issues
3. Add pre-commit hook to validate templates before commit
4. Add CRITICAL section to CLAUDE.md about template changes

Safeguards added:
- Pre-commit hook blocks template commits with validation errors
- Script checks: YAML syntax, line length (100), runs-on placement
- Clear warning in CLAUDE.md with validation commands
- Enforces repo standards before sync

Related: Travel-Plan-Permission#253, Workflows#602

* fix: use CODESPACES_WORKFLOWS token for merge permissions

The workflow now uses the CODESPACES_WORKFLOWS secret which has
merge permissions, falling back to GITHUB_TOKEN if not available.

Successfully merged sync PRs in Manager-Database, Template, and
trip-planner using this token.

* fix: use REGISTERED_CONSUMER_REPOS and add stale PR cleanup

- Parse multiline REGISTERED_CONSUMER_REPOS env var instead of hardcoded list
- Add stale PR cleanup: close and delete branches for older sync PRs
- Process repos in order from REGISTERED_CONSUMER_REPOS (7 repos total)
- Increase per_page to 20 to catch multiple stale PRs
- Add stale_closed status tracking in summary

* fix: dynamically read REGISTERED_CONSUMER_REPOS from source file

- Extract consumer repo list from maint-68-sync-consumer-repos.yml at runtime
- Use yq to parse the authoritative REGISTERED_CONSUMER_REPOS env var
- Remove duplicated hardcoded list to maintain single source of truth

* fix: address bot review comments in validation script

- Change default max_length from 150 to 100 to match repo standards (black, ruff, isort)
- Add explicit encoding='utf-8' to all file operations for cross-platform compatibility
- Remove redundant condition check (already verified by elif condition)

* docs: add workflow artifact checklist to prevent .gitignore conflicts

- Add critical section to CLAUDE.md about checking new workflows for file artifacts
- Create comprehensive WORKFLOW_ARTIFACT_CHECKLIST.md with decision trees and examples
- Document common artifact patterns that cause merge conflicts in consumer repos
- Provide recovery procedures for artifact pollution
- Emphasize template workflows sync to 7+ repos (one mistake = 7+ conflicts)

* docs: add critical section on handling agent bot review comments

- Require addressing ALL bot comments before merging PRs
- Document that bot comments are mandatory fixes, not suggestions
- Provide process for evaluating and resolving bot feedback
- Emphasize impact: ignored comments → bugs in 7+ consumer repos
- Add examples of critical issues bots catch (encoding, defaults, logic)

* fix: register maint-71-merge-sync-prs.yml in tests and docs

- Add workflow to EXPECTED_NAMES test mapping
- Document in docs/ci/WORKFLOWS.md with description
- Add to docs/ci/WORKFLOW_SYSTEM.md workflow table
- Fixes test failures: test_canonical_workflow_names_match_expected_mapping, test_workflow_names_match_filename_convention, test_inventory_docs_list_all_workflows

* fix: quote shell variables in maint-71-merge-sync-prs.yml

- Quote $repos variable in yq pipeline to prevent word splitting (SC2086)
- Quote $GITHUB_OUTPUT and $GITHUB_STEP_SUMMARY variables
- Fixes shellcheck warnings in actionlint

* fix: Remove GITHUB_TOKEN fallback in merge workflow

The fallback to GITHUB_TOKEN causes merge failures since GITHUB_TOKEN
lacks merge permissions. Require CODESPACES_WORKFLOWS secret explicitly.

* docs: Add critical section on syncing with main before PRs

Prevents merge conflicts and wasted CI resources by requiring
git fetch/merge before gh pr create.
stranske added a commit that referenced this pull request Jan 6, 2026
* fix: correct YAML syntax in agents-issue-intake.yml template (#602)

* fix: correct YAML syntax in agents-issue-intake.yml template

The 'if' condition in the check_labels job was improperly formatted,
causing the line to wrap incorrectly with 'runs-on' ending up on the
same line. This resulted in startup_failure errors when the workflow
was deployed to consumer repos.

Changes:
- Use multiline scalar (|) for complex if condition
- Properly indent continuation lines
- Ensure runs-on is on its own line

Fixes workflow failures in stranske/Travel-Plan-Permission and other
consumer repositories using this template.

* fix: add validation safeguards for template changes

Problem: Template changes sync to 4+ consumer repos. A syntax error
in agents-issue-intake.yml caused startup_failure in all consumer
repos because there was no validation preventing bad templates.

Changes:
1. Fix YAML syntax error in check_labels job (multiline if condition)
2. Add validate_workflow_yaml.py script to catch YAML/style issues
3. Add pre-commit hook to validate templates before commit
4. Add CRITICAL section to CLAUDE.md about template changes

Safeguards added:
- Pre-commit hook blocks template commits with validation errors
- Script checks: YAML syntax, line length (100), runs-on placement
- Clear warning in CLAUDE.md with validation commands
- Enforces repo standards before sync

Related: Travel-Plan-Permission#253, Workflows#602

* fix: correct YAML syntax in agents-issue-intake.yml template (#602)

* fix: correct YAML syntax in agents-issue-intake.yml template

The 'if' condition in the check_labels job was improperly formatted,
causing the line to wrap incorrectly with 'runs-on' ending up on the
same line. This resulted in startup_failure errors when the workflow
was deployed to consumer repos.

Changes:
- Use multiline scalar (|) for complex if condition
- Properly indent continuation lines
- Ensure runs-on is on its own line

Fixes workflow failures in stranske/Travel-Plan-Permission and other
consumer repositories using this template.

* fix: add validation safeguards for template changes

Problem: Template changes sync to 4+ consumer repos. A syntax error
in agents-issue-intake.yml caused startup_failure in all consumer
repos because there was no validation preventing bad templates.

Changes:
1. Fix YAML syntax error in check_labels job (multiline if condition)
2. Add validate_workflow_yaml.py script to catch YAML/style issues
3. Add pre-commit hook to validate templates before commit
4. Add CRITICAL section to CLAUDE.md about template changes

Safeguards added:
- Pre-commit hook blocks template commits with validation errors
- Script checks: YAML syntax, line length (100), runs-on placement
- Clear warning in CLAUDE.md with validation commands
- Enforces repo standards before sync

Related: Travel-Plan-Permission#253, Workflows#602

* fix: use CODESPACES_WORKFLOWS token for merge permissions

The workflow now uses the CODESPACES_WORKFLOWS secret which has
merge permissions, falling back to GITHUB_TOKEN if not available.

Successfully merged sync PRs in Manager-Database, Template, and
trip-planner using this token.

* fix: use REGISTERED_CONSUMER_REPOS and add stale PR cleanup

- Parse multiline REGISTERED_CONSUMER_REPOS env var instead of hardcoded list
- Add stale PR cleanup: close and delete branches for older sync PRs
- Process repos in order from REGISTERED_CONSUMER_REPOS (7 repos total)
- Increase per_page to 20 to catch multiple stale PRs
- Add stale_closed status tracking in summary

* fix: dynamically read REGISTERED_CONSUMER_REPOS from source file

- Extract consumer repo list from maint-68-sync-consumer-repos.yml at runtime
- Use yq to parse the authoritative REGISTERED_CONSUMER_REPOS env var
- Remove duplicated hardcoded list to maintain single source of truth

* fix: address bot review comments in validation script

- Change default max_length from 150 to 100 to match repo standards (black, ruff, isort)
- Add explicit encoding='utf-8' to all file operations for cross-platform compatibility
- Remove redundant condition check (already verified by elif condition)

* docs: add workflow artifact checklist to prevent .gitignore conflicts

- Add critical section to CLAUDE.md about checking new workflows for file artifacts
- Create comprehensive WORKFLOW_ARTIFACT_CHECKLIST.md with decision trees and examples
- Document common artifact patterns that cause merge conflicts in consumer repos
- Provide recovery procedures for artifact pollution
- Emphasize template workflows sync to 7+ repos (one mistake = 7+ conflicts)

* docs: add critical section on handling agent bot review comments

- Require addressing ALL bot comments before merging PRs
- Document that bot comments are mandatory fixes, not suggestions
- Provide process for evaluating and resolving bot feedback
- Emphasize impact: ignored comments → bugs in 7+ consumer repos
- Add examples of critical issues bots catch (encoding, defaults, logic)

* fix: register maint-71-merge-sync-prs.yml in tests and docs

- Add workflow to EXPECTED_NAMES test mapping
- Document in docs/ci/WORKFLOWS.md with description
- Add to docs/ci/WORKFLOW_SYSTEM.md workflow table
- Fixes test failures: test_canonical_workflow_names_match_expected_mapping, test_workflow_names_match_filename_convention, test_inventory_docs_list_all_workflows

* fix: quote shell variables in maint-71-merge-sync-prs.yml

- Quote $repos variable in yq pipeline to prevent word splitting (SC2086)
- Quote $GITHUB_OUTPUT and $GITHUB_STEP_SUMMARY variables
- Fixes shellcheck warnings in actionlint

* fix: Remove GITHUB_TOKEN fallback in merge workflow

The fallback to GITHUB_TOKEN causes merge failures since GITHUB_TOKEN
lacks merge permissions. Require CODESPACES_WORKFLOWS secret explicitly.

* docs: Add critical section on syncing with main before PRs

Prevents merge conflicts and wasted CI resources by requiring
git fetch/merge before gh pr create.

* fix: change issue bridge mode from invite to create in template

- Consumer repos should automatically create bootstrap PRs when issues
  are labeled with agent:codex or similar labels
- Previously used 'invite' mode which only waits for humans to create PRs
- Changed template to 'create' mode to enable automatic PR creation
- This will propagate to all consumer repos via sync workflow

Also fixed line length issues to pass validation.
stranske added a commit that referenced this pull request Jan 6, 2026
* fix: correct YAML syntax in agents-issue-intake.yml template (#602)

* fix: correct YAML syntax in agents-issue-intake.yml template

The 'if' condition in the check_labels job was improperly formatted,
causing the line to wrap incorrectly with 'runs-on' ending up on the
same line. This resulted in startup_failure errors when the workflow
was deployed to consumer repos.

Changes:
- Use multiline scalar (|) for complex if condition
- Properly indent continuation lines
- Ensure runs-on is on its own line

Fixes workflow failures in stranske/Travel-Plan-Permission and other
consumer repositories using this template.

* fix: add validation safeguards for template changes

Problem: Template changes sync to 4+ consumer repos. A syntax error
in agents-issue-intake.yml caused startup_failure in all consumer
repos because there was no validation preventing bad templates.

Changes:
1. Fix YAML syntax error in check_labels job (multiline if condition)
2. Add validate_workflow_yaml.py script to catch YAML/style issues
3. Add pre-commit hook to validate templates before commit
4. Add CRITICAL section to CLAUDE.md about template changes

Safeguards added:
- Pre-commit hook blocks template commits with validation errors
- Script checks: YAML syntax, line length (100), runs-on placement
- Clear warning in CLAUDE.md with validation commands
- Enforces repo standards before sync

Related: Travel-Plan-Permission#253, Workflows#602

* fix: correct YAML syntax in agents-issue-intake.yml template (#602)

* fix: correct YAML syntax in agents-issue-intake.yml template

The 'if' condition in the check_labels job was improperly formatted,
causing the line to wrap incorrectly with 'runs-on' ending up on the
same line. This resulted in startup_failure errors when the workflow
was deployed to consumer repos.

Changes:
- Use multiline scalar (|) for complex if condition
- Properly indent continuation lines
- Ensure runs-on is on its own line

Fixes workflow failures in stranske/Travel-Plan-Permission and other
consumer repositories using this template.

* fix: add validation safeguards for template changes

Problem: Template changes sync to 4+ consumer repos. A syntax error
in agents-issue-intake.yml caused startup_failure in all consumer
repos because there was no validation preventing bad templates.

Changes:
1. Fix YAML syntax error in check_labels job (multiline if condition)
2. Add validate_workflow_yaml.py script to catch YAML/style issues
3. Add pre-commit hook to validate templates before commit
4. Add CRITICAL section to CLAUDE.md about template changes

Safeguards added:
- Pre-commit hook blocks template commits with validation errors
- Script checks: YAML syntax, line length (100), runs-on placement
- Clear warning in CLAUDE.md with validation commands
- Enforces repo standards before sync

Related: Travel-Plan-Permission#253, Workflows#602

* fix: use CODESPACES_WORKFLOWS token for merge permissions

The workflow now uses the CODESPACES_WORKFLOWS secret which has
merge permissions, falling back to GITHUB_TOKEN if not available.

Successfully merged sync PRs in Manager-Database, Template, and
trip-planner using this token.

* fix: use REGISTERED_CONSUMER_REPOS and add stale PR cleanup

- Parse multiline REGISTERED_CONSUMER_REPOS env var instead of hardcoded list
- Add stale PR cleanup: close and delete branches for older sync PRs
- Process repos in order from REGISTERED_CONSUMER_REPOS (7 repos total)
- Increase per_page to 20 to catch multiple stale PRs
- Add stale_closed status tracking in summary

* fix: dynamically read REGISTERED_CONSUMER_REPOS from source file

- Extract consumer repo list from maint-68-sync-consumer-repos.yml at runtime
- Use yq to parse the authoritative REGISTERED_CONSUMER_REPOS env var
- Remove duplicated hardcoded list to maintain single source of truth

* fix: address bot review comments in validation script

- Change default max_length from 150 to 100 to match repo standards (black, ruff, isort)
- Add explicit encoding='utf-8' to all file operations for cross-platform compatibility
- Remove redundant condition check (already verified by elif condition)

* docs: add workflow artifact checklist to prevent .gitignore conflicts

- Add critical section to CLAUDE.md about checking new workflows for file artifacts
- Create comprehensive WORKFLOW_ARTIFACT_CHECKLIST.md with decision trees and examples
- Document common artifact patterns that cause merge conflicts in consumer repos
- Provide recovery procedures for artifact pollution
- Emphasize template workflows sync to 7+ repos (one mistake = 7+ conflicts)

* docs: add critical section on handling agent bot review comments

- Require addressing ALL bot comments before merging PRs
- Document that bot comments are mandatory fixes, not suggestions
- Provide process for evaluating and resolving bot feedback
- Emphasize impact: ignored comments → bugs in 7+ consumer repos
- Add examples of critical issues bots catch (encoding, defaults, logic)

* fix: register maint-71-merge-sync-prs.yml in tests and docs

- Add workflow to EXPECTED_NAMES test mapping
- Document in docs/ci/WORKFLOWS.md with description
- Add to docs/ci/WORKFLOW_SYSTEM.md workflow table
- Fixes test failures: test_canonical_workflow_names_match_expected_mapping, test_workflow_names_match_filename_convention, test_inventory_docs_list_all_workflows

* fix: quote shell variables in maint-71-merge-sync-prs.yml

- Quote $repos variable in yq pipeline to prevent word splitting (SC2086)
- Quote $GITHUB_OUTPUT and $GITHUB_STEP_SUMMARY variables
- Fixes shellcheck warnings in actionlint

* fix: Remove GITHUB_TOKEN fallback in merge workflow

The fallback to GITHUB_TOKEN causes merge failures since GITHUB_TOKEN
lacks merge permissions. Require CODESPACES_WORKFLOWS secret explicitly.

* docs: Add critical section on syncing with main before PRs

Prevents merge conflicts and wasted CI resources by requiring
git fetch/merge before gh pr create.

* fix: change issue bridge mode from invite to create in template

- Consumer repos should automatically create bootstrap PRs when issues
  are labeled with agent:codex or similar labels
- Previously used 'invite' mode which only waits for humans to create PRs
- Changed template to 'create' mode to enable automatic PR creation
- This will propagate to all consumer repos via sync workflow

Also fixed line length issues to pass validation.

* fix: add force_mode parameter to override issue event mode logic

Root cause: The reusable issue bridge workflow was hardcoded to always
use 'invite' mode for issue events, ignoring the mode input parameter.
This prevented automatic PR creation when issues are labeled.

The logic at line 257-268 always overrides mode to 'invite' when
eventName === 'issues', with the rationale that 'the human post lands
on the issue'. However, this breaks the desired workflow of auto-creating
bootstrap PRs when issues are labeled with agent:codex.

Solution:
- Add force_mode boolean input to reusable workflow
- When force_mode=true, respect the mode input regardless of event type
- Update consumer template to pass force_mode: true
- This allows mode: create to work for issue events while maintaining
  backward compatibility (default force_mode=false preserves old behavior)

This is the correct fix after 5 attempts - the previous attempts only
changed the mode input but didn't account for the hardcoded override.

* fix: restore required permissions for chatgpt_sync mode

Root cause: PR #89 removed the permissions block from the sync job,
breaking the chatgpt_sync workflow that processes topic files to create
issues.

The sync job calls agents-63-issue-intake.yml which needs:
- contents: read (to checkout repo and read topic files)
- issues: write (to create/update issues)
- id-token: write (for GitHub OIDC token)
- models: read (for LangChain formatting with GitHub Models)

Without these permissions, the workflow cannot process files or create
issues from topic files.

This fixes the actual issue - file processing in chatgpt_sync mode.

* fix: use secrets inherit for chatgpt_sync to pass GITHUB_TOKEN

COMPLETE ROOT CAUSE ANALYSIS:

The format_created_issues job in agents-63-issue-intake.yml uses:
  GH_TOKEN: ${{ github.token }}
  GITHUB_TOKEN: ${{ github.token }}

When a reusable workflow is called:
- Without secrets: inherit → github.token has NO permissions
- With explicit secrets → github.token still has NO permissions
- With secrets: inherit → github.token gets caller's permissions

The consumer template was passing explicit secrets (SERVICE_BOT_PAT,
OWNER_PR_PAT) but NOT using 'secrets: inherit'. This meant:
1. The sync job in the reusable workflow couldn't use github.token
2. gh CLI and GitHub API calls failed with permission errors
3. Files were processed but issues couldn't be created/updated

The permissions block on the sync job sets what github.token CAN have,
but secrets: inherit is what actually PASSES that token to the reusable
workflow with those permissions.

This is the actual fix. Testing flow:
1. User triggers workflow_dispatch with chatgpt_sync mode
2. route job determines mode → should_run_sync=true
3. sync job calls agents-63-issue-intake.yml with secrets: inherit
4. chatgpt_sync job has contents:read, issues:write permissions
5. format_created_issues job has those + id-token:write + models:read
6. Both jobs can use github.token with proper permissions
7. Files are processed, issues created, LangChain formatting applied
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autofix Opt-in automated formatting & lint remediation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants