P04 — README and namespace.md refresh (REQ-095, REQ-096). README.md (REQ-095): - Status line updated (v0.9 complete, v0.10 in progress). - Install --version example updated to v0.9.1 (current). - Added --check dry-run example. - Update-in-place example updated to v0.8.15 -> v0.9.1. - Subcommand table expanded to all 22 commands with Since column and deprecation markers (daemon, cert, status marked deprecated). - Development section complete (verify-reqs, security-scan, test-race, changelog, release). - New Documentation section linking all 7 docs/*.md. - New Examples section linking examples/full-stack/. docs/namespace.md (REQ-096): - Replaced v0.8 flat path table with v0.9 multi-namespace layout (cluster/, _defaults/, per-ns db/jobs/alloc/ns.md, orca_cache.db). - Full path reference table from internal/paths/paths.go. - Namespace root resolution (ORCA_HOME/--system/~/.orca). - orca ns subcommand cross-link to docs/cli.md. - Namespace inheritance (_defaults implicit root, D-159/D-185/D-187). - v0.8 flat layout flagged deprecated with callout box. All README links verified to resolve. make verify-reqs: 98 consistent. ---ci--- project: orca phase: 4 milestone: v0.10 status: execute ---/ci---
6.8 KiB
Namespace and Paths
Orca stores all on-disk state under a single namespace root
directory. The v0.9 re-architecture introduced a multi-namespace
layout (R-002) where each namespace is a self-contained directory tree
with its own database, jobs, allocs, env, and secrets. A cluster/
directory holds cluster-wide artifacts shared across namespaces.
v0.9 layout (canonical): This document describes the v0.9 multi-namespace layout. The v0.8 flat layout (
orca.db,ca.crt,server.crtat the root) is deprecated and will be removed in v0.11. See v0.8 flat layout below.
Namespace root resolution
The namespace root is resolved in this order:
- If
--systemflag is passed → root is/root/.orca(errors ifORCA_HOMEis set to a conflicting value). - Else if
ORCA_HOMEis set → root is$ORCA_HOME. - Else → root is
~/.orca($HOME/.orca).
ORCA_HOME (REQ-041)
Set the ORCA_HOME environment variable to change the namespace root
for all orca components:
export ORCA_HOME=/var/lib/orca
orca init # creates /var/lib/orca/
orca ns create prod
--system (REQ-042)
The --system persistent flag selects the system-level namespace root
/root/.orca:
sudo orca --system init # creates /root/.orca/
sudo orca --system ns list
If ORCA_HOME is already set to a different value, --system returns
an error (to avoid silent namespace mismatches).
v0.9 multi-namespace layout (R-002)
$ORCA_HOME/
├── cluster/ # cluster-wide (NOT a workload namespace)
│ ├── ca.crt, ca.key # step-ca root (R-006, D-101)
│ ├── master.key # AES-256-GCM root (R-011, mode 0600)
│ ├── config.md # Markdown frontmatter config (R-014)
│ ├── known_hosts # SSH known_hosts (D-035)
│ ├── orca_ssh_key # orca SSH private key (D-037)
│ ├── orca_ssh_key.pub # orca SSH public key
│ ├── peers/<host>/ # per-peer directory
│ ├── txns/ # cluster transaction log (R-016)
│ └── state/ # cluster state
├── _defaults/ # implicit root namespace (always exists)
│ ├── ns.md # namespace frontmatter (kind: Namespace)
│ ├── .env # per-namespace env
│ ├── .env.secrets # encrypted secrets
│ ├── db/orca.db # per-namespace SQLite database
│ ├── jobs/ # submitted jobspecs
│ └── alloc/ # allocation state
├── <explicit-namespace>/ # operator-created (e.g., prod, staging)
│ ├── ns.md
│ ├── .env, .env.secrets
│ ├── db/orca.db
│ ├── jobs/, alloc/
│ └── syncthing/ # Syncthing config (if replicated volumes)
└── orca_cache.db # CLI-side cache (R-008)
Key points
_defaults/is the implicit root namespace (D-159). It always exists. Every namespace inherits from_defaultsand cannot opt out (D-185, D-187).cluster/is NOT a workload namespace — it holds cluster-wide artifacts (CA, master key, SSH keys, known_hosts, peers, txns).- Per-namespace DBs: each namespace has its own
db/orca.db(R-002). No namespace column in SQLite. - Namespace inheritance: child namespaces inherit env and
constraints from parents (via
ns.mdfrontmatterparents:field)._defaultsis always appended last in the inheritance chain. orca nssubcommands:list,create,delete,inspect,validate— see docs/cli.md.
Path reference (internal/paths/)
| Function | Path | Contents |
|---|---|---|
Root() |
$ORCA_HOME |
Namespace root |
ClusterDir() |
Root()/cluster |
Cluster-wide artifacts |
NamespaceDir(ns) |
Root()/ns |
Per-namespace directory |
NSDb(ns) |
Root()/ns/db/orca.db |
Per-namespace SQLite DB |
NSEnv(ns) |
Root()/ns/.env |
Per-namespace env |
NSSecrets(ns) |
Root()/ns/.env.secrets |
Encrypted secrets |
NSJobs(ns) |
Root()/ns/jobs |
Jobs dir |
NSAlloc(ns) |
Root()/ns/alloc |
Alloc dir |
NSMd(ns) |
Root()/ns/ns.md |
Namespace frontmatter |
DefaultNamespace() |
_defaults |
Implicit root (D-159) |
CACertPath() |
ClusterDir()/ca.crt |
step-ca root (D-101) |
MasterKeyPath() |
ClusterDir()/master.key |
AES-256-GCM root key |
KnownHostsPath() |
ClusterDir()/known_hosts |
SSH known_hosts |
SSHKeyPath() |
ClusterDir()/orca_ssh_key |
orca SSH private key |
ConfigPath() |
ClusterDir()/config.md |
Markdown config (R-014) |
CacheDB() |
Root()/orca_cache.db |
CLI-side cache (R-008) |
PeersDir() |
ClusterDir()/peers |
Peers directory |
TxnDir() |
ClusterDir()/txns |
Transaction log (R-016) |
Creating and managing namespaces
# List all namespaces
orca ns list
# Create a namespace (inherits from _defaults)
orca ns create prod
# Create a namespace with an explicit parent
orca ns create staging --parent prod
# Inspect the effective inheritance chain + merged env
orca ns inspect prod
# Validate a namespace's inheritance chain
orca ns validate prod
# Delete an empty namespace (refuses if jobs/ or alloc/ non-empty)
orca ns delete staging
See docs/cli.md for the full orca ns reference.
ORCA_DB override
For finer-grained control, ORCA_DB overrides only the database path
(not the cert/namespace paths). This is primarily a testing affordance.
export ORCA_DB=/tmp/test.db
orca init # uses /tmp/test.db for the DB, ~/.orca/ for everything else
Deprecated: v0.8 flat layout
Deprecated in v0.9: The v0.8 flat layout (
orca.db,ca.crt,ca.key,server.crt,server.keyat the namespace root) is superseded by the v0.9 multi-namespace layout (R-002). The v0.8 layout is supported during the dual-write window viainternal/certpaths(a thin shim) and will be removed in v0.11.
The v0.8 flat layout stored all state at the namespace root:
| Path | Contents |
|---|---|
~/.orca/orca.db |
SQLite database |
~/.orca/ca.crt |
CA certificate |
~/.orca/ca.key |
CA private key |
~/.orca/server.crt |
Server certificate |
~/.orca/server.key |
Server private key |
The v0.9 re-architecture moved these to cluster/ (CA, SSH keys) and
per-namespace db/ (SQLite) to support multi-tenancy (R-002). The
orca doctor --legacy-paths command (v0.11-P14c) will detect v0.8
residue and recommend migration.
See also
- Install Guide — 1-liner install with
install.sh. - Docker Guide — running orca in a container.
- CLI Reference —
orca nssubcommands. - Jobspec Reference — markdown frontmatter schema.