feat: @rrlab/* ecosystem + vland template overhaul#220
Merged
Conversation
…haul
Inaugural release of the `@rrlab/*` stack: a microkernel `rr` CLI plus
four official plugins (biome, ts, tsdown, oxc) and three shared config
presets (ts-config, biome-config, tsdown-config). Replaces the private
`@vlandoss/run-run@0.x`. Architectural rationale in `decisions/001-005`.
- `@rrlab/cli` — thin command router. Plugin-backed commands consult a
`PluginRegistry` populated from `run-run.config.{ts,mts}`; missing
provider → actionable `rr plugins add <alias>` suggestion. `rr check`
dispatches in-process via commander; `rr jsc` is synthesised from
`lint + format` when no plugin claims it directly.
- Plugin contract is kernel-internal (4 official plugins are the only
consumers we commit to). Each plugin owns its tool's version pins in
`plugin-*/src/tool-versions.ts`; the kernel stays tool-agnostic.
- `rr plugins {add,remove}` runs the plugin's `install`/`uninstall`
planner and applies the returned `FileOp[]` (`create` / `edit-json` /
`edit-text` / `delete`). `edit-json` is a JSON-Pointer DSL via
`comment-json` so user comments + key order survive.
- `packages/{clibuddy,loggy}` → `shared/{clibuddy,loggy}`.
- `packages/vland` + the three `vland init` scaffolds →
`vland/{cli,templates}`.
- `vland init` template source moves with the scaffolds: when no
`VLAND_TEMPLATES_DIR` override is set, `giget` now pulls from
`github:variableland/dx/vland/templates/<name>`.
The 3 official templates (library, backend, monorepo) now ship
`@rrlab/cli` as the single CLI entry point and an empty
`run-run.config.mts`. Per-tool config files (`biome.json`,
`tsconfig.json`, `tsdown.config.ts`) and their devDeps are no longer
bundled — the user opts in via `rr plugins add <alias>` post-init.
Tool-wrapping npm scripts removed — `rr` is meant to be typed directly
(the templates' `mise.toml` puts `./node_modules/.bin` on `PATH`). Git
hooks, CI workflows, and `prepublishOnly` invoke `pnpm rr <cmd>`
directly. Philosophy codified in `run-run/CLAUDE.md`.
- New `--visibility <private|public>` flag (interactive prompt for the
library template). Library scope derives from visibility: private →
`@variableland/<name>` + `private: true`; public → `@vlandoss/<name>`.
- Monorepo apps use bare `<projectName>-<app>` naming; packages stay
scoped `@<projectName>/<pkg>`. Backend roots `private: true`.
- Removed `--pm` flag and package-manager auto-detection — vland uses
pnpm exclusively.
- Library `release` script removed; CI invokes `pnpm changeset publish`
directly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
🦋 Changeset detectedLatest commit: 62447c5 The changes in this PR will be included in the next version bump. This PR includes changesets to release 11 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Contributor
Preview releaseLatest commit: Some packages have been released:
Note Use the PR number as tag to install any package. For instance: |
Plugins declare @rrlab/cli as peerDependency; Changesets default promotes peer dependents to major. Enable onlyUpdatePeerDependentsWhenOutOfRange so the bump only escalates to major when the new range falls outside the declared peer range. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
workspace:* in peerDependencies resolves to the current exact version, so any non-patch bump on @rrlab/cli triggers Changesets' peer cascade and escalates the plugins to major (even with onlyUpdatePeerDependentsWhenOutOfRange enabled). Bumping the kernel as patch keeps plugins at their declared minor for this inaugural release; the structural tension between peer-dep semver coupling and minor kernel bumps is a design choice to revisit later. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
workspace:* resolves to the current exact version inside Changesets' peer-cascade check, so the flag never prevents the major escalation in this setup. Removing to avoid implying it does anything. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Merged
rqbazan
added a commit
that referenced
this pull request
May 21, 2026
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
rqbazan
added a commit
that referenced
this pull request
Jun 13, 2026
## What Restores the `lefthook/` folder at the repo root with `turborepo.yml`, and rewires the root `lefthook.yml` to `extends` it instead of inlining the job definitions. ## Why The shared lefthook turborepo config (originally `packages/config/src/lefthook/turborepo.yml`, added in #161, fixed in #180) was dismantled along with the `packages/config` package during the microkernel refactor (#220). Its content was copy-pasted directly into the root `lefthook.yml`. This restores it as a standalone file and makes the root config a thin pointer, so the hook definitions have a single source of truth again. ## Details - `lefthook/turborepo.yml` — restored byte-for-byte from the pre-refactor version (commit `14c8f7a`). - `lefthook.yml` — reduced to: ```yaml extends: - lefthook/turborepo.yml ``` - All jobs are *named* (`jscheck`, `tscheck`, `test`), so lefthook merges by name with no duplication. ## Verification - `lefthook dump` confirms the merged effective config is **identical** to the previous inline definition (same `pre-commit` and `pre-push` hooks). - `pnpm rr check` passes (biome + oxlint type-aware across all 8 packages). - The `pre-commit` hook ran cleanly on this very commit. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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
Microkernel migration in 3 phases — full record in
.changeset/*.mdanddecisions/001-005.@rrlab/*inaugural — kernel + 4 plugins + 3 config presets (replaces@vlandoss/run-run).@vlandoss/*relocation —packages/→shared/{clibuddy,loggy}+vland/{cli,templates}.@rrlab/cli+ emptyrun-run.config.mts; per-tool configs scaffolded on demand viarr plugins add. New--visibilityflag (@variableland/@vlandossscope). pnpm-only.Test plan
pnpm build && pnpm test && pnpm rr checkgreen locally🤖 Generated with Claude Code