Skip to content

[finding] Three residual bare 'global' spellings in packages/runtime/src/action-execution.ts after #14422 converged the plugin's — the runtime side kept the literal the constant exists to replace #14678

Description

@os-musk

Unblocked 2026-09-02 (R+105). PR #14667 has landed — actionObjectKey is now 0 in packages/objectql/src/plugin.ts — so the collision risk that justified pm:blocked is gone and this is dispatchable. (The earlier Blocked-by: #14422 is discharged and removed.)

⚠️ Triage correction, same date: in R+104 this body was amended to claim a fourth site at :1539. Re-measured at origin/main 75adf11, that site no longer exists — PR #14667 removed it. The population is back to the three the original filing named. The amendment is withdrawn and the table below is the current reading.

Found by the isolated contract reviewer on PR #14667 (card #14422) and re-measured by the domain:engine seat before filing. ⛔ Not fixed there: #14422's ruled surface converged the ladder, and the runtime fence it built was re-export plus delegating alias, so these sites were never in its path.

The sites — re-measured at origin/main 75adf11

packages/runtime/src/action-execution.ts:641:   if (objectName && objectName !== 'global') {
packages/runtime/src/action-execution.ts:1016:  const key = `${where.objectName ?? 'global'}/${where.actionName ?? action?.name ?? 'action'}`;
packages/runtime/src/action-execution.ts:1490:  *     legacy `object` field, else the `'global'` wildcard).

git grep -n "'global'" origin/main -- packages/runtime/src/action-execution.ts returns exactly these three. The same file references GLOBAL_ACTION_OBJECT_KEY 3 times, so the constant is in scope and :641 could use it today.

Why it matters, and why it is a finding rather than a bug

GLOBAL_ACTION_OBJECT_KEY is declared 'global' at packages/objectql/src/action-governance.ts:61, so every one of these is correct today. Nothing is broken and nothing is user-visible. This is exactly the shape #14422 was filed to remove: a spelling that is equal in value, invisible to every test in the repo, and that would part from the constant in silence the day the constant's value changes.

⭐ The graded distinction, worth keeping: :641 is a comparison in live code and is the real one. :1016 builds a warn-once log key and is cosmetic — a drift there mis-keys a log line, nothing more. :1490 is prose, and it carries a second defect independent of the literal: it calls 'global' "the wildcard", which contradicts action-governance.ts:54-60 — "engine.executeAction is an exact-string Map lookup with no wildcard semantics".

Suggested shape, not prescriptive

Import the constant (already imported) and use it at :641; decide :1016 on its own merits, since a log key arguably wants a literal it can never fail to render; correct the "wildcard" wording at :1490.

⛔ Re-run the grep before editing rather than working from this list — the line numbers have now moved twice.

Dedup

Distinguished from #14669, which is three comments naming the deleted ObjectQLPlugin.actionObjectKey symbol in packages/cli and examples/app-showcase — different files, different defect.

Unassigned, recording only.

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