Skip to main content
← Back to list
01Issue
FeatureIn ProgressSwamp CLI
Assigneesstack72

Relationships

#542 feat: giga-swamp phase 5 — CLI output + namespace management commands

Opened by stack72 · 6/3/2026

Problem

Giga-swamp works end-to-end (Phases 1-4, 6, extensions all shipped). Two repos sharing an S3/GCS bucket can push, pull, see foreign metadata, and fetch foreign content. But there's no CLI surface for it — users must hand-edit .swamp.yaml to configure a namespace, there's no NAMESPACE column in output, and there's no way to list or manage namespaces.

Proposed Solution

1. NAMESPACE column in CLI output

Add NAMESPACE column to all list/search/query command renderers when the repo is in giga-swamp mode (namespace configured). Solo mode hides the column entirely — not empty, just absent.

Affected renderers:

  • src/presentation/output/data_output.ts
  • src/presentation/output/model_output.ts
  • src/presentation/output/workflow_output.ts
  • Any other renderers that display data artifacts

Both log mode (human-readable table) and JSON mode (structured output) need the namespace field. Log mode gets the column, JSON mode gets the namespace property on every record.

In single-string contexts (error messages, log lines), use the namespace:model compound format when in giga-swamp mode (Design Decision 2).

2. Namespace management commands

swamp datastore namespace set — validates slug format, checks for conflicts (is the slug already claimed in this datastore via registerNamespace), registers the namespace manifest, updates .swamp.yaml with namespace: . New data goes to namespaced paths. Does NOT migrate existing data (that is Phase 7).

swamp datastore namespace unset — removes namespace from .swamp.yaml. Only allowed when the datastore contains exactly one namespace.

swamp datastore namespaces — lists all namespaces in the datastore. Can read from the catalog (SELECT DISTINCT namespace) for repos with a local catalog, or from namespace manifests in the datastore.

swamp datastore namespaces describe — detailed namespace info: model count, artifact count, last sync timestamp.

3. registerNamespace/listNamespaces on DatastoreProvider

Design Decision 6 specified these as methods on DatastoreProvider. Each backend stores namespace metadata however makes sense — filesystem uses a .namespace.json file, S3/GCS use a key at {namespace}/.namespace.json.

registerNamespace(manifest) — writes the namespace manifest, fails if slug is already claimed. listNamespaces() — returns all registered namespace manifests.

These are optional methods. Solo-mode backends that dont implement them continue to work.

Boundary constraints

  • Do NOT migrate existing data — that is Phase 7
  • Do NOT add cross-namespace workflow step support — that is a documented v1 limitation
  • Solo mode output must be identical to today — no NAMESPACE column, no behavior change

Ship Gate

  • deno check, deno lint, deno fmt, deno run test
  • Solo mode: all output identical to before (no NAMESPACE column)
  • Namespaced repo: data list shows NAMESPACE column with correct values
  • namespace set: creates manifest, updates .swamp.yaml, subsequent commands use namespace
  • namespace unset: removes namespace, returns to solo mode
  • datastore namespaces: lists all registered namespaces
  • Compile binary and smoke test against real repos

Design Context

Full design doc: resources/giga-swamp.md This is Phase 5 of 7. All dependencies shipped (Phases 1-4, 6, S3/GCS extensions).

02Bog Flow
OPENTRIAGEDIN PROGRESSSHIPPED+ 1 MOREASSIGNED+ 5 MOREREVIEW+ 2 MOREPR_LINKED

In Progress

6/3/2026, 2:57:12 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
stack72 assigned stack726/3/2026, 2:17:22 PM

Sign in to post a ripple.