Every field below is part of the contract the host and noses check. If a field is not here, it is not part of the Vial program.
Manifest v2
Field
Type
Required
Meaning
schema
"osmograph.domain-pack/2"
yes
The v2 contract. `/1` remains installable as Ungated; new listings require v2.
id
string
yes
`publisher.slug`, lowercase, permanent.
name
string
yes
Human name.
version
semver
yes
Bump on every byte change that ships.
minHost
semver?
no
Oldest host that renders this manifest without silent degradation.
author
string
yes
Author handle or organisation.
license
string
yes
SPDX identifier or a named licence.
risk
low | medium | high | critical
yes
The risk class of the decision the Vial supports.
domain
string
yes
The domain, for search and grouping.
tagline
string
yes
One honest line.
summary
string
yes
The decision, context, and evidence in a paragraph.
scope
string
yes
The one repeated decision this Vial supports.
limits
string[]
yes
The operating envelope and refusal conditions.
anomaly
object
yes
The programmable profile. See below.
evidence
object
yes for listing
Held-out report, metrics, and fixtures.
citations
string[]
yes
Real references for the protocol or mechanism.
ui
{ runtime, entry, height }
no
Workspace UI descriptor; `runtime` must be `sandbox/1`.
homeUi
same
no
Compact Home UI descriptor.
home
object
no
Declarative Home card: headline, detail, metrics, actions, limits, sources.
widgets
array
yes
Declarative fallback surface. See the widget table.
docs
array
yes
At least two field-note sections.
Anomaly profile
Field
Range
Default
Meaning
baseline.protocol
first-n | session-mean
first-n
R0 selection for the UI response.
baseline.warmupS
0.5–86400
6
Clean baseline seconds before the detector trusts a baseline.
baseline.r0WindowS
0.5–3600
10
Seconds of early data used as R0.
transforms.conditioning
["median3"]
[]
Three-sample median filter.
transforms.response
delta-over-r0 | relative | delta
delta-over-r0
Response units for per-channel limits.
detection.enabled
boolean
true
Compile the profile; false keeps it disarmed.
detection.sensitivity
0.1–10
1.0
Engine operating point.
detection.minChannels
1–32
1
Minimum corroborating channels.
detection.levelBudget
0–12
0
Absolute level threshold in sigma; 0 disables.
detection.levelRefS
0–86400
0
Rolling level reference seconds; 0 uses the fixed baseline.
detection.alertThreshold
0–1
0.5
Confidence floor for the Vial watch.
detection.perChannelLimits
record
{}
Channel id → response limit, above 0.
detection.hysteresis
0–0.95
0
Clear band as a fraction of the peak.
detection.escalation.warningS
0–86400
0.2
Persistence before warning.
detection.escalation.criticalS
warningS–86400
0.5
Persistence before critical.
detection.escalation.emergencyS
criticalS–86400
1.0
Persistence before emergency.
detection.escalation.resetNormalS
0–86400
2.0
Continuous normal seconds before clearing.
detection.farTargetPerMonth
0–1e6 | null
null
The design target; measured numbers live in the evidence block.
admissibility.requireBaseline
ready | any
ready
Refuse to arm before the baseline is ready.
admissibility.minCoverage
0–1
0.8
Fraction of declared channels that must be live and non-dead.
Evidence
Field
Type
Meaning
grade
A | B | C | D
Evidence strength. A strong paid listing needs A or B.
reportUrl
HTTPS URL
The held-out report.
measuredAt
ISO date
When the measurement was taken.
dataset
string
Corpus, rig, units, sessions, preparation.
metrics
record
farPerMonth, latencyS, mde, nSamples, nAlarms; at least one number.
fixtures
array
{ id, file, expect }[]; file must be fixtures/<name>.json.
Fixture
Field
Type
Meaning
schema
osmograph.vial-fixture/1
Fixture contract.
description
string
What the case is; say whether it is synthetic.
dtS
number
Seconds per sample when `t` is omitted. Default 1.
samples
array
{ t?, channels: Record<channelId, number> }[].
expected.final
state
`normal | warning | critical | emergency`.
expected.alerts
array
{ t, level }[]; level 1/2/3.
expected.toleranceS
number
Timing tolerance; default one sample.
Declarative widgets
Widgets are the fallback surface when a Vial has no sandboxed UI, and the supporting surface around one. The host escapes every string; no widget inserts raw HTML.
`chart.demo` is a declarative illustration, not live data. A chart that presents demo points as a measurement is a gate failure in review; the live UI must use the host snapshot.
Bridge
Method
Purpose
osmograph.version
"sandbox/1"
osmograph.onData(fn)
Subscribe to the host snapshot; returns an unsubscribe function.
osmograph.action(action)
Send one bounded action. See the UI chapter.
osmograph.ready()
Announce that the bridge is live.
osmograph.toast(message)
Show a host toast.
osmograph.setDetection(config)
Legacy only; refused for a v2 profile.
osmograph.setTransforms(t)
Legacy only; refused for a v2 profile.
osmograph.setTrajectory(spec)
Track fields at an interval; clamped to 1–600 s.
Statuses and provenance
Status
Source
Meaning
draft
Local
Not installed.
open
Local gate failed
Shown as **Ungated**; installable for development.
gated
Local gate passed with at least one fixture
Satisfies the local contract; external review is a separate step.
reviewed / listed
Registry approval
A person reviewed the claim and evidence; hashes pinned.
signed
External signature
Recorded separately; signing is outside the local gate.
The host stores the fetched manifest sha256 and the verified asset hashes on the installed pack. They are runtime provenance, not manifest fields, and are excluded from an exported manifest.
The registry is written by the review route, not by hand. A version bump is required for a changed manifest or UI; the same version with a different hash is refused.
Commands
Command
What it does
noses new "Name" --publisher handle --domain domain
Scaffold a v2 manifest, UI, README, and empty evidence block.