feat(mcp): list_idea_questions + answer_question (question-channel B) #56
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "claude/question-channel-mcp"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Laag B (question-channel) — de twee MCP-tools
Voor de copilot-question-channel (grill-vragen als kaart in S4MChatWindow). Bevat de shared-submodule-bump (→ #19, allowlist) + twee nieuwe binding-scoped tools:
list_idea_questions(READ) — open vragen op ideeën die de binding-user bezit, in dit product (idee-context erbij voor de kaart).answer_question(WRITE namens binding-user) — beantwoordt een open grill-vraag; de wachtende grill-worker pikt het op via directe DB-read.Security (154-P1): beide tools doen
userCanAccessProduct(product_id, auth.userId)als EERSTE check (de gedeelde binding-user bezit ideeën in véél producten → zonder dit cross-product-lek).answer_question: pre-read owner/product-grens + options-validatie (answer ∈ options) + atomicupdateManymét de grens IN de WHERE (idea: { is: {...} }, geen TOCTOU) → count 0 = conflict. Mirrorlist_ideas/create_idea(scope-guard) +update_idea(requireWriteAccess).Verificatie
npm test→ list_idea_questions 6 + answer_question 10; volledige suite 838 tests groen (114 files), 0 pre-existing failures.npm run typecheckschoon. De Prismaidea:{is:{...}}-relation-WHERE inupdateManyaccepteerde zonder workaround.Merge-gate: na merge draait 154 de
scrum4me-mcp-http-deploy (handmatig, §5 spec) → verifieertools/listbevat beide tools, vóór Laag C/D.🤖 Generated with Claude Code