diff --git a/.opencode/agents/task-implementor.md b/.opencode/agents/task-implementor.md index 4c6a3e00e..51ac63713 100644 --- a/.opencode/agents/task-implementor.md +++ b/.opencode/agents/task-implementor.md @@ -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. -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/` - Full static typing throughout — no `# type: ignore` - 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 nox -e lint nox -e typecheck @@ -140,11 +152,11 @@ This is where actual implementation happens. Choose the appropriate procedure ba 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 - `body`: description of changes + `Closes #{work_number}` + dependency link (`This PR blocks issue #{work_number}`) - `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 - 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) 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 diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a2ed9286..8b758fa6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [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 M3 echo-stub with real actor invocation via `SessionWorkflow`, routing through `LangChainSessionCaller` → `ToolCallingRuntime.run_tool_loop()`. The user prompt