Summary
On macOS (Apple Silicon), completing the netclaw init wizard crashes the process when it hands off to the interactive chat page. ChatPage.BuildLayout() throws a NullReferenceException and the process aborts (Abort trap: 6).
This is macOS-specific — the Linux smoke leg runs the identical init-wizard tape and passes.
Stack trace
Fatal error — crash log written to /Users/runner/.netclaw/logs/crash-20260518-144144.log
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
at Netclaw.Cli.Tui.ChatPage.BuildLayout()
at Termina.TerminaApplication.RenderCurrentPage()
at Termina.TerminaApplication.RunAsync(CancellationToken cancellationToken)
at Termina.Hosting.TerminaHostedService.<>c__DisplayClass5_0.<<StartAsync>b__0>d.MoveNext()
--- End of stack trace from previous location ---
at Termina.Hosting.TerminaHostedService.StopAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](...)
at Microsoft.Extensions.Hosting.Internal.Host.StopAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.WaitForShutdownAsync(...)
...
at Program.<Main>$(String[] args)
Abort trap: 6
How it was found
Surfaced by the native smoke harness's macOS leg (Native Smoke (macOS)) on the CI run for PR #1066. PR #1066 is an unrelated test-only change (fix(tests): register reminder services in LlmSessionTestBase) and did not cause this — the macOS smoke leg simply ran against a dev-based branch and surfaced a pre-existing bug. ChatPage is shipped CLI code, untouched by #1066.
Failing job: https://github.com/netclaw-dev/netclaw/actions/runs/26040137073/job/76549794637
Impact
netclaw init is the first command a new user runs. On macOS it completes the wizard and then immediately crashes on the transition to chat — a broken first-run experience. Same class as #1014.
Notes for investigation
ChatPage.BuildLayout() (src/Netclaw.Cli/Tui/ChatPage.cs:95) is short; the NRE is most likely a field still null at render time (_chatHistory / _promptInput are null! until OnBound()), a null ViewModel, or a null StatusMessage value flowing into the BuildStatusBar() status switch — status.StartsWith(...) on a null status.
- The crash log at
~/.netclaw/logs/crash-20260518-144144.log would pinpoint it (note: written to the default ~/.netclaw, not the per-tape NETCLAW_HOME). Reproduce on macOS to capture it.
- Why it is macOS-only is the key question — points at a platform-dependent null in view-model state, or a render-before-bind ordering difference between platforms.
Summary
On macOS (Apple Silicon), completing the
netclaw initwizard crashes the process when it hands off to the interactive chat page.ChatPage.BuildLayout()throws aNullReferenceExceptionand the process aborts (Abort trap: 6).This is macOS-specific — the Linux smoke leg runs the identical
init-wizardtape and passes.Stack trace
How it was found
Surfaced by the native smoke harness's macOS leg (
Native Smoke (macOS)) on the CI run for PR #1066. PR #1066 is an unrelated test-only change (fix(tests): register reminder services in LlmSessionTestBase) and did not cause this — the macOS smoke leg simply ran against adev-based branch and surfaced a pre-existing bug.ChatPageis shipped CLI code, untouched by #1066.Failing job: https://github.com/netclaw-dev/netclaw/actions/runs/26040137073/job/76549794637
Impact
netclaw initis the first command a new user runs. On macOS it completes the wizard and then immediately crashes on the transition to chat — a broken first-run experience. Same class as #1014.Notes for investigation
ChatPage.BuildLayout()(src/Netclaw.Cli/Tui/ChatPage.cs:95) is short; the NRE is most likely a field stillnullat render time (_chatHistory/_promptInputarenull!untilOnBound()), a nullViewModel, or a nullStatusMessagevalue flowing into theBuildStatusBar()status switch—status.StartsWith(...)on a nullstatus.~/.netclaw/logs/crash-20260518-144144.logwould pinpoint it (note: written to the default~/.netclaw, not the per-tapeNETCLAW_HOME). Reproduce on macOS to capture it.