Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@ an unscoped `feat:` releases nothing.
The three schemas were seeded from the platform's Pydantic-generated catalog
schemas. The naming and the generated titles have been cleaned and `lint.ts`
now rejects both, but the seeding still shows in the prose: some `description`
text uses platform vocabulary (`snapshot compute`, Compute Profile slugs) that
a reader outside `musher-dev/platform` cannot resolve. The `TODO` sections in
each `spec.md` are the larger remaining gap — they are what keeps v1
pre-stable.
text uses platform vocabulary (`snapshot compute`) that a reader outside
`musher-dev/platform` cannot resolve. Compute Profile slugs used to be on that
list; blueprint §4.3 now carries the grammar and names where the vocabulary is
published, per docs/adr/0003. The `TODO` sections remaining in `blueprint` and
`listing` `spec.md` are the larger gap — they are what keeps v1 pre-stable.
6 changes: 4 additions & 2 deletions conformance/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,13 +163,15 @@ later-phase diagnostic before the earlier phases pass.
## Coverage status

`parser`, `structural` and `semantic` are covered. Every diagnostic code the
three `spec.md` files declare is exercised by at least one case, with two
exceptions, both `capability`:
three `spec.md` files declare is exercised by at least one case, with four
exceptions, all `capability`:

| Code | Why it has no case |
|---|---|
| `ERR_UNKNOWN_COMPONENT` | `capability` — resolving a published reference needs the catalog, and no phase a client runs may reach the network |
| `ERR_VERSION_NOT_MONOTONIC` | `capability` — comparing a version against the lineage it extends needs the catalog, and a fixture is one document with no previous release to be greater than |
| `ERR_COMPONENT_NOT_PUBLISHED` | `capability` — only the registry holds publication state, and a fixture is a tree of files none of which has one |
| `ERR_UNKNOWN_COMPUTE_PROFILE` | `capability` — the slug grammar is fixtured, but which profiles are offered changes when the platform gains hardware to back a tier, not when this repository releases |

That table is not prose anyone has to remember to update.
`task check:conformance` derives it: every `ERR_*` row in a family's own
Expand Down
35 changes: 35 additions & 0 deletions conformance/blueprint/v1/cases.json
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,41 @@
"phase": "structural",
"path": "structural/014-missing-component-graph"
},
{
"id": "structural-015-legacy-compute-size-slug",
"phase": "structural",
"path": "structural/015-legacy-compute-size-slug"
},
{
"id": "structural-016-unknown-compute-profile-family",
"phase": "structural",
"path": "structural/016-unknown-compute-profile-family"
},
{
"id": "structural-017-versioned-compute-profile-slug",
"phase": "structural",
"path": "structural/017-versioned-compute-profile-slug"
},
{
"id": "structural-018-reserved-compute-profile-slug",
"phase": "structural",
"path": "structural/018-reserved-compute-profile-slug"
},
{
"id": "structural-019-advanced-compute-constraints",
"phase": "structural",
"path": "structural/019-advanced-compute-constraints"
},
{
"id": "structural-020-constraint-term-not-a-token",
"phase": "structural",
"path": "structural/020-constraint-term-not-a-token"
},
{
"id": "structural-021-unknown-cpu-dedication",
"phase": "structural",
"path": "structural/021-unknown-cpu-dedication"
},
{
"id": "semantic-001-connection-names-unknown-role",
"phase": "semantic",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# A raw-resource name. It says how much silicon, which is the promise §4.3 says
# a profile slug exists not to make — the same nominal vCPU count means a
# burstable shared core on one host and a dedicated modern one on another.
specVersion: v1
kind: BLUEPRINT
metadata:
slug: postgres
version: 1
spec:
components:
db:
component: ./components/postgres.yaml
size: 1vcpu-1gb
connections: {}
parameters: {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
{
"code": "ERR_INVALID_VALUE",
"path": "/spec/components/db/size"
}
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"id": "structural-015-legacy-compute-size-slug",
"phase": "structural",
"expected": "fail",
"clause": "specifications/blueprint/v1/spec.md#node-compute",
"summary": "A raw-resource size slug is not a Compute Profile and is rejected."
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Three segments, correct shape, invented family. The grammar is closed on all
# three segments, so this fails offline rather than travelling to the catalog to
# be told the same thing.
specVersion: v1
kind: BLUEPRINT
metadata:
slug: postgres
version: 1
spec:
components:
db:
component: ./components/postgres.yaml
size: tiny.standard.small
connections: {}
parameters: {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
{
"code": "ERR_INVALID_VALUE",
"path": "/spec/components/db/size"
}
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"id": "structural-016-unknown-compute-profile-family",
"phase": "structural",
"expected": "fail",
"clause": "specifications/blueprint/v1/spec.md#node-compute",
"summary": "A slug whose family segment is outside the closed set is rejected."
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# The profile is versioned where it is published, and a node does not name that
# version: it names the tier and gets the current version of it. The grammar has
# three segments, so a fourth is rejected without needing a rule of its own.
specVersion: v1
kind: BLUEPRINT
metadata:
slug: postgres
version: 1
spec:
components:
db:
component: ./components/postgres.yaml
size: general.standard.small.v1
connections: {}
parameters: {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
{
"code": "ERR_INVALID_VALUE",
"path": "/spec/components/db/size"
}
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"id": "structural-017-versioned-compute-profile-slug",
"phase": "structural",
"expected": "fail",
"clause": "specifications/blueprint/v1/spec.md#node-compute",
"summary": "A node names a bare profile slug, not the versioned form."
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# This is the case that pins the split. The slug is grammatical, so the
# structural phase accepts it; whether the profile can actually be deployed is
# a capability question, and an offline validator has not been given the means
# to answer it. A schema that enumerated the offering would reject this
# document today and accept it next quarter, having changed nothing.
specVersion: v1
kind: BLUEPRINT
metadata:
slug: inference
version: 1
spec:
components:
api:
component: ./components/api.yaml
size: gpu.premium.xlarge
connections: {}
parameters: {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"id": "structural-018-reserved-compute-profile-slug",
"phase": "structural",
"expected": "pass",
"clause": "specifications/blueprint/v1/spec.md#node-compute",
"summary": "A grammatical slug validates whether or not the profile is currently offered."
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Every one of the nine pins, each a lowercase token or a positive integer.
# The pins narrow which host may run the node; none of them changes the compute
# `size` names.
specVersion: v1
kind: BLUEPRINT
metadata:
slug: inference
version: 1
spec:
components:
api:
component: ./components/api.yaml
size: gpu.performance.large
advanced:
cpuArchitecture: [x86_64, arm64]
cpuDedication: dedicated
acceleratorMinVramGb: 24
acceleratorRuntime: [cuda]
acceleratorInterconnect: nvlink
acceleratorSkuClass: h100-sxm
storageClass: local-nvme
storageMinIops: 20000
networkClass: standard
connections: {}
parameters: {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"id": "structural-019-advanced-compute-constraints",
"phase": "structural",
"expected": "pass",
"clause": "specifications/blueprint/v1/spec.md#advanced-constraints",
"summary": "A node carrying every advanced compute pin validates."
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# This contract does not say which storage classes exist, but it does say what
# one looks like. A display string is not a term, and two documents spelling the
# same class differently could not be compared.
specVersion: v1
kind: BLUEPRINT
metadata:
slug: postgres
version: 1
spec:
components:
db:
component: ./components/postgres.yaml
size: storage.standard.large
advanced:
storageClass: Local NVMe
connections: {}
parameters: {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
{
"code": "ERR_INVALID_VALUE",
"path": "/spec/components/db/advanced/storageClass"
}
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"id": "structural-020-constraint-term-not-a-token",
"phase": "structural",
"expected": "fail",
"clause": "specifications/blueprint/v1/spec.md#advanced-constraints",
"summary": "An advanced pin whose value is not a lowercase token is rejected."
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# The one pin whose vocabulary this contract closes. A vCPU is shared or it is
# not; a third term would be a different concept wearing this one's name.
specVersion: v1
kind: BLUEPRINT
metadata:
slug: postgres
version: 1
spec:
components:
db:
component: ./components/postgres.yaml
size: general.standard.small
advanced:
cpuDedication: exclusive
connections: {}
parameters: {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
{
"code": "ERR_INVALID_VALUE",
"path": "/spec/components/db/advanced/cpuDedication"
}
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"id": "structural-021-unknown-cpu-dedication",
"phase": "structural",
"expected": "fail",
"clause": "specifications/blueprint/v1/spec.md#advanced-constraints",
"summary": "cpuDedication is closed to shared and dedicated."
}
Loading