Skip to content
rlsbl.commands.monorepo.commands
On this page

Monorepo workspace management commands: init, add, remove, list, status, outdated, release-order, check-names, and lint.

#rlsbl.commands.monorepo.commands

#rlsbl.commands.monorepo.commands

Monorepo workspace management commands: init, add, remove, list, status, outdated, and check-names.

#_create_releasable

python
def _create_releasable(name, tag_format_flag, target_entries, path)

The Releasable an add naming an undeclared group creates.

Its tag_format is written out explicitly, either as the operator stated it (--tag-format) or as the member's primary target implies -- the same derivation monorepo absorb uses for its auto-singleton (:func:rlsbl.tag_glob.derive_releasable_tag_format), so a member's targets imply one format with one answer whichever command creates the releasable.

The root member's releasable is never created here: a workspace this command can load already declares a root member, so an add naming . is refused as a path the workspace already claims. Creating it is monorepo init --root-releasable's job, and that is where the format is required to be stated.

#_listed_releasable

python
def _listed_releasable(proj)

How a member's releasable membership renders in a listing.

#_latest_release_for_row

python
def _latest_release_for_row(changes_dir, tag_glob)

The release a status row reports, from that row's own RELEASE RECORD.

Returns (fact, release commit): the project's latest archived release as a displayable fact (annotated when this checkout does not contain it), and the highest archived release this checkout DOES contain, which is what bounds the coverage range. The two differ exactly when the checkout predates a release, and the table shows both rather than collapsing them.

This used to be git tag -l <glob> --sort=-v:refname, which reported whatever the tag namespace happened to hold.

#_coverage_column

python
def _coverage_column(release_commit, changes_dir, scope)

Return the Coverage-column string for one status row.

Real JSONL coverage: the commits since release commit -- the release record entry for the highest archived release this checkout contains -- scoped to the row's members via scope (an :class:~rlsbl.ownership.OwnershipScope, which carries the whole member list), minus the exempt ones, cross-referenced against the row's unreleased.jsonl. Rendered covered/tracked with a (N exempted) suffix, matching rlsbl status.

This column used to count CHANGELOG.md bullet lines above the last version heading. CHANGELOG.md is regenerated from the JSONL at release time, so that count described the previous release's prose, never whether the current unreleased commits had entries -- and it read as "documented" when no entry existed at all.

"no changelog" when the changes directory is missing.

#_suppressed_member_version

python
def _suppressed_member_version(root, proj, releasable_name, releasable_config_dir)

The releasable's version when proj is a publish-suppressed member, else None.

"Publish-suppressed" is the member's EFFECTIVE publish_mode -- the releasable-level config merged with the member's own -- which is the same resolution version-consistency performs before it decides to read the version file instead of the manifest. Both questions therefore get the same answer from the same place.

None means the ordinary manifest reading applies: a published member, a member outside every releasable, a releasable with no version file, or a config that cannot answer what its publish mode is (which is the version-consistency check's finding to report, not this table's).

#_cmd_status_explicit

python
def _cmd_status_explicit(root, projects)

Render per-releasable status rows for a workspace.

One row per releasable (version, tag, coverage, member count + names), plus one row for each standalone project not belonging to any releasable. Tag globs come from the shared resolver so releasable members resolve their releasable's tag_format instead of a per-member glob.

More tools from this site

  • claudestream Drive Claude Code from Python: run it as a subprocess and read its output as typed events, with async and sync sessions, sandbox policies, and tools you define in Python
  • claudewheel A TUI Claude Code Launcher that lets you have more than one profile, manage sessions lifecycle, pick the exact CC version, model to use (even older unlisted ones), pick which GitHub account to use, etc.
  • dirstat Fast, single-binary directory statistics CLI: every file under a tree grouped by format, with counts, sizes, and lines of code, as a colored terminal table or as JSON
  • fastware A batteries-included ASGI framework: msgspec JSON, a managed Granian server, dependency injection, SSE, WebSockets, auth, and a test client
  • go-toml-edit Zero-dep TOML editing library for Go with comment preservation
  • howmuchleft The fastest Claude Code statusline: context window, 5-hour, and weekly limit usage as three customizable gradient bars, rendering in about 6 ms
  • orxtra
  • pgdesign
  • predraw Declarative rendering pipeline: describe a scene in JSON and get SVG, PNG and WebP out, with light and dark style tokens, reusable components and text converted to path outlines
  • reposummary Turn a git repository's history into a Markdown journal: pick a time window or revision range and get a readable digest of what changed, optionally narrated by an LLM
  • safegit git wrapper CLI that gives each commit its own temporary index and retries ref updates on conflict, so concurrent agents share one repository
  • saferm Command-line replacement for rm that archives every deletion with a mandatory reason and the context it ran in, so deleted files can be listed, inspected and restored
  • selfdoc Static Site Generator that builds a project's documentation site directly from its source code, so the docs can never drift from the code they describe, with SEO/AEO, first-class blog, search, and cross-project linking built in
  • strictcli
  • stricttest An always-on test-isolation floor: a pytest plugin and a Go env-hygiene module that make a test suite structurally unable to reach real credentials, the real HOME, the network, or the development repository.
  • wesktop A Python framework that turns an ASGI web app into a desktop application, serving it from a local Granian server and displaying it in a native OS window via pywebview
Search