Skip to content

docs: document significant specification changes and migration impact - #686

Merged
jbonofre merged 6 commits into
apache:mainfrom
zljie:docs/spec-change-history-20261102
Nov 10, 2026
Merged

jbonofre merged 6 commits into
apache:mainfrom
zljie:docs/spec-change-history-20261102

Conversation

@zljie

@zljie zljie commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Closes #603.

This PR adds a curated history of significant merged Apache Ossie specification changes, explaining their rationale, compatibility implications, and migration guidance. Following maintainer feedback, it includes a semi-automated, advisory maintenance mechanism to reduce documentation drift.

Changes

  • docs/spec_changes.md records selected merged changes with originating PRs and downstream impact.
  • docs/index.md and core-spec/spec.md link the history from the existing documentation and version history.
  • CONTRIBUTING.md and the PR template ask authors to record material specification changes in the same PR, or explain why no entry is warranted.
  • scripts/audit-spec-changes.py scans local first-parent Git history for candidate specification changes absent from the curated table. It now recognizes both squash subjects ending in (#123) and standard Merge pull request #123 subjects, and sorts candidate PR numbers numerically.
  • scripts/tests/test_audit_spec_changes.py adds 12 offline parser and real-Git command tests, including candidate filtering, recorded entries, explicit refs, empty time windows, invalid inputs, and non-mutation of the checkout.

Latest upstream integration

Integrated upstream main at d700cdeac41d15a7004eb2f9b0b38a2b1d517a18 and resolved the reproduced conflict in core-spec/spec.md. The latest upstream normative content is retained; only this PR's navigation paragraph is reapplied there.

The history now identifies 0.3.0.dev0 as unreleased and mutable, explains that earlier entries were merged under the former 0.2.0.dev0 development label, and records merged #691 with its UTC merge date and document-version migration implications. This is not a release announcement, and there will be no 0.2.0 release.

Maintenance approach and scope

Automated discovery suggests candidates; contributors and maintainers still decide materiality and write rationale, compatibility judgments, and migration guidance. The audit remains advisory, not a mandatory CI gate or a complete changelog. Commits without recognizable PR references can be missed, and editorial changes can appear among candidates.

Current scope: 6 commits, 7 changed files relative to the integrated upstream baseline. Changes are limited to documentation, contribution guidance, and advisory audit tooling/tests. No production schema, validator, SDK, or converter behavior is changed by this PR. Verification-only workflows and preparation scripts are not included.

Verification — 2026-11-10

  • Current HEAD: 04837b6c2fc0f746100d7399c12df8d878bc27d0.
  • Actual Fork GitHub Actions verification: run 42769556155.
  • Python 3.11, 3.12, 3.13, and 3.14 each passed 571 validation tests, 269 Python model tests, and 12 audit tests. The validation/model suites also passed on the unmodified upstream baseline.
  • The duplicate-key validator's 59 tests, generated-type synchronization check, and all six canonical-example validation commands passed in each matrix job. The existing flights mapping example produced two SQL-expression parsing warnings; no warning-free claim is made.
  • The audit was executed against the pinned real upstream history: 9 recorded significant PRs; 44 unlisted candidates. Those 44 items are review suggestions, not 44 confirmed material omissions. The recorded chore: move the in-development version to 0.3.0.dev0 #691 entry was correctly excluded.
  • Relative documentation link target files and whitespace checks passed. This does not claim comprehensive external-link or anchor validation.
  • All four validation records match tree 400a5141f1876713956176b68acfeb696cbf647a, the tree of the current PR HEAD. The original branch was advanced without force-pushing.
  • Apache upstream CI is separate: the five latest PR workflows still report action_required. No Apache upstream CI pass or maintainer approval is claimed. The review thread remains open.

AI assistance was used in preparing the documentation, integration, audit fix, and tests. The contributor remains responsible for accuracy, verification, and follow-up.

Record rationale, consumer impact, compatibility and source PRs for major
Core, Ontology and Relational Interface changes in unreleased 0.2.0.dev0.

Refs apache#603

@jbonofre jbonofre left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks @zljie, it's a good intent.

I'm a bit worried by the spec_changes.md revision table, and how to maintain it up to date.

Comment thread docs/spec_changes.md
Comment on lines +37 to +46
| Merged (UTC) | Area / source | Change and rationale | Impact on producers and consumers |
| --- | --- | --- | --- |
| 2026-09-16 | Core [#383](https://github.com/apache/ossie/pull/383) | **One model per document.** Model properties moved to the document root to remove the wrapper and make the exchange unit unambiguous. | **Breaking within the unreleased schema.** Unwrap a single `semantic_model`; split a multi-model wrapper into separate documents. Old wrapped documents do not validate against the new root. See [migration guidance](../core-spec/spec.md#migrating-earlier-document-shapes). |
| 2026-09-22 | Core [#439](https://github.com/apache/ossie/pull/439) | **Register `OSSIE_SQL_2026` as a portable expression dialect.** Its existing language definition could not be used in documents while the dialect token was absent from schema validation. | Additive at merge time; no change to the default dialect. This initially used `expression.dialects`; the later [#617](https://github.com/apache/ossie/pull/617) adds the preferred `expression.sql` form. |
| 2026-10-04 | Ontology [#458](https://github.com/apache/ossie/pull/458) | **Separate ontology, model, and mapping documents.** Independent references allow an ontology and a semantic model to be reused without embedding copies of either. | Mapping authors can use standalone documents validated by `ontology/mapping.json` and references to one ontology and one model. The older embedded `ontology_mappings` form remains accepted but is deprecated; importers should support the standalone form. |
| 2026-10-13 | Expression language [#577](https://github.com/apache/ossie/pull/577) | **Explicit `NULLS FIRST` / `NULLS LAST` in window `ORDER BY`.** Engine defaults differ, so explicit ordering is needed for portable window results. | Expression parsers and SQL translators should accept and preserve the new clause. The default when the clause is omitted was *not* decided by this change. |
| 2026-10-19 | Relational interface [#354](https://github.com/apache/ossie/pull/354) | **Layer 2 Relational Query Interface added.** It describes querying model measures through SQL relations and `MEASURE()` with correct aggregation semantics. | Additive specification document, not a new core JSON/YAML field. Query-engine implementers can adopt the interface; schema-only consumers need no migration. See [relational semantics](../core-spec/relational_semantics.md). |
| 2026-10-22 | Core [#591](https://github.com/apache/ossie/pull/591) | **Dataset-scoped metrics.** Metrics can live with the dataset they describe instead of all metrics living at the model root. | Additive optional `datasets[].metrics`. Resolving a dataset metric uses unqualified declared field names; model-scoped metric expressions use qualified `dataset.field` names. Consumers must account for both scopes when reading metrics. |
| 2026-10-26 | Core [#617](https://github.com/apache/ossie/pull/617) | **Portable `expression.sql` and open vendor dialect tokens.** The Ossie-defined portable expression becomes primary, while vendor-specific dialects stay opaque and extensible. | Existing `expression.dialects` remains accepted; writers should prefer `expression.sql` for portable SQL, and readers should give it precedence over a duplicate `OSSIE_SQL_2026` dialect entry. Dialect names are no longer a closed enum; consumers must tolerate unknown values. |
| 2026-11-01 | Ontology [#668](https://github.com/apache/ossie/pull/668) | **Non-empty ontology identifiers.** Validation now rejects empty names, IRIs, references, and mapping SQL expressions, matching existing restrictions elsewhere. | Authors should supply non-empty values for identifying strings. Some malformed documents that previously passed schema validation now fail earlier, with schema-layer errors. |

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

If I understand the intent (and it has value), I'm a bit concern how to keep this table up to date.

Can we imagine a way to populate that automatically (or semi-automatically)?

By experience on other Apache projects, it's extremely hard to maintain this in sync and it can drift easily.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Thanks @jbonofre for the feedback. I agree that keeping a revision table synchronized manually could become difficult as the project evolves.

I've pushed a revision in commit 0f0fdde to address this concern:

  1. Added scripts/audit-spec-changes.py to identify candidate specification changes missing from the curated history.
  2. Updated CONTRIBUTING.md to integrate significant change-history updates into the contribution process.
  3. Updated the PR template to make this part of normal review.

The audit is intentionally advisory. It helps identify omissions, while maintainers retain responsibility for documenting rationale, compatibility impact, and migration guidance.

It does not guarantee complete coverage, and it does not automatically generate the historical explanations.

The latest CI is still awaiting approval and has not executed.

Would this semi-automated approach address your concern, or would you prefer a lighter-weight solution relying more directly on GitHub PR metadata?

@zljie

zljie commented Nov 10, 2026

Copy link
Copy Markdown
Contributor Author

Thanks @jbonofre. I've integrated current upstream main (d700cde) and resolved the document conflict while preserving the upstream 0.3.0.dev0 specification. The updated HEAD is 04837b6c2fc0f746100d7399c12df8d878bc27d0.

The curated history now explains the former 0.2.0.dev0 development label and records merged #691 and its migration implications. Actual audit verification also reproduced a missed standard Merge pull request #... subject; the script now handles that form alongside squash subjects and has 12 offline parser/real-Git tests.

Fork verification: https://github.com/zljie/OSI/actions/runs/42769556155. Python 3.11–3.14 each passed 571 validation tests, 269 Python model tests, the 12 audit tests, and the 59 duplicate-key validator tests, plus generated-type synchronization and six canonical-example validation commands. The flights mapping example still emits two SQL-expression parsing warnings. All four records match the exact tree of this PR HEAD.

Running the advisory audit against the pinned upstream history reported 9 recorded PRs and 44 unlisted candidates. These are suggestions for human review, not confirmed omissions, and the audit remains non-gating.

Apache upstream workflows still report action_required; the Fork verification does not replace them. Could a maintainer approve those runs when convenient? The maintenance-design review remains open for your assessment.

@jbonofre jbonofre left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for this @zljie! History page and audit will land soon 😄

@jbonofre
jbonofre merged commit ee89dbd into apache:main Nov 10, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Document spec changes history

2 participants