Skip to content

v0.5.0: Advanced protocol features#22

Merged
23min merged 3 commits intomainfrom
feature/advanced-protocol
Feb 13, 2026
Merged

v0.5.0: Advanced protocol features#22
23min merged 3 commits intomainfrom
feature/advanced-protocol

Conversation

@23min
Copy link
Owner

@23min 23min commented Feb 12, 2026

Summary

  • Surface lifecycle eventsOnSurfaceCreated / OnSurfaceDeleted on SurfaceManager with EventCallback parameters on A2UISurface
  • Local actions (functionCall) — LocalActionRegistry service for client-side execution without server round-trip; pluggable via AddA2UIBlazor(configureLocalActions: ...)
  • Optimistic updates — input components update the local data model immediately on user interaction; server reconciles on next updateDataModel
  • Validation error rendering — server error messages stored per data-model path; input components render inline validation with component-error-takes-precedence semantics
  • NuGet package icon — 128×128 PNG icon included in .nupkg
  • Design docdocs/design/advanced-protocol-features.md for traceability
  • E2E fixture fixServerFixture now uses port 5050 for the Python server (matching default appsettings.json) because .NET 10 Blazor WASM does not load environment-specific config files at runtime
  • Safe port killCLAUDE.md and fixture use lsof -sTCP:LISTEN to avoid killing remote sessions

Architecture change: SurfaceManager on A2UIComponentBase changed from [CascadingParameter] to [Inject] — correct pattern for a DI singleton, and improves bUnit testability.

Test plan

  • 273 unit tests pass (dotnet test tests/A2UI.Blazor.Tests)
  • 46 E2E tests pass (dotnet test tests/A2UI.Blazor.Playwright)
  • Zero build warnings

🤖 Generated with Claude Code

23min and others added 3 commits February 12, 2026 18:30
…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>
@23min 23min merged commit 866d27b into main Feb 13, 2026
2 checks passed
@23min 23min deleted the feature/advanced-protocol branch February 13, 2026 00:04
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.

1 participant