diff --git a/docs/handoffs/chicorytv-issue-queue.md b/docs/handoffs/chicorytv-issue-queue.md index f3dcc2011..f639e7d42 100644 --- a/docs/handoffs/chicorytv-issue-queue.md +++ b/docs/handoffs/chicorytv-issue-queue.md @@ -248,6 +248,18 @@ HARD CONSTRAINTS: - READ docs/README.md → the convention docs FIRST; point recon/implementer agents at specific doc sections. Only recon the task-specific delta. +- **Gitea milestone-name issue filter silently NO-OPS on names with special chars (2026-07-17, + #77 selection)**: `GET /issues?milestones=` returns the WHOLE open-issue list — not a + filtered set — when the milestone title contains `:` or `+` (e.g. `Scheduling: refactor + + distribution`), because the raw name doesn't round-trip through Gitea's filter. A selector that + trusts that response will mis-tier issues (it made #72 look like a milestone-10 member when it's + unmilestoned, and hid #77's true sibling set). **Robust recipe: fetch all open issues once and + filter LOCALLY on each issue's `.milestone.title`** (`?state=open&type=issues&limit=50`, then + `[i for i in issues if (i['milestone'] or {}).get('title')==NAME]`) — do not rely on the + server-side `milestones=` name filter. If a count looks suspiciously like "all open issues," that + filter silently failed; re-derive membership locally. (Dependencies API is fine: `POST + /issues/{n}/dependencies` with `{"owner","repo","index"}` sets blocked-by; the bare `{index}` + form 201s but may not attach — verify with the GET.) - **Codex cheap-worker launch (tested 2026-07-14)**: the native `spawn_agent` interface currently has no model/effort selector, so it provides parallelism but not cost savings. For bounded, tool-bearing selector/recon work, launch a separate worker with