SDK migration: NexoKernelRegistrar + Infrastructure Sdk/Extensions#96
Merged
Conversation
- Convert synchronous [Fact|Theory(Timeout)] tests to async Task with await Task.CompletedTask (xUnit 2.9+), including Theory methods behind InlineData attributes. - Add scripts/fix-xunit-sync-timeout-tests.py for forward-scan attribute handling. - Await ThrowAsync in OnboardingE2ETests after async conversion (CS4014). - Skip FileSystemWatcher integration pattern on net9 when net8 runs in parallel (Linux inotify contention); keep coverage on net8 and PatternDetectorTests. Co-authored-by: IanFrelinger <IanFrelinger@users.noreply.github.com>
Linux returns IOException for exclusive file locks instead of blocking; poll until the lock file is free. Raise Fact timeout to 240s so the second test host can wait for the first. Removes net9-only Skip while keeping both TFMs green. Co-authored-by: IanFrelinger <IanFrelinger@users.noreply.github.com>
Introduce ICrossProcessLock, ICrossProcessLockProvider, CrossProcessLockOptions, ExclusiveFileCrossProcessLockProvider (Linux-safe polling), CrossProcessLockDefaults. Subclass hooks ResolveLockPath/SanitizeLockName for custom composition. Observation FS integration uses SharedProvider; add ExclusiveFileCrossProcessLockProviderTests. Co-authored-by: IanFrelinger <IanFrelinger@users.noreply.github.com>
- Nexo.Hosting: Sdk/Options (hosting profile, strict mode, NexoSdkOptions), Sdk/Builders (HostNexoSdkBuilder + obsolete NexoSdkBuilder alias), Sdk/Extensions (host AddNexoSdk, OpenTelemetry). - Nexo.Sdk NuGet: Client/NexoClientSdkBuilder + AddNexoClientSdk in Nexo.Sdk.Client; Legacy compat shims with pragma CS0618 suppression. - Docs: architecture/SdkStructure.md; IntegratorGuide, sdk.md, architecture README updated. HostNexoSdkBuilder is unsealed for obsolete subclass and future extension. Co-authored-by: IanFrelinger <IanFrelinger@users.noreply.github.com>
Co-authored-by: IanFrelinger <IanFrelinger@users.noreply.github.com>
…Observation Sdk Track A: Split deployment/module helpers and RegisterNodeCapabilityRuntime into NexoServiceCollectionExtensions.Deployment.cs; main extensions class is partial. Non-goals executed per plan: - Move INexoSdkBuilder to Nexo.Infrastructure.Sdk.Ports (remove from Core.Application). - Add Nexo.Framework.Sdk with AddNexoFramework (client URL + AddNexo). - Observation DI extensions under Observation/Sdk/Extensions with namespace Nexo.Infrastructure.Sdk.Observation; wire Adaptation + SelfContext. Docs: SdkMigrationPlan execution status, SdkStructure, sdk.md, architecture README. Nexo.sln includes Nexo.Framework.Sdk. Co-authored-by: IanFrelinger <IanFrelinger@users.noreply.github.com>
…to Sdk/Extensions Move ModuleSelection into NexoKernelRegistrationModels and delegate AddNexo wiring to NexoKernelRegistrar.Register. Relocate Infrastructure DI extension classes under Feature/Sdk/Extensions with Nexo.Infrastructure.Sdk namespaces (collision-safe NodeCapabilityRuntime.Sdk, Execution.Sdk, Execution.Routing.Sdk, Mesh.Sdk). Add Hosting GlobalUsings.Infrastructure.Sdk.cs and link it from Nexo.CLI and Nexo.Tests.Infrastructure; BackgroundAgents gains Sdk.Trust import. Expose RegisterNodeCapabilityRuntime and ParseBooleanEnvironmentVariable as internal for the registrar. Update SdkMigrationPlan/SdkStructure/README for execution status and consumer scope. Co-authored-by: IanFrelinger <IanFrelinger@users.noreply.github.com>
Introduce NexoKernelRegistrationContext and move each // ── section into NexoKernelRegistrar.Phases.cs. Recompute ephemeral model flags in the trust phase so AddTrustServices still receives ephemeralLifecycle after the split. Update SdkMigrationPlan execution status for Track A. Co-authored-by: IanFrelinger <IanFrelinger@users.noreply.github.com>
Co-authored-by: IanFrelinger <IanFrelinger@users.noreply.github.com>
…ns, hosting) D1: Align SdkMigrationPlan Goal/Track A/B with NexoKernelRegistrar and Sdk namespaces; add Phase D execution checklist; clarify non-goal on wholesale renames. D2: Document Infrastructure *ServiceCollectionExtensions sweep in SdkStructure. D3: Expand consumer guidance (GlobalUsings link vs AddNexo vs types-only refs). D4: Pilot-move pipeline option types to Pipelines/Sdk/Options (namespaces unchanged). D5: Split RegisterNodeCapabilityRuntime into NexoServiceCollectionExtensions. NodeCapabilityRuntime.cs; add NexoKernelRegistrar.Ephemeral.cs (EphemeralModelsEnabled). D6: CONTRIBUTING.md — Nexo.sln, LocalDevCore/PrimeTime slnf, Makefile targets, workflows. Co-authored-by: IanFrelinger <IanFrelinger@users.noreply.github.com>
Document that agents cannot provision VMs or run Docker in this workspace; add one-shot script (apt Docker + compose, .env.mesh-lab, compose up, verify) and MeshVirtualLab / DocsIndex pointers. Co-authored-by: IanFrelinger <IanFrelinger@users.noreply.github.com>
Keep refactored NexoServiceCollectionExtensions and fold master DI into NexoKernelRegistrar: SMS ingress defaults, ingress logging pipeline, noop ingress accessor, map data provider routing, and mesh fleet scheduling. Merge Nexo.sln with Nexo.Framework.Sdk plus Runtime.Bundle and Ingress projects and combined solution configuration. Docs: merge MeshVirtualLab and architecture index rows with master additions. Co-authored-by: IanFrelinger <IanFrelinger@users.noreply.github.com>
Resolve Nexo.sln to match post-PR81 layout (no top-level src GameDomain in main solution) while retaining Nexo.Framework.Sdk alongside Runtime.Bundle and Ingress projects. Includes upstream documentation, Docker, workflow, and test harness updates. Co-authored-by: IanFrelinger <IanFrelinger@users.noreply.github.com>
…exo.Hosting Application-layer Nexo.CLI lives under application/src; the linked compile item must use ../../../src/Nexo.Hosting so MSBuild resolves CS2001. Co-authored-by: IanFrelinger <IanFrelinger@users.noreply.github.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.
Follow-up completed:
NexoKernelRegistraris split into 20 private phase methods inNexoKernelRegistrar.Phases.cs, one per existing// ──section (including observation + mock web-search underRegisterPhase12_ObservationPipeline).NexoKernelRegistrationContext(Services,Options,Modules,Configuration) lives inNexoKernelRegistrationModels.cs.Registerbuilds the context once and invokes phases in fixed order.Cross-phase note:
ephemeralModelsis recomputed at the start ofRegisterPhase15_TrustProviderFactory3wayBranching(same env vars as phase 14) soAddTrustServices(ephemeralLifecycle: …)stays behavior-identical after the split.Docs:
SdkMigrationPlan.mdexecution table updated for Track A.Checks:
dotnet build Nexo.sln; pipelinePipelineServiceCollectionExtensionsTests(8× net8 + net9).