From 8380c8b848832ee3a6e4ea7df69a9d7da8014308 Mon Sep 17 00:00:00 2001 From: CleverThis Date: Fri, 24 Apr 2026 02:04:29 +0000 Subject: [PATCH 1/4] feat(architecture-pool-supervisor): add milestone assignment to spec PRs Add milestone assignment step to the PR workflow for major specification changes. The architecture-pool-supervisor agent now assigns created PRs to the current active milestone using forgejo_update_pull_request, improving traceability and ensuring spec PRs are properly tracked within project milestone planning. Changes: - Add 'PR Workflow for Major Changes' section to architecture-pool-supervisor.md - Document milestone assignment using forgejo_update_pull_request - Document milestone querying using forgejo_list_repo_milestones - Add graceful error handling for missing active milestones - Add support for multi-milestone spec PRs (use earliest milestone) - Allow forgejo_update_pull_request in agent permissions - Add comprehensive BDD tests for milestone assignment feature ISSUES CLOSED: #7521 # Conflicts: # CONTRIBUTORS.md --- .../agents/architecture-pool-supervisor.md | 59 +++---- CONTRIBUTORS.md | 1 - ...ol_supervisor_milestone_assignment.feature | 28 ++++ ...l_supervisor_milestone_assignment_steps.py | 147 ++++++++++++++++++ 4 files changed, 208 insertions(+), 27 deletions(-) create mode 100644 features/architecture_pool_supervisor_milestone_assignment.feature create mode 100644 features/steps/architecture_pool_supervisor_milestone_assignment_steps.py diff --git a/.opencode/agents/architecture-pool-supervisor.md b/.opencode/agents/architecture-pool-supervisor.md index 67e4e49c7..23c8cbb9a 100644 --- a/.opencode/agents/architecture-pool-supervisor.md +++ b/.opencode/agents/architecture-pool-supervisor.md @@ -7,14 +7,9 @@ description: > mode: subagent hidden: true temperature: 0.3 -model: anthropic/claude-haiku-4-5 -reasoningEffort: "max" +model: anthropic/claude-sonnet-4-6 color: primary permission: - "*": deny - "doom_loop": deny - question: deny - "sequential-thinking*": allow edit: deny webfetch: deny bash: @@ -32,22 +27,22 @@ permission: "*": deny "async-agent-manager": allow "automation-tracking-manager": allow - "forgejo_*": deny - "forgejo_list_repo_issues": allow - "forgejo_get_issue_by_index": allow - "forgejo_list_issue_comments": allow - "forgejo_list_repo_milestones": allow - "forgejo_list_repo_pull_requests": allow - "forgejo_get_pull_request_by_index": allow - # CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager - "forgejo_list_repo_labels": deny - # CRITICAL: Label creation is COMPLETELY FORBIDDEN - "forgejo_create_label": deny - "forgejo_create_org_label": deny - "forgejo_create_repo_label": deny - # CRITICAL: DO NOT use forgejo_add_issue_labels directly - # Always delegate to forgejo-label-manager for label operations - "forgejo_add_issue_labels": deny + forgejo: + "*": deny + "forgejo_list_repo_issues": allow + "forgejo_get_issue_by_index": allow + "forgejo_list_issue_comments": allow + "forgejo_list_repo_milestones": allow + "forgejo_list_repo_pull_requests": allow + "forgejo_get_pull_request_by_index": allow + "forgejo_update_pull_request": allow + # CRITICAL: Label creation is COMPLETELY FORBIDDEN + "forgejo_create_label": deny + "forgejo_create_org_label": deny + "forgejo_create_repo_label": deny + # CRITICAL: DO NOT use forgejo_add_issue_labels directly + # Always delegate to forgejo-label-manager for label operations + "forgejo_add_issue_labels": deny --- # Architecture Supervisor @@ -100,6 +95,21 @@ When dispatching a worker, classify the change: - **Major change** (new module, changed interfaces, restructured boundaries) — worker creates a PR with `needs feedback` label for human approval - **Minor clarification** (typo fix, added detail, example) — worker commits directly +## PR Workflow for Major Changes + +When a worker creates a PR for a major specification change, the following workflow must be followed: + +1. **Create a feature branch** from the main branch with a descriptive name (e.g., `spec-auth-module-boundaries`) +2. **Commit spec changes** to the branch with a clear commit message following Conventional Changelog format +3. **Create a PR** with the `needs feedback` label to signal that human review and approval is required +4. **Assign the PR to the current active milestone** using `forgejo_update_pull_request` with the milestone ID + - Query available milestones using `forgejo_list_repo_milestones` to determine the current active milestone + - If no active milestone can be determined, skip milestone assignment rather than failing + - For spec PRs spanning multiple milestones, use the earliest affected milestone +5. **Post a comment** on the session state issue documenting the PR creation and linking to the PR + +This workflow ensures that specification PRs are properly tracked within the project's milestone planning and remain visible in the project's issue/PR dashboard. + ## Specification Structure The specification must contain: Overview, Module Definitions (boundaries, responsibilities, public interfaces), Cross-Cutting Concerns (error handling, logging, configuration), Integration Points, and Milestone Plan. @@ -111,7 +121,7 @@ When the spec grows beyond approximately 3,000 lines, workers should transition - Prefix: `AUTO-ARCH` - Cycle interval: ~30 minutes -## **CRITICAL** Rules +## Rules 1. **You are the most consequential agent.** Bad architecture cascades everywhere. Be thoughtful. 2. **Major changes need human approval.** Always use the `needs feedback` label for major changes. @@ -123,6 +133,3 @@ When the spec grows beyond approximately 3,000 lines, workers should transition **Automated by CleverAgents Bot** Supervisor: Architecture | Agent: architecture-pool-supervisor ``` - -6. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`. -7. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (default 20 — use `limit=50` and paginate to find all spec-ambiguity reports in comments); `forgejo_list_issue_comments` (paginate fully to read all comments on each issue); `forgejo_list_repo_pull_requests` (paginate to find all spec PRs); `forgejo_list_repo_milestones` (paginate to see all milestones). diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index f7f84a8a7..acac574bb 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -23,4 +23,3 @@ Below are some of the specific details of various contributions. * HAL 9000 has contributed the benchmark workflow separation (#9040): moved the benchmark-regression job out of the default PR workflow into a dedicated scheduled workflow, reducing median PR CI turnaround time from 99-132 minutes to under 30 minutes. * This project was made possible thanks to considerable donation of time, money, and resources by CleverThis, Inc. * HAL 9000 has contributed automated bug fixes, CLI output formatting improvements, and ongoing maintenance as part of the CleverAgents automation system. -* HAL 9000 has contributed the file edit encoding parameter fix (PR #8258 / issue #7559). diff --git a/features/architecture_pool_supervisor_milestone_assignment.feature b/features/architecture_pool_supervisor_milestone_assignment.feature new file mode 100644 index 000000000..6a8334ac8 --- /dev/null +++ b/features/architecture_pool_supervisor_milestone_assignment.feature @@ -0,0 +1,28 @@ +Feature: Architecture pool supervisor milestone assignment + As a project manager + I want spec PRs to be automatically assigned to the current milestone + So that specification changes are properly tracked in project planning + + Scenario: PR workflow documentation includes milestone assignment + Given the architecture-pool-supervisor.md file exists + When I read the "PR Workflow for Major Changes" section + Then the section should describe creating a feature branch + And the section should describe committing spec changes + And the section should describe creating a PR with "needs feedback" label + And the section should describe assigning the PR to the current active milestone + And the section should mention using "forgejo_update_pull_request" for milestone assignment + And the section should describe querying milestones using "forgejo_list_repo_milestones" + And the section should describe graceful handling when no active milestone exists + And the section should describe using the earliest milestone for multi-milestone specs + + Scenario: Permissions allow milestone assignment + Given the architecture-pool-supervisor.md file exists + When I read the permissions section + Then "forgejo_update_pull_request" should be allowed + And "forgejo_list_repo_milestones" should be allowed + + Scenario: Workflow ensures proper PR tracking + Given the architecture-pool-supervisor.md file exists + When I read the "PR Workflow for Major Changes" section + Then the workflow should ensure specification PRs are tracked within milestone planning + And the workflow should ensure PRs remain visible in the project's issue/PR dashboard diff --git a/features/steps/architecture_pool_supervisor_milestone_assignment_steps.py b/features/steps/architecture_pool_supervisor_milestone_assignment_steps.py new file mode 100644 index 000000000..f0cf64329 --- /dev/null +++ b/features/steps/architecture_pool_supervisor_milestone_assignment_steps.py @@ -0,0 +1,147 @@ +"""Step definitions for architecture pool supervisor milestone assignment.""" + +import re +from pathlib import Path +from typing import Any + +from behave import given, then, when + + +@given("the architecture-pool-supervisor.md file exists") +def step_arch_supervisor_file_exists(context: Any) -> None: + """Verify the architecture-pool-supervisor.md file exists.""" + file_path = Path(".opencode/agents/architecture-pool-supervisor.md") + assert file_path.exists(), f"File {file_path} does not exist" + + # Read the file content + with open(file_path, encoding="utf-8") as f: + context.file_content = f.read() + + assert context.file_content, "File is empty" + + +@when('I read the "{section_name}" section') +def step_read_section(context: Any, section_name: str) -> None: + """Extract a specific section from the file.""" + # Find the section header + pattern = rf"## {re.escape(section_name)}\n(.*?)(?=\n## |\Z)" + match = re.search(pattern, context.file_content, re.DOTALL) + + assert match, f"Section '{section_name}' not found in file" + context.section_content = match.group(1).strip() + + +@when("I read the permissions section") +def step_read_permissions_section(context: Any) -> None: + """Extract the permissions section from the file.""" + # Find the permissions section (between --- markers) + pattern = r"^---\n(.*?)\n---" + match = re.search(pattern, context.file_content, re.DOTALL | re.MULTILINE) + + assert match, "Permissions section not found in file" + context.permissions_content = match.group(1).strip() + + +@then("the section should describe creating a feature branch") +def step_verify_feature_branch_description(context: Any) -> None: + """Verify the section mentions creating a feature branch.""" + assert "feature branch" in context.section_content.lower(), ( + "Section should describe creating a feature branch" + ) + + +@then("the section should describe committing spec changes") +def step_verify_commit_description(context: Any) -> None: + """Verify the section mentions committing spec changes.""" + assert "commit" in context.section_content.lower(), ( + "Section should describe committing spec changes" + ) + + +@then('the section should describe creating a PR with "{label}" label') +def step_verify_pr_label_description(context: Any, label: str) -> None: + """Verify the section mentions creating a PR with the specified label.""" + assert "pr" in context.section_content.lower(), ( + "Section should describe creating a PR" + ) + assert label.lower() in context.section_content.lower(), ( + f"Section should mention '{label}' label" + ) + + +@then("the section should describe assigning the PR to the current active milestone") +def step_verify_milestone_assignment_description(context: Any) -> None: + """Verify the section describes milestone assignment.""" + assert "milestone" in context.section_content.lower(), ( + "Section should describe assigning PR to milestone" + ) + assert "current active milestone" in context.section_content.lower(), ( + "Section should mention 'current active milestone'" + ) + + +@then('the section should mention using "{function_name}" for milestone assignment') +def step_verify_function_mention(context: Any, function_name: str) -> None: + """Verify the section mentions the specific function.""" + assert function_name in context.section_content, ( + f"Section should mention '{function_name}' function" + ) + + +@then('the section should describe querying milestones using "{function_name}"') +def step_verify_milestone_query_function(context: Any, function_name: str) -> None: + """Verify the section mentions querying milestones.""" + assert function_name in context.section_content, ( + f"Section should mention '{function_name}' for querying milestones" + ) + + +@then("the section should describe graceful handling when no active milestone exists") +def step_verify_graceful_handling(context: Any) -> None: + """Verify the section describes graceful error handling.""" + assert ( + "skip" in context.section_content.lower() + or "graceful" in context.section_content.lower() + ), "Section should describe graceful handling when no milestone exists" + + +@then( + "the section should describe using the earliest milestone for multi-milestone specs" +) +def step_verify_multi_milestone_handling(context: Any) -> None: + """Verify the section describes handling multi-milestone specs.""" + assert ( + "earliest" in context.section_content.lower() + or "multiple" in context.section_content.lower() + ), "Section should describe handling specs spanning multiple milestones" + + +@then('"{function_name}" should be allowed') +def step_verify_function_allowed(context: Any, function_name: str) -> None: + """Verify the function is allowed in permissions.""" + # Check if the function is listed as allowed + pattern = rf'"{function_name}":\s*allow' + assert re.search(pattern, context.permissions_content), ( + f"Function '{function_name}' should be allowed in permissions" + ) + + +@then( + "the workflow should ensure specification PRs are tracked within milestone planning" +) +def step_verify_milestone_tracking(context: Any) -> None: + """Verify the workflow ensures milestone tracking.""" + assert "milestone" in context.section_content.lower(), ( + "Workflow should ensure milestone tracking" + ) + + +@then( + "the workflow should ensure PRs remain visible in the project's issue/PR dashboard" +) +def step_verify_pr_visibility(context: Any) -> None: + """Verify the workflow ensures PR visibility.""" + assert ( + "dashboard" in context.section_content.lower() + or "visible" in context.section_content.lower() + ), "Workflow should ensure PR visibility in dashboard" -- 2.52.0 From afc17b22c507cacb58f0dfbe4a44174db8e33e79 Mon Sep 17 00:00:00 2001 From: CleverThis Date: Fri, 24 Apr 2026 02:04:54 +0000 Subject: [PATCH 2/4] feat(architecture-pool-supervisor): add milestone assignment to spec PRs Restore original permission structure and model configuration while adding only the changes needed for issue #7521: forgejo_update_pull_request permission and PR Workflow for Major Changes documentation section. Fixes addressed: - Restore flat permission format (was incorrectly restructured to nested) - Restore model to claude-haiku-4-5 with reasoningEffort max - Restore removed critical rules (6: label delegation, 7: pagination) - Restore removed permission denials (*, doom_loop, question, etc.) - Add CHANGELOG.md entry for this feature - Restore CONTRIBUTORS.md to master (remove unrelated changes) ISSUES CLOSED: #7521 # Conflicts: # CONTRIBUTORS.md --- .../agents/architecture-pool-supervisor.md | 45 +++++++++++-------- CHANGELOG.md | 10 +++++ CONTRIBUTORS.md | 2 +- .../development/agent-system-specification.md | 2 +- 4 files changed, 39 insertions(+), 20 deletions(-) diff --git a/.opencode/agents/architecture-pool-supervisor.md b/.opencode/agents/architecture-pool-supervisor.md index 23c8cbb9a..009b9160a 100644 --- a/.opencode/agents/architecture-pool-supervisor.md +++ b/.opencode/agents/architecture-pool-supervisor.md @@ -7,9 +7,14 @@ description: > mode: subagent hidden: true temperature: 0.3 -model: anthropic/claude-sonnet-4-6 +model: anthropic/claude-haiku-4-5 +reasoningEffort: "max" color: primary permission: + "*": deny + "doom_loop": deny + question: deny + "sequential-thinking*": allow edit: deny webfetch: deny bash: @@ -27,22 +32,23 @@ permission: "*": deny "async-agent-manager": allow "automation-tracking-manager": allow - forgejo: - "*": deny - "forgejo_list_repo_issues": allow - "forgejo_get_issue_by_index": allow - "forgejo_list_issue_comments": allow - "forgejo_list_repo_milestones": allow - "forgejo_list_repo_pull_requests": allow - "forgejo_get_pull_request_by_index": allow - "forgejo_update_pull_request": allow - # CRITICAL: Label creation is COMPLETELY FORBIDDEN - "forgejo_create_label": deny - "forgejo_create_org_label": deny - "forgejo_create_repo_label": deny - # CRITICAL: DO NOT use forgejo_add_issue_labels directly - # Always delegate to forgejo-label-manager for label operations - "forgejo_add_issue_labels": deny + "forgejo_*": deny + "forgejo_list_repo_issues": allow + "forgejo_get_issue_by_index": allow + "forgejo_list_issue_comments": allow + "forgejo_list_repo_milestones": allow + "forgejo_list_repo_pull_requests": allow + "forgejo_get_pull_request_by_index": allow + "forgejo_update_pull_request": allow + # CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager + "forgejo_list_repo_labels": deny + # CRITICAL: Label creation is COMPLETELY FORBIDDEN + "forgejo_create_label": deny + "forgejo_create_org_label": deny + "forgejo_create_repo_label": deny + # CRITICAL: DO NOT use forgejo_add_issue_labels directly + # Always delegate to forgejo-label-manager for label operations + "forgejo_add_issue_labels": deny --- # Architecture Supervisor @@ -121,7 +127,7 @@ When the spec grows beyond approximately 3,000 lines, workers should transition - Prefix: `AUTO-ARCH` - Cycle interval: ~30 minutes -## Rules +## **CRITICAL** Rules 1. **You are the most consequential agent.** Bad architecture cascades everywhere. Be thoughtful. 2. **Major changes need human approval.** Always use the `needs feedback` label for major changes. @@ -133,3 +139,6 @@ When the spec grows beyond approximately 3,000 lines, workers should transition **Automated by CleverAgents Bot** Supervisor: Architecture | Agent: architecture-pool-supervisor ``` + +6. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`. +7. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (default 20 — use `limit=50` and paginate to find all spec-ambiguity reports in comments); `forgejo_list_issue_comments` (paginate fully to read all comments on each issue); `forgejo_list_repo_pull_requests` (paginate to find all spec PRs); `forgejo_list_repo_milestones` (paginate to see all milestones). diff --git a/CHANGELOG.md b/CHANGELOG.md index 46bd4bb64..24e7b55ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,16 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] +### Added + +- **Architecture Pool Supervisor Milestone Assignment** (#7521): Added a "PR Workflow + for Major Changes" section to the `architecture-pool-supervisor` agent definition + documenting the milestone assignment step for spec PRs. The agent now has + `forgejo_update_pull_request` permission to assign PRs to the current active + milestone after creation, improving traceability of specification changes within + project milestone planning. Includes BDD test coverage for the new workflow + documentation and permission configuration. + ### Fixed - **Atomic `load_from_metadata` for Autonomy Guardrails** (#7504): Fixed diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index acac574bb..65120d117 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -16,10 +16,10 @@ Below are some of the specific details of various contributions. * Jeffrey Phillips Freeman has acted as Lead Developer, daily contributor, and Project Owner. * Brent E. Edwards has contributed quality assurance, test coverage, and CI pipeline improvements. * HAL 9000 has contributed automated implementation, bug fixes, and feature development as part of the CleverAgents automation pool. -* HAL 9000 has contributed concurrency safety improvements, including thread-safe context tier management (issue #7547) for parallel plan execution. * HAL 9000 has contributed the plan concurrency race-condition fix (#7989): wired `LockService` into the plan lifecycle, guarding `execute_plan()` and `apply_plan()` with plan-level advisory locks and unique per-invocation owner identities to prevent silent concurrent state corruption. * HAL 9000 has contributed the bug-hunt-pool-supervisor non-blocking tracking fix: updated step 5 to be best-effort and added rule 9 to prevent the automation-tracking-manager call from blocking the main supervisor loop. * HAL 9000 has contributed the plugin entry point security hardening fix (#7476): enforced entry point allowlist validation before importing plugin modules to prevent malicious plugin loading. * HAL 9000 has contributed the benchmark workflow separation (#9040): moved the benchmark-regression job out of the default PR workflow into a dedicated scheduled workflow, reducing median PR CI turnaround time from 99-132 minutes to under 30 minutes. * This project was made possible thanks to considerable donation of time, money, and resources by CleverThis, Inc. * HAL 9000 has contributed automated bug fixes, CLI output formatting improvements, and ongoing maintenance as part of the CleverAgents automation system. +* HAL 9000 has contributed the file edit encoding parameter fix (PR #8258 / issue #7559). diff --git a/docs/development/agent-system-specification.md b/docs/development/agent-system-specification.md index f8c286929..e34dd8b84 100644 --- a/docs/development/agent-system-specification.md +++ b/docs/development/agent-system-specification.md @@ -1968,7 +1968,7 @@ Documented as the "#1 problem with this agent" due to historical creation of 48+ **Subagents**: `ref-reader`, `automation-tracking-manager` -**Workflow**: Checks for triggers every 30 minutes: new milestones without spec coverage, spec ambiguities reported by implementers, human requests for clarification, or initial bootstrap (no spec exists). When the spec grows beyond approximately 3,000 lines, transitions from a single `docs/specification.md` file to a `docs/specification/` directory with one file per module. Major architectural changes go through PRs with the `needs feedback` label; minor clarifications are committed directly. +**Workflow**: Checks for triggers every 30 minutes: new milestones without spec coverage, spec ambiguities reported by implementers, human requests for clarification, or initial bootstrap (no spec exists). When the spec grows beyond approximately 3,000 lines, transitions from a single `docs/specification.md` file to a `docs/specification/` directory with one file per module. Major architectural changes go through PRs with the `needs feedback` label; minor clarifications are committed directly. When creating a PR for a major spec change, the agent assigns it to the current active milestone using `forgejo_update_pull_request` (querying available milestones via `forgejo_list_repo_milestones`); if no active milestone can be determined, milestone assignment is skipped gracefully. **Specification Structure**: Must contain Overview, Module Definitions (boundaries, responsibilities, public interfaces), Cross-Cutting Concerns (error handling, logging, configuration), Integration Points, and Milestone Plan. -- 2.52.0 From 7edc8b15a01a6fdcbd4c659e4ec215a081c2a65b Mon Sep 17 00:00:00 2001 From: CleverThis Date: Thu, 23 Apr 2026 14:39:20 +0000 Subject: [PATCH 3/4] feat(architecture-pool-supervisor): add milestone assignment to spec PRs Fix duplicate CONTRIBUTORS.md entry and add contribution note for milestone assignment feature (issue #7521). --- CONTRIBUTORS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 65120d117..65ff6f373 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -7,7 +7,6 @@ * Jeffrey Phillips Freeman * Luis Mendes * Rui Hu -* HAL 9000 # Details @@ -23,3 +22,4 @@ Below are some of the specific details of various contributions. * This project was made possible thanks to considerable donation of time, money, and resources by CleverThis, Inc. * HAL 9000 has contributed automated bug fixes, CLI output formatting improvements, and ongoing maintenance as part of the CleverAgents automation system. * HAL 9000 has contributed the file edit encoding parameter fix (PR #8258 / issue #7559). +* HAL 9000 has contributed the architecture-pool-supervisor milestone assignment feature (PR #8188 / issue #7521): added `forgejo_update_pull_request` permission and documented the PR workflow for major spec changes, enabling automatic milestone assignment for specification PRs. -- 2.52.0 From 18297694997a8cc9aac08c0afdf2d2f012aa686f Mon Sep 17 00:00:00 2001 From: HAL9000 Date: Thu, 23 Apr 2026 23:51:44 +0000 Subject: [PATCH 4/4] feat(architecture-pool-supervisor): add milestone assignment to spec PRs Restore all contribution entries that were inadvertently removed in previous commits. Ensure CONTRIBUTORS.md includes all historical contributions while adding the new milestone assignment feature entry for issue #7521. ISSUES CLOSED: #7521 --- CONTRIBUTORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 65ff6f373..ff7795e84 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -15,6 +15,7 @@ Below are some of the specific details of various contributions. * Jeffrey Phillips Freeman has acted as Lead Developer, daily contributor, and Project Owner. * Brent E. Edwards has contributed quality assurance, test coverage, and CI pipeline improvements. * HAL 9000 has contributed automated implementation, bug fixes, and feature development as part of the CleverAgents automation pool. +* HAL 9000 has contributed concurrency safety improvements, including thread-safe context tier management (issue #7547) for parallel plan execution. * HAL 9000 has contributed the plan concurrency race-condition fix (#7989): wired `LockService` into the plan lifecycle, guarding `execute_plan()` and `apply_plan()` with plan-level advisory locks and unique per-invocation owner identities to prevent silent concurrent state corruption. * HAL 9000 has contributed the bug-hunt-pool-supervisor non-blocking tracking fix: updated step 5 to be best-effort and added rule 9 to prevent the automation-tracking-manager call from blocking the main supervisor loop. * HAL 9000 has contributed the plugin entry point security hardening fix (#7476): enforced entry point allowlist validation before importing plugin modules to prevent malicious plugin loading. -- 2.52.0