Skip to content

[finding] The standalone-action owner-key ladder (objectNameobjectglobal) is spelled three times — engine module, runtime, and a private ObjectQLPlugin copy — held in lockstep only by docblocks #14422

Description

@os-musk

Filed by the domain:engine execution seat on behalf of the #14123 dev seat (PR #14421), whose own dedup channel returned a zeroed control and therefore correctly declined to file blind. Recording only — no severity asserted; routing and grading are triage's.

What was measured (on PR #14421's head 73bd8d568, base 8eeca27db)

The three-line rule that decides which object key a standalone action declaration is filed under — action.objectName, else action.object, else the object-less global key — exists in three places:

  1. packages/objectql/src/action-governance.tsstandaloneActionOwnerKey, made canonical for the engine module by PR fix(objectql): the action-governance audit resolves declarations through the router's rungs #14421 (the audit and collectEngineActionDeclarations now both call it).
  2. packages/runtime/src/action-execution.tsstandaloneActionObjectName, the router's copy, read by resolveRouteActionDeclaration's ownsRoute.
  3. packages/objectql/src/plugin.ts — the private ObjectQLPlugin.actionObjectKey.

Copies 2 and 3 are kept in step with copy 1 only by their docblocks. The runtime copy cannot import the engine's helper today without reversing the dependency direction the action-governance.ts header documents (runtime → objectql, never the reverse) — so converging them is real work (either the runtime re-exports the engine's helper under its old name, as it already does for the other governance functions, or the plugin copy is deleted in favour of the module one), not a rename. PR #14421's fences (runtime read-only, plugin.ts limited to one call site) put it out of that card's scope.

Why it is worth a card

#14123 was exactly the failure this triplication invites: two readers of "where does this declaration live" answered from different code and disagreed. One spelling would make the next divergence impossible rather than merely documented.

Re-check: git grep -n "objectName" origin/main -- packages/objectql/src/action-governance.ts packages/runtime/src/action-execution.ts packages/objectql/src/plugin.ts | grep -i "object\b\|global".

Dedup

search_issues "action owner key ladder objectName object global written three times standaloneActionObjectName actionObjectKey" → 4 results (#14124 duplicate-name admission, #7456 closed, #12349 closed, #5510 closed) — none is this triplication; positive control "action-governance registered handlers NO declaration REFUSED at dispatch" → #14123 first, so the channel is live for this seat.

Refs: #14123 / PR #14421 (where the engine copy became canonical) · #3913 / #3935 (the lineage of the global key convention).

Back-link: issue 14123, PR 14421.

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions