red-team: add focus areas 14 and 15 (N=15); skill rewrite lands user-level - #57
Merged
Merged
Conversation
… routing and scope gaps The user-level `/red-team` skill carried dual-mode machinery for a `findings.md` store this project deleted at the 2026-08-04 migration. Retired to `~/.claude/skills-retired/red-team/` — the only surviving record of file mode, which is still correct for a project with no GitHub remote — and replaced with a project-local skill that assumes issues throughout, alongside `/next-issue`. The one-off process for standing up a repo under `agent-issues` (fork, default branch, push block, labels, Actions, secrets, findings migration) moves to a subsidiary `github-repo-setup.md` that a normal round never opens. Fixes #41 — the rotation's routing state was tier-only: - a work-shape gate between brief assembly and dispatch, so a recorded "the next visit should NOT be a finder" verdict stops the round and reports instead of auto-dispatching. Areas 10 and 13 both carry one, and area 13 is next. - `needs-escalation` is documented as a tier flag and nothing else; sequencing and cross-area residuals stay prose, and step 3 now reads `escalation-backlog.md` whether or not the label query hit — a hit used to suppress the row holding the actual ask. - the finder brief carries the area's open issues, so a finder cannot spend its budget re-investigating a mechanism already filed. - `area:N` semantics stated: it marks which area owns the code, not which round found it, and the compound label query ANDs correctly. Addresses #42 — scope coverage: - the `tidy` pass now leads with a scope-coverage diff (glob `R/*.[Rr]`; the lowercase `pp_info_extra_step.r` is invisible to a case-sensitive pattern). - area 14 (statistics & support metrics, 14 files) and area 15 (legacy pure-R search API, 9 files) added, both `sonnet` / UNMEASURED. #42 recommended `opus` for 14 and review-once-then-park for 15; the maintainer chose measured maturity for both. N is now 15. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ion state only The previous commit put the skill and its repo-setup guide inside this repo. Both were wrong. The skill is shared across projects, so burying it here takes /red-team away from every other project; and `github-repo-setup.md` documents standing a repo UP under agent-issues, which is precisely the thing already done here and never needed again — it belongs where a not-yet-configured project reads it, next to the skill. Both now live at `~/.claude/skills/red-team/`, with the #41 routing fixes applied there. This branch keeps only what is genuinely project state: areas 14 and 15, N = 15, and the README/AGENTS label range. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ms609
added a commit
that referenced
this pull request
Aug 5, 2026
#57 landed first and enacted areas 14 and 15 independently of this branch, which had enacted its own area 14 mid-round. Resolved to #57 throughout: its scope row, its `start_tier: sonnet` (a deliberate maintainer decision recorded on #42) and `N = 15`. Kept from this branch only what #57 could not know: - `R/PresentContra.R` and `R/ClusterStrings.R` added to row 14 — owned by no other row, and both reviewed by the first-ever round. - The area-14 maturity rationale no longer reads UNMEASURED: the round had already run at `opus` and returned 36 findings (4 sev:high). `start_tier` stays `sonnet` but is now inert; routing keeps the next visit at `opus`. - A one-line note on the round entry recording that #57 superseded its row, tier and `N`, and that `R/Bootstrap.R` sits in area 15 so A14-36 was filed across the boundary. The four round entries and `last_focus: 14` are unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ms609
added a commit
that referenced
this pull request
Aug 5, 2026
Resolving to #57 wholesale also discarded the forward-looking half of the branch's rationale, which #57 could not have contained — it was written by the highest-yield round on record. Precedence was the wrong tiebreak; these are restored on merit: - The **array-dimension-drop class** — four independent instances found in one round (`ConcordanceTable`, `ClusteringConcordance`, `Consistency`, `ClusterStrings`, all missing `drop = FALSE`). Recorded as a class to sweep, not as four findings to re-discover. - The **`R/PresentContra.R` reference-tip-mismatch angle** — read but never exercised against a forest whose trees have tips absent from the reference. - The **reachability key question** ("is this reachable from `MaximizeParsimony()`'s default output path the way #16/T-400 was, and does it return a silently wrong number rather than erroring?"), which produced three of the round's four sev:high findings. #57's questions are deeper on the numerics but do not ask this. Header no longer claims UNMEASURED: the area has a measured, heavily-yielding seam. `start_tier` still reads `sonnet` per the maintainer decision on #42, but that decision rested on "no measured yield at all", which is now false — flagged for the maintainer rather than flipped unilaterally. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Rotation state only. The
/red-teamskill itself stays user-level at~/.claude/skills/red-team/— it is shared across projects, so it is not in this diff.(An earlier revision of this branch wrongly vendored it, together with a repo-setup guide for
a repo that is already set up; both are reverted here and live with the skill.)
What this branch changes
Areas 14 and 15, from #42's scope-coverage diff — two subsystems owned by no area and
therefore never reviewed at any tier, at any point in the rotation:
src/MaddisonSlatkin.cpp,expected_mi.cpp,ts_mc_fitch.cpp,quartet_concordance.cpp,R/Concordance.R,ParsSim.R,pp_info_extra_step.r, … Already carried a real bug while unowned — the arm64probe_slot()hang, PR fix(profile): stop MaddisonSlatkin profile scoring hanging on macOS (arm64) ms609/TreeSearch#272, found incidentally rather than by rotation.R/CustomSearch.R(TreeSearch()),Ratchet.R,NNI/SPR/TBR.R,Bootstrap.R, …TreeLength()on a multifurcating tree performs out-of-bounds heap writes and returns a score read from memory *before* the buffer — reachable with no error and no warning fromMaximizeParsimony()'s DEFAULT output. #16 (sev:high) namesEdgeListScore()as a confirmed-vulnerable entry point and the default
TreeScorerforTreeSearch()/Ratchet()/Jackknife(), so this is a second unreviewed exposure surfacefor an already-confirmed bug. The row says to take that question first.
Both start at
sonnet, UNMEASURED / no inherited maturity. #42 recommendedopusfor 14(numerical density) and review-once-then-park for 15; the maintainer chose measured maturity
in both cases — density predicts where bugs hide, it is not evidence that cheap sweeps are
exhausted, and legacy is not the same as clean. Reasoning recorded on #42.
area:14/area:15labels created.Nrecomputed to 15 inlog.md's rotation formula,with a "count the rows, do not trust this number" note — a stale
Nis what made areas 11–13unreachable for a month.
AGENTS.md's label table updated toarea:1…area:15, and its entrynow states the
area:Nconvention (which area owns the code, not which round found it).Not in this diff
#41 is entirely about the user-level skill, so no merge here can close it; the fixes are
applied there and reported on the issue. #42 stays open for its two non-rotation residuals —
the 0-byte
R/ImposeConstraint.R+DESCRIPTION:104, and thesrc/rearrange.cppregistrations-vs-tags question.
Validation
Documentation and rotation state only — no R or C++ source touched, so no build, no
check_man(), nocompile-attrs.R.spell_check_package()does not coverdev/orAGENTS.md.🤖 Generated with Claude Code