Conversation
…fecycle events, validation errors Surface lifecycle: OnSurfaceCreated/OnSurfaceDeleted events on SurfaceManager with EventCallback parameters on A2UISurface for declarative binding. Local actions: LocalActionRegistry service for client-side functionCall execution without server round-trip, registered via AddA2UIBlazor(configureLocalActions:). Optimistic updates: Input components update the local data model immediately on user interaction via ApplyOptimisticUpdate(), before the server responds. SurfaceManager changed from [CascadingParameter] to [Inject] on A2UIComponentBase. Validation errors: Server error messages stored per data-model path on A2UISurfaceState; input components render inline validation with component-error-takes-precedence semantics. Also adds NuGet package icon and design doc for traceability. 273 unit tests, 46 E2E tests, 0 warnings. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ServerFixture: Use port 5050 for the test Python server (matching the default appsettings.json) because .NET 10 Blazor WASM does not load environment-specific appsettings files at runtime. The previous appsettings.Testing.json approach silently broke when migrating to .NET 10 — the WASM client always connected to port 5050 regardless. Added KillListenerOnPort() using lsof -sTCP:LISTEN to safely clear the port before binding. Also drain stdout/stderr with BeginOutputReadLine() to prevent child process deadlock from pipe buffer filling. CLAUDE.md: Updated kill port guidance to use -sTCP:LISTEN flag, which targets only the listening process and avoids killing remote sessions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CHANGELOG: Full release history from v0.1.0 through v0.5.0. README: Fix .NET 8 → .NET 10, update test counts (273 unit, 46 E2E), add project status summary, link to Changelog and Specification. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
OnSurfaceCreated/OnSurfaceDeletedonSurfaceManagerwithEventCallbackparameters onA2UISurfacefunctionCall) —LocalActionRegistryservice for client-side execution without server round-trip; pluggable viaAddA2UIBlazor(configureLocalActions: ...)updateDataModelerrormessages stored per data-model path; input components render inline validation with component-error-takes-precedence semantics.nupkgdocs/design/advanced-protocol-features.mdfor traceabilityServerFixturenow uses port 5050 for the Python server (matching defaultappsettings.json) because .NET 10 Blazor WASM does not load environment-specific config files at runtimeCLAUDE.mdand fixture uselsof -sTCP:LISTENto avoid killing remote sessionsArchitecture change:
SurfaceManageronA2UIComponentBasechanged from[CascadingParameter]to[Inject]— correct pattern for a DI singleton, and improves bUnit testability.Test plan
dotnet test tests/A2UI.Blazor.Tests)dotnet test tests/A2UI.Blazor.Playwright)🤖 Generated with Claude Code