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
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:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user