Skip to content

Run the dependency update wave and harden cascade - #5

Open
alexander-yevsyukov wants to merge 29 commits into
masterfrom
cascade-refresh-a0cbbbf
Open

alexander-yevsyukov wants to merge 29 commits into
masterfrom
cascade-refresh-a0cbbbf

Conversation

@alexander-yevsyukov

@alexander-yevsyukov alexander-yevsyukov commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

The summit side of the cascade-refresh-a0cbbbf wave, which propagates the external dependency refresh in config@a0cbbbf (Gradle 9.8.1, Kotlin 2.4.21, Protobuf 4.36.2, KSP 2.3.12, Jackson, H2 2.5, SPDX SBOM publishing, …) to every SDK repository.

This PR stays open while the wave runs: the cascade script keeps committing the wave state (Update cascade state) to this branch until the closing config PR. Please don't merge it before the wave closes.

Changes

  • Rename the delivery-server submodule to delivery. The repository is now SpineEventEngine/delivery, so the submodule's name, path, and URL follow it. cascade, the dependency graph, the README, and the rollout docs use the new name. The Maven artifact is still spine-delivery-server, so the registry probe is unchanged.
  • cascade prep checks config out at the recorded commit before ./config/pull. git pull moved the recorded pointer without the checkout, so the tree looked dirty and prep stopped. An uninitialized config (as in delivery) was mistaken for a repo that does not consume config and silently skipped the pull.
  • cascade graph counts config's accessor aliases. classpath(spineCompiler.pluginLib) in core-jvm and jdbc-storage created no compiler edge, so the wave never re-pinned the Compiler there; both repos then built against the published Compiler and its transitive tool-base artifacts, which bundle the old Protobuf runtime. The regenerated graph gains compiler -> core-jvm and compiler -> jdbc-storage.
  • cascade detects partial publishes. A repo counted as published-remote as soon as the registry served its marker artifact, but a publish.yml run that fails midway has already uploaded some modules (compiler .072 reached the registry without compiler-testlib). cascade now also checks the publish run for the merge commit: a failure yields publish-failed with a FIX-PUBLISH action, and ship refuses such an upstream. A merged repo whose publish failed before uploading anything (validation .465 hit HTTP 429) is now merged or publish-failed too, instead of reading as unprepared and asking for prep again.
  • cascade detects version collisions with the base branch. The registry serving a repo's wave version proved nothing when the base branch had taken the same version first: core-jvm .571 merged on master while the wave's .571 was unshipped, so the wave showed core-jvm as published, and downstream repos would have shipped against master's build. cascade now also requires the wave's own PR to have merged; otherwise the state is collision with a REBUMP action, and ship refuses such an upstream — or one whose version moved past the recorded pin.
  • Allow ./gradlew clean without a permission prompt in .claude/settings.json (owner's request).
  • Wave state in .agents/tasks/cascade-refresh-a0cbbbf.{json,md} — archived when the wave closes.

Wave so far

Merged and published: base-libraries#967, reflect#15, dokka-tools#12, logging#151, testlib#15, tool-base#195, ProtoTap#23, and compiler .074 (compiler#92, after .072 from compiler#91 published partially). The rest re-pin to Compiler .074, rebuild, and ship as their upstreams publish; core-jvm re-bumped to .572 after the collision. BuildSpeed is parked (verify-only).

Checks

Summit has no build. bash -n cascade, shellcheck (no new warnings over master), and ./cascade graph --check pass; review-docs approved the prose.

🤖 Generated with Claude Code

alexander-yevsyukov and others added 11 commits October 15, 2026 20:13
The repository was renamed on GitHub to `SpineEventEngine/delivery`, so the
submodule's name, path, and URL now follow it. The `cascade` script, the
dependency graph, the README, and the rollout docs use the new name. The
Maven artifact is still `spine-delivery-server`, so the registry probe
marker is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`prep` pulls the consumer's base branch, which moves the recorded `config`
pointer but not its checkout, so the tree looked dirty and `prep` stopped.
A repository whose `config` submodule was never initialized passed for one
that does not consume `config` and silently skipped the pull. `prep` now runs
`git submodule update --init -- config` right after branching.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cascade waves run clean builds routinely; the owner approved moving the rule
from "ask" to "allow".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`cascade graph` saw local objects only as `Obj.member` or
`io.spine.dependency.local.Obj.member`. Build scripts that load the Compiler
through `config`'s accessors — `classpath(spineCompiler.pluginLib)` in
`core-jvm` and `jdbc-storage` — therefore had no `compiler` edge, so waves never
re-pinned the Compiler there. Those repos then built against the published
Compiler and its transitive tool-base artifacts, which bundle an older Protobuf
runtime.

The derivation now treats `spineCompiler.member` and `coreJvmCompiler.member`
like their objects (references in `force(...)` still create no edge), and
`id(<accessor>.pluginId)` as a plugin application. The regenerated graph gains
`compiler -> core-jvm` and `compiler -> jdbc-storage`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Address the documentation review: name the accessors that have a `pluginId`
form, say what the false `prep` error is, and quote `delivery` as a name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 16, 2026 16:09
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-16T16:13:04.768515Z 2108d3b PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The wave remains active, and merging must wait for wave closure and final human review.

0 open findings

What changed in this PR

Supports the SDK-wide dependency refresh wave and hardens summit’s cascade orchestration.

Changes:

  • Renames delivery-server to delivery across submodule configuration and documentation.
  • Initializes config at its recorded commit and recognizes compiler accessor aliases in dependency discovery.
  • Records wave progress and allows ./gradlew clean without a permission prompt.
File Description
README.md Updates the delivery repository name and link.
docs/​rollout/​rebuild.md Updates the delivery publishing prerequisite.
docs/​dependency-graph.md Renames delivery and adds compiler dependency edges.
cascade Hardens config preparation and compiler dependency discovery.
.gitmodules Renames the delivery submodule and URL.
.claude/​settings.json Allows Gradle clean without prompting.
.agents/​tasks/​toolbase-split-migration.md Updates the delivery reference.
.agents/​tasks/​cascade.md Updates delivery references in task documentation.
.agents/​tasks/​cascade-refresh-a0cbbbf.md Records wave progress and decisions.
.agents/​tasks/​cascade-refresh-a0cbbbf.json Records machine-readable wave state.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2108d3b59a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread cascade Outdated
@alexander-yevsyukov alexander-yevsyukov self-assigned this Oct 16, 2026
@alexander-yevsyukov alexander-yevsyukov moved this to 🏗 In progress in v2.0 Oct 16, 2026
@alexander-yevsyukov alexander-yevsyukov changed the title Run the cascade-refresh-a0cbbbf wave and harden cascade Run the dependency update wave and harden cascade Oct 16, 2026
alexander-yevsyukov and others added 10 commits October 16, 2026 17:18
The alias scan's `grep` exits 1 when a repository references no
`spineCompiler`/`coreJvmCompiler`, and `pipefail` turned that into a failed
`objs` assignment. It only went unnoticed because `derive_scoped` runs inside
command substitutions, where `errexit` is not inherited.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`cascade` took the registry serving a repo's marker artifact as proof of a
complete publish. A `publish.yml` run that fails midway has already uploaded
some modules: compiler `.072` reached the registry without `compiler-testlib`,
`cascade` marked it `published-remote`, and `validation` shipped into a CI that
could not resolve the missing module.

`publish_verdict` now reads the conclusion of the `publish.yml` run for the
merge commit of the repo's wave PR. A failed run yields the new state
`publish-failed` (with the run linked in `status` and a `FIX-PUBLISH` action),
a running one stays `merged`, and `ship` refuses an upstream whose publish
failed. Without a recorded PR or run, the registry remains the evidence.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A repo counted as published as soon as the registry served its wave target
version. When the base branch takes the same version first, that copy is the
base branch's build, not the wave's: core-jvm `.571` merged on master while
the wave's `.571` was still unshipped, so `status` showed it published and
downstream repos would have shipped against it.

`cascade` now requires the wave's own PR to have merged. Otherwise the state
is `collision`, and `next` asks to `REBUMP` the repo. `ship` refuses such an
upstream, and also an upstream whose target moved past the recorded pin while
the old pin stays public.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Name the repo whose wave PR must merge, document exit 3 from the upstream gate, and align the `FIX-PUBLISH` and `REBUMP` re-pin instructions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
alexander-yevsyukov and others added 8 commits October 17, 2026 00:19
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When a repo's wave PR has merged but the registry does not serve its target
yet, `derive_state` fell through to the branch checks. A publish that failed
before uploading anything (validation `.465` hit HTTP 429 while configuring)
plus commits pushed to the branch after the merge then read as `pinned`, and
`next` asked to `prep`, which would bump the repo again.

Such a repo is now `merged`, or `publish-failed` once its publish run failed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: 🏗 In progress

Development

Successfully merging this pull request may close these issues.

2 participants