feat(agents): add work-started notification to task-implementor
CI / lint (pull_request) Successful in 51s
CI / helm (pull_request) Successful in 29s
CI / build (pull_request) Successful in 31s
CI / quality (pull_request) Successful in 1m21s
CI / typecheck (pull_request) Successful in 1m27s
CI / security (pull_request) Successful in 1m28s
CI / push-validation (pull_request) Successful in 20s
CI / integration_tests (pull_request) Successful in 4m43s
CI / unit_tests (pull_request) Successful in 6m5s
CI / docker (pull_request) Successful in 1m33s
CI / coverage (pull_request) Successful in 10m47s
CI / status-check (pull_request) Successful in 3s

Add Step 2 (notification) to issue_impl and pr_fix procedures —
posts a comment on the issue/PR after reading it but before cloning,
giving authors instant visibility that implementation work has started.

Also update CHANGELOG.md with entry for #11031.

ISSUES CLOSED: #11031
This commit is contained in:
CoreRasurae
2026-05-12 11:46:44 +00:00
committed by Forgejo
parent 52830971f2
commit 39bbff0849
2 changed files with 52 additions and 20 deletions
+44 -20
View File
@@ -121,16 +121,28 @@ This is where actual implementation happens. Choose the appropriate procedure ba
1. **Read the issue.** GET `{forgejo_url}/api/v1/repos/{forgejo_owner}/{forgejo_repo}/issues/{work_number}` — read title, body, labels, milestone, and metadata section (branch name, commit message format). Paginate all comments to understand full context and any subtask structure. 1. **Read the issue.** GET `{forgejo_url}/api/v1/repos/{forgejo_owner}/{forgejo_repo}/issues/{work_number}` — read title, body, labels, milestone, and metadata section (branch name, commit message format). Paginate all comments to understand full context and any subtask structure.
2. **Determine branch name.** Extract the branch name from the issue's Metadata section if present. If absent, derive one: `feature/issue-{work_number}-{kebab-slug-of-title}`. 2. **Post work-started notification.** POST `{forgejo_url}/api/v1/repos/{forgejo_owner}/{forgejo_repo}/issues/{work_number}/comments` with body:
```
> Starting implementation for issue #{work_number}: {issue_title} (`issue_impl`)...
>
> Reading requirements and setting up development environment. This may take several minutes.
3. **Create isolated clone.** Call `git-isolator-util` with `create_branch: true`, `base_branch: master`, and the determined `branch_name` (see Subagents section for prompt template). ---
Automated by CleverAgents Bot
Supervisor: Implementation | Agent: task-implementor
```
Use authentication: `Authorization: token {forgejo_pat}`. Replace `{issue_title}` with the title read in step 1. Do NOT wait for a response before continuing — fire and move on.
4. **Implement the code.** Load the `cleverthis-guidelines` skill for CONTRIBUTING.md rules and follow them strictly. Key rules: 3. **Determine branch name.** Extract the branch name from the issue's Metadata section if present. If absent, derive one: `feature/issue-{work_number}-{kebab-slug-of-title}`.
4. **Create isolated clone.** Call `git-isolator-util` with `create_branch: true`, `base_branch: master`, and the determined `branch_name` (see Subagents section for prompt template).
5. **Implement the code.** Load the `cleverthis-guidelines` skill for CONTRIBUTING.md rules and follow them strictly. Key rules:
- Source in `src/cleveragents/`, Behave unit tests in `features/`, Robot Framework integration/e2e tests in `robot/` - Source in `src/cleveragents/`, Behave unit tests in `features/`, Robot Framework integration/e2e tests in `robot/`
- Full static typing throughout — no `# type: ignore` - Full static typing throughout — no `# type: ignore`
- All commands via `nox` — never invoke `pip`, `pytest`, `behave`, or `robot` directly - All commands via `nox` — never invoke `pip`, `pytest`, `behave`, or `robot` directly
5. **Run quality gates in order:** 6. **Run quality gates in order:**
```bash ```bash
nox -e lint nox -e lint
nox -e typecheck nox -e typecheck
@@ -140,11 +152,11 @@ This is where actual implementation happens. Choose the appropriate procedure ba
nox -e coverage_report nox -e coverage_report
``` ```
6. **Fix any failures.** If a gate fails, fix the code and re-run the failing gate (and any that follow it). Repeat until all gates pass. Do not move forward with failing gates. 7. **Fix any failures.** If a gate fails, fix the code and re-run the failing gate (and any that follow it). Repeat until all gates pass. Do not move forward with failing gates.
7. **Commit.** Call `git-commit-util` with `commit_and_push` operation. The first line of the commit message must match the issue's Metadata section exactly (see Subagents section). 8. **Commit.** Call `git-commit-util` with `commit_and_push` operation. The first line of the commit message must match the issue's Metadata section exactly (see Subagents section).
8. **Create PR.** POST `{forgejo_url}/api/v1/repos/{forgejo_owner}/{forgejo_repo}/pulls` with: 9. **Create PR.** POST `{forgejo_url}/api/v1/repos/{forgejo_owner}/{forgejo_repo}/pulls` with:
- `title`: taken from the issue title or the commit message first line - `title`: taken from the issue title or the commit message first line
- `body`: description of changes + `Closes #{work_number}` + dependency link (`This PR blocks issue #{work_number}`) - `body`: description of changes + `Closes #{work_number}` + dependency link (`This PR blocks issue #{work_number}`)
- `base`: `master` - `base`: `master`
@@ -152,35 +164,47 @@ This is where actual implementation happens. Choose the appropriate procedure ba
- `milestone` (if set on the issue): same milestone ID - `milestone` (if set on the issue): same milestone ID
- Use PAT authentication: `Authorization: token {forgejo_pat}` - Use PAT authentication: `Authorization: token {forgejo_pat}`
9. **Post attempt comment** on the issue (see "Attempt Comments" section below). 10. **Post attempt comment** on the issue (see "Attempt Comments" section below).
10. **Clean up.** `rm -rf {repo_dir}` 11. **Clean up.** `rm -rf {repo_dir}`
11. **Exit.** 12. **Exit.**
#### Procedure: `pr_fix` (PR Fix) #### Procedure: `pr_fix` (PR Fix)
1. **Read the PR.** GET `{forgejo_url}/api/v1/repos/{forgejo_owner}/{forgejo_repo}/pulls/{work_number}` — read description, head branch, head SHA, and CI state. Set `branch_name` to the PR's head branch. 1. **Read the PR.** GET `{forgejo_url}/api/v1/repos/{forgejo_owner}/{forgejo_repo}/pulls/{work_number}` — read description, head branch, head SHA, and CI state. Set `branch_name` to the PR's head branch.
2. **Read all reviews.** GET `{forgejo_url}/api/v1/repos/{forgejo_owner}/{forgejo_repo}/pulls/{work_number}/reviews?limit=50&page=N` — paginate fully. For any review in `REQUEST_CHANGES` state, GET its comments to understand the specific feedback. 2. **Post work-started notification.** POST `{forgejo_url}/api/v1/repos/{forgejo_owner}/{forgejo_repo}/issues/{work_number}/comments` with body:
```
> Starting fix for PR #{work_number}: {pr_title} (`pr_fix`)...
>
> Addressing review feedback and CI failures. This may take several minutes.
3. **Read all PR comments.** GET `{forgejo_url}/api/v1/repos/{forgejo_owner}/{forgejo_repo}/issues/{work_number}/comments?limit=50&page=N` — paginate fully. ---
Automated by CleverAgents Bot
Supervisor: Implementation | Agent: task-implementor
```
Use authentication: `Authorization: token {forgejo_pat}`. Replace `{pr_title}` with the title read in step 1. Do NOT wait for a response before continuing — fire and move on.
4. **Fetch CI failure details.** GET `{forgejo_url}/api/v1/repos/{forgejo_owner}/{forgejo_repo}/commits/{head_sha}/statuses?limit=50&page=N` — paginate fully. For each failing status that has a `target_url`, webfetch that URL to retrieve the failure logs. 3. **Read all reviews.** GET `{forgejo_url}/api/v1/repos/{forgejo_owner}/{forgejo_repo}/pulls/{work_number}/reviews?limit=50&page=N` — paginate fully. For any review in `REQUEST_CHANGES` state, GET its comments to understand the specific feedback.
5. **Create isolated clone.** Call `git-isolator-util` with `create_branch: false` and `branch: {branch_name}` (the PR's head branch, resolved in step 1). 4. **Read all PR comments.** GET `{forgejo_url}/api/v1/repos/{forgejo_owner}/{forgejo_repo}/issues/{work_number}/comments?limit=50&page=N` — paginate fully.
6. **Fix the issues.** Address all CI failures and all unresolved reviewer feedback. Never partially address reviewer comments — every `REQUEST_CHANGES` concern must be fully resolved. 5. **Fetch CI failure details.** GET `{forgejo_url}/api/v1/repos/{forgejo_owner}/{forgejo_repo}/commits/{head_sha}/statuses?limit=50&page=N` — paginate fully. For each failing status that has a `target_url`, webfetch that URL to retrieve the failure logs.
7. **Run quality gates locally** (same 6 gates as above). All must pass before pushing. Fix and re-run as many times as needed. 6. **Create isolated clone.** Call `git-isolator-util` with `create_branch: false` and `branch: {branch_name}` (the PR's head branch, resolved in step 1).
8. **Commit and push.** Call `git-commit-util` with `force_push_with_lease` operation (see Subagents section). 7. **Fix the issues.** Address all CI failures and all unresolved reviewer feedback. Never partially address reviewer comments — every `REQUEST_CHANGES` concern must be fully resolved.
9. **Post attempt comment** on the PR (see "Attempt Comments" section below). 8. **Run quality gates locally** (same 6 gates as above). All must pass before pushing. Fix and re-run as many times as needed.
10. **Clean up.** `rm -rf {repo_dir}` 9. **Commit and push.** Call `git-commit-util` with `force_push_with_lease` operation (see Subagents section).
11. **Exit.** 10. **Post attempt comment** on the PR (see "Attempt Comments" section below).
11. **Clean up.** `rm -rf {repo_dir}`
12. **Exit.**
### Attempt Comments ### Attempt Comments
+8
View File
@@ -5,6 +5,14 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
## [Unreleased] ## [Unreleased]
- **`task-implementor` posts work-started notification comments** (#11031): Both
the `issue_impl` and `pr_fix` procedures now post an informational "work
started" comment to the Forgejo issue/PR before beginning implementation.
The comment includes the issue/PR title, procedure type, and expected
duration. Posted asynchronously ("fire and move on") so it does not block
the workflow. Step numbering in both procedures has been re-numbered to
accommodate the new step.
- **`agents session tell` invokes real LLM orchestrator actor** (#5784): Replaced the - **`agents session tell` invokes real LLM orchestrator actor** (#5784): Replaced the
M3 echo-stub with real actor invocation via `SessionWorkflow`, routing through M3 echo-stub with real actor invocation via `SessionWorkflow`, routing through
`LangChainSessionCaller``ToolCallingRuntime.run_tool_loop()`. The user prompt `LangChainSessionCaller``ToolCallingRuntime.run_tool_loop()`. The user prompt