Skip to content

Roll up dev-v3.2.0 into dev (includes the main sync) - #316

Merged
jgperrin merged 42 commits into
devfrom
sync-main-into-dev
Aug 18, 2026
Merged

Roll up dev-v3.2.0 into dev (includes the main sync)#316
jgperrin merged 42 commits into
devfrom
sync-main-into-dev

Conversation

@jgperrin

@jgperrin jgperrin commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

The v3.2.0 rollup. The head branch sync-main-into-dev is now identical to dev-v3.2.0 (b54078e), so merging this PR brings the whole v3.2.0 line onto dev — the main→dev sync this PR originally carried is included.

dev is a strict ancestor of dev-v3.2.0, so there is nothing to reconcile: no conflicts.

Scope

42 commits, 10 files, +263 / −63.

Area Change
RFC-0058 exasol server type — schema (both files), docs, example, negative test
RFC-0050 server port accepts a string, so it can hold ${DB_PORT}
Docs a definition for every server type; Informix always spelled "HCL Informix and IBM Informix"
Sync context7.json (#311) and the infrastructure-servers.md bullet removal (#309), from main

Everything earlier in the v3.2.0 line (RFCs 42/43/45/46/47/49/51, vector, encoding, variables) already reached dev through the #301 rollup and is unchanged here.

Why the "Different Technologies" bullets disappear

#309 removed those two intro bullets from docs/infrastructure-servers.md on main, but the v3.2.0 line still had them. That was the one genuine divergence between the branches. It was settled on dev-v3.2.0 in b54078e by taking main's deletion, so it lands here as a deletion rather than as a conflict.

Validation

Run on the merged tree:

  • validate-examples.sh → exit 0, Total failed=0
  • validate-negative.sh → exit 0, Total failed=0
  • every schema/*.json parses; odcs-json-schema-latest.json and odcs-json-schema-v3.2.0.json are in lockstep

Please merge, don't squash

The branch carries real merges of main and dev. Squashing drops that ancestry and makes the next sync re-conflict on the same files. Auto-merge is already armed with the merge method.

🤖 Generated with Claude Code

DatSciMeMa and others added 30 commits May 5, 2026 16:08
As discussed in the working group added an avis for an updated description for version 3.2.0.
The v3.1.0 standard deprecates `dataProduct`, but neither the v3.1.0
JSON schema, the `latest` JSON schema, nor `docs/fundamentals.md`
reflected the deprecation. Adds `"deprecated": true` to both schemas
and strikes through the property in the docs table.

Closes #226. Supersedes #238 (which mishandled the dated-snapshot
naming convention; that policy lives on `dev` and is not in scope here).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add ContractGate to official ODCS vendors list
… fix

v3.1.0 is a released line, so the silent-update rule applies: any
modification to `odcs-json-schema-v3.1.0.json` should be accompanied
by a frozen dated snapshot so downstream consumers who pin a specific
day's validator can recover the exact bytes.

Snapshot file equals the patched rolling file (`deprecated: true` on
`dataProduct`) at this commit. UTC committer date is 2026-05-05.

Refs #226, #274.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ustomProperties.property

Update custom-other-properties.md
Avis was supposed to be under the table.
…v3.1.0

fix(schema): mark dataProduct as deprecated in v3.1.0
Signed-off-by: Speculator55005 <50082482+fas89@users.noreply.github.com>
Aligns the external shorthand reference example with the fully-qualified
example above it (both use '#/'). Same fix as #221 (merged to dev),
applied here to the dev-v3.2.0 line.



Claude-Session: https://claude.ai/code/session_01Adou6Wv1WCxD3JzmMkewvY

Co-authored-by: FriedrichBu <FriedrichBu@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds a single vendor entry for Collate, the managed cloud service built
on the open-source OpenMetadata platform, with direct ODCS documentation
links for both. Reconstructed from #232 against dev-v3.2.0.



Claude-Session: https://claude.ai/code/session_01Adou6Wv1WCxD3JzmMkewvY

Co-authored-by: PubChimps <PubChimps@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Allow both .yaml and .yml file extensions in external references
(\.yaml# -> \.ya?ml#) in odcs-json-schema-latest.json.

Clean reapplication of #220, which also injected a stray leading 'r'
into the pattern, edited the frozen v3.1.0 schema, and reformatted the
whole file. This applies only the intended change to the latest schema.



Claude-Session: https://claude.ai/code/session_01Adou6Wv1WCxD3JzmMkewvY

Co-authored-by: FriedrichBu <FriedrichBu@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PR #285 merged a stale single-file revision (latest.json only) due to a
force-push/merge race, dropping the rolling-minor sync. Per
schema/README.md, the .yaml->.ya?ml relaxation must also live in the
rolling v3.2.0 file so latest and v3.2.0 stay consistent.

- schema/odcs-json-schema-v3.2.0.json: apply \.yaml# -> \.ya?ml#
- schema/README.md: v3.2.0 snapshot changelog entry (2026-06-23)

Frozen v3.1.0 schema intentionally untouched.


Claude-Session: https://claude.ai/code/session_01Adou6Wv1WCxD3JzmMkewvY

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
logicalType is valid on schema objects (the JSON schema allows it on
SchemaObject, and the examples use logicalType: object), but the schema
docs only listed it under 'Applicable to Properties'. Move it to the
shared 'Applicable to Elements (either Objects or Properties)' table and
note its object-level usage.

logicalTypeOptions, items, and map remain property-specific.

Closes #228.


Claude-Session: https://claude.ai/code/session_01Adou6Wv1WCxD3JzmMkewvY

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Brings main-only work into the v3.2.0 line so it is not lost when the
release chain (dev-v3.2.0 -> dev -> main) eventually runs:
- dataProduct deprecation (#274/#226): schema + fundamentals.md
- FLUID Forge, Data Contract Editor, Entropy Data vendors; richer Data
  Contract CLI description (#279/#272 et al.)
- custom-other-properties.md edits (#270/#275)
- v3.1.0-20260505 dated snapshot

Conflict resolutions:
- docs/fundamentals.md: keep the v3.2.0 table (apiVersion default v3.2.0,
  status optional per schema) AND mark dataProduct deprecated (from main).
- vendors.md: union of both native-support lists (Collate + Data Contract
  Manager from v3.2.0 line; FLUID Forge etc. from main).

Also synced the dataProduct deprecation note into odcs-json-schema-v3.2.0.json
to keep it consistent with latest.json (per schema/README.md).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Adou6Wv1WCxD3JzmMkewvY
Reconcile main into dev-v3.2.0 (no main-only work lost)
…293)

Implements approved RFC-0043 (Physical Data Encoding) for ODCS v3.2.0.
Adds an optional free-form `encoding` string to the server types that
expose serialized payloads (Azure, Glue, Custom, Kafka, Kinesis, Local,
S3, SFTP), alongside `format`/`delimiter`. Default UTF-8, non-breaking.

- schema: encoding on 8 server defs in both latest + v3.2.0 (lockstep)
- docs: encoding row in infrastructure-servers.md for those servers
- example: docs/examples/server/s3-server-encoding.odcs.yaml (validated)
- negative test: server-encoding-wrong-type.odcs.yaml (schema rejects)
- CHANGELOG entry

Approved RFC: https://github.com/bitol-io/tsc/blob/main/rfcs/approved/odcs-v3.2.0/0043-physical-data-encoding.md


Claude-Session: https://claude.ai/code/session_01Adou6Wv1WCxD3JzmMkewvY

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…properties (#294)

Implements approved RFC-0028 (Deprecated flag), shared with ODPS v1.1.0,
for ODCS v3.2.0. Adds an optional `deprecated` boolean (default false) on
SchemaElement, which both schema objects and properties (including nested)
inherit — mirroring the synonyms placement.

- schema: deprecated on SchemaElement in both latest + v3.2.0 (lockstep)
- docs: deprecated row in schema.md + a Deprecated section
- example: docs/examples/schema/deprecated.odcs.yaml (validated)
- negative test: deprecated-wrong-type.odcs.yaml (schema rejects non-boolean)
- CHANGELOG entry

Approved RFC: https://github.com/bitol-io/tsc/blob/main/rfcs/approved/odcs-v3.2.0/0028-deprecated-flag.md


Claude-Session: https://claude.ai/code/session_01Adou6Wv1WCxD3JzmMkewvY

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implements approved RFC-0035 (Vendor Attribution), shared with ODPS v1.1.0
and OORS v1.0.0, for ODCS v3.2.0. Adds an optional `vendor` string to
CustomProperty. Per the RFC, vendor SHOULD be lowercase / match
^[a-z0-9][a-z0-9-]*$ but this is NOT enforced as a schema pattern (tools
MUST preserve unknown vendor values); the recommended format is documented.

- schema: vendor on CustomProperty in both latest + v3.2.0 (lockstep)
- docs: vendor row in custom-other-properties.md
- example: docs/examples/custom-other-properties/vendor.odcs.yaml (validated)
- negative test: vendor-wrong-type.odcs.yaml (schema rejects non-string)
- CHANGELOG entry

Approved RFC: https://github.com/bitol-io/tsc/blob/main/rfcs/approved/odcs-v3.2.0/0035-extensions.md


Claude-Session: https://claude.ai/code/session_01Adou6Wv1WCxD3JzmMkewvY

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Update all ODCS references to the deprecated-flag RFC from 0028 to 0051
after the number was renumbered in bitol-io/tsc to resolve a collision
with the earlier RFC-0028 (Permalink).


Claude-Session: https://claude.ai/code/session_01FRgkVBM2ry2NQecEAeddnN

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implements approved RFC-0042 (Vector Type) for ODCS v3.2.0. Adds a `vector`
value to the logicalType enum and a conditional logicalTypeOptions block
(if logicalType==vector) with required `dimensions` plus optional
`elementType`, `distanceMetric`, `normalized`, `embeddingModel`, and
`embeddingModelVersion`. Field names are those the TSC ratified at approval
(`dimensions`, `elementType`).

- schema: vector enum value + conditional options block in both latest +
  v3.2.0 (lockstep); `dimensions` required when logicalType==vector
- docs: vector rows in Logical Type Options table + a Vectors section in schema.md
- example: docs/examples/schema/vector.odcs.yaml (validated)
- negative test: vector-missing-dimensions.odcs.yaml (schema rejects: missing dimensions)
- CHANGELOG entry

Approved RFC: https://github.com/bitol-io/tsc/blob/main/rfcs/approved/odcs-v3.2.0/0042-vector-type.md


Claude-Session: https://claude.ai/code/session_01Adou6Wv1WCxD3JzmMkewvY

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implements approved RFC-0045 for ODCS v3.2.0. Adds `hana` to the server type
enum, a HanaServer ServerSource def, and the type->$ref mapping. Required
`host` plus optional `port`, `database` (tenant), and `schema`.

Note: the RFC lists `port` as "number"; implemented as integer to match every
other server type (a port is an integer).

- schema: hana enum value + HanaServer def + oneOf mapping in both latest +
  v3.2.0 (lockstep); only `host` required
- docs: SAP HANA section in infrastructure-servers.md
- example: docs/examples/server/hana-server.odcs.yaml (validated)
- negative test: hana-missing-host.odcs.yaml (schema rejects: missing host)
- CHANGELOG entry

Approved RFC: https://github.com/bitol-io/tsc/blob/main/rfcs/approved/odcs-v3.2.0/0045-hana-server-type.md


Claude-Session: https://claude.ai/code/session_01Adou6Wv1WCxD3JzmMkewvY

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…n SLA properties (#299)

Implements approved RFC-0046 for ODCS v3.2.0. Adds optional `customProperties`
and `authoritativeDefinitions` (reusing the existing $defs) to each
slaProperties[] entry, consistent with other ODCS objects.

- schema: both fields on ServiceLevelAgreementProperty in both latest +
  v3.2.0 (lockstep)
- docs: two rows in service-level-agreement.md
- example: docs/examples/sla/sla-extensions.odcs.yaml (validated)
- negative test: sla-authoritativedefinition-missing-type.odcs.yaml
  (schema rejects: authoritativeDefinitions entry missing required `type`)
- CHANGELOG entry

Approved RFC: https://github.com/bitol-io/tsc/blob/main/rfcs/approved/odcs-v3.2.0/0046-sla-custom-properties-and-authoritative-definitions.md


Claude-Session: https://claude.ai/code/session_01Adou6Wv1WCxD3JzmMkewvY

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…faults (#300)

Applies approved RFC-0050 (Variables) to ODCS v3.2.0: any string value MAY
contain ${VAR_NAME} references resolved at runtime by tooling, with the POSIX
${VAR_NAME:-default} form for inline defaults (Option B, TSC 2026-07-13).
No schema change — the RFC adds no section or field. New docs page, example,
and a negative test (variable token in an integer-typed field is rejected).

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Applies approved RFC-0047 to ODCS v3.2.0: a new optional `id` string on
RelationshipBase (surfaced on schema-level and property-level relationships),
completing RFC-0026a's stable-identifier coverage. Unique within its
relationships array; SHOULD be stable; cannot contain . # / \ @ ! % & ^.
Both schema files updated in lockstep; references.md field table + example
extended. No negative-test fixture: the RFC adds only an optional string with
no schema-enforced pattern/uniqueness (id-format rules are textual, like every
other ODCS id), so there is no schema-level violation to assert.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
jgperrin and others added 11 commits July 14, 2026 12:01
Applies approved RFC-0049 to ODCS v3.2.0: new `iceberg` server type for Apache
Iceberg catalogs via the Iceberg REST API. Both schema files updated in
lockstep — enum value, conditional dispatch, and IcebergServer def with
required catalog + catalogUrl (per the RFC field table / TSC decision) and
optional namespace + warehouse. Docs section, positive example, and a negative
test (missing catalogUrl → rejected).

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ssary/taxonomy) (#304)

The contract-level context example in docs/context.md documented
authoritativeDefinitions in the Definitions table but no longer showed it in
use. Re-add the Ontology/Glossary/Taxonomy authoritativeDefinitions block on a
constraint, matching the approved RFC-0038 example.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
The variables RFC allows ${VAR_NAME} references in string values only,
which made it impossible to parameterize server ports: the unresolved
token is a string and the integer-typed port rejected it.

Relax all 19 server port definitions via a shared Port $def typed as
integer or string, so a port can hold a variable reference such as
${DB_PORT} or ${DB_PORT:-5432}.

Discussed in the bitol-wg Slack thread; other integer fields remain
integer-only.
Remove the suggestion of using multiple server technologies per data contract, as this is no longer a best practice.
Applies approved RFC-0058 to ODCS v3.2.0: new `exasol` server type for Exasol,
an in-memory MPP analytics database. Both schema files updated in lockstep —
enum value, conditional dispatch, and ExasolServer def with required host and
optional port (default 8563) + schema. No `database` field: an Exasol cluster
runs a single database and the schema is the namespace. Docs section, positive
example, and a negative test (missing host -> rejected).

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…BM Informix (#314)

Consistency pass over docs/infrastructure-servers.md.

Eighteen server sections jumped straight from the heading to the property
table while the rest opened with a one-line definition of the technology.
Adds that definition (linked to the vendor/project page, matching the existing
style) for: API, Azure, Databricks, IBM Db2, Denodo, Dremio, Amazon Glue,
Kafka, Amazon Kinesis, Local Files, MySQL, Oracle, Presto, Snowflake, Synapse,
Trino, Vertica, and Custom. All 36 server sections now have one.

Informix is always named as "HCL Informix and IBM Informix" — heading, intro,
and the host/port descriptions, which previously said just "Informix". The
lowercase `informix` in the `type` value list is the schema enum value and is
left as is.

Also re-aligns the three tables whose pipes had drifted (Common Server
Properties, Exasol, Informix) — no content change.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Brings the dev-only work into the v3.2.0 line: the ShorthandReference dash fix
(#260), the Enkinex vendor entry (#310), the references URL fragment fix (#221),
and the v3.1.0 dated schema snapshots.

Conflict resolution — 8 files. All but one conflict is dev replaying an older
snapshot of dev-v3.2.0 content through the #290/#301 rollup merges, so the
version-branch side is kept:

* CHANGELOG.md, docs/infrastructure-servers.md, docs/variables.md,
  docs/examples/fundamentals/variables.odcs.yaml,
  src/script/negative-tests/variables-in-integer-field.odcs.yaml — kept
  dev-v3.2.0 (exasol RFC-0058, the server definitions pass, and the RFC-0050
  follow-up #307 that lets `port` hold a string).
* schema/odcs-json-schema-{latest,v3.2.0}.json — kept dev-v3.2.0 for the
  `exasol` enum value and the `$defs/Port` reference; dev's ShorthandReference
  dash pattern merged in cleanly and is preserved.
* vendors.md — kept dev's Enkinex ODCS entry (the only genuinely new
  dev-side content in a conflicted file).

Validated: validate-examples.sh and validate-negative.sh both exit 0,
Total failed=0. The two schema files remain in lockstep.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
One-way sync: brings main's latest into dev. main is not modified.

Picks up context7.json (#311), the infrastructure-servers.md bullet removal
(#309), the custom-other-properties.md wording fixes (#270, #275), the
dataProduct v3.1.0 deprecation fix and its dated schema snapshot (#274), and
the vendor list updates (#272, #279, #283).

Conflict resolution — 2 files, both kept on the dev side because dev is
strictly ahead:

* docs/fundamentals.md — dev's table is the v3.2.0-era rewrite (sorted, adds
  customProperties, links tags.md). Verified every row present on main is
  also on dev. main still marks `status` as Required=Yes, which the schema
  contradicts (required is version/apiVersion/kind/id only), so dev's "No"
  is the correct value to keep.
* vendors.md — dev is a strict superset; main contributes no entry dev lacks
  (checked line by line, not just by name). Keeps Collate, Data Contract
  Manager, and Enkinex ODCS, which main does not have.

Validated: validate-examples.sh and validate-negative.sh both exit 0,
Total failed=0; every schema/*.json parses.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jgperrin
jgperrin requested a review from a team as a code owner August 5, 2026 01:38
@jgperrin
jgperrin enabled auto-merge August 5, 2026 01:38
Pulls main's latest onto the v3.2.0 line ahead of time, via the pending
main->dev sync branch (PR #316), so the eventual v3.2.0 -> dev rollup has
less to reconcile.

Merged clean, no conflicts. Net change is 2 files:

* context7.json — new, from #311.
* docs/infrastructure-servers.md — #309 removed the two "Different
  Technologies" intro bullets on main. The v3.2.0 line still had them, so
  this was the one real divergence between the branches; taking the deletion
  here settles it now instead of at rollup time.

main's custom-other-properties.md wording fix was already present on
dev-v3.2.0, so it does not appear in the diff.

Validated: validate-examples.sh and validate-negative.sh both exit 0,
Total failed=0; every schema/*.json parses; the two v3.2.0 schema files
remain in lockstep.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jgperrin jgperrin changed the title Merge main into dev (one-way sync) Roll up dev-v3.2.0 into dev (includes the main sync) Aug 5, 2026

@jochenchrist jochenchrist left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@jgperrin
jgperrin merged commit 104f273 into dev Aug 18, 2026
3 of 4 checks passed
@jgperrin
jgperrin deleted the sync-main-into-dev branch August 18, 2026 11:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants