Skip to content

v1.1.0 — command restructure + default workspace root

Latest

Choose a tag to compare

@christse christse released this 20 Apr 20:35
· 4 commits to main since this release
ddbf1e2

Command-surface restructure plus the two regressions @backspace caught in his PR #15 review. Minor version bump because command names and default paths change in user-visible ways.

Ships along with the 1.0.2 architectural-alignment changes (ANSI palette consolidation, concurrency-capped remote fetches, 'local' environment) that were merged between 1.0.1 and this release.

New

  • boxel doctor parent command groups maintenance tasks: doctor repair-realm, doctor repair-realms, doctor consolidate-workspaces, doctor force-reindex. Keeps the root command tree focused on day-to-day sync operations.
  • boxel workspace-list (formerly boxel list) lists Boxel workspaces the active profile can access. boxel list stays as a shorthand alias.
  • boxel realms <subcommand> — positional subcommands replace the old flag-based interface. boxel realms add ./path, realms remove ./path, realms init, realms list, realms llm. boxel realms with no args shows the list.
  • Default workspace root at ~/boxel-workspaces/<domain>/<owner>/<realm>/. boxel pull <url> now works without a local-dir argument — it derives a canonical path from the URL and creates the directory. doctor consolidate-workspaces scans ~/boxel-workspaces/ by default.
  • Terminology discipline across docs and help text: realm = the server-side thing a URL points at; workspace = the Matrix-level organizational unit visible in the Boxel UI.
  • (From 1.0.2) 'local' environment — Matrix IDs ending in :localhost now resolve to Environment = 'local' for locally-spawned realm-servers.
  • (From 1.0.2) resetProfileManager() — test helper for clean-slate profile manager state.

Fixed

  • --fix-index was on by default, opposite of what PR #15 advertised. Commander's .option('--no-fix-index') makes the underlying boolean default to true. Running boxel doctor repair-realm <url> silently rewrote index.json / cards-grid.json even on realms with customized index files (caught by @backspace on the Checkly-prerendered realm that lost its custom index). Flipped to .option('--fix-index') — now opt-in. Regression tests exercise commander parsing directly.
  • Pull path extraction broke for published realms without an owner segment. https://realms-staging.stack.cards/boxel-homepage/ (1 segment) wrote to .../boxel-homepage/boxel-homepage (duplicated); https://gabbro.staging.boxel.build/ (0 segments) wrote to .../unknown-owner/workspace (invented placeholders). Layout now adapts to URL depth: 0 segments → <host>/, 1 segment → <host>/<realm>/, 2+ segments → <host>/<owner>/<realm>/. findManifestPaths() walks 2-level layouts so legacy-path detection still works after the shape change.
  • track --push showed "Push failed" with no detail on batch errors. Now surfaces the underlying errors (e.g. HTTP 413: Payload Too Large) so you can tell a transient server problem from a size limit.
  • boxel realms remove <path> used to succeed silently on a path not in the config. Now errors with a clear "realm not found" message.
  • Realm folder naming now uses the full realm server hostname (no domain normalization). Prevents staging/production collisions when two realms share the owner/realm parts.

Changed (breaking)

  • boxel realms --add/--init/--remove/--llm flag form removed. PR #15 kept these as hidden aliases; per @backspace's review ("we might as well make a clean break as this is not officially released") they're gone. Use positional subcommands.
  • boxel doctor force-reindex replaces the top-level touch command semantics when used as a diagnostic; the plain touch command stays for everyday single-file re-indexing.

Internal (1.0.2 ports)

  • ANSI palette consolidation: new src/lib/colors.ts as single source of truth. 7 files migrated from inline const blocks.
  • Concurrent remote fetches capped at 10 via p-limit. The limiter wraps only the HTTP GET (not the recursion) so deep trees can't deadlock.
  • p-limit pinned to ^6.2.0 for Node 18 compatibility (7.x requires Node ≥ 20).

Thanks

  • @backspace for the thorough PR #15 review that caught two real regressions before they shipped.

Full changelog: https://github.com/cardstack/boxel-cli/blob/main/CHANGELOG.md