Skip to content

chore: mark all 12 non-core plugins as experimental - #145

Merged
frostebite merged 1 commit into
mainfrom
chore/mark-plugins-experimental
Aug 24, 2026
Merged

chore: mark all 12 non-core plugins as experimental#145
frostebite merged 1 commit into
mainfrom
chore/mark-plugins-experimental

Conversation

@frostebite

Copy link
Copy Markdown
Member

Marks every plugin except orchestrator and unity as experimental, in three layers.

1. "private": true — the actual safety measure

npm refuses to publish a private package. None of these names exist on the registry yet (all 404), so without this a stray npm publish -w, or a future workflow less careful than orchestrator-release.yml (which is scoped to working-directory: plugins/orchestrator), would put non-functional packages on the public @game-ci scope — where npm i @game-ci/gamemaker installs something that only throws.

Worth knowing: root @game-ci/cli is not private and depends on steam-deploy + runtime-test-framework via workspace:*. Marking those private means a future npm publish of the CLI would now fail rather than silently publish experimental deps. That is currently a no-op — @game-ci/cli isn't on npm either, and ships as compiled binaries via release-cli.yml — but it's a deliberate trade, not an oversight.

2. A runtime warning, placed by how the plugin loads

This distinction is the part that matters:

  • The ten drafts warn from onLoad(). They're only ever loaded via an explicit --plugin @game-ci/<name>, so reaching that point is deliberate.
  • steam-deploy and runtime-test-framework warn from createCommand instead. They're in cli.ts's default load list, so an onLoad warning would fire on every game-ci invocation — which trains people to ignore warnings and makes the marking worthless. Warning at command use fires exactly when the experimental feature is used, and never for an unrelated command.

3. Banners and descriptions

An EXPERIMENTAL banner atop each README and an EXPERIMENTAL prefix on each package description. The wording separates the two cases honestly: the drafts say NOT IMPLEMENTED and that any command they claim will throw; the two implemented ones say they work but may still change.

steam-deploy had no README at all — the only default-loaded deploy path was the single piece with no written warning anywhere — so one was added, noting that a Steam upload cannot be undone.

Verification

Driven directly against the plugin objects rather than inferred:

Scenario Warnings Expected
onLoad() on the two default-loaded plugins 0 0
test-runtime + deploy steam invoked 2 2
unrelated commands (build, deploy itch) 0 0
a draft's onLoad() 1 1

bun install --frozen-lockfile passes; suite unchanged at the 244 pre-existing failures (orchestrator's vitest vi.mock under bun). Lockfile and plugins/unity/dist churn reverted rather than committed.

🤖 Generated with Claude Code

Three layers, so this is hard to miss and hard to misuse:

1. `"private": true` in every plugin's package.json. This is the actual
   safety measure: npm refuses to publish a private package. None of
   these names exist on the registry yet, so without it a stray
   `npm publish -w` (or a future workflow that is less careful than
   orchestrator-release.yml, which is scoped to plugins/orchestrator)
   would put non-functional packages on the public @game-ci scope, where
   `npm i @game-ci/gamemaker` would install something that only throws.

2. A runtime warning, placed differently depending on how the plugin
   loads:
     - The ten drafts warn from onLoad(). They are only ever loaded via
       an explicit `--plugin @game-ci/<name>`, so reaching that point is
       deliberate and a warning there is precise.
     - steam-deploy and runtime-test-framework are in cli.ts's default
       load list, so an onLoad warning would fire on every single game-ci
       invocation and train people to ignore warnings. They warn from
       createCommand instead - exactly when the experimental command is
       used, and never for an unrelated one.

3. An EXPERIMENTAL banner at the top of each README and an EXPERIMENTAL
   prefix on each package description. The wording distinguishes the two
   cases honestly: the drafts say NOT IMPLEMENTED and that any command
   they claim will throw; steam-deploy and runtime-test-framework say
   they are implemented but may still change.

steam-deploy had no README at all - the only default-loaded deploy path
was the one piece with no written warning anywhere - so one was added,
noting that a Steam upload cannot be undone.

Verified by driving the plugin objects directly: loading the two
default-loaded plugins produces 0 warnings, using `test-runtime` and
`deploy steam` produces exactly 2, unrelated commands produce 0, and a
draft's onLoad produces 1. `bun install --frozen-lockfile` still passes
and the suite is unchanged at the 244 pre-existing failures.
@coderabbitai

coderabbitai Bot commented Aug 24, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 31 minutes.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 27d555ac-ad6d-4a98-802f-5d248b635135

📥 Commits

Reviewing files that changed from the base of the PR and between 5c457e1 and 2f09a29.

📒 Files selected for processing (36)
  • plugins/code-signing/README.md
  • plugins/code-signing/package.json
  • plugins/code-signing/src/index.ts
  • plugins/gamemaker/README.md
  • plugins/gamemaker/package.json
  • plugins/gamemaker/src/index.ts
  • plugins/github-release-deploy/README.md
  • plugins/github-release-deploy/package.json
  • plugins/github-release-deploy/src/index.ts
  • plugins/itch-deploy/README.md
  • plugins/itch-deploy/package.json
  • plugins/itch-deploy/src/index.ts
  • plugins/live-show/README.md
  • plugins/live-show/package.json
  • plugins/live-show/src/index.ts
  • plugins/pseudo-localization/README.md
  • plugins/pseudo-localization/package.json
  • plugins/pseudo-localization/src/index.ts
  • plugins/renpy/README.md
  • plugins/renpy/package.json
  • plugins/renpy/src/index.ts
  • plugins/rpg-maker/README.md
  • plugins/rpg-maker/package.json
  • plugins/rpg-maker/src/index.ts
  • plugins/runtime-test-framework/README.md
  • plugins/runtime-test-framework/package.json
  • plugins/runtime-test-framework/src/index.ts
  • plugins/save-data-compat/README.md
  • plugins/save-data-compat/package.json
  • plugins/save-data-compat/src/index.ts
  • plugins/steam-deploy/README.md
  • plugins/steam-deploy/package.json
  • plugins/steam-deploy/src/index.ts
  • plugins/steam-workshop/README.md
  • plugins/steam-workshop/package.json
  • plugins/steam-workshop/src/index.ts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@frostebite
frostebite merged commit 93bae4f into main Aug 24, 2026
15 checks passed
@frostebite
frostebite deleted the chore/mark-plugins-experimental branch August 24, 2026 23:33
frostebite added a commit to game-ci/documentation that referenced this pull request Aug 24, 2026
…ns page

Consolidates #586 (docs: plugin catalog for the 14 new game-ci/cli
plugins) into this PR instead of merging it separately - #586 targeted
docs/03-github-cli/04-configuration-and-plugins.mdx, which this PR
renumbers to 05-configuration-and-plugins.mdx (it inserts
04-orchestrate-advanced/), so the two would otherwise collide on the same
page under different filenames.

Content is updated to match what actually shipped, not #586's original
snapshot:

  - live-show, dev-tunnel, crash-symbol-upload, screen-capture,
    dedicated-server-provisioning and anti-cheat are removed from the
    plugin list - the first was dropped entirely (game-ci/cli#146:
    duplicated runtime-test-framework's player-launching, and the rest
    of its scope - broadcast, an AI-driven playthrough agent - doesn't
    belong in a CI tool), the other five were re-implemented as real
    Orchestrator capabilities rather than plugin skeletons
    (game-ci/cli#144), and are documented in a new "Not plugins:
    build-lifecycle capabilities" section instead.

  - steam-deploy and runtime-test-framework are marked "Implemented,
    loaded by default" rather than folded in with the drafts - they are
    real, working commands, just still subject to change.

  - Added a warning block reflecting game-ci/cli#145: every plugin here
    is experimental, none are published to npm, and each one warns at
    runtime (drafts on load, the two implemented ones when their command
    is actually used).

#586 will be closed as superseded once this merges.
frostebite added a commit that referenced this pull request Aug 24, 2026
…only symbols (#147)

Only crash-symbol collection belongs in the Orchestrator. Debug symbols
have to be captured at build time or they are gone for good, which
genuinely is orchestrator's output-collection domain - it stays as the
`symbols` output type and symbol-collector.ts, from #144.

The other four capabilities from that same PR are moved back to being
plugins, matching the other 10 experimental drafts (#145):

  visual-baseline.ts   -> plugins/screen-capture      (`capture` command)
  service-directory.ts -> plugins/dev-tunnel           (`tunnel` command)
  dedicated-server-provisioner.ts
                        -> plugins/dedicated-server-provisioning
                           (`provision-server` command)
  anti-cheat-middleware.ts is dropped; plugins/anti-cheat is restored to
  its original options-only shape (its actual command, if there ever is
  one, has to come from EasyAntiCheat/BattlEye SDK integration, which is
  NDA-gated and was never real to begin with - the Middleware-based
  wiring only made sense while this lived inside orchestrator).

The ported logic itself is unchanged (same generators, same tests) - only
its home moves. Each of the three command-based plugins gets the same
onLoad warning and `throws "not implemented yet"` command dispatch as the
other drafts; anti-cheat keeps its existing onLoad warning, reworded to
match the standard "[game-ci] WARNING: ... EXPERIMENTAL ..." phrasing
used everywhere else. All four are marked `"private": true` like the
rest, and their READMEs get the standard EXPERIMENTAL banner plus a
"What's real" section pointing at the tested logic underneath.

output-type-registry.ts and its test drop back to 9 built-in types (was
10 with visual-baseline); orchestrator's index.ts drops the four exports.

Fixed while moving: screen-capture's tsconfig resolves a stricter
BinaryLike type for crypto.Hash#update than orchestrator's does, even
with identical @types/node - digestDirectory now passes a Uint8Array view
instead of the raw Buffer, which satisfies both.

Verified: `bun install --frozen-lockfile` passes; each new plugin's suite
passes under both vitest and bun (34 tests, unchanged from before the
move); onLoad/createCommand behavior driven directly (4 onLoad warnings,
3 commands throw on use); orchestrator's output-service suite (69 tests)
still passes with the count fixed to 9 built-ins.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant