amoghrajesh opened a new pull request, #73531:
URL: https://github.com/apache/airflow/pull/73531

    <!-- SPDX-License-Identifier: Apache-2.0
         https://www.apache.org/licenses/LICENSE-2.0 -->
   
   <!--
   Thank you for contributing!
   
   Please provide above a brief description of the changes made in this pull 
request.
   Write a good git commit message following this guide: 
https://chris.beams.io/posts/git-commit/
   
   Please make sure that your code changes are covered with tests.
   And in case of new features or big changes remember to adjust the 
documentation.
   
   For user-facing UI changes, please attach before/after screenshots (or a 
short
   screen recording) so reviewers can assess the visual impact.
   
   Feel free to ping (in general) for the review if you do not see reaction for 
a few days
   (72 Hours is the minimum reaction time you can expect from volunteers) - we 
sometimes miss notifications.
   
   In case of an existing issue, reference it using one of the following:
   
   * closes: #ISSUE
   * related: #ISSUE
   -->
   
   ---
   
   ##### Was generative AI tooling used to co-author this PR?
   
   <!--
   If generative AI tooling has been used in the process of authoring this PR, 
please
   change below checkbox to `[X]` followed by the name of the tool, uncomment 
the "Generated-by".
   -->
   
   - [ ] Yes (please specify the tool below)
   
   <!--
   Generated-by: [Tool Name] following [the 
guidelines](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions)
   -->
   
   ### Motivation
   
   The go generate models just rule fails on main with:
   
   ```
   go-jsonschema: Failed: cannot add struct field: could not generate type with
   scope 'LiteralArgBindingValue': could not merge anyOf types: types list is 
empty
   ```
   
   The supervisor schema describes messages passed between the supervisor and 
language SDKs. The Go SDK generates its models from that file. One field, 
`LiteralArgBinding.value`, is free-form: it can hold any JSON value.
   
   Pydantic describes that field's type as an **empty** schema:
   
   ```json
   "JsonValue": {}
   ```
   
   That is correct JSON Schema because an empty schema means "anything" but it 
gives a code generator nothing to work from. The field is also optional, so the 
schema says "either that, or null", and `go-jsonschema` cannot turn "anything
   plus null" into a Go type. It gives up.
   
   Nobody noticed because no CI job and no prek hook runs the generator. It is 
a manual step, run only when the schema changes. (Maybe we fix that in a follow 
up)
   
   ### What changed
   
   Where the snapshot would emit an empty definition, it now spells out the 
same meaning as an explicit list of JSON types. The generator then picks 
`interface{}`, which is what the previously committed models already used.
   
   The `title` is there so `--struct-name-from-title` keeps emitting a named 
type instead of inlining the union at every use site.
   
   This does not change what any message can carry. 
`check-supervisor-schemas-versions` agrees and does not ask for a schema 
version bump, which it would if the wire format had changed.
   
   ### About the size of the diff
   
   The change to the schema itself is one definition. The large diff in 
`models.gen.go` and `defaults.gen.go` is **not** produced by this fix: those 
files were last regenerated before the generator broke, so they have drifted 
from the schema since. Running the generator catches all of that up at once.
   
   Some of the catch-up changes types the Go SDK exposes, for example:
   
   ```
   - State interface{}   ->  + State string
   - Value JsonValue     ->  + Value interface{}
   ```
   
   Worth a careful look. All Go tests pass against the regenerated models.
   
   ### Testing
   
   Run on this branch:
   
   - `cd go-sdk && just generate-models` - succeeds (fails on `main`)
   - `go build ./...` 0 clean
   - `go test ./...` - all 12 packages pass
   - `cd ts-sdk && pnpm exec tsc --noEmit` - clean
   - `pnpm test` in `ts-sdk` - 22 files, 355 tests pass
   - `prek run check-supervisor-schemas-versions --all-files` - passes
   - `prek run generate-supervisor-schemas-snapshot --all-files` -  reproduces 
the committed schema
   
   Also confirmed the failure is not environmental: it reproduces on a clean 
`origin/main` worktree, under the Go version CI pins (1.25.13) as well as 
1.27.1, and on `go-jsonschema` v0.24.1 as well as the pinned v0.23.1. So a 
generator
   version bump is not an alternative fix.
   
   
   ---
   
   * Read the **[Pull Request 
Guidelines](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#pull-request-guidelines)**
 for more information. Note: commit author/co-author name and email in commits 
become permanently public when merged.
   * For fundamental code changes, an Airflow Improvement Proposal 
([AIP](https://cwiki.apache.org/confluence/display/AIRFLOW/Airflow+Improvement+Proposals))
 is needed.
   * When adding dependency, check compliance with the [ASF 3rd Party License 
Policy](https://www.apache.org/legal/resolved.html#category-x).
   * For significant user-facing changes create newsfragment: 
`{pr_number}.significant.rst`, in 
[airflow-core/newsfragments](https://github.com/apache/airflow/tree/main/airflow-core/newsfragments).
 You can add this file in a follow-up commit after the PR is created so you 
know the PR number.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to