Skip to content

docs(pm-dispatch): search_issues semantic-only + list_issue_types 403 trap rows in platform readings - #8636

Closed
hotlong wants to merge 1 commit into
mainfrom
claude/issue-8508-search-issues-trap-rows
Closed

docs(pm-dispatch): search_issues semantic-only + list_issue_types 403 trap rows in platform readings#8636
hotlong wants to merge 1 commit into
mainfrom
claude/issue-8508-search-issues-trap-rows

Conversation

@hotlong

Copy link
Copy Markdown
Contributor

Fixes#8508
Fixes#8574

What

Exactly three deliverables, per the grading and scope-amendment comments on the first card:

  1. Platform-readings row — MCP search_issues is semantic-only. Exact-string/qualifier semantics do not hold: a quoted literal verifiably present in an issue body returned 0 hits, including the control probe, and same-day indexing lag makes the channel wrong exactly when the reverse index is needed. Zero hits from it are never evidence; an MCP-backed seat computes the Blocked-by: reverse index by direct reads (list_issues to enumerate candidates + issue_read per card, body AND comments) instead.
  2. Platform-readings row — MCP list_issue_types 403s for this integration (read-scope gap) while issue_write with type: succeeds with known-good values (Bug / Feature / Task). Do not probe the list first — write the type directly; a write-side error, not the list 403, is the real signal. The caveat is kept as endorsed: invalid-value behavior is explicitly unmeasured.
  3. Runbook note at the dependency-flag step (the pm:blocking derivation bullet) pointing at the direct-read procedure for the reverse index.

Both rows sit beside their two MCP siblings in the API-quota section and are self-contained reading rules — zero issue numbers in operational text (id-lint green). No SKILL.md edits; the line ratchet reads only SKILL.md (verified in the script, not assumed) and stays at 686/686.

Re-measurement (PM mechanism-hypothesis block)

Re-probed the zero-hit before writing the row. The known control literal (a Blocked-by: line, still verifiably present in its body when read back this hour) was queried as a quoted exact string through MCP search_issues, repo-scoped: total_count: 0 at ~12.3 hours after the line was written — across a UTC day boundary but not yet beyond 24h; no verifiable older Blocked-by: literal was available to probe, so the PM's ">1 day old" criterion could not be met exactly. Since the control still misses, the stronger wording is kept; the row states the measured lag precisely (0 hits at ~15 min, still 0 at ~12 h) instead of asserting behavior beyond what was measured.

Verification

  • pnpm check:doc-authoring — green (377 files clean)
  • pnpm --filter @objectstack/lint run check:doc-formula-expressions — green after building the lint dependency closure (pnpm --filter '@objectstack/lint^...' build; the first run was the fresh-worktree false red: unbuilt @objectstack/formula dist)
  • pnpm check:nul-bytes — green (7770 text files, no raw control bytes)
  • pnpm check:pm-skill-id-lint — green (9 files clean, pattern intact)
  • pnpm check:pm-skill-ratchet — green (SKILL.md 686 lines, ceiling 686, untouched)
  • pnpm check:skill-frame-sync — green (4 copies structurally isomorphic)
  • Gate re-derivation from actual changed paths (node scripts/pm/dispatch-gates.mjs) surfaced 4 families — all already named in the dispatch prompt and run green; no missed family.

Merge path

Stays draft — human merge per the card's ruling; never ready, never auto-merge.


Generated by Claude Code

…es 403 trap rows to platform readings
Two MCP trap-table rows beside their siblings in the API-quota section:
quoted exact-string queries through search_issues return 0 for literals
verifiably present in bodies (control probe included, still 0 at ~12h
across a UTC day boundary), so zero hits are never evidence and the
Blocked-by reverse index must be computed by direct body/comment reads;
list_issue_types 403s for this integration while issue_write type:
succeeds with known-good values, so write directly and treat a
write-side error as the real signal (invalid-value behavior unmeasured).
Plus one runbook note at the pm:blocking derivation step pointing at the
direct-read procedure.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018WuTtyckQa1VcXwgd52JpN
@vercel

vercelBot commented Aug 14, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredAug 14, 2026 4:40am

Request Review

@hotlongClaude

Copy link
Copy Markdown
ContributorAuthor

Review: ACCEPT — PM seat, session 018WuTtyckQa1VcXwgd52JpN. Stays draft for human merge (both files under .claude/skills/pm-dispatch/**; dispatched at the mandatory fable tier — correctly, this time). Auto-merge not armed, not queued.

Substance

  • Exactly the three ruled deliverables, nothing else. Two rows in platform-readings.md seated beside their two MCP siblings in the API-quota section, one runbook sentence at the pm:blocking derivation bullet. The runbook note cross-references the readings table by name (「平台读数事实表」), not by number — verified clean of issue-ID patterns at the PR head by this seat's own scan, independently of the dev's id-lint run.
  • The re-measurement was handled honestly. The PM hypothesis block asked for a >1-day-old control; none existed, and instead of pretending, the row states exactly what was measured (0 hits at ~15 min, still 0 at ~12 h across a UTC day boundary) and the semantic-only claim rests on the quoted-literal miss itself, which is channel semantics rather than indexing lag. The unmeasured boundary (invalid type: values) is explicitly fenced as unmeasured. This is the right epistemic posture for a readings table.
  • Both rows close real wrong exits. 「零命中永远不是证据」 kills the exact inference this seat almost made live this shift, and 「写侧报错才是真信号,列表 403 不是」 blocks both wrong exits the 403 invites (dropping type discipline silently, or reporting blocked). The direct-read procedure (list_issues + issue_read, body AND comments) is stated in both files consistently.
  • Ratchet posture: SKILL.md untouched (686/686 unaffected); +20/−1 proportionate to two readings rows plus one pointer sentence.
  • Reasonableness (three axes): both traps were hit in production this shift (real need); the readings table is the designed home for measured platform facts and the rows are self-contained (platform fit); the ⛔-marked defaults are precisely the kind that stop an AI seat from arguing its way into a plausible-but-wrong inference (error prevention). Nothing speculative was added beyond measurement.

The out-of-scope observation was correctly filed unassigned as a finding per the lane-evidence protocol rather than smuggled into this diff — graded separately on that card.

One process note, no action needed here: the local union in the body is not bound to a commit sha. The union-after-final-commit + quote-HEAD contract lands in the sibling PR and is not applied retroactively; the decisive scans were re-verified at this PR's current head by the reviewer instead. CI at review time: everything completed is green or skipped, TypeScript Type Check still in progress on a docs-only diff.


Generated by Claude Code

@hotlongClaude

Copy link
Copy Markdown
ContributorAuthor

Closed unmerged on maintainer ruling (2026-08-14, verbatim, untranslated): 「8508 作废,8636 直接关闭」. Card #8508 closed as not planned under the same ruling. No content from this PR lands.


Generated by Claude Code

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants

@hotlong@claude