From 0fb1eb648316dc87ba5685868ff726d55545cecd Mon Sep 17 00:00:00 2001 From: Self-Managing Codebase Manager <7004983+WillTaylor22@users.noreply.github.com> Date: Sun, 7 Jun 2026 11:34:43 +0000 Subject: [PATCH] memory: sentry search_issues silently empty without projectSlugOrId --- .claude/memory/MEMORY.md | 1 + .../2026-06-07-sentry-search-issues-needs-project-slug.md | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 .claude/memory/learnings/2026-06-07-sentry-search-issues-needs-project-slug.md diff --git a/.claude/memory/MEMORY.md b/.claude/memory/MEMORY.md index 8053ec3..5039d98 100644 --- a/.claude/memory/MEMORY.md +++ b/.claude/memory/MEMORY.md @@ -21,6 +21,7 @@ Keep this file under 200 lines — anything longer is content bloat, not memory. - [learnings/vercel-mcp-silently-hides-projects](learnings/2026-05-31-vercel-mcp-silently-hides-projects.md) — Vercel MCP can return only a subset of a team's projects even with the right teamId — `get_project(self-managing-codebase)` 404'd despite the project being healthy; use the curl+Vercel-bot fallback, don't assume it was deleted - [learnings/sentry-firstseen-relative-rejected](learnings/2026-06-02-sentry-firstseen-relative-rejected.md) — Sentry `search_issues` tool description shows `firstSeen:-7d` as a valid filter but the API rejects it; use ISO timestamps or pass `statsPeriod` on the tool call instead - [learnings/linear-team-name-silent-empty](learnings/2026-06-05-linear-team-name-silent-empty.md) — Linear `list_issues({team: 'self-managing-codebase'})` returns empty without error; the actual team is `Engineering` (ENG-* prefix). Run `list_teams()` first or omit the `team` arg +- [learnings/sentry-search-issues-needs-project-slug](learnings/2026-06-07-sentry-search-issues-needs-project-slug.md) — Sentry `search_issues` org-scoped returns false-empty on this org; pass `projectSlugOrId: 'app'` for the step-2 sweep or you'll miss new errors ## Decisions - [decisions/mcp-for-small-writes-checkout-for-big](decisions/2026-05-26-mcp-for-small-writes-checkout-for-big.md) — Single-file writes go through GitHub MCP; multi-file or test-needing changes use the mounted checkout + `git push` diff --git a/.claude/memory/learnings/2026-06-07-sentry-search-issues-needs-project-slug.md b/.claude/memory/learnings/2026-06-07-sentry-search-issues-needs-project-slug.md new file mode 100644 index 0000000..ed66832 --- /dev/null +++ b/.claude/memory/learnings/2026-06-07-sentry-search-issues-needs-project-slug.md @@ -0,0 +1,7 @@ +# Sentry `search_issues` silently returns empty without `projectSlugOrId` + +`search_issues({ organizationSlug: 'self-managing-codebase', query: 'is:unresolved' })` (with or without `regionUrl`, with or without an explicit query) returns "No issues found" — but adding `projectSlugOrId: 'app'` to the same call returns `APP-1` (the canary `SentryExampleAPIError`, still unresolved on Sentry from May). Verified by running both shapes back-to-back in the same tick and getting opposite answers. + +Step 2 (observability) of the manager loop says "query Sentry MCP for unresolved issues in the self-managing-codebase project". The natural first call is org-scoped — but on this org's setup, that returns false-empty. Future sessions would silently miss new errors and never file tickets for them. **Always pass `projectSlugOrId: 'app'`** (or whatever `find_projects({organizationSlug})` returns) when running the step-2 sweep — there's only one project here so it's just a constant. + +Adjacent to `vercel-mcp-silently-hides-projects` and `linear-team-name-silent-empty`: a third shape of the same MCP failure mode (silently-empty rather than error on a query that should hit data). Pattern: don't trust a zero-result list response from any of the read MCPs without a positive control. Either query a known-existing entity, or scope the call to the narrowest filter the docs allow.