Skip to content

fix: preserve automatic gateway startup feedback - #97

Merged
paulcam206 merged 6 commits into
mainfrom
fix/spinner-unicode-capability
Sep 23, 2026
Merged

paulcam206 merged 6 commits into
mainfrom
fix/spinner-unicode-capability

Conversation

@paulcam206

@paulcam206 paulcam206 commented Sep 22, 2026 •

Copy link
Copy Markdown
Collaborator

What Problem This Solves

Fixes: the post-openclaw automatic gateway start falls back to an ASCII spinner on a Unicode terminal, then clears without leaving a success or failure result.

User Impact

User impact: a Unicode-capable interactive terminal keeps the configured Unicode spinner while the gateway starts after openclaw exits, then receives a durable crab-prefixed success, warning, or failure line.

Verified listeners report the observed port. Still-starting or unverified launches direct the user to status instead of encouraging a competing start; definite failures retain the standalone retry command. Redirected and non-Unicode output remain cursor-independent.

Why This Change Was Made

Gateway postflight already determines the selected stderr stream's Unicode capability. The live narration path now carries that decision into the Spectre console instead of recomputing it from a wrapped TextWriter identity.

After Spectre clears the live status, the same postflight writes one typed outcome through the shared ClawCtlConsole rendering contract. This preserves gateway acknowledgement and the upstream openclaw exit code.

Evidence

Observed reproduction

The deployed original head showed the real Unicode spinner:

Unicode gateway-start spinner

After the command returned, no gateway outcome remained:

Missing durable gateway-start outcome

The collected host diagnostics show automatic start beginning at 16:49:35, followed by host exit at 16:50:15 without a completion line. The recorded gateway state and clawctl status --json subsequently reported running on observed port 18789.

Validation

Production behavior was validated at head 4ce6e92ed8156e03f97a4b4c06090ab9885022d3:

  • dotnet test .\tests\OpenClaw.Launcher.Tests\OpenClaw.Launcher.Tests.csproj -c Release --no-restore --filter "FullyQualifiedName~ClawCtlConsoleTests|FullyQualifiedName~AgentGatewayGuidanceTests" — 55 passed.
  • .\scripts\Test-DotNetQuality.ps1 — passed with 0 warnings and 0 errors.
  • .\scripts\Test-NativeAotCli.Tests.ps1 — passed; 24 NativeAOT scenarios passed.
  • .\scripts\Test-DocReferences.ps1 — 0 findings.
  • git diff --check — passed.
  • Functional regression coverage runs narrated automatic startup and observes the durable 🦀 ✓ Gateway: running on port 18789. line after narration completes.
  • .\scripts\Deploy-LocalPackage.ps1 -Architecture x64 -ReplaceExistingInstall — registered OpenClaw.Gateway_0.1.2456.61709_x64__kaa03rpbbqef6 from this worktree.
  • clawctl status --json — succeeded against the deployed package.

CI exposed a timing assumption in the Unicode spinner regression test: the fake start could complete before Spectre rendered its first frame. After #98 merged, ClawSweeper also identified that the test's legacy frame detection would hang against the new crab catalog. Head 530ae7cf31a2c9338dc96ae73301da6009bd90cc integrates current main, waits for any project-owned Unicode or ASCII spinner frame, then asserts that the observed frame belongs to the Unicode catalog. The test uses no sleeps or retries:

  • dotnet test .\OpenClaw.Gateway.MSIX.slnx --configuration Release --no-restore — 1,077 passed.
  • .\scripts\Test-DotNetQuality.ps1 — passed with 0 warnings and 0 errors.
  • .\scripts\Test-NativeAotCli.Tests.ps1 — passed; 24 NativeAOT scenarios passed.
  • .\scripts\Test-DocReferences.ps1 — 0 findings.
  • git diff --check — passed.

The post-change visual automatic-start flow was not rerun because the fresh local registration has no agent gateway configuration. The deterministic functional output test covers the completion behavior without mutating onboarding state.

Not run at exact head 530ae7c: local deployment, signed MSIX composition, signing, or installed-package upgrade tests. The earlier production head was deployed, and the integrated head adds merged #98 spinner behavior plus test synchronization.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: fd24d904-826b-4c4e-bf84-ad9427d8695d
@clawsweeper

clawsweeper Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Sep 22, 2026
@clawsweeper

clawsweeper Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

Codex review: needs maintainer review before merge. Reviewed September 22, 2026, 9:07 PM ET / September 23, 2026, 01:07 UTC (Revision 5).

ClawSweeper review

What this changes

Preserves Unicode progress during automatic gateway startup and prints a lasting success, warning, or failure message with appropriate follow-up guidance.

Merge readiness

✅ Ready for maintainer review

The prior spinner-test blocker is resolved, and no remaining actionable defect was found. The feedback fix remains necessary on current main; the merged spinner change does not supersede it.

Priority: P3
Reviewed head: 530ae7cf31a2c9338dc96ae73301da6009bd90cc

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) A focused repair with the prior blocker addressed, meaningful regression coverage, and reported owning-lane validation.
Proof confidence 🌊 off-meta tidepool Not applicable: The collaborator exemption applies. Screenshots demonstrate the original postflight problem, while reported functional tests cover the durable outcome; deployment/status checks do not prove the after-fix visual flow. No stored-data contract changes.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Not applicable Not applicable: The collaborator exemption applies. Screenshots demonstrate the original postflight problem, while reported functional tests cover the durable outcome; deployment/status checks do not prove the after-fix visual flow. No stored-data contract changes.
Evidence reviewed 9 items Reviewed introduction boundary: Inspected the complete six-file introduced diff from pinned main to head. The verified test merge records the pinned main followed by the exact PR head as its parents.
Prior finding resolved: The regression test now waits for frames from either project-owned catalog, then requires a Unicode frame. GitHub's head-commit patch confirms replacement of the obsolete braille and ASCII-line-character checks. This satisfies the previous finding and its requested catalog update.
Completion ordering and existing lifecycle: The outcome writer runs after awaited narration completes. Startup locking, acknowledgement, eligibility, and the upstream exit-code contract retain their existing owners; the production postflight supplies the new rendering callback.
Findings None None.
Security None None.

How this fits together

After an eligible interactive openclaw command finishes, the Windows launcher starts the managed gateway inside its recorded session. The postflight renderer turns startup progress and the controller’s result into terminal feedback while preserving the command’s exit code.

flowchart LR
  A[OpenClaw command exits] --> B[Check automatic startup eligibility]
  B --> C[Gateway controller]
  D[Terminal capabilities] --> E[Progress narration]
  C --> E
  E --> F[Durable outcome and guidance]
  F --> G[Original command exit code]
Loading

Before merge

None.

Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Production and test growth Production +141/-22 lines; tests +291/-1 lines Production growth implements typed durable outcomes through the existing renderer; test growth covers output states and deterministic spinner observation.

Technical review

Best possible solution:

Keep terminal feedback in the shared renderer, using the controller’s result after narration clears and preserving existing lifecycle and exit-code behavior.

Do we have a high-confidence way to reproduce the issue?

Yes, source establishes that a successful automatic start on current main clears narration without a durable success message; the supplied screenshots corroborate that behavior. No runtime reproduction was executed during this review.

Is this the best way to solve the issue?

Yes, the patch carries the already-resolved terminal capability into the existing renderer and emits the controller’s outcome after narration, without introducing another lifecycle owner.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 8e09f3357665.

Labels

Label changes:

  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🌊 off-meta tidepool and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: The collaborator exemption applies. Screenshots demonstrate the original postflight problem, while reported functional tests cover the durable outcome; deployment/status checks do not prove the after-fix visual flow. No stored-data contract changes.
  • remove rating: 🦐 gold shrimp: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.
  • remove status: ⏳ waiting on author: Current PR status label is status: 👀 ready for maintainer look.
  • remove merge-risk: 🚨 automation: Current PR review selected no merge-risk labels.

Label justifications:

  • P3: This repairs terminal feedback without changing gateway startup eligibility or execution.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🌊 off-meta tidepool and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: The collaborator exemption applies. Screenshots demonstrate the original postflight problem, while reported functional tests cover the durable outcome; deployment/status checks do not prove the after-fix visual flow. No stored-data contract changes.

Evidence

What I checked:

  • Reviewed introduction boundary: Inspected the complete six-file introduced diff from pinned main to head. The verified test merge records the pinned main followed by the exact PR head as its parents. (530ae7cf31a2)
  • Prior finding resolved: The regression test now waits for frames from either project-owned catalog, then requires a Unicode frame. GitHub's head-commit patch confirms replacement of the obsolete braille and ASCII-line-character checks. This satisfies the previous finding and its requested catalog update. (tests/OpenClaw.Launcher.Tests/ClawCtlConsoleTests.cs:274, 530ae7cf31a2)
  • Completion ordering and existing lifecycle: The outcome writer runs after awaited narration completes. Startup locking, acknowledgement, eligibility, and the upstream exit-code contract retain their existing owners; the production postflight supplies the new rendering callback. (src/OpenClaw.Launcher/Gateway/AgentGatewayGuidance.cs:209, 530ae7cf31a2)
  • Result and capability handling: Postflight forwards its resolved Unicode capability into narration. The shared renderer distinguishes Running, Starting, Unknown, and failure outcomes, uses literal Paragraph text, and directs uncertain launches to status. The controller's startup return states match these branches. (src/OpenClaw.Launcher/ClawCtlConsole.cs:135, 530ae7cf31a2)
  • Current main still needs the fix: Current main only writes feedback for unsuccessful automatic starts and does not pass postflight's Unicode decision into narration. The merged feat: add crab-themed progress spinners #98 supplies the animation catalog, not this completion-feedback repair. (src/OpenClaw.Launcher/Gateway/AgentGatewayGuidance.cs:214, 8e09f3357665)
  • Release boundary checked: GitHub identifies v2026.9.4-msix.3 as the latest release. Its guidance implementation emits a start hint and predates automatic gateway startup, so it does not contain this repair. (src/OpenClaw.Launcher/Gateway/AgentGatewayGuidance.cs, ee41ab70e76c)

Likely related people:

  • unknown: The claimed source-line change could not be verified from bounded local history. (role: source history unknown; confidence: low)

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

History

Review history (4 earlier review cycles)
  • reviewed 2026-09-22T21:55:51.247Z sha 9a55ac2 :: needs maintainer review before merge. :: none
  • reviewed 2026-09-23T00:17:28.598Z sha 4ce6e92 :: needs maintainer review before merge. :: none
  • reviewed 2026-09-23T00:29:24.940Z sha 141aa05 :: needs changes before merge. :: none
  • reviewed 2026-09-23T00:35:23.414Z sha 0f0d4aa :: blocked before merge. :: [P2] Observe the current spinner frames instead of legacy dots

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: fd24d904-826b-4c4e-bf84-ad9427d8695d
@paulcam206 paulcam206 changed the title fix: show Unicode gateway spinner after openclaw exits fix: preserve automatic gateway startup feedback Sep 23, 2026
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: fd24d904-826b-4c4e-bf84-ad9427d8695d
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: fd24d904-826b-4c4e-bf84-ad9427d8695d
@clawsweeper clawsweeper Bot added merge-risk: 🚨 automation 🚨 Merging this PR could break CI, automerge, proof capture, label sync, or automation. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Sep 23, 2026
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: fd24d904-826b-4c4e-bf84-ad9427d8695d
@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. merge-risk: 🚨 automation 🚨 Merging this PR could break CI, automerge, proof capture, label sync, or automation. labels Sep 23, 2026
@paulcam206
paulcam206 marked this pull request as ready for review September 23, 2026 01:23
@paulcam206
paulcam206 merged commit 092e451 into main Sep 23, 2026
9 of 10 checks passed
@paulcam206
paulcam206 deleted the fix/spinner-unicode-capability branch September 23, 2026 01:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant