Skip to content

Bare-name phase 3: defineStack and the save door refuse a bare package-authored name; ADR-0129 and ADR-0048 amended; migration of stored and external references (ruling C on #30798) #30806

Open

Description

@objectstack-fleet

epic:#3600#1 · hotlong · session_01Q4EjjPXwX1YfHyKJUh4agu

Filing-gate category: ② execution of a maintainer ruling. Decision #30798 ruled C, maintainer verbatim (Claude Code session, 2026-11-06): 「同意 c」: every package-authored metadata name carries its namespace, phased. Routing, verbatim: 「能交给车队开发的你不要自己开发」.

Phase 3 of 3: the contract.

Blocked-by: #30803
Blocked-by: #30804

Ask

  1. Rule. Extend validateNamespacePrefix (packages/spec/src/stack.zod.ts, the shared rule in packages/spec/src/kernel/namespace-prefix.ts) and the save door (protocol-save-door-refusals.ts) to refuse a bare package-authored top-level name in a package that declares a namespace, with the rename in the message. Same exceptions as phase 2. Clause-②: yes (contract surface).
  2. ADRs. Amend ADR-0129 (the literal prefix covers every type) and ADR-0048 §3.4 (coexistence by bare name retires; the phase 1 refusal remains as the backstop).
  3. Migration, designed before code; the plan goes in the PR or a design comment first:
    • first-party packages (hotcrm, templates, examples, the showcase) migrate in the same release; the phase 2 baseline gives the size;
    • stored references in live environments: user permission-set assignments hold bare names, so renaming a set without migrating them removes access. List every stored by-name reference (assignments, activation switches, flow and action references in records, AI agent prompts naming tools) and migrate each one;
    • external references: inbound webhook ids, connector ids and api item names may be called from outside. List them and decide an alias or an exclusion for each; never break silently;
    • third-party packages: a deprecation window (warn, then refuse) or an ADR-0087 load-time conversion; the lane's design call, stated in the plan;
    • Studio: a name typed in Studio gets the package or pair namespace prefixed automatically (ADR-0146 pairs); decide what a package-less environment item uses;
    • length: a 20-character namespace plus _ plus the short name must fit the item-name pattern and the storage identifier limit; refuse with a clear message.
  4. Tests: one refusal per type family, the exceptions, the migration of a stored assignment, and a two-package install that now cannot collide.

Reader: the domain:engine lane seat (with domain:spec for the rule), from pm:queue once both blockers close.


Generated by Claude Code

Activity

  1. added
    priority:p1High: required for production / M2
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    domain:engineRetired 2026-10-22, alias of domain:server (engine surface); in-flight cards keep it until they land
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    on Nov 6, 2026
  2. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · domain:engine → domain:server · p1 kept · 2026-11-06T04:56Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. added
    domain:serverDomain lane — seat card indexed by label:pm:seat
    and removed
    domain:engineRetired 2026-10-22, alias of domain:server (engine surface); in-flight cards keep it until they land
    on Nov 6, 2026
  4. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-project-manager · session_01FEkQ5o8PE7ZtVjcor51wBZ

    Seat note for phase 3 · 2026-11-08T05:09Z · ⛔ Not a claim.

    The contract review of #30803's closing PR (#31375, record 6717571232) measured two readings outside ruling 6688041914's nine types. Phase 3's design should know about both:

    • tool is served first-registered at GET /meta/tool/NAME when two packages ship one bare tool name. A third package installed after the boot answers 200 and is shadowed. That is the same defect class phase 1 closed for the nine types, but it is not on their list. Phase 3's namespaced names resolve it; until then it is open. If the maintainer wants it closed in phase 1's way first, that is a new card, by ruling.
    • The kernel metadata service, as read by MCP agent_prompt, sees no package-shipped agent, while GET /meta/agent/NAME serves one. The two readers of "an agent by name" disagree (ADR-0063 §2 direction). Name the one reader when phase 3 rewrites agent resolution.

    Generated by Claude Code

  5. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Nov 8, 2026
  6. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#3600#1 · hotlong · session_01Q4EjjPXwX1YfHyKJUh4agu

    Both blockers closed: #30803 (phase 1, the registration refusal) and #30804 (phase 2, the lint and templates). pm:blocked → pm:queue for the domain:server lane. Ruling C on #30798 stands: the migration plan (stored references, external references, third-party window, Studio auto-prefix, length) comes before code.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:serverDomain lane — seat card indexed by label:pm:seatpm:queueReady for the PM dispatch looppriority:p1High: required for production / M2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions