Skip to content

docs(adr): draft 0007 — namespace CRUD prod exposure model (#586)#607

Merged
memtomem merged 2 commits intomainfrom
feat/adr-0007-namespace-crud-prod-exposure-586
Apr 30, 2026
Merged

docs(adr): draft 0007 — namespace CRUD prod exposure model (#586)#607
memtomem merged 2 commits intomainfrom
feat/adr-0007-namespace-crud-prod-exposure-586

Conversation

@memtomem
Copy link
Copy Markdown
Owner

Summary

This is a doc-only PR. No code or test changes. Implementation PRs follow when a trigger fires.

Why deferred, not Accepted

  • The implicit position ("NS = indexing detail") may be correct. Deferring lets a real prod-user signal fire before we build the empty-state CTA and risk teaching a primitive nobody asked for.
  • Rename + bulk delete (the heavy parts of "full CRUD") are each their own ADR-shaped beasts (chunk-id stability under string-keyed FK, undo / audit policy). This ADR ungates only what it can ungate cleanly: read + cosmetic PATCH.

Test plan

Issue stays open until a trigger fires; this PR does not close #586.

🤖 Generated with Claude Code

Records the product-position decision for the Web UI Settings →
Namespaces tab, currently dev-only via a single JS guard
(settings-namespaces.js:179). PR #604 (#582 4.10a) just ungated the
NS filter dropdown for prod; the deeper question — "is NS an
indexing detail or a user-facing primitive?" — stayed open.

Status is "Proposed (deferred pending trigger)" — same shape as
ADR-0003/0004 — because prod usage signal is < 1 release cycle old
and prod-user voice on whether they want CRUD is missing.

Leaning recorded for the five axes the issue enumerated:

- A=predefine + auto (both flows coexist; current default unchanged)
- B=cosmetic only (color/description PATCH; rename/delete stay dev)
- C=empty + first-time CTA (teach the primitive at lookup time)
- D=config.json/CLI for rules (GUI rules editor is its own ADR)
- E=rename out-of-scope (chunk-migration design is separate beast)

Trigger criteria covers prod-user feedback ≥ 2 reports, NS rules
in onboarding, and the multi-agent grouping verdict (2026-05-09).
Implementation outline split into PR-A (lift JS gate + promote
PATCH to prod tier) and PR-B (empty-state CTA). Rename / bulk
delete deferred to their own ADRs.

Closes nothing — issue stays open until trigger fires.

Co-Authored-By: Claude <[email protected]>
Self-review of #607 caught two small inaccuracies:

- Router list name in Consequences was `_DEV_ROUTERS`; the actual
  identifier in web/app.py:80 is `_DEV_ONLY_ROUTERS`. Corrected
  in-line and added the line citation (web/app.py:63 for
  `_PROD_ROUTERS`, :80 for `_DEV_ONLY_ROUTERS`) so an
  implementation PR triggered later can grep for the right name.

- Replaced the auto-memory identifier `feedback_default_change_fanout`
  (which is a maintainer-local index entry, not resolvable for
  external readers) with the generic phrasing "the project's
  default-change convention". The ADR is published surface; internal
  memory keys shouldn't leak into it.

Co-Authored-By: Claude <[email protected]>
@memtomem memtomem merged commit 8e25a84 into main Apr 30, 2026
7 checks passed
@memtomem memtomem deleted the feat/adr-0007-namespace-crud-prod-exposure-586 branch April 30, 2026 07:40
@github-actions github-actions Bot locked and limited conversation to collaborators Apr 30, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ADR placeholder: namespace CRUD model in prod (auto-create vs predefine)

2 participants