Make create-operation semantics consistent across all project-scoped catalog entities (create-or-fail vs upsert)
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 42/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- typescript
- Ambito
- api, backend-api-design, full-stack
Direzione di ricerca
Start by re-confirming the listed create behaviors for each catalog entity across the API, portal, and CLI. Decide whether each entity should use create-or-fail or an explicitly documented upsert path, then align the affected clients and add duplicate-create tests and documentation for every entity. Done means the convention, exceptions, API responses, portal behavior, and CLI handling are consistent and covered.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Original author: @cedricvidal
Summary
Create (POST) operations across our project-scoped catalog entities are inconsistent: some behave as create-or-update-if-exists (silent upsert / overwrite), others as create-or-fail-if-exists (409 on duplicate). We should pick one convention and apply it uniformly across the API, portal, and CLI.
This was surfaced while fixing the MCP "Add Server" duplicate-slug bug (PR #1241), where the create flow was silently overwriting an existing server. MCP was moved to create-or-fail (409) there; this issue tracks reconciling the rest.
Current behavior (audit)
| Entity | API create behavior | Portal client-side guard? |
|---|---|---|
| mcp-servers | CREATE-OR-FAIL (409) — fixed in #1241 | Yes (inline + toast) |
| criteria | CREATE-OR-FAIL | Yes |
| prompt-features | CREATE-OR-FAIL (409) | No — API rejects but portal doesn't pre-check |
| report-templates | CREATE-OR-FAIL (409) | Unverified |
| codebases | CREATE-OR-FAIL (unique-index E11000) | n/a |
| skills | UPSERT (findOne → updateOne/insertOne, 200/201) | n/a |
| extensions | UPSERT (same pattern as skills) | n/a |
| agents | UPSERT (explicit "upsert" semantics, 200/201) | — |
| agent-versions | UPSERT (by agentVersion) |
— |
| task-prompts | findOrCreate (always 201) | — |
File:line citations were gathered during the audit and can be reattached in the implementing PR. Treat the table as the starting inventory; each row should be re-confirmed before changing.
Problems
- Inconsistent, surprising semantics — the same "create" verb silently overwrites for some entities and rejects for others. A user re-adding an existing skill silently mutates it; re-adding an MCP server now errors.
- Data-loss risk — silent upsert on create can overwrite a record a user didn't intend to touch (the exact MCP bug).
- API/portal mismatch —
prompt-featuresreturns 409 from the API but the portal offers no client-side duplicate guard, so the user only discovers the conflict after submitting.
Proposed direction (to be decided)
Adopt create-or-fail (409) as the standard for user-facing catalog creates, with updates done explicitly via PUT. Rationale: least-surprise, no accidental overwrite, matches the MCP + criteria pattern.
- Some entities may have intentional idempotent re-import semantics (skills/extensions re-import, agent-version registration from workers). Those need an explicit decision: keep upsert (and document it) OR split into distinct create vs. update paths. Do not blanket-change without confirming each intent.
- Wherever the API is create-or-fail, add a matching portal client-side duplicate guard (inline error + disabled submit) for parity, and ensure the CLI surfaces the 409 cleanly.
Scope
- Out of scope for PR #1241 (per-project data organization). This is a follow-up.
- Deliverables: decision on the standard, per-entity reconciliation (API + portal + CLI), tests, and docs.
Acceptance criteria
- A documented, agreed convention for create-vs-update across catalog entities.
- Each entity's
POSTconforms (or its deviation is explicitly justified and documented). - Portal and CLI behavior matches the API for every entity (no silent-overwrite where the API 409s; no 409-only-after-submit where a pre-check is feasible).
- Tests cover the duplicate-create path per entity.
- Lingua principale
- TypeScript
- Stelle
- 7
- Fork
- 13
- Merge medio
- 3g 5h
- PR unite (30g)
- 26
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di microsoft/scope
-
type: worker-update
Difficoltà 1/5 1-3 ore Idoneità per principianti 85/100
I maintainer di solito rispondono entro 1 giorno
-
type: worker-update
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
type: worker-update
Difficoltà 1/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Clarify that prompt features only categorize prompts, don't impact runsForse già presa @DerrickUnleashed l’ha presa 2 giorni fa. Apertaauthor: JaGord documentation good first issue UI
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Submit Run task prompt picker should only search requirement promptsForse già presa @cedricvidal l’ha presa 68 giorni fa. Apertaauthor: cedricvidal bug portal
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di microsoft/scope
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 4 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno