Repository navigation
docs: the CI workflow name is an interface, so standardise it - #11
Merged
Merged
Conversation
The trigger matches a workflow by its `name:`, which makes the name an interface rather than a label. The five SDK repositories called theirs four different things -- Tests in sdk-go, sdk-php and sdk-py, CI in sdk-js, Pull Request in sdk-java -- so every caller needed a different value, and naming the wrong one fails SILENTLY: no review runs and nothing says why. sdk-java is the trap, because its `Main` workflow looks like the obvious candidate and only runs on pushes to the default branch. All five now use `Tests`, so the caller template needs no edit at all for an SDK repository. Renaming was safe and measured: every required status check in every one of these repositories is a JOB name -- test (3.10), Verify (JDK 17), check (20.x) -- so branch protection never referenced a workflow name. setup.md gains section 3a, which says to find the right workflow EMPIRICALLY from the checks on a real pull request rather than from filenames, because that is the mistake this standard exists to prevent.
runs-on still carries a CHANGE ME, for a repository that is private or outside the organisation, and that is correct. The claim being pinned is narrower: an SDK repository needs no edit to the TRIGGER.
MarketDataApp
added a commit
that referenced
this pull request
Sep 16, 2026
The squashed merge of #11 landed a line ruff wants reformatted, so `ruff format --check .` fails on main and on every branch taken from it. One line, no behaviour.
MarketDataApp
added a commit
that referenced
this pull request
Sep 17, 2026
…12) * feat(sdk): the version bump becomes a calculation, not an opinion Six SDK repositories had no standing review instructions except sdk-py, so five of them got the language-agnostic default. The rule the team actually agreed in #engineering on 2026-08-28 was nowhere the bot could read it: a non-breaking change takes the next minor, a breaking change takes the next major, and each SDK decides on its own because the same API change can break Java's signature and leave Python's alone. Lucas's point is the one that makes it enforceable. The reviewer must not opine on whether a change is breaking; it must compare the public surface before and after and report a table. A symbol that disappeared or a type that changed IS breaking, so the bump is a calculation. That is what stops a major shipping by accident. The rules are assembled rather than copied. shared.md is the part every SDK follows; surface/<lang>.md is the part that cannot be shared, because what counts as public surface differs sharply -- Go decides its major in the import path and cannot defer it to release time, C# compiles default parameter values into callers, Java breaks source and binary compatibility by different rules. Six hand-maintained copies would drift within a month. The generated files are not committed here: they belong in the SDK repositories, and docs/sdk/build.sh emits them. * style: ruff format the assertion #11 left unformatted The squashed merge of #11 landed a line ruff wants reformatted, so `ruff format --check .` fails on main and on every branch taken from it. One line, no behaviour. * docs(sdk): number the surface section so section 1 can point at it Section 1 tells the reviewer to compare public symbols without saying what counts as one in this language. That definition is the per-language file, so it gets a number and a cross-reference. Also de-duplicates the two `## Tests` headings sdk-py ended up with. * fix(sdk): two breaking-change rules were wrong on their own terms Java: a widened return type was listed as NOT breaking. The return type is part of the method descriptor, so every compiled caller stops linking. And an abstract class cannot carry a `default` method, so the interface escape hatch does not apply to it. C#: adding a parameter with a default value was hedged as breaking only for named arguments. It changes the signature, so existing compiled callers fail with MissingMethodException regardless.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The trigger matches a workflow by its
name:— so the name is an interface, not a label.The five SDK repos called theirs four different things (
Tests,CI,Pull Request), so every caller needed a different value, and naming the wrong one fails silently: no review runs and nothing says why. sdk-java is the trap — itsMainworkflow looks like the obvious candidate and only runs on pushes to main.All five now use
Tests, so the template needs no edit for an SDK repo.Renaming was safe and measured: every required status check in these repos is a job name —
test (3.10),Verify (JDK 17),check (20.x)— so branch protection never referenced a workflow name.setup.mdgains §3a: find the right workflow empirically from the checks on a real PR, not from filenames.Paired with MarketDataApp/sdk-js#86 and MarketDataApp/sdk-java#71.