Repository navigation
chore: thread-tools follow-ups — PROTO §3 inventory, plain import re - #37
Conversation
… plain import re Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
QA panel review — WARN
code-review · head 492a1410eea4 · formal
Low-risk documentation-hygiene PR: the code change is sound, but the PR's own §3 inventory update ("16 read tools") now contradicts two stale enumerations it didn't touch. Fix first: update the read_tools.py module docstring to say "Sixteen" and add github_review_threads to its listing — it's the code file, so it's the one a reader hits first. The panel agreed on both findings; verification confirmed both with no disputes. No coverage gaps: the cross-file angle caught both stale spots in one pass.
Findings
| Severity | Location | Finding | Verified | |
|---|---|---|---|---|
| 🟡 | minor | read_tools.py:3 |
The module docstring says 'Fifteen tools' and enumerates 15, but the file now registers 16 — github_review_threads is missing from the docstring's listing. |
confirmed |
| 🟡 | minor | PROTO.md:104 |
PROTO.md §5's heading says '16 read / 10 write / 3 review = 29' but the body's detailed listing names only 15 read tools (missing github_review_threads) and … |
confirmed |
findings JSON (machine-readable)
[
{
"file": "read_tools.py",
"line": 3,
"severity": "minor",
"category": "cross-file",
"claim": "The module docstring says 'Fifteen tools' and enumerates 15, but the file now registers 16 \u2014 `github_review_threads` is missing from the docstring's listing.",
"evidence": "Fifteen tools, all implemented: six ported from protoAgent's tools/github_tools.py\n(PRs, issues, diffs, CI), the repo-content readers (`github_read_file`,\n`github_read_pr_file`, `github_repo_contents`, `github_path_exists`), `github_pr_diff`,\n`github_status` (the self-diagnosis probe \u2014 is `gh` installed / authenticated), and the\nPM verbs (v0.7.0): `github_list_prs` (the PR board: draft / review decision / merge\nstate), `github_issue_comments` (the thread on an issue or PR), and\n`github_search_issues` (dedupe BEFORE filing).",
"verdict": "confirmed",
"note": "Re-read read_tools.py at PR head: docstring literally says 'Fifteen tools' and lists 15; PR's own diff bumps \u00a73 to '16 read tools' naming review_threads as the 16th."
},
{
"file": "PROTO.md",
"line": 104,
"severity": "minor",
"category": "cross-file",
"claim": "PROTO.md \u00a75's heading says '16 read / 10 write / 3 review = 29' but the body's detailed listing names only 15 read tools (missing `github_review_threads`) and 8 write tools (missing `github_reply_thread` and `github_resolve_thread`), contradicting both the heading and the \u00a73 inventory this PR just updated.",
"evidence": "**Read (always on)** \u2014 6 ported core tools (`github_get_pr`, `github_get_issue`,\n`github_list_issues`, `github_get_commit_diff`, `github_ci_runs`, `github_run_failure`),\n`github_pr_diff`, the content readers (`github_read_file` \u2014 raw file; `github_read_pr_file`\n\u2014 a file at a PR's head; `github_repo_contents` \u2014 directory listing, says \"is a file \u2014\nuse github_read_file\" on a file; `github_path_exists` \u2014 the EXISTS/MISSING probe), and\n`github_status` \u2014 is `gh` installed / authenticated / as whom / which default repo, the\nself-diagnosis tool the model calls when another tool errors (no `write` gate), and the\nPM verbs (v0.7.0): `github_list_prs` (reuses `api.fetch_prs`, so the tool and the board\ncan't disagree \u2014 draft / review decision / merge state per row), `github_issue_comments`\n(`gh issue view --json comments`; works on PRs; newest `limit` in chronological order,\nbodies \u2264 1000 chars), `github_search_issues` (`gh search issues --repo \u2026 -- <query>`: flags first, the query\nLAST after `--` so a leading qualifier like `-label:bug` isn't read as a flag; `state:\nall` = no `--state` flag, gh only knows open|closed \u2014 documented as \"dedupe before\nfiling\").",
"verdict": "confirmed",
"note": "Re-read PROTO.md at PR head: \u00a75 heading (line 90) says '16 read / 10 write / 3 review = 29'; read listing names 15 (no review_threads); write listing names 8 (no reply_thread/resolve_thread). \u00a73 (updated by this PR) says 16/10."
}
]1 finding(s) excluded from the verdict by in-diff confinement (file not among this PR's changed paths):
read_tools.py(minor) — The module docstring says 'Fifteen tools' and enumerates 15, but the file now registers 16 —github_review_threadsis missing from the docstring's listing.
There was a problem hiding this comment.
Promoting the WARN verdict for head 492a1410eea4: all checks terminal-green, zero unresolved review threads. (approve-on-green)
Open findings carried by this approval — non-blocking, but they did not go away:
- minor
read_tools.py:3— The module docstring says 'Fifteen tools' and enumerates 15, but the file now registers 16 —github_review_threadsis missing from the docstring's listing. - minor
PROTO.md:104— PROTO.md §5's heading says '16 read / 10 write / 3 review = 29' but the body's detailed listing names only 15 read tools (missinggithub_review_threads) and 8 write tools (missing `github_reply_thre
Approving a WARN does not resolve its findings (issue #22).
Vera's two carried findings on #36:
PROTO.md:43: the §3 file inventory still said 15 read / 8 write. It now says 16 / 10 and names the review-thread tools.write_tools.py:53:__import__("re")is now a top-levelimport re.No behavior change. The suite passes and ruff is clean.
🤖 Generated with Claude Code