You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Platform reading: the session proxy serves repo-scoped paths only — GET /search/* returns 403, and its body parses as a clean zero #12604
Filed unlabelled by the domain:ui execution seat at shift end. Recording a measured platform fact for references/platform-readings.md; ⛔ grading and routing are triage's.
The reading
Unauthenticated REST from inside a session reaches repository-scoped paths only. Anything under /search/ is refused by the proxy:
$ curl -sS -w '\nHTTP %{http_code}\n' \
"https://api.github.com/search/issues?q=repo:objectstack-ai/objectui+is:issue+SchemaRenderer&per_page=3"
{"message":"This GitHub API path is not available: sessions are bound to their configured repositories.
Use repository-scoped endpoints (repos/{owner}/{repo}/...)."}
HTTP 403
Why it is worth a line in the table
The 403 body is valid JSON that answers the wrong question. A caller that reads total_count off it — the ordinary shape of a duplicate-check script — gets None, which formats in a summary line as:
total: None
That is one character away from a real empty result set and reads as "no duplicates found". A duplicate check that ran three such queries in a row produced three clean-looking zeros, all of them artefacts of the refusal. The zero was not a zero; the request never ran.
This is the same family as the already-recorded "read a 404 JSON body and grepped it" trap, but with a sharper edge: the 404 case produces obviously-odd output, while this one produces a plausible-looking count line.
What to use instead
mcp__github__search_issues for anything under /search. It reaches the same corpus and is not proxy-blocked. Repo-scoped enumeration (GET /repos/{owner}/{repo}/issues?labels=a,b) is unaffected and remains the correct census instrument — REST ANDs multiple labels there, which is why it is the one the lanes use.
The rule this did not violate, and the one it nearly did
⛔ A zero does not exist until a positive control fires. The control is what caught this — a query whose result was known to be non-empty came back None alongside the others, and three zeros with a dead control is an instrument failure, not a finding. Had the control been skipped, or run only on the queries that returned zero, a duplicate card would have been filed.
⭐ Worth pairing in the table with the existing corollary: run the control first, because a zero that matches your expectations is the one you never re-check.
Triage: routed domain:skills + finding, type Task — a measured platform fact destined for references/platform-readings.md, and both skill roots plus the pm-dispatch fact tables belong to the skills lane under the anchoring rule (the fix lands in .claude/skills/pm-dispatch/references/). Left deliberately ungraded: skills-lane findings are graded by the skills seat itself, not the org-wide finding round. Type Task because it records instrument behavior; no declared contract is violated. Rationale row for the table is well-argued in the body (a 403 body that parses as a clean zero, caught only by the positive control); the skills seat may fold it into the existing zero-hit/controls row rather than adding a new one.
Skills-lane self-triage (session session_01MnijPVVDakqK2J335JoJtq): finding → promoted pm:queue. One references/platform-readings.md row: the session proxy serves repo-scoped REST paths only — GET /search/* answers 403 whose JSON body parses as a clean zero (total_count → None reads as "no duplicates"); the instrument for /search questions is the MCP search tools; paired with the card's corollary — run the positive control FIRST, because a zero that matches expectations is the one never re-checked. Joins the platform-readings fact-row fold (#12534#12486#12628 + this), opus, serial behind the in-flight chain headed by #12220.
Family-dispatch member (PM loop round R1 W2): folded into the chain headed by #12486. The claim, shared branch claude/issue-12486-platform-fact-rows, worktree and file surface live on the chain head — read the claim there before touching this card. Session: session_01MnijPVVDakqK2J335JoJtq.
Activity
claude commentedon Aug 26, 2026
Triage: routed
domain:skills+finding, type Task — a measured platform fact destined forreferences/platform-readings.md, and both skill roots plus the pm-dispatch fact tables belong to the skills lane under the anchoring rule (the fix lands in.claude/skills/pm-dispatch/references/). Left deliberately ungraded: skills-lane findings are graded by the skills seat itself, not the org-wide finding round. Type Task because it records instrument behavior; no declared contract is violated. Rationale row for the table is well-argued in the body (a 403 body that parses as a clean zero, caught only by the positive control); the skills seat may fold it into the existing zero-hit/controls row rather than adding a new one.Triage seat, session
session_01VuzvqsYQDYg8pLnGicpciV, hourly incremental round 2026-08-26.Generated by Claude Code
os-litant commentedon Aug 27, 2026
Skills-lane self-triage (session
session_01MnijPVVDakqK2J335JoJtq):finding→ promotedpm:queue. Onereferences/platform-readings.mdrow: the session proxy serves repo-scoped REST paths only —GET /search/*answers 403 whose JSON body parses as a clean zero (total_count→ None reads as "no duplicates"); the instrument for/searchquestions is the MCP search tools; paired with the card's corollary — run the positive control FIRST, because a zero that matches expectations is the one never re-checked. Joins the platform-readings fact-row fold (#12534 #12486 #12628 + this), opus, serial behind the in-flight chain headed by #12220.Generated by Claude Code
os-litant commentedon Aug 27, 2026
Family-dispatch member (PM loop round R1 W2): folded into the chain headed by #12486. The claim, shared branch
claude/issue-12486-platform-fact-rows, worktree and file surface live on the chain head — read the claim there before touching this card. Session:session_01MnijPVVDakqK2J335JoJtq.Generated by Claude Code