Skip to content

Releases: marcusrbrown/systematic

v2.32.1

26 Jun 16:18
29c7e3a

Choose a tag to compare

What's new

Bug Fixes

Biome 2.5.0 introduced two new error-level lint rules that would have blocked the pending @biomejs/biome dependency update (PR #538) from passing CI. This release pre-emptively fixes both violations before the dependency bump lands:

  • lint/a11y/noSvgWithoutTitle in docs/public/favicon.svg — Biome now requires SVG elements to carry an accessible title. Added <title id="favicon-title">Systematic</title> and the corresponding role="img" aria-labelledby="favicon-title" attributes so screen readers can identify the favicon.
  • lint/complexity/noImportantStyles in docs/src/styles/custom.css — Three !important declarations on .install-title (for margin, font-size, and color) were used to override Starlight's heading specificity. Replaced with the higher-specificity selector .install-header .install-title, which beats the Starlight h3 rule without !important. Visual appearance is unchanged.

Merging this fix first unblocks the Biome upgrade PR from failing the Lint check.

Also in this release

  • dev: OpenCode updated through v1.17.4 → v1.17.9 (#536, #541, #542, #544, #552, #557)
  • deps: fro-bot/agent updated through v0.64.2 → v0.78.0 (14 Renovate bumps across #535#561)
  • dev: Playwright monorepo updated to v1.61.0 (#547)

Compare

v2.32.0...v2.32.1

v2.32.0

15 Jun 00:11
70f1891

Choose a tag to compare

What's new

Features

Config validation now handles the full lifecycle of bundled skill and agent names — including names that have been removed in past releases. Previously, listing a no-longer-bundled name in disabled_skills or disabled_agents would fail validation and prevent plugin load, effectively bricking setups that had disabled something Systematic later cleaned up.

v2.32.0 introduces a removed-names mechanism with three coordinated layers:

  • Schema acceptance: The JSON Schema generator now includes the removed-names list in the enum for disabled_skills and disabled_agents, so editors and runtime stay in sync. While the list ships empty today, the schema will reflect any future additions without requiring editor configuration updates.
  • Validation acceptance: Removed names are accepted during config validation alongside current bundled names, maintaining the strict rejection of genuinely-unknown names.
  • Load-time cleanup: After validation, removed names are silently dropped from the effective disabled lists and a per-load [systematic] warning identifies each stale entry. Raw config is preserved for merge precedence; the dedup is stateless per load.

A content-integrity gate enforces that removed names never overlap current bundled names, preventing accidental misclassification as a name moves from active to removed.

Also in this release

  • deps: Synced biome.json $schema to 2.4.16 to match the pinned @biomejs/biome CLI version — a mismatch caused the newer CLI to treat it as a config deserialize error and fail local lint.
  • deps: Renovate non-major dependency updates to v4.16.26.
  • deps: Updated fro-bot/agent to v0.64.1.

Compare

v2.31.1...v2.32.0

v2.31.1

14 Jun 21:04
9ab70d6

Choose a tag to compare

What's new

Bug Fixes

The orchestrating-subagents skill has been updated to match the current behavior of OpenCode 1.17.6. A prior version of the skill documented a task_status polling tool that OpenCode has since removed. In OpenCode's current model, background subagents (enabled via OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS) push their results into the parent session automatically on completion — there is no status tool to poll. The skill's background-dispatch guidance, failure/retry instructions, quick-reference section, and common-mistakes list have all been rewritten to describe this push-notification model accurately.

The same PR also adds an optional setup recommendation: enabling OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true. The flag is experimental but stable in recent OpenCode versions, and without it Systematic falls back to foreground dispatch.

Documentation

Plan documents were reconciled with shipped reality after v2.31.0: the agent temperature hardening plan now records its v2.29.0 provenance, the skill frontmatter tune-up plan is marked completed (shipped in v2.31.0), and the promotion-and-growth plan is marked completed with remaining ecosystem-listing work reframed as externally tracked upstream work.

Four test names in the JSONC-precedence suite carried AE1/AE2/AE3 prefixes that leaked internal planning taxonomy into the shipped test file. These prefixes have been stripped, leaving only the behavioral descriptions.

A solutions document was added capturing a durable lesson from the skill frontmatter tune-up work: scripts/content-integrity.ts has no general non-failing warning channel — every check other than allowlist warnings counts toward totalViolations() and fails CI. This makes "advisory warning" checks infeasible without building new plumbing. The doc records the end-to-end wiring checklist, the fence-aware body-scan pattern, and the meta-lesson: ground the mechanism a plan relies on, not just the intent.

Also in this release

  • build(dev): OpenCode updated through v1.16.0, v1.16.2, v1.17.0, v1.17.1, v1.17.2, and v1.17.3.
  • build(dev): semantic-release monorepo updated to v25.0.4.
  • deps: fro-bot/agent updated through v0.56.1, v0.56.2, v0.57.0, v0.58.0, v0.59.0, v0.59.1, v0.60.0, v0.61.0, v0.62.0, v0.63.0, and v0.64.0.
  • deps: Miscellaneous non-major dependency updates (v4.16.24, v4.16.25, v24.13.1, v24.13.2).

Compare

v2.31.0...v2.31.1

v2.31.0

07 Jun 09:19
75622be

Choose a tag to compare

What's new

Features

The ce:compound-refresh skill now declares an argument-hint in its frontmatter, making its $ARGUMENTS interface visible to callers and the OpenCode command surface. This skill accepts a mode:autofix flag and an optional docs/solutions/ scope hint — both are now documented where they can actually be discovered. Beyond the hint itself, this change establishes which frontmatter fields are enforced: a new enforcement column in writing-systematic-skills/references/foundation-conventions.md clarifies that allowed-tools is parsed but not permission-gated, while argument-hint is now subject to content-integrity checking. A new guard fails any skill that references $ARGUMENTS outside fenced code blocks without declaring argument-hint, preventing the gap from recurring. The check correctly strips fenced code blocks first, so skills that merely document $ARGUMENTS in an example are not flagged.

Documentation

A new solutions doc captures the reusable lessons from the npx skills install command rollout (v2.30.0–v2.30.1): how to make a load-side-effect generator testable by exporting the helper and guarding the entrypoint behind import.meta.main; driving the --skill selector from frontmatter name values; two MDX traps (a <name> placeholder in a table cell parses as JSX and breaks the table; copy buttons only attach to fenced code blocks, never inline code in table cells); and verifying rendered docs against built HTML rather than source or a blocking dev server. The doc cross-references the related MDX, codegen, and verification docs rather than duplicating them.

Continuous Integration

The release pipeline no longer fails when the release-notes narration dispatch confirmation times out. Previously, scripts/dispatch-release-notes.sh would exit 1 if it could not confirm the dispatched Fro Bot run within the poll budget — even though the dispatch had already succeeded and the narration had run. This happened on v2.30.1: the release published and the body was narrated correctly, but the job showed red because GitHub surfaced the dispatched run after the poll window closed. A successful gh workflow run call means the dispatch was accepted; failing to observe the run is an observability gap, not a dispatch failure. The confirmation timeout now emits a ::warning:: and exits 0. The poll budget was also bumped from 90s to 180s to reduce the race for future releases.

Also in this release

  • deps: fro-bot/agent updated to v0.55.6 (three security hardening fixes: IPv6 literal egress bypass, DNS resolution timeout, and compose topology guard).

Compare

v2.30.1...v2.31.0

v2.30.1

07 Jun 07:47
bae4aea

Choose a tag to compare

What's new

Bug Fixes

The npx skills install section in the documentation had two rendering problems. A <name> placeholder in a table cell was being parsed as a JSX tag, breaking the "Useful flags" table. Inline-code cells in that table also lacked copy buttons, despite the surrounding copy claiming they did. The fix replaces the broken table with the same install-path command blocks used on the homepage — every command is now a real, copyable code block.

The "Choosing an install path" blockquote was also removed; it rendered as an out-of-place italic quote box. Its guidance is now expressed as clean intro prose under each install path, making it clear what the plugin installs and what the npx skills path installs (and doesn't). The plugin remains the primary, recommended installation path throughout.

Also in this release

  • deps: Updated fro-bot/agent to v0.55.5 (#499).
  • dev: Updated all non-major dependencies to v24.13.0 (#500).

Compare

v2.30.0...v2.30.1

v2.30.0

07 Jun 07:16
16270b3

Choose a tag to compare

What's new

Features

The docs site now surfaces npx skills as a first-class, portable install path alongside the OpenCode npm plugin. Previously, Systematic's installation story pointed exclusively at @opencode/systematic, which is an OpenCode-specific runtime. Skills themselves are harness-agnostic Markdown content that work in any agent environment — OpenCode, Claude Code, Cursor, Copilot, or any other harness. The npx skills add marcusrbrown/systematic command installs that content directly from this repo, no registry required.

The homepage now presents a dual install-path block with chooser cues to help readers pick fast: "OpenCode, full runtime" for the npm plugin (still the recommended path for the complete OpenCode experience), and "Any harness, skills only" for npx skills. The Installation page gains a dedicated secondary section with a scannable flag table. The README Quick Install section reflects both paths. Every non-deprecated skill reference page now carries a copyable npx skills add marcusrbrown/systematic --skill <name> command, auto-injected by the docs generator — deprecated skills are correctly excluded and the generator change is covered by nine new unit tests.

Documentation

A new best-practices solution doc captures the converter-injected default hardening pattern that emerged across v2.27.0 (agent mode) and v2.29.0 (agent temperature). Both cases followed the same shape: derive a runtime-injected default's resolved value mechanically from the real inference function, write it explicitly into frontmatter, change the runtime to fill-if-absent, and add a content-integrity gate that requires the value to be usable — not merely present.

Two lessons are encoded for future reference. First, zero-behavior-change must be proven mechanically by deriving the expected value for every agent and asserting zero mismatches, not assumed. Second, a presence-only gate is a false lock: the runtime treats present-but-invalid values as absent and falls back anyway, so the gate must verify usability. The doc cross-references the two related overlay and gate best-practices docs.

Also in this release

  • deps: update fro-bot/agent to v0.55.4 (#497)

Compare

v2.29.0...v2.30.0

v2.29.0

07 Jun 03:48
9dd0b4c

Choose a tag to compare

What's new

Features

Agent temperature is now explicit in every bundled agent's frontmatter and respected by the runtime, removing a hidden inference heuristic that had been silently overwriting any hand-authored value.

All 51 bundled agents now declare an explicit temperature:. The 37 that previously relied on runtime inference have their resolved value written into frontmatter, derived mechanically from the same function the runtime used, so no agent's effective temperature changes in practice. The config hook now reads that explicit value instead of always overwriting it, preserving the precedence chain: user overlay > explicit frontmatter > inferred fallback.

A content-integrity gate enforces the invariant going forward: every bundled agent must declare an explicit, finite-number temperature:, and the check fails closed on malformed frontmatter. This brings temperature to parity with mode, model, and color — each agent's value is now auditable in source rather than computed invisibly at load time.

Also in this release

  • deps: Updated fro-bot/agent to v0.55.1, v0.55.2, and v0.55.3 (#492, #493, #494).

Compare

v2.28.0...v2.29.0

v2.28.0

05 Jun 23:05
870127c

Choose a tag to compare

What's new

Features

The new orchestrating-subagents skill gives agents a portable, OpenCode-native primitive for coordinating both serial and parallel subagent work. It centres on task() dispatch as the default mechanism — foreground dispatch that works in any context — while documenting background subagents and task_status as experimental, gated surfaces for environments that support them.

Beyond the dispatch primitive itself, the skill covers the full coordination lifecycle: how to divide work across subagents without file overlap, how to track git ownership when multiple agents write concurrently, how to synthesise results from independent runs, and how to handle retry when a subagent stalls or fails.

The skill ships alongside a v3 compatibility cleanup plan that will remove converter-era compatibility surfaces and deprecated orchestration guidance now that the replacement is in place. Bundled skill surfaces, the OCX registry, and cloned OpenCode source metadata (pinned to v1.15.10) were all updated in the same change so the skill is discoverable immediately. (#491)

Documentation

Two long-running plans — the upstream ce:brainstorm + ce:plan merge and the agent-mode explicit hardening work — are now marked completed with release provenance. The merge shipped in v2.26.0 and the hardening work shipped in v2.27.0; this change closes the loop in the plan tracker. No behaviour changes. (#490)

Also in this release

  • deps: Bump all non-major dependencies to v0.55.0 (#489)

Compare

v2.27.0...v2.28.0

v2.27.0

05 Jun 18:46
2b44a48

Choose a tag to compare

What's new

Two hardening-and-learning changes: one closes a latent converter dependency before it becomes a breaking change in v3.0.0; the other turns a failed detection attempt into a permanent correctness rule.

Features

mode: subagent is now declared explicitly on all 51 bundled agents. Previously, 36 agents relied on the OpenCode runtime converter to fill in mode: subagent as a default at load time — an invisible dependency that would silently break when the converter is removed in v3.0.0. Without an explicit mode, those agents would fall back to OpenCode's native default (all) and appear as primary agents in the agent picker rather than staying hidden as background workers.

This is a zero-runtime-behavior-change hardening. The converter already resolves these agents to subagent, so making the field explicit changes nothing today while severing the converter dependency for the future. To lock in the invariant, a new checkAgentMode gate in scripts/content-integrity.ts fails CI if any bundled agent is missing an explicit mode: subagent, sets a non-subagent value, or has non-object frontmatter. A converter-equivalence test mechanically proves the change is behavior-preserving by resolving agent config both with and without an explicit mode and asserting the outputs are identical.

The PR also records a tracked audit of every other field the converter injects — notably temperature, which is computed per-agent via a name/description heuristic and represents an equally high-risk dependency for v3.0.0. Resolving the temperature dependency is out of scope for this patch; the audit exists so it is not forgotten.

Documentation

A new solution doc under docs/solutions/ captures the undecidability lesson from the content-integrity verification work: some YAML frontmatter problems cannot be detected by parse-diff analysis alone.

The concrete case: a truncating comment (problem: cache miss # under load, where the author intended the full string including # under load) and a legitimate inline comment (date: 2026-01-01 # created) are byte-identical to the YAML parser — both parse to the text before the #. No amount of parse-diff analysis can distinguish "lost content" from "intentional comment." Rather than ship a heuristic that would silently misclassify edge cases, the ban rule approach was taken: unquoted inline comments in solution-doc frontmatter are banned outright. This collapsed the detector to a simple lexical rule and removed approximately 50 lines of parse-diff guessing that could never have been correct.

The doc records the undecidability, the reasoning for the ban, and the general principle: when a detection problem is provably undecidable at the data level, a clear bright-line rule beats a heuristic that quietly gets edge cases wrong.

Compare

v2.26.0...v2.27.0

v2.26.0

05 Jun 15:40
3b9d0e6

Choose a tag to compare

What's new

Features

The ce:brainstorm and ce:plan skills have been updated with the strongest improvements from the upstream Compound Engineering plugin, adapted to Systematic's conventions and kept markdown-only throughout.

ce:brainstorm gains a Phase 2.5 Synthesis Summary — a scope checkpoint that fires before the requirements doc is written. This lets scope be confirmed or corrected before research is spent, and pairs cleanly with the existing Phase 3.5 Document Review: Phase 2.5 is the scope gate (before writing), Phase 3.5 is the quality review (after writing), with no overlap between them. The skill also picks up markdown rendering guidance (markdown-rendering.md) and a section-rendering layer (brainstorm-sections.md) that govern how output is structured without changing the content contracts.

ce:plan gains three focused additions. Anti-Expansion (step 3.7) routes tangential "while we're here" work to a Deferred section instead of letting it bloat active plan units — keeping plans scoped to what was actually decided. Scope synthesis adds two mutually exclusive paths at plan stage: a solo-mode path when there is no origin document and a brainstorm-sourced path when one exists. The same markdown rendering and section-rendering layer from ce:brainstorm is applied here as well, giving both skills a consistent presentation layer.

The Phase 3.5 Document Review, requirements-capture and Core Plan Template content contracts, and visual-communication guidance are preserved unchanged. A pre-existing dangling visual-communication.md reference in ce:brainstorm was also resolved, and slash-command residue in skill prose was cleaned up so references use the portable ce:work form. The registry was regenerated after the merge. (#486, 3b9d0e6)

Compare

v2.25.0...v2.26.0