Summary
The default project version (the un-versioned bucket that workflow runs fall into when no --version is specified) is stored as an empty string "" in the database. This is referred to colloquially as "v0" in documentation and conversation, but the actual stored value causes widespread friction:
- Empty strings are opaque in APIs, CLIs, and MCP tools — every consumer must special-case
"" to understand it means "the default version"
- Declarative access is broken: users cannot say
--version v0 to target the default; they must omit the flag entirely
- CLI display is inconsistent:
attestation status shows "none", workflow run list shows a blank column
Proposed Change
Rename the stored value from "" to "v0" everywhere:
- Add
DefaultVersionName = "v0" constant in the biz layer
- Update Ent schema: change
Default("") → Default("v0"), remove the empty-string validator exception
- Update application code that creates/looks up the default version (
workflow.go, workflowrun.go) to use the constant
- Add backward-compat translation: server translates incoming
"" → "v0" so old CLI clients keep working
- Database migration:
- Rename any existing user-created
"v0" versions → "v0.0" (conflict avoidance)
- Rename all
"" versions → "v0"
ALTER TABLE project_versions ALTER COLUMN version SET DEFAULT 'v0'
- Remove "none" fallback from CLI display — "v0" renders naturally as a real version string
Behavior After Change
| Scenario |
Before |
After |
Run without --version |
Associates with "" version |
Associates with "v0" version |
Run with --version v0 |
Creates a NEW "v0" version |
Finds existing "v0" version |
Old client sends "" |
Creates/finds "" version |
Server translates to "v0" |
CLI attestation status |
Shows "none" |
Shows "v0" |
CLI workflow run list |
Shows blank |
Shows "v0" |
Summary
The default project version (the un-versioned bucket that workflow runs fall into when no
--versionis specified) is stored as an empty string""in the database. This is referred to colloquially as "v0" in documentation and conversation, but the actual stored value causes widespread friction:""to understand it means "the default version"--version v0to target the default; they must omit the flag entirelyattestation statusshows "none",workflow run listshows a blank columnProposed Change
Rename the stored value from
""to"v0"everywhere:DefaultVersionName = "v0"constant in the biz layerDefault("")→Default("v0"), remove the empty-string validator exceptionworkflow.go,workflowrun.go) to use the constant""→"v0"so old CLI clients keep working"v0"versions →"v0.0"(conflict avoidance)""versions →"v0"ALTER TABLE project_versions ALTER COLUMN version SET DEFAULT 'v0'Behavior After Change
--version""version"v0"version--version v0"v0"version"v0"version""""version"v0"attestation statusworkflow run list