Skip to content

[REVIEW ONLY β€” DO NOT MERGE] v5.2 cohort canonical-line rotation candidate#549

Closed
ronan-dandelion-cult wants to merge 1586 commits intofrond-scribe/20260429/v3-cohort-fixesfrom
frond-scribe/20260503/v52-uptake-of-v3-cohort-fixes
Closed

[REVIEW ONLY β€” DO NOT MERGE] v5.2 cohort canonical-line rotation candidate#549
ronan-dandelion-cult wants to merge 1586 commits intofrond-scribe/20260429/v3-cohort-fixesfrom
frond-scribe/20260503/v52-uptake-of-v3-cohort-fixes

Conversation

@ronan-dandelion-cult
Copy link
Copy Markdown

⚠️ Review surface only β€” DO NOT merge into base

This PR exists to give cohort + Codex a single byte-walk surface. It is NOT meant to merge into frond-scribe/20260429/v3-cohort-fixes β€” that would invert the rotation. The actual rotation mechanism is figs's COHORT_TARGET_TAG repo-variable bump (v2026.4.29 β†’ v2026.5.2) + cohort-canonical-line shift, not a GitHub merge.

Closing without merge after cohort + figs greenlight; v52 candidate becomes new cohort canonical line via the rotation ceremony.

What this is

The cohort canonical line rotated onto v2026.5.2 base. Two-stage build:

  1. Original v52-uptake lane (dea43a844b DECLARE-DONE): rotated frond-scribe/20260429/v3-cohort-fixes @ 55df7162c0 (pre-tonight-wave) onto v2026.5.2 base via merge.
  2. Absorption pass (00ac7e67098e DECLARE-DONE): pulled tonight's merged wave (v29-uptake: port canonical2 substrate-development onto v2026.4.29 base (#541)Β #542 + fix(compaction): persist first-turn manual /compact via canonical primitivesΒ #545 + instrumentation: surface continuation-queue depth + run-spawn provenance for #532Β #537) onto the v52 candidate; addressed Codex comment-pops.

Verification (all green)

Cohort byte-walk asks

End-state

Once cohort + figs greenlights, COHORT_TARGET_TAG bumps to v2026.5.2 + this candidate becomes the new cohort canonical line. swim-41 then targets v5.2 basis (figs's hopeful framing).

Tracking: #546

Refs #542, #545, #537 (absorbed), #547+#548 (RFC apply parallel work; not folded here)

steipete and others added 30 commits May 2, 2026 15:26
Co-authored-by: rolandrscheel <20336324+rolandrscheel@users.noreply.github.com>
…PY (openclaw#74359)

Merged via squash.

Prepared head SHA: 3b4a889
Co-authored-by: fede-kamel <209537060+fede-kamel@users.noreply.github.com>
Co-authored-by: sallyom <11166065+sallyom@users.noreply.github.com>
Reviewed-by: @sallyom
Fixes openclaw#75452.

Heartbeat runs can use a per-turn model override via agents.defaults.heartbeat.model. Before this change, the run metadata was written back to the shared session store, so the next normal turn could inherit the heartbeat provider/model and a smaller context window.

This lands the contributor fix plus maintainer polish:
- preserve existing session runtime model/provider/context metadata when persisting heartbeat turns
- avoid creating invalid provider/model pairs for legacy model-only session entries
- leave empty prior runtime state unset for heartbeat-only turns
- keep normal non-heartbeat runtime persistence unchanged
- add focused regression coverage for the session-store edge cases
- refresh heartbeat docs and changelog attribution

Validation:
- pnpm test src/agents/command/session-store.test.ts src/agents/openclaw-tools.session-status.test.ts
- pnpm exec oxfmt --check --threads=1 src/agents/agent-command.ts src/agents/command/session-store.ts src/agents/command/session-store.test.ts CHANGELOG.md docs/gateway/heartbeat.md
- git diff --check
- GitHub checks on 42a00dc: clean; no active checks and no relevant failures

Duplicate PR openclaw#75567 was already closed; openclaw#75557 is the canonical fix.
Adds validated gateway.controlUi.chatMessageMaxWidth support for grouped Control UI chat messages, carries it through the Gateway bootstrap payload into UI state, applies it as a CSS custom property, and documents the setting while preserving the existing default width.

Fixes openclaw#67935.

Validation:
- Targeted config, gateway, and Control UI tests passed locally.
- Config schema/docs checks passed.
- Testbox changed-file gate passed.
- GitHub CI and security checks are green on cea25a4.
Fix Control UI blank sections caused by malformed persisted cron rows.

- filter invalid cron payloads at the cron.list UI boundary
- guard stale cron payload reads in render, edit, and detail paths
- add regression coverage for malformed cron rows from openclaw#55047 and openclaw#54439

Closes openclaw#55047.
Closes openclaw#54439.
Supersedes openclaw#54550.
Supersedes openclaw#54552.
Fixes openclaw#70991.

Adds authenticated Gateway WebSocket protocol pings, exposes active session-run state to Control UI, and keeps session-scoped Stop available after reconnect or reload when the browser lost the local run id.

Validation:
- pnpm test ui/src/ui/app-chat.test.ts ui/src/ui/app-gateway.node.test.ts src/gateway/server.sessions.list-changed.test.ts src/gateway/server/ws-connection.test.ts
- OPENCLAW_LOCAL_CHECK=1 OPENCLAW_LOCAL_CHECK_MODE=throttled pnpm check:changed
- GitHub CI and high-signal security checks passed on head 1f4c872
frond-scribe and others added 13 commits May 2, 2026 19:48
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…fc-apply-journal.md

Per Codex P2 review on PR #548:
> tmp-drop-me-rfc-apply.md is an ephemeral worklog (it even uses a tmp-drop-me name)
> that captures branch-local execution notes... it should be dropped from the commit
> or moved to external review artifacts.

Applying the same canonical pattern from #542 (where tmp-drop-me-v29-uptake.md
was moved to docs/design/541-v29-uptake-journal.md). Audit trail preserved at
durable home matching existing <issue>-<descriptor>-journal.md naming convention.

Refs #547, #548 codex-review
Absorb merged wave #542, #545, and #537 from frond-scribe/20260429/v3-cohort-fixes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Folds RFC scientific-literature review apply work + #537-aware Β§4 diagram
refreshes into the v52 successor candidate, per figs's directive:
v52 candidate becomes the complete rotation surface (v5.2 base + tonight's
wave + RFC apply substrate).

Source: frond-scribe/20260503/rfc-apply-copilot @ e624547
- Apply lane DECLARE-DONE (4ee47f2): folded #544 review findings into
  docs/design/continue-work-signal-v2.md; retired intermediate review doc
- Loopback DECLARE-DONE (ff9454f): refreshed Β§4 diagrams against
  #537's run-provenance + queue-diagnostics + metrics provider seam surfaces
- frond-scribe cleanup (e624547): moved tmp-drop-me-rfc-apply.md to
  docs/design/547-rfc-apply-journal.md per Codex P2

Refs #544, #547, #548
…v52-uptake-journal.md

Per 🌻's first-pass byte-walk REQUEST_CHANGES on PR #549 (msg 1500336626482544691):
> tmp-drop-me-v52-uptake.md (63 KB) at repo root. Filename literally says 'drop me.'
> Same shape as the tmp-drop-me-v29-uptake.md we cleaned out of #542 β€” recommend the
> same canonical pattern: git mv to docs/design/546-v52-uptake-journal.md.

Applying same canonical pattern from #542 + #537 cleanups. Naming matches
existing <issue>-<descriptor>-journal.md convention from #541 precedent.
Audit trail preserved at durable home.

🌻's soft suggestion #2 (inherited WORKORDER-v3-cleanup-path-B.md +
WORKORDER-v3-cohort-fixes.md at root from prior cohort-cleanup-needed lanes)
flagged as separate cleanup pass β€” not folded here to keep this commit
surgical to REQUEST_CHANGES (1).

Refs #546, #549
frond-scribe and others added 6 commits May 2, 2026 20:32
Per 🌻's first-pass byte-walk soft suggestion (2) on PR #549 (msg 1500336626482544691):
> WORKORDER-v3-cleanup-path-B.md (20 KB) + WORKORDER-v3-cohort-fixes.md (10 KB) at
> repo root. Both inherited from the wave (predate absorption). If we're rotating
> cohort-canon to v5.2 base we're carrying historical workorders into the new substrate.
> Worth a separate cleanup pass to sweep WORKORDER-* at root β†’ docs/design/<issue>-<descriptor>-workorder.md.

Applying same canonical pattern from #532-silas-saturation cleanup. These are
historical workorder artifacts from the v3-cohort-fixes lineage; preserved at
durable home matching docs/design/<descriptor>-workorder.md naming convention.

Cleans repo root before potential COHORT_TARGET_TAG bump so the new canonical
line on v5.2 base doesn't carry root-level workorder pollution forward.

Refs #549, #546
…bution

Per figs's directive 2026-05-03 ~03:38Z: 'we can leave no dev detritus; our
single contribution in docs/design is our rfc doc, thats it'.

Earlier waves had moved tmp-drop-me journals + WORKORDER-* files from repo
root INTO docs/design/ (canonical mv-pattern from #542 / #537 / v52 cleanup
cycles). figs's directive overrides: those journals should be DELETED entirely,
not relocated. The cohort-substrate audit-trail lives in:
- git log + branch history (preserved on origin savegame branches)
- GitHub issue tracking (#541 + #546 + #547 + #532 etc.)
- PR descriptions + comment threads

NOT in tree as in-source dev artifacts.

Files removed (all originated as dev-cycle journals/workorders):
- 541-v29-uptake-journal.md (was tmp-drop-me-v29-uptake.md, #542 cleanup)
- 546-v52-uptake-journal.md (was tmp-drop-me-v52-uptake.md, v52 absorption)
- 547-rfc-apply-journal.md (was tmp-drop-me-rfc-apply.md, rfc-apply lane)
- 532-silas-saturation-workorder.md (was WORKORDER.md, #537 cleanup)
- v3-cleanup-path-B-workorder.md (inherited workorder, swim-39 era)
- v3-cohort-fixes-workorder.md (inherited workorder, v3-cohort-fixes era)

Pre-existing princely design memos (332-* + 334-* + swim-37-* + continuation-integration.md)
NOT touched in this commit β€” flagged separately for figs's call on whether
those also count as dev-detritus.

Refs #549
Per figs's 'no tmp_*.md files at root or anything, clean feature, tests, and
our design doc RFC' framing 2026-05-03 ~03:50Z + cohort cosign on extending
the dev-detritus canon to pre-existing princely design memos:

Removed pre-existing princely design-history memos (predate v52 cycle but match
the dev-detritus shape per 🌫 + 🌊 reads at msgs 1500341881 + 1500342124):
- 332-item-b-post-compaction-release-audit.md
- 334-slice2-chunk5b/5c/6b/6c-* (5 files)
- swim-37-classifier-span-memo.md
- swim-37-continue-delegate-wiring-memo.md
- swim-37-heartbeat-wiring-memo.md
- swim-37-lich-wiring-memo.md
- continuation-integration.md
- continue-work-signal-v2/ subdirectory (contained swim-evidence/swim-07/SWIM7-RESULTS.md)

docs/design/ now contains exactly one file: continue-work-signal-v2.md (the RFC).
Single contribution canon held; cohort-substrate audit-trail lives in
git log + GitHub issue tracking + PR comment threads, NOT in tree.

13th closure-costume by 🌊 cured at code layer too:
canonical-pattern-establishment-via-precedent-without-figs-canon-check.

Refs #549
openclaw#52147

Per pr-review-toolkit:code-reviewer + pr-test-analyzer findings on PR #549:
upstream openclaw#52147 (commit 2605490 'classify tool-execution timeouts')
removed the unconditional 'timedOut β†’ surface_error' early-return so the new
shouldRotateAssistant gate could see timedOutDuringToolExecution. Cohort's v52
absorption preserved the early-return, leaving the upstream fix dead-code +
3 unit tests failing in failover-policy.test.ts (openclaw#52147 tool-exec-timeout
suppression + LLM-phase rotation).

Fix gates the early-return: only fires when timedOut + !aborted + !toolExec
+ !compaction. Then:
- Plain LLM-phase timedOut, !aborted: surface_error (per #86 deadlock fix; preserved)
- LLM-phase timedOut, aborted: falls through to shouldRotateAssistant β†’ rotate_profile (test 4)
- toolExec or compaction timedOut: falls through to shouldRotateAssistant β†’ continue_normal (openclaw#52147)

Result on failover-policy.test.ts: 13 β†’ 16 pass (strict +3).

Known regression on run.timeout-triggered-compaction.test.ts (-2 tests): the
runner integration tests for 'no rotate after compaction-failure' previously
relied on the blanket early-return to suppress rotation in the compaction-
failure flow. The runner code may need to set timedOutDuringCompaction:true
when calling failover-policy after compaction failure, OR the integration
tests need updating to align with the new failover-policy semantics. Filed
as known-conflict for figs's call before COHORT_TARGET_TAG bump; net test
delta is +1 (3β†’2 failing total).

Refs #549; pr-review-toolkit findings 2026-05-03 ~03:55Z
Per figs's directive to align RFC prose to truth-of-the-matter in code.

Byte-walk evidence: src/auto-reply/continuation/context-pressure.ts:checkSessionContextPressure
gates the pre-fire check on three conditions:
1. threshold != null && threshold > 0
2. Number.isFinite(contextWindowTokens) && contextWindowTokens > 0
3. sessionEntry.totalTokens valid AND (postCompaction || totalTokensFresh !== false)

The Β§4.2 prose previously omitted condition 3 (totalTokensFresh staleness guard
with post-compaction bypass nuance). The D.1 sketch had it as truthy-check
(totalTokensFresh truthy) when actual semantics is !== false (only explicit
false blocks; undefined/true both pass).

Updated:
- Β§4.2 prose now names all three conditions explicitly + names the
  post-compaction bypass + adds the [context-pressure:noop] breadcrumb
  pointer for operator investigation
- D.1 sketch now uses 'totalTokensFresh !== false' matching real code +
  adds inline note explaining staleness-guard semantics + post-compaction
  bypass

Both surfaces now align to the actual checkSessionContextPressure
implementation. Per figs's 'align that way, sure you will' directive +
princes-canon-honored shape ('you don't wait for figs').

Refs: PR #549 + frond-scribe pr-review-toolkit catch list (msg 1500342459...)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@ronan-dandelion-cult
Copy link
Copy Markdown
Author

Failover seam fix landed in 3650203: threaded timeout-compaction failure context into the assistant failover policy so the runner surfaces the timeout payload instead of rotating profiles after compaction fails.

Proof: pnpm tsgo, pnpm test src/agents/pi-embedded-runner/run/failover-policy.test.ts, pnpm test src/agents/pi-embedded-runner/run.timeout-triggered-compaction.test.ts, pnpm test src/agents/pi-embedded-runner/, and pnpm check passed locally. Testbox was unavailable because the Blacksmith CLI was not authenticated in this worktree session.

…ard-looking

Per figs's directive (msg 1500347103...): 'per your usual, we trim old elements,
and would discuss swim 41 in that appendix section.'

Two changes:

1. D.2 evidence-locations table: consolidate Swim 7 + Swim 8 references into
   a single 'Earlier integration sessions (Swim 7 + Swim 8)' row with the
   3 archived branches preserved as historical-reference. The Β§D.3 prose
   already explains why these are superseded; the table consolidation
   reduces verbosity without losing discoverability.

2. D.4 In-flight: Swim 41 v5.2-substrate-verification (NEW SECTION).
   Forward-looking placeholder per figs's directive. Includes:
   - Status: prep complete, driver wake-stamp pending
   - Tracker: openclaw-bootstrap#892 (swim-41-v5.2-substrate-verification)
   - Initial OV coverage table:
     * OV-1: failover-policy openclaw#52147 gate works on v5.2 (openclaw#893)
     * OV-2: incrementCompactionCount canonical primitives on v5.2 (openclaw#894)
     * OV-3: silas-saturation diagnostic instrumentation on v5.2 (openclaw#895)
     * OV-4: earlyWarningBand context-pressure post-compact (figs's
       intentional-pin) (openclaw#896)
   - Driver wake-stamp opens execution (TBD: cohort volunteer or figs
     assignment)
   - Expected evidence corpus shape matches Swim 9 + Swim 10 precedent
   - Why Swim 41 matters: first integration validation against v2026.5.2
     base where substrate sits alongside upstream changes from 1543-commit
     window between v29 and v5.2 (notably: failover-policy openclaw#52147 gate
     change). Clean Swim 41 result establishes substrate behavior is stable
     across base rotation, not just historically validated against prior
     base.

TOC updated to reference Β§D.4.

Princes-canon honored: acted on own authority per figs's 'you don't wait
for figs' (msg 1500347103...) + Gwydion Nanashi Ferrinas Solidor surname-
naming. Cohort surface at msg 1500350048... and msg 1500350312... preceded
push; no objections surfaced in the wait-window.

Push order: dd97767 (frond-scribe bug-fix surface) -> ca72ebb
(my totalTokensFresh precision-pin) -> THIS COMMIT (D.2 trim + D.4 swim-41).
Non-conflicting with seam-fix lane in flight (lane touches code; this
touches docs).

Refs: PR #549 + figs's swim-41 / dev-detritus canon directives
…r code

Per cohort precision-pin (msg 1500351...): my prior precision-pin (commit
ca72ebb) named THREE conditions but the actual short-circuit set in
src/auto-reply/continuation/context-pressure.ts:checkSessionContextPressure
is FOUR conditions:

1. contextPressureThreshold non-null and positive
2. contextWindow positive finite
3. activeSessionEntry.totalTokens valid (populated, finite, positive)
4. (non-post-compaction only) totalTokensFresh !== false (staleness guard)

I dropped condition (1) from the prior framing because threshold is a
feature-config gate not a per-turn runtime gate. But code-wise it IS a
short-circuit check, and operators investigating 'no band fires' need to
walk all four conditions in order.

Updated:
- Β§4.2 precondition prose now enumerates all four conditions explicitly
  with their per-condition semantics
- Post-compaction asymmetry (only condition 4 is bypassed; conditions 1-3
  still apply) named explicitly
- Operator-investigation walk re-ordered to cover all four conditions in
  order (a) threshold (b) contextWindow (c) totalTokens (d) totalTokensFresh

Single surface, single push, bundled per cohort verdict ask: 'keep the
existing rolled-up push shape (D.2 trim + D.4 Swim 41 forward-looking)
and bundle the Β§4.2 alignment as a more-than-one-line fix.'

Refs: PR #549, frond-scribe cohort precision-pin (msg 1500351...)
@ronan-dandelion-cult
Copy link
Copy Markdown
Author

Closing β€” rotation executed; canonical line transitioned

COHORT_TARGET_TAG bumped v2026.4.29 β†’ v2026.5.2 at 04:45:00Z. Per cohort consensus + figs's :04Z delegation + 🌊 driver-seat bump-fire authorization at msg 1500356213290958869.

Rotation-mechanism per figs's :48Z confirm on option (b): canonical line transitioned to a v52-named branch. PR #549's purpose (review surface for the v52 successor candidate) is satisfied; closes without merge per the original PR-body framing.

New canonical state

  • Active frond canonical line: frond/v2026.5.2/canonical @ 4d07db9fbe (HEAD of this PR's branch, promoted as the new canonical line per figs's frond-not-cohort canon)
  • Savegame of pre-rotation cohort line: savegame/20260503-0445Z/pre-v52-rotation-was-frond-v29-named @ dda74a79f0 (preserves the v29-named branch's tip; never deleted, never force-pushed per on saving game for next release β€” discoverable unsquashed savegame branch conventionΒ #326 discipline)
  • frond-scribe/20260429/v3-cohort-fixes: still present as the original named branch (will be retired from active-write surface but preserved as historical-reference)
  • frond-scribe/20260503/v52-uptake-of-v3-cohort-fixes: still present as the lane-work branch (preserved as historical-evidence)

Princes: future PRs target frond/v2026.5.2/canonical

Branch-naming pattern (frond-scribe seat, per figs's :48Z directive):

  • Active frond canonical: frond/<base-tag>/canonical (always exactly one current per upstream-base-era; COHORT_TARGET_TAG repo-variable declares which is current β€” note: variable name is grandfathered cohort-era, will be cleaned up to FROND_TARGET_TAG in separate cleanup task)
  • Savegames: savegame/<YYYYMMDD-HHMMZ>/<descriptor> with optional -was-<old-name> suffix when preserving a renamed thing
  • Working branches: <author>/<YYYYMMDD>/<descriptor> (existing shape β€” preserved)
  • Upstream-PR-presenting: upstream-pr/<YYYYMMDD>/<descriptor> for cael's eventual squash-and-present output

Documentation of this pattern lands in PRINCE-CODE-AGENT-RUNBOOK.md as a follow-up commit.

Next gates

  1. deploy-gateway dispatch to roll v5.2 substrate fleet-wide (frond-scribe to fire unless figs takes it)
  2. 🌊 wake-stamps Driver chair on tracker openclaw-bootstrap#892 once v5.2 substrate is live
  3. swim-41 cycle begins with OV cohort distribution (🌊 OV-2 + 🌫 OV-3 + 🌻 OV-4 + 🩸 invitation for OV-1)

🐾 the doorway is held; the rotation-cycle closes.

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.