SnowBridge now owns machine-data ingest, in-process .NET transformation, and direct writes to curated tables in Snowflake. Collapses the previous ingest/transform split into a single service; no dbt, no external orchestrator, no Snowflake landing tier. Keeps the in-house .NET pattern consistent with ScadaBridge and OtOpcUa. The "Snowflake dbt Transform Layer" roadmap workstream merges into SnowBridge (7 → 6 workstreams); Year 2 canonical-state-based OEE moves with it. Canonical model still has three surfaces — the third is renamed from "dbt curated layer" to "SnowBridge curated layer in Snowflake"; mechanics unchanged.
3.0 KiB
3.0 KiB
Contributing
Initial seed by the OtOpcUa team. Future ownership TBD — the contribution process below is a starting suggestion the schemas-repo owner team should ratify or revise.
Workflow (proposed)
- Open an issue first for any new equipment class, UNS subtree, or format change. Describe the use case + the consumer(s) that need it.
- Branch + PR — work on a feature branch, open a PR against
main. - CI gate validates every JSON file against the schema in
format/. - Review — at least one schemas-repo maintainer + one consumer-team representative (OtOpcUa, Redpanda, or SnowBridge depending on what changed).
- Merge + tag — merge to
mainand create a semver tag. Consumers pin to tags.
Adding a new equipment class
- Create
classes/{class-id}.json(lowercase hyphenated). - Reference the class schema:
"$schema": "../format/equipment-class.schema.json". - Fill in:
classId,version(start at0.1.0),displayName,vendor,applicability,signals, optionallyalarmsandstateModel. - Validate locally — the CI gate will reject malformed JSON or schema violations.
- Open the PR with a brief description of which equipment populations are covered.
Adding a new UNS subtree
- Create
uns/{site-name}.json. - Reference the schema:
"$schema": "../format/uns-subtree.schema.json". - Fill in:
enterprise(must match the org-wide value),site,displayName,areaswithlines. - Coordinate with the OtOpcUa team — every cluster at the site must declare its
EnterpriseandSitematching this file.
Format changes
Editing files in format/ is a breaking change for downstream consumers. Process:
- Open an issue with the proposed change + rationale.
- Notify all consumer teams (OtOpcUa, Redpanda, SnowBridge, anyone else listed in
docs/consumer-integration.md). - Get explicit signoff from each before merging.
- Bump the major version of every affected class file simultaneously (consumers use this to detect breaking changes).
Validation
# Per-file validation
ajv validate -s format/equipment-class.schema.json -d classes/fanuc-cnc.json
ajv validate -s format/uns-subtree.schema.json -d uns/example-warsaw-west.json
# Bulk validate everything
for f in classes/*.json; do ajv validate -s format/equipment-class.schema.json -d "$f"; done
for f in uns/*.json; do ajv validate -s format/uns-subtree.schema.json -d "$f"; done
Versioning policy (proposed)
- Major bump (
0.x.y→1.x.y) — breaking change: signal removed, signal renamed, dataType changed, isRequired changed false→true, alarm removed - Minor bump (
x.0.y→x.1.y) — additive non-breaking: new optional signal, new alarm, new state in stateModel, displayName/description updates - Patch bump (
x.y.0→x.y.1) — documentation/clarification only: description text updates, examples added, no semantic change
Consumers pin to a major.minor in production; staging environments can track main.