Schema Evolution
flow.aiwg.io/v1alpha1 is an experimental conformance line. It is not a
FlowGraph schema evolution
flow.aiwg.io/v1alpha1 is an experimental conformance line. It is not a stability promise, but changes within the line still follow explicit rules.
Closed-world authoring
Every contract object uses additionalProperties: false, except embedded JSON Schema fragments and string maps. Unknown authoring fields fail validation. This catches spelling errors and prevents adapters from smuggling provider-specific behavior into the portable graph.
Provider projections belong outside the source manifest. Adapters receive the normalized envelope and emit provider-native configuration with a separate adapter/version identity.
Compatibility
- Documentation and diagnostic wording may change without a version change.
- New optional fields may be added during alpha only when old consumers can
ignore them after schema-aware normalization.
- Required fields, field meanings, enum removals, or normalized-envelope shape
changes require a new API version.
- A new API version receives its own schema path and generated TypeScript file.
- The old validator remains available until fixtures and adapters have migrated.
Regenerate TypeScript declarations after every schema change:
~~~bash node agentic/code/addons/composition-engine/scripts/generate-types.mjs ~~~
Conformance tests compile the JSON Schema, validate all published fixtures, and exercise each semantic rejection class before a change can ship.
Stable artifact references
Node references use stable AIWG index IDs. Each reference must first occur in the manifest's authorized spec.candidates set. Validation can additionally prove those candidates against a captured index export with --catalog. Renaming a human-facing artifact never silently redirects a graph; authors discover the replacement stable ID and update the manifest deliberately.
API group naming
The profile remains in the flow.aiwg.io API group and uses kind: FlowGraph. It does not create graph.flow.aiwg.io, keeping DNS integration within the supported label depth.