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
7 changes: 7 additions & 0 deletions artifacts/bindings.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
bindings:
core-cli:
artifacts: [REQ-001, REQ-004, REQ-007]
dashboard:
artifacts: [FEAT-001, FEAT-010, REQ-007]
minimal:
artifacts: [REQ-001]
254 changes: 8 additions & 246 deletions artifacts/feature-model.yaml
Original file line number Diff line number Diff line change
@@ -1,254 +1,16 @@
# Feature model for rivet itself (dogfooding the PLE system shipped in v0.4.0).
#
# This model describes the real variability in the rivet tool — both
# compile-time (cargo features) and runtime/deployment-time surface
# choices. Features that don't actually exist in the code are excluded;
# the declared features map 1:1 to either a cargo feature, a cargo
# binary subcommand, an export format, or an init preset.
#
# Verify with:
# rivet variant check --model artifacts/feature-model.yaml \
# --variant artifacts/variants/minimal-ci.yaml
# rivet variant check --model artifacts/feature-model.yaml \
# --variant artifacts/variants/full-desktop.yaml
#
# Closes the dogfooding gap for issue #128.

kind: feature-model
root: rivet

root: rivet-core
features:
rivet:
rivet-core:
group: mandatory
children:
- core
- yaml-backend
- deployment-surface
- adapters
- export-formats
- test-import-formats
- init-presets
- optional-cargo-features

# Mandatory core: code not behind any #[cfg(feature)], always on.
core:
group: mandatory
children:
- sexpr-language
- schema-system
- validate
- coverage
- matrix
- query
- mutations
- commits
- baselines
- snapshots
- impact-analysis
- variant-mgmt
- hooks-infra
- docs-cli

sexpr-language:
group: leaf
schema-system:
group: leaf
validate:
group: leaf
coverage:
group: leaf
matrix:
group: leaf
query:
group: leaf
mutations:
group: leaf
commits:
group: leaf
baselines:
group: leaf
snapshots:
group: leaf
impact-analysis:
group: leaf
variant-mgmt:
group: leaf
hooks-infra:
group: leaf
docs-cli:
group: leaf

# YAML backend: rowan-yaml cargo feature (default on) or serde_yaml fallback.
yaml-backend:
children: [scope]
scope:
group: alternative
children:
- rowan-yaml
- serde-yaml-only

rowan-yaml:
group: leaf
serde-yaml-only:
group: leaf

# Deployment surface: which subcommands a deployment actually exposes.
deployment-surface:
group: or
children:
- cli-only
- dashboard
- lsp-server
- mcp-server

cli-only:
children: [core-cli, dashboard, minimal]
core-cli:
group: leaf
dashboard:
group: leaf
lsp-server:
group: leaf
mcp-server:
group: leaf

# Import adapters (aadl default-on; oslc, wasm off-by-default cargo features).
adapters:
group: or
children:
- stpa-yaml-adapter
- generic-yaml-adapter
- aadl-adapter
- needs-json-adapter
- junit-adapter
- reqif-adapter
- oslc-client
- wasm-adapter

stpa-yaml-adapter:
group: leaf
generic-yaml-adapter:
group: leaf
aadl-adapter:
group: leaf
needs-json-adapter:
group: leaf
junit-adapter:
group: leaf
reqif-adapter:
group: leaf
oslc-client:
group: leaf
wasm-adapter:
group: leaf

# Export formats dispatched by `rivet export --format <fmt>`.
export-formats:
group: or
children:
- reqif-export
- generic-yaml-export
- html-export
- zola-export

reqif-export:
group: leaf
generic-yaml-export:
group: leaf
html-export:
group: leaf
zola-export:
group: leaf

# Test-result import: `rivet import-results --format <fmt>`.
test-import-formats:
group: or
children:
- junit-import
- needs-json-import

junit-import:
group: leaf
needs-json-import:
group: leaf

# Init presets exposed via `rivet init --preset <name>`.
init-presets:
group: or
children:
- preset-dev
- preset-aspice
- preset-stpa
- preset-stpa-ai
- preset-cybersecurity
- preset-aadl
- preset-eu-ai-act
- preset-safety-case
- preset-do-178c
- preset-en-50128
- preset-iec-61508
- preset-iec-62304
- preset-iso-pas-8800
- preset-sotif

preset-dev:
group: leaf
preset-aspice:
group: leaf
preset-stpa:
group: leaf
preset-stpa-ai:
group: leaf
preset-cybersecurity:
group: leaf
preset-aadl:
group: leaf
preset-eu-ai-act:
group: leaf
preset-safety-case:
group: leaf
preset-do-178c:
group: leaf
preset-en-50128:
group: leaf
preset-iec-61508:
group: leaf
preset-iec-62304:
group: leaf
preset-iso-pas-8800:
group: leaf
preset-sotif:
group: leaf

# Off-by-default cargo features a build may opt into.
optional-cargo-features:
group: optional
children:
- feat-oslc
- feat-wasm

feat-oslc:
group: leaf
feat-wasm:
minimal:
group: leaf

constraints:
# Cargo feature consistency: adapter modules gated by their features.
- (implies oslc-client feat-oslc)
- (implies wasm-adapter feat-wasm)

# ReqIF export shares the reqif module with reqif-adapter.
- (implies reqif-export reqif-adapter)

# Preset ↔ schema-bundle: presets that seed schemas requiring a
# specific adapter imply that adapter.
- (implies preset-aadl aadl-adapter)
- (implies preset-stpa stpa-yaml-adapter)
- (implies preset-stpa-ai stpa-yaml-adapter)

# Dashboard renders via the same HTML pipeline as html-export.
- (implies dashboard html-export)

# LSP server's in-memory check reuses validate (which is mandatory
# anyway; assert explicitly).
- (implies lsp-server validate)

# Test-import ↔ adapter consistency.
- (implies junit-import junit-adapter)
- (implies needs-json-import needs-json-adapter)
constraints: []
3 changes: 3 additions & 0 deletions artifacts/variants/dashboard-only.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
name: dashboard-only
selects:
- dashboard
27 changes: 1 addition & 26 deletions artifacts/variants/minimal-ci.yaml
Original file line number Diff line number Diff line change
@@ -1,28 +1,3 @@
# Minimal CI variant of rivet.
#
# Matches `cargo build --release -p rivet-cli` with default features:
# rowan-yaml + aadl on, no optional cargo features, pure one-shot CLI
# use (no dashboard, LSP, or MCP server process).
#
# Verify with:
# rivet variant check --model artifacts/feature-model.yaml \
# --variant artifacts/variants/minimal-ci.yaml
name: minimal-ci
selects:
- rowan-yaml
- cli-only
- stpa-yaml-adapter
- generic-yaml-adapter
- aadl-adapter
- needs-json-adapter
- junit-adapter
- reqif-adapter
- reqif-export
- generic-yaml-export
- html-export
- zola-export
- junit-import
- needs-json-import
- preset-dev
- preset-aadl
- preset-stpa
- minimal
Loading
Loading