Repository navigation
fix: preserve automatic gateway startup feedback - #97
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: fd24d904-826b-4c4e-bf84-ad9427d8695d
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs maintainer review before merge. Reviewed September 22, 2026, 9:07 PM ET / September 23, 2026, 01:07 UTC (Revision 5). ClawSweeper reviewWhat this changesPreserves 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 Review scores
Verification
How this fits togetherAfter 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]
Before mergeNone. Agent review detailsSecurityNone. Review metrics
Technical reviewBest 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. LabelsLabel changes:
Label justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (4 earlier review cycles)
|
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
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
What Problem This Solves
Fixes: the post-
openclawautomatic 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
openclawexits, 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
TextWriteridentity.After Spectre clears the live status, the same postflight writes one typed outcome through the shared
ClawCtlConsolerendering contract. This preserves gateway acknowledgement and the upstreamopenclawexit code.Evidence
Observed reproduction
The deployed original head showed the real Unicode spinner:
After the command returned, no gateway outcome remained:
The collected host diagnostics show automatic start beginning at
16:49:35, followed by host exit at16:50:15without a completion line. The recorded gateway state andclawctl status --jsonsubsequently reportedrunningon observed port18789.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.🦀 ✓ Gateway: running on port 18789.line after narration completes..\scripts\Deploy-LocalPackage.ps1 -Architecture x64 -ReplaceExistingInstall— registeredOpenClaw.Gateway_0.1.2456.61709_x64__kaa03rpbbqef6from 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
530ae7cf31a2c9338dc96ae73301da6009bd90ccintegrates currentmain, 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.