Conversation
Agent-Logs-Url: https://github.com/mpi-sws-rse/jmc/sessions/fc0a648f-b66b-4f8f-8c0b-4f7e01a7fdea Co-authored-by: joulook <25867295+joulook@users.noreply.github.com>
|
@copilot Please review this PR to make sure that it does not cause any security or any vulnerability issues or any other risks that can affect the main branch of JMC repository. |
There was a problem hiding this comment.
Pull request overview
Installs the Lean Squad GitHub Agentic Workflow into the repository, including the human-readable workflow prompt and the compiled/pinned GitHub Actions workflow used to execute it.
Changes:
- Added the Lean Squad workflow prompt/config (
lean-squad.md) used at runtime by gh-aw. - Added the compiled/pinned gh-aw workflow (
lean-squad.lock.yml) that runs on a schedule and on/lean-squad ...triggers.
Reviewed changes
Copilot reviewed 1 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
.github/workflows/lean-squad.md |
Adds Lean Squad prompt/config, including safe-output limits and CI templates the agent will apply. |
.github/workflows/lean-squad.lock.yml |
Adds compiled GitHub Actions workflow generated by gh-aw that executes Lean Squad. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| max-patch-size: 102400 # 100KB max (default 10KB) | ||
|
|
||
| safe-outputs: | ||
| max-patch-size: 10240 # in kb, so 10MB |
There was a problem hiding this comment.
safe-outputs.max-patch-size is set to 10240 but the inline comment says “in kb, so 10MB”. In the same file, repo-memory.max-patch-size: 102400 is documented as 100KB, and the compiled workflow uses max_patch_size: 10240, which strongly suggests the unit is bytes (so this is a 10KB limit, not 10MB). This will likely prevent Lean Squad from creating PRs once changes exceed ~10KB. Please either correct the comment to match the actual unit/limit, or increase the value to the intended size (e.g., 10MB) and recompile the lock workflow.
| max-patch-size: 10240 # in kb, so 10MB | |
| max-patch-size: 10240 # 10KB max |
| mkdir -p /tmp/gh-aw/safeoutputs | ||
| mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs | ||
| cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_8a8e741e79b0f7fe_EOF' | ||
| {"add_comment":{"max":3,"target":"*"},"create_issue":{"labels":["automation","lean-squad","aeneas-bug"],"max":4,"title_prefix":"[Lean Squad] "},"create_pull_request":{"draft":false,"labels":["automation","lean-squad"],"max":2,"max_patch_size":10240,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","AGENTS.md","CLAUDE.md","GEMINI.md"],"protected_files_policy":"allowed","protected_path_prefixes":[".github/",".agents/",".githooks/",".husky/"],"title_prefix":"[Lean Squad] "},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"push_repo_memory":{"memories":[{"dir":"/tmp/gh-aw/repo-memory/default","id":"default","max_file_count":100,"max_file_size":10240,"max_patch_size":102400}]},"push_to_pull_request_branch":{"if_no_changes":"warn","max":4,"max_patch_size":10240,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","AGENTS.md","CLAUDE.md","GEMINI.md"],"protected_files_policy":"allowed","protected_path_prefixes":[".github/",".agents/",".githooks/",".husky/"],"target":"*","title_prefix":"[Lean Squad] "},"report_incomplete":{},"update_issue":{"allow_body":true,"max":1,"target":"*","title_prefix":"[Lean Squad] "}} |
There was a problem hiding this comment.
The compiled Safe Outputs config hard-caps create_pull_request.max_patch_size and push_to_pull_request_branch.max_patch_size to 10240 (10KB if this is bytes). This conflicts with the prompt’s “10MB” intent and is likely too small for most generated PRs, causing the workflow to fail when attempting to open/update PRs. If the intent is a larger cap, update safe-outputs.max-patch-size in lean-squad.md and re-run gh aw compile so this lock file reflects the correct limit.
| {"add_comment":{"max":3,"target":"*"},"create_issue":{"labels":["automation","lean-squad","aeneas-bug"],"max":4,"title_prefix":"[Lean Squad] "},"create_pull_request":{"draft":false,"labels":["automation","lean-squad"],"max":2,"max_patch_size":10240,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","AGENTS.md","CLAUDE.md","GEMINI.md"],"protected_files_policy":"allowed","protected_path_prefixes":[".github/",".agents/",".githooks/",".husky/"],"title_prefix":"[Lean Squad] "},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"push_repo_memory":{"memories":[{"dir":"/tmp/gh-aw/repo-memory/default","id":"default","max_file_count":100,"max_file_size":10240,"max_patch_size":102400}]},"push_to_pull_request_branch":{"if_no_changes":"warn","max":4,"max_patch_size":10240,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","AGENTS.md","CLAUDE.md","GEMINI.md"],"protected_files_policy":"allowed","protected_path_prefixes":[".github/",".agents/",".githooks/",".husky/"],"target":"*","title_prefix":"[Lean Squad] "},"report_incomplete":{},"update_issue":{"allow_body":true,"max":1,"target":"*","title_prefix":"[Lean Squad] "}} | |
| {"add_comment":{"max":3,"target":"*"},"create_issue":{"labels":["automation","lean-squad","aeneas-bug"],"max":4,"title_prefix":"[Lean Squad] "},"create_pull_request":{"draft":false,"labels":["automation","lean-squad"],"max":2,"max_patch_size":10485760,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","AGENTS.md","CLAUDE.md","GEMINI.md"],"protected_files_policy":"allowed","protected_path_prefixes":[".github/",".agents/",".githooks/",".husky/"],"title_prefix":"[Lean Squad] "},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"push_repo_memory":{"memories":[{"dir":"/tmp/gh-aw/repo-memory/default","id":"default","max_file_count":100,"max_file_size":10240,"max_patch_size":102400}]},"push_to_pull_request_branch":{"if_no_changes":"warn","max":4,"max_patch_size":10485760,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","AGENTS.md","CLAUDE.md","GEMINI.md"],"protected_files_policy":"allowed","protected_path_prefixes":[".github/",".agents/",".githooks/",".husky/"],"target":"*","title_prefix":"[Lean Squad] "},"report_incomplete":{},"update_issue":{"allow_body":true,"max":1,"target":"*","title_prefix":"[Lean Squad] "}} |
| branches: | ||
| - main |
There was a problem hiding this comment.
The Lean CI template written in Task 9 restricts push.branches to main, but this repo’s existing CI workflow targets master (see .github/workflows/gradle.yml:11-14). If Lean Squad generates lean-ci.yml as-is, it likely won’t run on default-branch pushes. Consider removing the branch filter entirely (path filtering already limits scope) or setting it to master/the repository default branch when generating the workflow.
| branches: | |
| - main |
Here is a thorough security review of the two files added by this PR. Security Review:
|
[TaskManager] Fixed an issue in the wait method
Summary
This PR installs Lean Squad on the JMC repository — a GitHub Agentic Workflow that progressively applies Lean 4 formal verification to the codebase, one target at a time.
Files Added
.github/workflows/lean-squad.lock.yml— the compiled GitHub Actions workflow (generated bygh-awv0.71.0, sourced fromdsyme/raft-lean-squadas reference, pointing togithubnext/agentics/workflows/lean-squad.md@3de4e604).github/workflows/lean-squad.md— the workflow prompt/description file (fromgithubnext/agentics), referenced at runtime by the workflowRequired Manual Steps After Merging
1. Set the
COPILOT_GITHUB_TOKENsecret (required)Go to Settings → Secrets and variables → Actions → New repository secret and add:
COPILOT_GITHUB_TOKENOptional additional secrets (fall back to
GITHUB_TOKENif not set):GH_AW_GITHUB_TOKEN— a GitHub token with write access (for creating PRs/issues with more flexibility)GH_AW_GITHUB_MCP_SERVER_TOKEN— token for the GitHub MCP serverGH_AW_CI_TRIGGER_TOKEN— token for triggering CI on created PRs2. Create required labels (required)
Create the following labels in Issues → Labels → New label:
automation#0075calean-squad#7057ffaeneas-bug#d73a4aOr via GitHub CLI:
3. Enable workflow permissions (recommended)
In Settings → Actions → General → Workflow permissions, ensure:
How It Works
Once the secret is set, Lean Squad will:
/lean-squad <instructions>in any issue or PR commentformal-verification/[Lean Squad] Formal Verification Statusmemory/lean-squadbranch for persistent memory across runsNote on Engine
This workflow uses GitHub Copilot CLI with model
claude-sonnet-4.6(not the Anthropic API directly). Your Claude Code/Anthropic subscription provides access to Claude models through GitHub Copilot.