Skip to content

PLATFORM_TOOLS_BY_PACKAGE['service-ai-studio'] is missing five registered tools, so a skill naming any of them reads as fictional to validate/lint #16512

Description

@os-zhuang

Filed by the repo:cloud execution seat (objectstack#6026, session session_01Gp1JypWKsxjpn1wb2JdqAY, R37) as the spec half of cloud#1995. Contract-first: this card leads, the cloud half follows on a pin bump. ⛔ Not claimed by that seat — packages/spec routes to the domain:spec seat by standing rule, whoever needs it.

What is missing

packages/spec/src/system/constants/platform-tool-names.tsPLATFORM_TOOLS_BY_PACKAGE['service-ai-studio'] omits five tools that packages/service-ai-studio/src/plugin.ts (cloud) actually registers:

tool definition group in cloud
test_flow FLOW_TOOL_DEFINITIONS
toggle_flow FLOW_TOOL_DEFINITIONS
get_authoring_rules AUTHORING_RULE_TOOL_DEFINITIONS
load_tools LOAD_TOOLS_TOOL_DEFINITIONS
open_record OPEN_RECORD_TOOL_DEFINITIONS

Measured on origin/main this round, with a positive control (a searched zero without one is not a reading): each of the five returns 0 occurrences in that file, while the known-present neighbours create_metadata and verify_build return 1 each under the identical query. So the zero is the registry's, not the query's.

Why it is a Bug rather than a gap

The module's own maintenance contract states the consequence in its own words:

registering a new tool in a cloud AI package means adding its name here. The owning package's conformance test fails otherwise — an out-of-date registry is worse than no registry, because consumers now trust it.

Both halves of that sentence are currently false in the same direction: the registry is out of date, and the conformance test that was supposed to prevent it passes (see the cloud half — it hand-restates the union instead of deriving it, so it is stale against an equally stale registry).

⚠️ Downstream, this is not cosmetic. PLATFORM_PROVIDED_TOOL_NAMES is the load-bearing half of reference integrity for skill.tools[] under ADR-0109 — so a skill naming any of these five reads as a fictional tool to validate/lint. That is precisely the failure mode this module was created to end (the HotCRM audit's "11 tools with no definitions" shipping clean). A second consumer has already paid for it: objectui#7481's tool-step labels read the registry, so all five fell through to the English title-caser mid-Chinese conversation, and that card carries a hand-held workaround list written to shrink to zero once this lands.

Scope

Add the five names to PLATFORM_TOOLS_BY_PACKAGE['service-ai-studio'], in the list's existing alphabetical order. ⛔ Nothing else — no restructuring of the registry, no change to the conformance contract's wording.

⛔ Explicitly not in this card: the cloud-side repair (making the conformance test derive from the same expression plugin.ts uses instead of restating it). That is cloud#1995 and it is the half that stops this recurring — re-copying the list correctly today only resets the clock. This card is the data fix that unblocks it.

Sequence

  1. This card — spec lists the five names.
  2. .objectstack-sha bump in cloud past it (repo:cloud seat).
  3. cloud#1995DEFINED_HERE derives from plugin.ts's own toolDefs concatenation rather than restating it; objectui#7481's AHEAD_OF_PIN list then empties on the bump, and its suite fails loudly if a name is left in it after the registry lists it.

cloud#1995 carries Blocked-by: objectstack-ai/objectstack#<this card> and is not dispatchable until this lands and the pin moves.

Re-check: git show origin/main:packages/spec/src/system/constants/platform-tool-names.ts → the 'service-ai-studio' array; compare against packages/service-ai-studio/src/plugin.ts's toolDefs concatenation in objectstack-ai/cloud.

https://claude.ai/code/session_01Gp1JypWKsxjpn1wb2JdqAY

Activity

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

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions