Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 69 additions & 1 deletion workflows/squad-implement-worker.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,14 @@ concurrency:
network:
allowed:
- defaults
- containers
- dotnet
- go
- java
- node
- python
- ruby
- rust
imports:
- shared/squad.md
tools:
Expand All @@ -51,48 +59,93 @@ safe-outputs:
- "squad/implement-*"
allowed-files:
- "*.c"
- "**/*.c"
- "*.cc"
- "**/*.cc"
- "*.cjs"
- "**/*.cjs"
- "*.cpp"
- "**/*.cpp"
- "*.cs"
- "**/*.cs"
- "*.csproj"
- "**/*.csproj"
- "*.css"
- "**/*.css"
- "*.fs"
- "**/*.fs"
- "*.fsproj"
- "**/*.fsproj"
- "*.go"
- "**/*.go"
- "*.gradle"
- "**/*.gradle"
- "*.h"
- "**/*.h"
- "*.hpp"
- "**/*.hpp"
- "*.html"
- "**/*.html"
- "*.java"
- "**/*.java"
- "*.js"
- "*.jsx"
- "**/*.js"
- "*.json"
- "**/*.json"
- "*.jsx"
- "**/*.jsx"
- "*.kt"
- "**/*.kt"
- "*.kts"
- "**/*.kts"
- "*.md"
- "**/*.md"
Comment on lines 101 to +102

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Agreed, and thanks — this is a real regression I introduced. Before the widening, root-anchored *.md never matched .squad/team.md or .github/workflows/*.md, so the prose rule at L231-232 was backed by a structural guarantee. Adding **/*.md (and **/*.yml, **/*.json) quietly demoted that to instruction-following, on the one workflow that must not be able to rewrite its own definition.

Rather than special-case .github/copilot-instructions.md, fixed in 7251b14 with excluded-files, which strips matching paths from the patch before the commit is created. That restores the structural guarantee for all four forbidden directories while keeping the nested globs this PR exists to add. .github/copilot-instructions.md stays writable because only the named subdirectories are excluded. Verified excluded_files reaches the compiled lock.

- "*.mjs"
- "**/*.mjs"
- "*.php"
- "**/*.php"
- "*.props"
- "**/*.props"
- "*.py"
- "**/*.py"
- "*.razor"
- "**/*.razor"
- "*.rb"
- "**/*.rb"
- "*.rs"
- "**/*.rs"
- "*.sh"
- "**/*.sh"
- "*.sln"
- "**/*.sln"
- "*.slnx"
- "**/*.slnx"
- "*.sql"
- "**/*.sql"
- "*.svelte"
- "**/*.svelte"
- "*.swift"
- "**/*.swift"
- "*.targets"
- "**/*.targets"
- "*.toml"
- "**/*.toml"
- "*.ts"
- "**/*.ts"
- "*.tsx"
- "**/*.tsx"
- "*.vue"
- "**/*.vue"
- "*.yaml"
- "**/*.yaml"
- "*.yml"
- "**/*.yml"
- "Dockerfile*"
- "**/Dockerfile*"
- "LICENSE*"
- "**/LICENSE*"
- "Makefile"
- "**/Makefile"
- "api/**"
- "app/**"
- "bin/**"
Expand All @@ -115,6 +168,21 @@ safe-outputs:
- "tools/**"
- "web/**"
protected-files: request_review
excluded-files:
# The nested `**/*.md`, `**/*.yml`, and `**/*.json` patterns above would
# otherwise let this worker rewrite its own workflow definition, agent
# charters, or squad configuration -- paths the prompt forbids in prose
# ("Do not change ...") but which were previously blocked structurally,
# because root-anchored `*.md` never matched them. Stripping them from the
# patch keeps that enforcement structural rather than instruction-following.
- ".github/workflows/**"
- "**/.github/workflows/**"
- ".github/agents/**"
- "**/.github/agents/**"
- ".github/aw/**"
- "**/.github/aw/**"
- ".squad/**"
- "**/.squad/**"
max-patch-files: 500
expires: 14d
add-comment:
Expand Down