From 88287bcdb38b024ccdf8f54c58b2dfd572f6e79e Mon Sep 17 00:00:00 2001 From: Timothy Date: Fri, 17 Jul 2026 01:17:15 +0200 Subject: [PATCH] docs(queue): Gitea milestone-name issue filter silently no-ops on ':'/'+' names The `?milestones=` filter returns the whole open-issue list (not a filtered set) when the milestone title contains special chars, mis-tiering issues during queue selection. Recipe: fetch open issues once, filter locally on `.milestone.title`. Also notes the dependencies-API owner/repo/index form. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/handoffs/chicorytv-issue-queue.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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