You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Catch up the straggler repositories and harden cascade - #4
Records the straggler catch-up of reflect, testlib, and money (wave 2 of the
cascade roadmap), fixes two cascade bugs it surfaced, and refreshes summit's
own tooling and submodule pointers.
The three repositories were caught up one at a time, each through its own
single-repo wave:
require_java no longer dies silently. Under set -euo pipefail, probing ${JAVA_HOME:-/nonexistent}/bin/java failed the pipeline and aborted every prep/build with exit 127 and no message when JAVA_HOME was unset, before
the JDK 17 fallback could run.
plan no longer overwrites an archived wave. It wrote the manifest through manifest_path, which falls back to archive/. Waves planned against the same config commit share a slug, so planning testlib overwrote reflect's
archived manifest. plan now writes to .agents/tasks/<slug>.json explicitly,
refuses a slug that is already archived, and accepts --slug-suffix <word> for
one-repository-at-a-time waves (documented in docs/rollout/rebuild.md).
The former stragglers are no longer excluded. With all three caught up, plan stops leaving reflect, testlib, and money out of refresh waves
by default, so they don't fall behind again; the rollout text is updated.
documentation is described as the documentation area of the spine.io site,
in the graph template and in plan's exclusion reason; docs/dependency-graph.md
is regenerated.
Repository setup
settings.gradle.kts names the root project summit, plus a Gradle wrapper,
bumped to 9.8.1. summit still has no build tasks; every submodule keeps its
own settings file.
./config/pull to config@3409e7dd. summit's own .claude/settings.json is
kept: the shared copy would drop its git push --force deny rules, its git commit and ./cascade allowances, and the git tag ask rule. The pull
overwrites that file every time, so this needs a decision (upstream the rules
to config, or stop distributing the file to summit).
The IntelliJ inspection profile change and the tool-base split migration plan,
committed as they were in the working tree.
State and memory
The wave state for the three waves, archived under .agents/tasks/archive/
(cascade-refresh-219fef6, cascade-refresh-219fef6-testlib, cascade-refresh-8fddc6f-money).
Team memory: detekt's Configuration.setVisible(boolean) deprecation, first
reported by Gradle 9.8, joins the list of third-party deprecations not to chase.
Submodule pointers
Every initialised submodule is recorded at its master tip as of 2026-10-08
(verified against origin/master when the pointers were last updated), including
the merged catch-ups and the upstream fixes below. A submodule's master can move
on before this PR merges; that drift is expected and gets picked up by the next
pointer update. documentation is not initialised here and is unchanged.
Possible cascade refinement, not done here: close stages an empty config
branch when no pin needs advancing (as for money); it could finish the wave
instead.
Review follow-ups not applied here
pre-pr reviewers approved; these suggestions were left for a follow-up:
The graph template writes dokka-tools -> base-libraries while the rest of the
doc uses -->. The template already had -> on master; the regenerated doc
now shows it.
plan still overwrites an active manifest with the same slug (its .md is
kept); the new guard covers only archived waves.
Wording nits in the team-memory note.
Verification
bash -n cascade passes under bash and macOS /bin/bash 3.2.
The require_java fix was exercised with JAVA_HOME unset, pointing at /nonexistent, at a broken java, at an old JDK, and at JDK 17 and 21.
The plan fix was exercised against the real wave state: re-planning an
archived slug and a malformed suffix both refuse without writing anything; a
suffixed plan creates its files at the top level and leaves the archive
byte-identical.
./cascade graph --check passes; ./gradlew help configures root project summit.
Under `set -euo pipefail`, probing `${JAVA_HOME:-/nonexistent}/bin/java`
failed the pipeline and aborted the script with exit 127 and no message,
before the JDK 17 fallback could run. Tolerate the failed probe so the
fallback runs and the existing "no JDK found" error stays the only failure.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`documentation` is the documentation area of the spine.io site, not only
a Spine 1.x project. Correct the note in the graph template and the reason
`plan` prints for excluding the repository, and regenerate
`docs/dependency-graph.md`, which also brings it in line with the template's
current formatting.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Record the commits currently checked out:
- `agents`, `base-libraries`, `config`, `core-jvm-compiler`, `gcloud-jvm`,
and `jdbc-storage`: their `master` tips.
- `core-jvm`: a commit on its `claude/*` branches, not yet on `master`.
- `reflect`: the head of the open straggler catch-up PR
(SpineEventEngine/reflect#14, branch `cascade-refresh-219fef6`).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Gradle 9.8 reports `Configuration.setVisible(boolean)` as deprecated. The call
comes from the detekt Gradle plugin, like the `ReportingExtension.file` warning
already listed, so no Spine repository can fix it in its own code.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`plan` wrote the new manifest through `manifest_path`, which falls back to
`archive/` when no active manifest exists. Planning a wave whose slug matched
an archived one therefore overwrote the archived manifest. Successive
single-repo waves against the same `config` commit share a slug, so this hit
the straggler catch-up when `testlib` followed `reflect`.
Write the manifest to the top level explicitly, refuse a slug whose wave is
already archived, and add `--slug-suffix <word>` to give such a wave its own
name. Document the one-repository-at-a-time recipe in `rebuild.md`.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Record `config` at the merge of SpineEventEngine/config#784, which bumps Gradle to 9.8.1 and closes the `reflect` catch-up wave.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Record `config` at the merge of SpineEventEngine/config#785, which closes the `testlib` catch-up wave.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pull `config@3409e7dd`. Keep `summit`'s own `.claude/settings.json`: the shared
copy would drop its `git push --force` deny rules, its `git commit` and
`./cascade` allowances, and the `git tag` ask rule.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Record the `master` tips of `agents`, `core-jvm`, `core-jvm-compiler`,
`delivery-server`, `dokka-tools`, `money` (with the merged straggler catch-up,
SpineEventEngine/money#32), and `reflect` (moved off its merged wave branch).
`tool-base` stays as it is: its checkout is on a feature branch of a separate task.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Record `tool-base` at the merge of SpineEventEngine/tool-base#193, which stops `GeneratedSourcePlugin` from invoking `Task.project` at execution time.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each `--exclude` takes one repository, so a space-separated list after a single `--exclude` stops `plan` with its usage message. Repeat the option in the example and say so in the prose; also note that the shared-name case applies to `refresh` waves.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Stop excluding migrated repositories from future refresh plans
cascade:127
The three repositories have now completed their catch-up PRs, but this function still classifies reflect, money, and testlib as migration stragglers on the following branch. Consequently, every ordinary future refresh plan will continue to exclude them and let them fall behind again. Remove that default exclusion and update the rollout text that says their first pull is still a migration.
`reflect`, `testlib`, and `money` are caught up (SpineEventEngine/reflect#14,
SpineEventEngine/testlib#14, SpineEventEngine/money#32), so their first
`config/pull` is no longer a migration. Excluding them by default would let
them fall behind again. Drop the default exclusion and update the rollout
text: the single-repository wave example no longer needs `--include`, and the
`retarget` prerequisite is stated for every repository.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Refresh stale submodule pointers or narrow synchronization guarantee
settings.gradle.kts:1
The PR description says every initialized submodule is recorded at its master tip, but the current gitlinks are already behind: core-jvm pins f8e4d7b while master is b754cee, and core-jvm-compiler pins 69cf17b while master is 0367f7f. Both newer commits merged before this PR's current HEAD, so please refresh those pointers or narrow the stated synchronization guarantee.
Record the current `master` tips of `core-jvm` and `core-jvm-compiler`, which advanced after the previous pointer update.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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
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.
Summary
Records the straggler catch-up of
reflect,testlib, andmoney(wave 2 of thecascade roadmap), fixes two
cascadebugs it surfaced, and refreshessummit'sown tooling and submodule pointers.
The three repositories were caught up one at a time, each through its own
single-repo wave:
configPRreflecttestlibmoneyconfighas noMoneypin to advanceChanges
cascaderequire_javano longer dies silently. Underset -euo pipefail, probing${JAVA_HOME:-/nonexistent}/bin/javafailed the pipeline and aborted everyprep/buildwith exit 127 and no message whenJAVA_HOMEwas unset, beforethe JDK 17 fallback could run.
planno longer overwrites an archived wave. It wrote the manifest throughmanifest_path, which falls back toarchive/. Waves planned against the sameconfigcommit share a slug, so planningtestliboverwrotereflect'sarchived manifest.
plannow writes to.agents/tasks/<slug>.jsonexplicitly,refuses a slug that is already archived, and accepts
--slug-suffix <word>forone-repository-at-a-time waves (documented in
docs/rollout/rebuild.md).planstops leavingreflect,testlib, andmoneyout ofrefreshwavesby default, so they don't fall behind again; the rollout text is updated.
documentationis described as the documentation area of the spine.io site,in the graph template and in
plan's exclusion reason;docs/dependency-graph.mdis regenerated.
Repository setup
settings.gradle.ktsnames the root projectsummit, plus a Gradle wrapper,bumped to 9.8.1.
summitstill has no build tasks; every submodule keeps itsown settings file.
./config/pulltoconfig@3409e7dd.summit's own.claude/settings.jsoniskept: the shared copy would drop its
git push --forcedeny rules, itsgit commitand./cascadeallowances, and thegit tagask rule. The pulloverwrites that file every time, so this needs a decision (upstream the rules
to
config, or stop distributing the file tosummit).tool-basesplit migration plan,committed as they were in the working tree.
State and memory
.agents/tasks/archive/(
cascade-refresh-219fef6,cascade-refresh-219fef6-testlib,cascade-refresh-8fddc6f-money).Configuration.setVisible(boolean)deprecation, firstreported by Gradle 9.8, joins the list of third-party deprecations not to chase.
Submodule pointers
Every initialised submodule is recorded at its
mastertip as of 2026-10-08(verified against
origin/masterwhen the pointers were last updated), includingthe merged catch-ups and the upstream fixes below. A submodule's
mastercan moveon before this PR merges; that drift is expected and gets picked up by the next
pointer update.
documentationis not initialised here and is unchanged.Notes for reviewers
above:
tool-base'sGeneratedSourcePlugin(Stop invokingTask.projectwhen copying generated sources tool-base#193) andcore-jvm-compiler'sWriteCompilerPluginsSettings(Stop calling
Task.projectin thewriteSpineCompilerPluginsSettingsaction core-jvm-compiler#116, #117) calledTask.projectat executiontime, which fails in Gradle 10.
cascaderefinement, not done here:closestages an emptyconfigbranch when no pin needs advancing (as for
money); it could finish the waveinstead.
Review follow-ups not applied here
pre-prreviewers approved; these suggestions were left for a follow-up:dokka-tools -> base-librarieswhile the rest of thedoc uses
-->. The template already had->onmaster; the regenerated docnow shows it.
planstill overwrites an active manifest with the same slug (its.mdiskept); the new guard covers only archived waves.
Verification
bash -n cascadepasses under bash and macOS/bin/bash3.2.require_javafix was exercised withJAVA_HOMEunset, pointing at/nonexistent, at a brokenjava, at an old JDK, and at JDK 17 and 21.planfix was exercised against the real wave state: re-planning anarchived slug and a malformed suffix both refuse without writing anything; a
suffixed plan creates its files at the top level and leaves the archive
byte-identical.
./cascade graph --checkpasses;./gradlew helpconfigures root projectsummit.pre-prpassed at this PR's HEAD.🤖 Generated with Claude Code