Skip to content

chore(ci): boil-the-ocean (Node 24 bump + claude drop + J5 runner) - #274

Merged
LiuShiyuMath merged 9 commits into
mainfrom
wip/boil-the-ocean-cleanup
May 10, 2026
Merged

chore(ci): boil-the-ocean (Node 24 bump + claude drop + J5 runner)#274
LiuShiyuMath merged 9 commits into
mainfrom
wip/boil-the-ocean-cleanup

Conversation

@LiuShiyuMath

Copy link
Copy Markdown
Owner

Summary

Bundles all 3 PR-able post-PR-#270 follow-ups into one cleanup PR:

  • Node 24 actions bump (deadline 2026-09-16) — 9 active workflows, @v4 → @v5 for actions/checkout, actions/setup-node, pnpm/action-setup, actions/upload-artifact, actions/deploy-pages; @v3 → @v5 for actions/upload-pages-artifact; @v7 → @v8 for actions/github-script. v5 is the minimum Node 24-compatible major; not bumping to absolute latest avoids cross-2-major collateral damage.
  • Drop redundant cloud claude-review workflows.github/workflows/claude.yml + .github/workflows/claude-code-review.yml deleted. Both fail every PR with anthropics/claude-code-action@v1 directory mismatch ... tsconfig.json fd 4 + secrets.ANTHROPIC_API_KEY null. ADR-0007 makes local /review skill the authoritative POSTPR gate; cloud review is supplementary and currently broken. User recommended option A (delete) over continue-on-error or fixing root cause (which needs real Anthropic billing — claude-code-action doesn't accept the MiniMax base URL we use elsewhere).
  • J5 full-curve runner playbookdocs/plans/2026-05-10-inner-loop-on-ci/judge/J5/runner.md is a markdown playbook (NOT a .sh per project's judge-harness rule) walking the operator through 4 manual N-archs (~20-30 min total) for the full loadavg curve. Driver agent cannot spawn user-side Claude Code GUI windows; existing N=5 lite single-point sample (loadavg_1m=8.54 at 32× headroom under threshold) is preserved as samples[0]. loadavg-curve.json.follow_up_for_full_curve now points to the runner.

Out of scope (intentional)

  • MINIMAX_API_KEY rotation (P0 from user) — secret operation, not PR-able. User must run manually.
  • J5 actual data collection — driver agent cannot spawn extra GUI windows. Runner playbook is in scope; running it is not.
  • Bumping to absolute latest action major@v6/@v7/@v9 carry cache key / fetch-tags / ESM-only-require breakage. v5 satisfies the Node 24 deadline cleanly.
  • Touching ci.yml semantics, ADRs, or any package source. Only uses: version pins changed.

Test plan

  • plan.md / research.md / judge.md committed under docs/plans/2026-05-10-boil-the-ocean-cleanup/ with three-section task / expected-outputs / judge-harness rule
  • judge.md is md playbook (forbidden fixed scripts; uses §V1/§V2/§V3 RUN/DUMP/READ structure)
  • V1 evidence: judge/V1/result.json from inner-loop CI run #25628617294 (87s, conclusion=success, all @v5 action steps green)
  • V2 evidence: judge/V2/result.json confirming both claude workflow files physically deleted (find returns [])
  • V3 evidence: judge/V3/result.json confirming runner.md has 4 sections N=1..4, 9 toohot mentions, 0 procedural-step .sh references (2 anti-statement .sh mentions in §0/§1 prove rule compliance not violation)
  • git push origin HEAD:wip/boil-the-ocean-cleanup triggered inner-loop.yml on the bumped actions; all 3 v5 action steps + pnpm install --frozen-lockfile + pnpm test + pnpm verify green
  • PR opened as normal (non-draft) per CLAUDE.md
  • POSTPR /review loop runs and PASSes per ADR-0007 authoritative gate
  • Squash-merge with gh pr merge --squash --delete-branch (no --merge / --rebase)
  • report.md §post-merge section appended after merge with merge SHA + /review verdict

Evidence

  • inner-loop CI: https://github.com/libz-renlab-ai/TeamBrain/actions/runs/25628617294
  • plan: docs/plans/2026-05-10-boil-the-ocean-cleanup/plan.md
  • research: docs/plans/2026-05-10-boil-the-ocean-cleanup/research.md
  • judge harness: docs/plans/2026-05-10-boil-the-ocean-cleanup/judge.md
  • pre-merge report: docs/plans/2026-05-10-boil-the-ocean-cleanup/report.md

🤖 Generated with Claude Code

Three-section plan.md (task / expected outputs / judge.md harness pointer),
research.md context dump (actions tag landscape + claude-action root cause +
J5 driver-agent limits), judge.md md playbook with V1/V2/V3 RUN/DUMP/READ
covering: GH Actions bump CI green, claude workflows real-deletion, J5
runner playbook well-formedness. Per project hard rule: judge harness is md
playbook, not scripts/*.sh.

Verifies post-PR-#270 follow-up bundle (Node 24 deadline 2026-09-16, claude
workflow noise, J5 nice-to-have helper).
GitHub default runner switches to Node 24 on 2026-06-02; v4 actions removed
from Node 20 mode on 2026-09-16. Ahead of that deadline:

- actions/checkout         @v4 -> @v5  (9 workflows, 13 occurrences)
- actions/setup-node       @v4 -> @v5  (9 workflows)
- pnpm/action-setup        @v4 -> @v5  (7 workflows)
- actions/upload-artifact  @v4 -> @v5  (install-verify only)
- actions/upload-pages-artifact @V3 -> @v5  (landing-deploy only)
- actions/deploy-pages     @v4 -> @v5  (landing-deploy only)
- actions/github-script    @v7 -> @v8  (install-canned-answer-check + v5-fixture-replay)

Bump target rationale (research.md §1.2): @v5 is the minimum Node 24
compatible major; @v6/@v7/@v9 each carry collateral changes (cache key
algorithm, fetch-tags defaults, ESM-only require breakage in github-script
v9). One bump, one verifiable goal. CI verifies on wip/** push.

No semantic changes to triggers, env, concurrency, or step ordering.
Both workflows fail on every PR with anthropics/claude-code-action@v1
"Internal error: directory mismatch for directory ... tsconfig.json, fd 4"
plus secrets.ANTHROPIC_API_KEY null (repo only has MINIMAX_API_KEY +
CLAUDE_CODE_OAUTH_TOKEN). Each PR shows red X in statusCheckRollup, pure
visual noise.

ADR-0007 makes local /review skill the authoritative POSTPR gate; cloud
claude-code-action review is supplementary and currently broken. Three
remediation paths considered (research.md §2.4):
  A. delete           — 5 min, no functional loss (ADR-0007 covers)
  B. continue-on-error — 10 min, fake green hides the bug
  C. fix root cause   — 1 hr + real Anthropic billing (MiniMax not supported
                        by claude-code-action)

User recommended A. This commit takes A.

If/when cloud Claude review is wanted again, restore both files and
configure a real ANTHROPIC_API_KEY (not a MiniMax token).
J5 in 2026-05-10-inner-loop-on-ci shipped lite form (single sample at N=5,
loadavg_1m=8.54 vs baseline 274, 32x headroom). Spec asked for a 4-point
curve (N=1/2/3/4); driver agent cannot spawn user GUI Claude Code windows,
so full curve was deferred as nice-to-have follow-up.

This commit adds runner.md — a markdown playbook (NOT a .sh) walking the
operator through 4 N-archs, each ~5 min, total ~20-30 min:
  - N=1 single CC + 1 wip push, toohot --once
  - N=2 two CC sessions push concurrently, toohot --once
  - N=3 three CC sessions, toohot --once
  - N=4 four CC sessions (matches spec baseline N), toohot --once
  - merge into post_change_samples array in loadavg-curve.json

loadavg-curve.json.follow_up_for_full_curve now points to runner.md.
Existing lite single-point sample is preserved (samples[0]); the runner
adds post_change_samples without overwriting baseline or lite evidence.

PASS verdict in _overall/verdict.md is unchanged; this commit ships the
upgrade path, not the upgraded data.
…atement)

Initial V3 spec used `grep -cE '\.sh\b|bash -c' runner.md`, which counted
every '.sh' string including anti-statements like "md playbook (NOT a .sh
script)" in §0 prose — those are PROOF the rule is followed, not violations.

Refined V3.RUN now distinguishes:
  - total_sh_mention_count        (forensic context, all .sh references)
  - procedural_step_sh_mention_count (only §2-§5 step bodies; pass criterion)

awk slice '/^## [2-5] /,/^## [^2-5]/' isolates procedure sections; grep
inside that slice catches violations only. Anti-statements in §0/§1 stay
in the total count but don't gate pass/fail.

Also fixed §V3.RUN grep pattern '^## [0-9]+ N=[1-4]\\b' to match the actual
runner.md heading format '## <num> N=<n>' (was '## N=<n>', missed all 4).
Third-party judge harness §V1/§V2/§V3 RUN+DUMP evidence (READ stage runs
as separate claudefast -p probes per md playbook rule):

V1 (Node 24 bump CI green):
  - ci_run.conclusion=success, status=completed (run #25628617294, 87s)
  - static_check.remaining_v4_or_v3_pins = []  (zero @v4/@V3 in active workflows)

V2 (claude workflows real-deletion):
  - claude_yml_exists=false, claude_code_review_yml_exists=false
  - find_returned_paths=[]  (both files gone from .github/)
  - post_pr_*_runs_count=0  (workflow deletion in same PR; no future trigger)

V3 (J5 runner.md well-formedness):
  - runner_md_exists=true, sections N=1..4 = 4
  - toohot mentions = 9, procedural_step_sh_mentions = 0
  - both '.sh' occurrences classified as anti-statement (§0/§1 rule citations)
  - loadavg_curve.json.follow_up_for_full_curve links runner.md

All three probes satisfy their pass criteria. /review will dispatch
claudefast READ probes to verify independently.
Report status: PR-OPEN. inner-loop.yml CI green (run #25628617294, 87s).
4 atomic commits land plan/research/judge + 9-workflow @v4@v5 bump + 2
claude-workflow deletes + J5 runner playbook.

Risks documented (4 rows): @v5 in PR ci.yml path differing from inner-loop,
github-script @v8 polyfills, upload-pages-artifact @V3@v5 cross-2-major,
and @claude comment expectation post-deletion (mitigated by ADR-0007).

§post-merge section to be appended after squash-merge with merge SHA,
/review verdict, P1/P2 handling, ci.yml + landing-deploy.yml main-push
runs, and worktree cleanup outcome.
… claude-* workflows

Adversarial reviewer (Step 5.7) found 6 docs describing the deleted
claude.yml + claude-code-review.yml workflows as if they were still live.
Mechanical fix-up before merge:

  - docs/POSTPR.md §Caveats: 2 bullets that called the cloud
    claude-code-review.yml the "supplementary signal" rewritten to past
    tense; "Re-trigger /review" bullet no longer references a cloud
    auto-fire counterpart that no longer exists
  - docs/PR-PLAN.md §What it is: review-source list pruned to (CI / local
    /review / human / self-audit); the cloud-action mention now reads
    as a removal note pointing at PR #274
  - docs/HOWTO-PLAN-PR.md §After PR opens: "After PR #190, every PR also
    gets an automated cloud review..." paragraph rewritten to past tense
    and points at the PR #274 deletion + root cause
  - docs/README.md: removed the table row pointing at the now-historical
    features/claude-code-action.md page from the navigation
  - docs/features/INDEX.md: row marked HISTORICAL — feature removed
  - docs/features/claude-code-action.md: deprecation banner at the top
    + §"How the auto-review fires" / §dual-signal-table converted to
    past tense; body kept as historical narrative for anyone arriving
    via stale links

Plus J5 runner.md §2.3 wording fix from /review:
  - 10s wait clarified as "let local git push exit", NOT
    "synchronize with CI runner CPU peak" (CI runs remote; local
    loadavg has no causal link to CI runner CPU)

False-positive findings dismissed (verified, not real):
  - "actions/upload-pages-artifact@v5 doesn't exist" — gh api confirms
    v5.0.0 is the latest tag; release notes show the v3→v5 jump
    internally bumps to upload-artifact v7
  - "pnpm/action-setup@v5 needs explicit `version:` input" — packageManager
    inference from package.json (pnpm@9.15.9) is preserved in v5; CI
    on this PR (ubuntu + windows) already proves it works without
    `version:` set
…eport.md

§review-loop section captures the 10 findings from 2 subagents
(adversarial + distribution-specialist), classified as:

  - 1 TRUE-CRITICAL  (dangling docs) — fixed in commit a3cb647
  - 1 TRUE-INFO      (J5 runner wording) — fixed in same commit
  - 2 FALSE-CRITICAL (v5 doesn't exist / pnpm needs version) — verified
                     against gh api + green CI; agent wrong
  - 6 post-merge INFO (untested workflows + orphaned secret + SHA pin
                     hardening) — accepted as bounded risk

§post-merge stub adds the orphaned CLAUDE_CODE_OAUTH_TOKEN cleanup task
(GitHub repo admin must delete it from Secrets after merge).
@LiuShiyuMath
LiuShiyuMath merged commit 00c87ff into main May 10, 2026
8 checks passed
@LiuShiyuMath
LiuShiyuMath deleted the wip/boil-the-ocean-cleanup branch May 10, 2026 12:47
@LiuShiyuMath

Copy link
Copy Markdown
Owner Author

中文 proof-of-work 图片

TeamBrain PR #274 中文 proof-of-work

LiuShiyuMath added a commit that referenced this pull request May 12, 2026
PR #274 (Node 24 bump) flipped actions/setup-node v4→v5 and pnpm/action-setup
v4→v5 but kept the old v4 ordering. setup-node v5 defaults to
package-manager-cache: true, which probes for pnpm before pnpm/action-setup
gets to install it — breaking the build with:

  ##[error]Unable to locate executable file: pnpm.

The pnpm-recommended order is install-pnpm-first, then setup-node with
cache: pnpm. This restores the same "build green" state as the last
successful run (25589007614 / 2026-05-09).

Verified locally: workflow YAML diff is a 3-line swap; pnpm action 4→5
ordering matches the canonical pattern documented at
https://pnpm.io/continuous-integration#github-actions.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@LiuShiyuMath

Copy link
Copy Markdown
Owner Author

CEO 鸭鸭中文 proof-of-work 人审图

鸭鸭说:这个 PR 已经合进 main。请人类 reviewer 打开 PR,对照 merged 状态、合并时间和 merge commit 后再接受它。

PR #274 CEO duck proof-of-work

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant