chore: mark all 12 non-core plugins as experimental - #145
Merged
Conversation
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.
|
Warning Review limit reachedNext included review available in 31 minutes. View limit detailsLimit 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. Review configuration: ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (36)
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. Comment |
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.
This was referenced Aug 24, 2026
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Marks every plugin except
orchestratorandunityas experimental, in three layers.1.
"private": true— the actual safety measurenpm 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 thanorchestrator-release.yml(which is scoped toworking-directory: plugins/orchestrator), would put non-functional packages on the public@game-ciscope — wherenpm i @game-ci/gamemakerinstalls something that only throws.Worth knowing: root
@game-ci/cliis not private and depends onsteam-deploy+runtime-test-frameworkviaworkspace:*. Marking those private means a futurenpm publishof the CLI would now fail rather than silently publish experimental deps. That is currently a no-op —@game-ci/cliisn't on npm either, and ships as compiled binaries viarelease-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:
onLoad(). They're only ever loaded via an explicit--plugin @game-ci/<name>, so reaching that point is deliberate.steam-deployandruntime-test-frameworkwarn fromcreateCommandinstead. They're incli.ts's default load list, so anonLoadwarning would fire on everygame-ciinvocation — 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
EXPERIMENTALbanner atop each README and anEXPERIMENTALprefix 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-deployhad 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:
onLoad()on the two default-loaded pluginstest-runtime+deploy steaminvokedbuild,deploy itch)onLoad()bun install --frozen-lockfilepasses; suite unchanged at the 244 pre-existing failures (orchestrator's vitestvi.mockunder bun). Lockfile andplugins/unity/distchurn reverted rather than committed.🤖 Generated with Claude Code