feat(setup): add @fro.bot/systematic as bundled versioned tool#409
Merged
marcusrbrown merged 1 commit intomainfrom Mar 30, 2026
Merged
feat(setup): add @fro.bot/systematic as bundled versioned tool#409marcusrbrown merged 1 commit intomainfrom
marcusrbrown merged 1 commit intomainfrom
Conversation
Register the Systematic plugin (v2.1.0) in OpenCode's config during
setup so the agent has access to structured engineering workflows in CI.
- Pin DEFAULT_SYSTEMATIC_VERSION in constants.ts (single source of truth)
- Add systematic-version action input with constant fallback
- Wire version through ActionInputs → SetupInputs → OPENCODE_CONFIG_CONTENT
- Append @fro.bot/systematic@{version} to plugins array (deduped)
- Add Renovate customManager + packageRule for automated npm updates
- Update tests and README
fro-bot
approved these changes
Mar 30, 2026
Owner
fro-bot
left a comment
There was a problem hiding this comment.
Review Summary
This PR correctly implements the @fro.bot/systematic plugin as a bundled versioned tool following the established versioned-tool pattern. The implementation is clean, well-tested, and follows all project conventions.
✅ Implementation Checklist
Version Tracking (versioned-tool pattern)
DEFAULT_SYSTEMATIC_VERSION = '2.1.0'added tosrc/shared/constants.tsas single source of truth- Renovate customManager correctly added with npm datasource for
@fro.bot/systematic - PackageRule includes
@fro.bot/systematicwithsemanticCommitType: 'build'
Action Input
systematic-versioninput inaction.yamlcorrectly omits hardcoded default (letsinputs.tshandle fallback)- Input parsing in
inputs.tscorrectly falls back toDEFAULT_SYSTEMATIC_VERSION systematicVersionadded toActionInputsandSetupInputstypes
Data Flow
- Clean propagation: bootstrap → server → setup.ts
EnsureOpenCodeOptionsinterface updated appropriately
Plugin Registration Logic
const systematicPlugin = `@fro.bot/systematic@${inputs.systematicVersion}`
const hasSystematic = rawPlugins.some((p) => typeof p === 'string' && p.startsWith('@fro.bot/systematic'))
if (!hasSystematic) {
ciConfig.plugins = [...rawPlugins, systematicPlugin]
}This correctly:
- Appends Systematic plugin only when not already present
- Respects user-provided version pins (user wins on dedup)
- Uses version from
systematicVersioninput with fallback to constant
Tests
inputs.test.ts: Tests for default and customsystematic-versioninputsetup.test.ts: 3 comprehensive tests for plugin registration:- Baseline config includes Systematic plugin
- User config merges correctly (user values win)
- User-provided Systematic plugin preserved (no duplicate)
Documentation
- README inputs table correctly updated with default version reference
Verification
- ✅ 1090 tests pass
- ✅ TypeScript check clean
- ✅ 0 lint errors (34 pre-existing warnings unrelated to this PR)
- ✅
dist/in sync (no uncommitted changes)
Key Strengths
- Pattern adherence - Follows the versioned-tool pattern exactly (constant → input fallback → Renovate)
- User override support - Users can pin their own version via
systematic-versioninput - Correct deduplication -
startsWith('@fro.bot/systematic')correctly matches any version - No breaking changes - Plugin is appended to config, existing plugin arrays preserved
No issues found. Approving.
Run Summary
| Field | Value |
|---|---|
| Event | pull_request |
| Repository | fro-bot/agent |
| Run ID | 23723698033 |
| Cache | hit |
| Session | ses_2c3b27f46ffepvMtbqHho3oH3W |
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.
Summary
@fro.bot/systematic@2.1.0) in OpenCode's config during setup so the agent has access to structured engineering workflows (brainstorming, planning, code review, etc.) in CIOPENCODE_CONFIG_CONTENT.pluginsarray with dedup logic (user version pins win)Changes
Version tracking (versioned-tool pattern)
src/shared/constants.ts—DEFAULT_SYSTEMATIC_VERSION = '2.1.0'.github/renovate.json5— npm customManager + packageRule for@fro.bot/systematicAction input
action.yaml—systematic-versioninput (no hardcoded default)src/harness/config/inputs.ts— Parse withDEFAULT_SYSTEMATIC_VERSIONfallbacksrc/shared/types.ts—systematicVersionadded toActionInputsData flow wiring
src/services/setup/types.ts—systematicVersionadded toSetupInputssrc/features/agent/server.ts— Added toEnsureOpenCodeOptions, passed throughsrc/harness/phases/bootstrap.ts— Passesinputs.systematicVersiondownstreamPlugin registration
src/services/setup/setup.ts— Appends@fro.bot/systematic@{version}toOPENCODE_CONFIG_CONTENTplugins array after user config merge (deduped by@fro.bot/systematicprefix so user overrides are respected)Tests & docs
src/services/setup/setup.test.ts— Updated fixture + 3 ciConfig assertionssrc/features/agent/opencode.test.ts— Updated 2 call sitesREADME.md— Addedsystematic-versionto inputs tableVerification
dist/rebuilt and in sync