Skip to content

Catch up the straggler repositories and harden cascade - #4

Merged
alexander-yevsyukov merged 31 commits into
masterfrom
cascade-refresh-219fef6
Oct 9, 2026
Merged

alexander-yevsyukov merged 31 commits into
masterfrom
cascade-refresh-219fef6

Conversation

@alexander-yevsyukov

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

Copy link
Copy Markdown
Contributor

Summary

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:

Repository Catch-up PR Closing config PR
reflect SpineEventEngine/reflect#14 SpineEventEngine/config#784 (also Gradle 9.8.1)
testlib SpineEventEngine/testlib#14 SpineEventEngine/config#785
money SpineEventEngine/money#32 none: config has no Money pin to advance

Changes

cascade

  • 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.

Notes for reviewers

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.
  • pre-pr passed at this PR's HEAD.

🤖 Generated with Claude Code

alexander-yevsyukov and others added 28 commits October 7, 2026 18:12
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>
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>
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>
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>
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>
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>
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>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Record `testlib` at the merge of SpineEventEngine/testlib#14, its straggler catch-up.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
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>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
Copilot AI balanced review requested due to automatic review settings October 8, 2026 19:49
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 8, 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-08T19:51:48.157542Z 574d895 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.

@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: 574d8957f0

ℹ️ 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 docs/rollout/rebuild.md Outdated
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>
@alexander-yevsyukov
alexander-yevsyukov enabled auto-merge (squash) October 8, 2026 19:52

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

It combines orchestration behavior with broad cross-repository state and submodule updates requiring final ecosystem-level review.

0 open findings

What changed in this PR

Records three repository catch-up waves, hardens cascade planning and Java detection, and refreshes Summit tooling and shared configuration.

Changes:

  • Prevents silent Java probe failures and archived-wave overwrites.
  • Adds distinct wave suffixes and documents single-repository catch-ups.
  • Records completed wave state and updates Gradle/config tooling.
File Description
settings.gradle.kts Names the root Gradle project.
init-submodules Adds worktree-aware session initialization.
gradlew.bat Adds the Windows Gradle wrapper.
gradlew Adds the POSIX Gradle wrapper.
gradle/​wrapper/​gradle-wrapper.properties Configures Gradle 9.8.1.
docs/​rollout/​rebuild.md Documents suffixed single-repository waves.
docs/​dependency-graph.md Regenerates graph documentation.
cascade Hardens Java probing and wave planning.
.idea/​live-templates/​README.md Corrects spacing.
.idea/​copyright/​CodeMatters_Open_Source.xml Adds the copyright profile.
.gitignore Refreshes shared ignore configuration.
.agents/​tasks/​toolbase-split-migration.md Records the tool-base migration plan.
.agents/​tasks/​archive/​cascade-refresh-8fddc6f-money.md Records the money wave log.
.agents/​tasks/​archive/​cascade-refresh-8fddc6f-money.json Stores the money wave state.
.agents/​tasks/​archive/​cascade-refresh-219fef6.md Records the reflect wave log.
.agents/​tasks/​archive/​cascade-refresh-219fef6.json Stores the reflect wave state.
.agents/​tasks/​archive/​cascade-refresh-219fef6-testlib.md Records the testlib wave log.
.agents/​tasks/​archive/​cascade-refresh-219fef6-testlib.json Stores the testlib wave state.
.agents/​memory/​own-deprecations-your-change-introduces.md Records the third-party detekt deprecation.
Files not reviewed (1)
  • .idea/copyright/CodeMatters_Open_Source.xml: Generated file

🧠 Review effort: Balanced


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

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

Future refresh waves still exclude the repositories this pull request catches up.

0 open findings

Files not reviewed (1)
  • .idea/copyright/CodeMatters_Open_Source.xml: Generated file
Previously missed (1)

In code that hasn't changed since last review

Medium severity 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.

🧠 Review effort: Balanced

`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>

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

Two submodule pointers lag their current master tips, contradicting the PR description.

0 open findings

Files not reviewed (1)
  • .idea/copyright/CodeMatters_Open_Source.xml: Generated file
Previously missed (1)

In code that hasn't changed since last review

Medium severity 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.

🧠 Review effort: Balanced

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>

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 broad SDK submodule pointer advances span upstream changes not represented in the supplied hunks and warrant final human validation.

0 open findings

Files not reviewed (1)
  • .idea/copyright/CodeMatters_Open_Source.xml: Generated file

🧠 Review effort: Balanced

@alexander-yevsyukov

Copy link
Copy Markdown
Contributor Author

@armiol, PTAL. Strangely, I cannot get an approval from Copilot.

@alexander-yevsyukov
alexander-yevsyukov merged commit 703b104 into master Oct 9, 2026
2 checks passed
@alexander-yevsyukov
alexander-yevsyukov deleted the cascade-refresh-219fef6 branch October 9, 2026 14:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

3 participants