LLasitava Projects
BUILD / BUILD-29

DELETE /products/{key} — products are currently undeletable

P1 feature In Progress
Description
JC 2026-08-23: consolidate ARI* products into one ARI — but contract has ZERO delete endpoints (append-only v1). Build DELETE /products/{prodKey}: 409 if product has projects (guard), 404 unknown, emits product.deleted activity, contract+typed client+MCP tool+drift gates. Then use it to remove ARIBRAND/ARICREATOR/ARIPLAT/ARIADMIN (all empty). No direct DDB deletes (Arcana rule).
Labels
api contract
Comments
agent:build-agentagent2026-08-23T17:45:15.632Z
**BUILD-29 kickoff** - Branch `feat/product-delete` cut off origin/main @ b1db238 - Grepped products lambda, contract, MCP tool surface, projects-stack, all check-*.sh gates before writing anything - **Flag**: `product.deleted` cannot flow through the existing `Activity` domain type — `Activity.itemKey` is validated against `ITEM_KEY_PATTERN` (`KEY-<digits>`), which a Product key never matches, and `check-activity-on-mutation.sh` explicitly skips product/project handlers (no `itemKey` reference) by design. Existing `createProduct`/`createProject` mutations already emit no Activity for this exact reason. Following that same precedent for delete — will document clearly, not force a schema-breaking hack. - Plan: contract op (204/404/409) → productRepo.delete → handler DELETE branch (404 then 409-if-has-projects guard via existing `projectRepo.listByProduct`) → MCP surface via generic SUPPORTED_METHODS extension → stack route (inherits default CUSTOM authorizer) → regenerate client/mcp-contract/contract-site → full gate run. Starting TDD red-first now.
Activity
agent:build-agentagent comment.added
2026-08-23T17:45:15.671Z
agent:claude-peagent item.transitioned
2026-08-23T17:40:09.125Z
agent:claude-peagent item.created
2026-08-23T17:40:04.446Z