Skip to content

feat: @rrlab/* ecosystem + vland template overhaul#220

Merged
rqbazan merged 6 commits into
mainfrom
feat/microkernel-rrlab
May 21, 2026
Merged

feat: @rrlab/* ecosystem + vland template overhaul#220
rqbazan merged 6 commits into
mainfrom
feat/microkernel-rrlab

Conversation

@rqbazan

@rqbazan rqbazan commented May 20, 2026

Copy link
Copy Markdown
Member

Summary

Microkernel migration in 3 phases — full record in .changeset/*.md and decisions/001-005.

  • @rrlab/* inaugural — kernel + 4 plugins + 3 config presets (replaces @vlandoss/run-run).
  • @vlandoss/* relocationpackages/shared/{clibuddy,loggy} + vland/{cli,templates}.
  • vland templates rr-first — ship @rrlab/cli + empty run-run.config.mts; per-tool configs scaffolded on demand via rr plugins add. New --visibility flag (@variableland/@vlandoss scope). pnpm-only.

Test plan

  • pnpm build && pnpm test && pnpm rr check green locally
  • CI green

🤖 Generated with Claude Code

…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-bot

changeset-bot Bot commented May 20, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 62447c5

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 11 packages
Name Type
@vlandoss/vland Minor
@rrlab/cli Patch
@rrlab/plugin-biome Minor
@rrlab/plugin-oxc Minor
@rrlab/plugin-ts Minor
@rrlab/plugin-tsdown Minor
@rrlab/biome-config Patch
@rrlab/ts-config Patch
@rrlab/tsdown-config Patch
@vlandoss/clibuddy Patch
@vlandoss/loggy Patch

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

@vland-bot

vland-bot Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

Preview release

Latest commit: 62447c5

Some packages have been released:

Package Version Install
@rrlab/biome-config 0.0.1-git-62447c5.0 @rrlab/biome-config@0.0.1-git-62447c5.0
@rrlab/cli 0.0.1-git-62447c5.0 @rrlab/cli@0.0.1-git-62447c5.0
@rrlab/plugin-biome 0.0.1-git-62447c5.0 @rrlab/plugin-biome@0.0.1-git-62447c5.0
@rrlab/plugin-oxc 0.0.1-git-62447c5.0 @rrlab/plugin-oxc@0.0.1-git-62447c5.0
@rrlab/plugin-ts 0.0.1-git-62447c5.0 @rrlab/plugin-ts@0.0.1-git-62447c5.0
@rrlab/plugin-tsdown 0.0.1-git-62447c5.0 @rrlab/plugin-tsdown@0.0.1-git-62447c5.0
@rrlab/ts-config 0.0.1-git-62447c5.0 @rrlab/ts-config@0.0.1-git-62447c5.0
@rrlab/tsdown-config 0.0.1-git-62447c5.0 @rrlab/tsdown-config@0.0.1-git-62447c5.0
@vlandoss/clibuddy 0.6.1-git-62447c5.0 @vlandoss/clibuddy@0.6.1-git-62447c5.0
@vlandoss/loggy 0.2.1-git-62447c5.0 @vlandoss/loggy@0.2.1-git-62447c5.0
@vlandoss/vland 0.2.1-git-62447c5.0 @vlandoss/vland@0.2.1-git-62447c5.0

Note

Use the PR number as tag to install any package. For instance:

pnpm add @rrlab/biome-config@pr-220

rqbazan and others added 5 commits May 19, 2026 20:33
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>
@rqbazan
rqbazan merged commit 911965a into main May 21, 2026
3 checks passed
@rqbazan
rqbazan deleted the feat/microkernel-rrlab branch May 21, 2026 00:52
@vland-bot vland-bot Bot mentioned this pull request May 21, 2026
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>
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