rototo
DocsReference
Reference

Workspace Layout Reference

A rototo workspace is a filesystem boundary. Before rototo can lint, inspect, or resolve anything, it needs to know which files belong to that boundary and what each file means.

The boundary starts at rototo-workspace.toml. The directories beside that manifest are discovered by name, and ids come from filenames. That keeps the workspace reviewable: moving, renaming, adding, or deleting configuration is visible as ordinary repository work.

Root

Every workspace root must contain:

rototo-workspace.toml

The manifest must declare schema_version = 1. See Workspace Manifest for the manifest contract.

When a CLI command omits the workspace source, rototo walks upward from the current directory until it finds rototo-workspace.toml.

Discovered Paths

Rototo discovers these workspace paths:

PathFile typeId sourceMeaning
qualifiers/*.tomlTOMLFile stemNamed runtime conditions.
variables/*.tomlTOMLFile stemNamed values resolved by applications.
catalogs/*.tomlTOMLFile stemSchemas for structured catalog entries.
catalogs/<catalog-id>-entries/*.tomlTOMLFile stemEntries selectable by catalog:<catalog-id> variables.
schemas/*.jsonJSONFile stemJSON Schemas used for context and catalog validation.
lint/*.luaLuaFile stemCustom lint handlers.

Only files with the listed extensions are discovered. Other files may live in the repository for humans or local tooling, but rototo does not treat them as workspace documents.

Directories are optional. A workspace can start with only variables/ and add qualifiers/, catalogs/, schemas/, or lint/ later.

Ids

The file stem is the id:

variables/account-limits.toml       -> variable://account-limits
qualifiers/paid-account.toml        -> qualifier://paid-account
catalogs/banner.toml               -> catalog://banner
catalogs/banner-entries/hidden.toml -> catalog entry key hidden

Ids are references in other files, CLI selectors, SDK calls, diagnostics, and resolution traces. Rename files deliberately, because a rename changes the public id.

Catalog Entries

Catalog entries are discovered only under a directory named for an existing catalog:

catalogs/
  banner.toml
  banner-entries/
    hidden.toml
    incident.toml

Here banner.toml declares the catalog and its schema. The two entry files define entry keys hidden and incident.

If the catalog file does not exist, rototo does not treat the matching *-entries/ directory as an independent catalog family.

Special Schema Path

schemas/context.schema.json has a reserved meaning. When present, it is the schema for the runtime context an application passes during resolution.

Other JSON Schemas under schemas/ validate catalog entries when referenced from a catalog file.

Document Kinds

JSON output reports discovered documents with a kind value:

manifest
qualifier
variable
catalog
catalog_entry
schema
custom_lint

These kinds appear in lint output, inspect output, and editor integrations. They are part of the machine-readable contract.

What Layout Does Not Do

Workspace layout does not grant ownership. Repository permissions, review rules, and CI decide who can change files. Rototo reads the files after a workspace source has already been chosen.

Layout also does not define deployment. Applications load a workspace source, which may be a local path, git source, or HTTPS archive.