{"path":"NexusReader.Web.Client/Program.cs","purpose":"Bootstrap the WebAssembly client: configure DI for the WASM frontend, register platform/UI/identity/AI services, provide HttpClient, register application services, and register server-only throwing stubs so DI validation passes in the browser.","classification":{"role":"startup","layer":"frontend","confidence":0.9,"evidence":["Program/main filename match","Creates WebAssemblyHostBuilder and calls Build().RunAsync() (lines 15, 59).","Extensive service registrations via builder.Services.AddScoped/AddSingleton/AddHttpClient (lines 18-56)."]},"className":"","methods":[{"name":"Program (top-level)","line":15,"endLine":59,"signature":"(args: string[]) -> Task","purpose":"Creates the WebAssembly host builder, registers services (platform, UI, identity, AI, HTTP client, app services) and starts the WASM app.","calls":[{"targetFile":"unknown","targetMethod":"WebAssemblyHostBuilder.CreateDefault","callLine":15,"paramSummary":"args from top-level"},{"targetFile":"self","targetMethod":"ThrowingDbContextFactory..ctor","callLine":49,"paramSummary":"instance registered as IDbContextFactory"},{"targetFile":"self","targetMethod":"ThrowingEmbeddingGenerator..ctor","callLine":50,"paramSummary":"instance registered as IEmbeddingGenerator>"},{"targetFile":"self","targetMethod":"ThrowingBookStorageService..ctor","callLine":51,"paramSummary":"instance registered as IBookStorageService"},{"targetFile":"self","targetMethod":"ThrowingEbookRepository..ctor","callLine":52,"paramSummary":"instance registered as IEbookRepository"},{"targetFile":"self","targetMethod":"ThrowingSyncBroadcaster..ctor","callLine":53,"paramSummary":"instance registered as ISyncBroadcaster"},{"targetFile":"NexusReader.Application","targetMethod":"ServiceCollectionExtensions.AddApplication","callLine":55,"paramSummary":"IServiceCollection extension to register application layer services"},{"targetFile":"unknown","targetMethod":"WebAssemblyHostBuilder.Build","callLine":59,"paramSummary":"build host"},{"targetFile":"unknown","targetMethod":"WebAssemblyHost.RunAsync","callLine":59,"paramSummary":"run the WASM host"}],"actions":[{"id":"service-registration_17","kind":"mapping","label":"Platform & UI registrations","line":17,"detail":"AddScoped registrations for IPlatformService, INativeStorageService, IThemeService, IQuizStateService, IFocusModeService, IReaderNavigationService, IKnowledgeGraphService, IReaderInteractionService, KnowledgeCoordinator, ISyncService (lines 18-27)","visibility":"detail-only","confidence":0.7},{"id":"service-registration_29","kind":"mapping","label":"Identity & Auth registrations","line":29,"detail":"AddOptions, AddAuthorizationCore, AddScoped IIdentityService, NexusAuthenticationStateProvider, AuthenticationStateProvider mapping, AddCascadingAuthenticationState (lines 30-35)","visibility":"detail-only","confidence":0.7},{"id":"service-registration_37","kind":"mapping","label":"AI & content","line":37,"detail":"Register IKnowledgeService -> WasmKnowledgeService (line 38)","visibility":"detail-only","confidence":0.7},{"id":"service-registration_40","kind":"mapping","label":"Http client setup","line":40,"detail":"Register AuthenticationHeaderHandler, configure named HttpClient 'NexusAPI' with BaseAddress and add message handler, then register default HttpClient instance (lines 40-46)","visibility":"detail-only","confidence":0.7},{"id":"service-registration_48","kind":"mapping","label":"Server-only dummy stubs","line":48,"detail":"Register throwing singleton implementations for IDbContextFactory, IEmbeddingGenerator<...>, IBookStorageService, IEbookRepository, ISyncBroadcaster to satisfy DI validation in WASM (lines 49-53)","visibility":"detail-only","confidence":0.7},{"id":"service-registration_55","kind":"mapping","label":"Application layer wiring","line":55,"detail":"Call AddApplication() extension to register app services (line 55)","visibility":"detail-only","confidence":0.7},{"id":"service-registration_56","kind":"mapping","label":"WASM-only EPUB readers","line":56,"detail":"Register IEpubReader and IEpubMetadataExtractor -> WASM implementations (lines 56-57)","visibility":"detail-only","confidence":0.7},{"id":"startup-run_59","kind":"mapping","label":"Start host","line":59,"detail":"await builder.Build().RunAsync()","visibility":"detail-only","confidence":0.7},{"id":"program_top_level_await_59_0","kind":"await","label":"Waits for async work","line":59,"detail":"await builder.Build().RunAsync();","visibility":"secondary-visible","confidence":0.81}]},{"name":"CreateDbContext","line":61,"endLine":64,"signature":"() -> AppDbContext","purpose":"IDbContextFactory implementation that prevents use of EF DbContext in the WASM client by always throwing.","calls":[],"actions":[{"id":"createdbcontext_throw_63_0","kind":"throw","label":"Throws exception","line":63,"detail":"public AppDbContext CreateDbContext() => throw new NotSupportedException(\"DbContext cannot be used in WASM client.\");","visibility":"primary-visible","confidence":0.9},{"id":"throw_63","kind":"throw","label":"Throws NotSupportedException to block DbContext usage in WASM","line":63,"detail":"throw new NotSupportedException(\"DbContext cannot be used in WASM client.\")","visibility":"detail-only","confidence":0.7}]},{"name":"Dispose","line":66,"endLine":69,"signature":"() -> void","purpose":"Dispose no-op for the throwing embedding generator.","calls":[],"actions":[{"id":"noop_68","kind":"mapping","label":"No-op dispose","line":68,"detail":"Empty Dispose implementation","visibility":"detail-only","confidence":0.7}]},{"name":"GenerateAsync","line":69,"endLine":71,"signature":"(values: IEnumerable, options: EmbeddingGenerationOptions?, cancellationToken: CancellationToken) -> Task>>","purpose":"Stub embedding generation that always throws in the WASM client.","calls":[],"actions":[{"id":"generateasync_throw_70_0","kind":"throw","label":"Throws exception","line":70,"detail":"=> throw new NotSupportedException(\"Embedding generation cannot be used in WASM client.\");","visibility":"primary-visible","confidence":0.9},{"id":"throw_70","kind":"throw","label":"Throws NotSupportedException to block embedding generation in WASM","line":70,"detail":"throw new NotSupportedException(\"Embedding generation cannot be used in WASM client.\")","visibility":"detail-only","confidence":0.7}]},{"name":"GetService","line":71,"endLine":72,"signature":"(serviceType: Type, serviceKey: object?) -> object?","purpose":"Returns null for service lookup; minimal service accessor to satisfy interface.","calls":[],"actions":[{"id":"return_71","kind":"return","label":"Return null","line":71,"detail":"returns null","visibility":"detail-only","confidence":0.7}]},{"name":"SaveEbookAsync (byte[])","line":74,"endLine":79,"signature":"(data: byte[], fileName: string) -> Task","purpose":"Stub storage operation that throws because file storage is unsupported in WASM client.","calls":[],"actions":[{"id":"saveebookasync_byte_throw_78_0","kind":"throw","label":"Throws exception","line":78,"detail":"public Task SaveEbookAsync(byte[] data, string fileName) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"throw_78","kind":"throw","label":"Throws NotSupportedException","line":78,"detail":"throw new NotSupportedException(ErrorMessage)","visibility":"detail-only","confidence":0.7},{"id":"saveebookasync_byte_throw_79_1","kind":"throw","label":"Throws exception","line":79,"detail":"public Task SaveEbookAsync(Stream data, string fileName) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9}]},{"name":"SaveEbookAsync (Stream)","line":74,"endLine":80,"signature":"(data: Stream, fileName: string) -> Task","purpose":"Stub storage operation that throws because file storage is unsupported in WASM client.","calls":[],"actions":[{"id":"saveebookasync_stream_throw_78_0","kind":"throw","label":"Throws exception","line":78,"detail":"public Task SaveEbookAsync(byte[] data, string fileName) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"saveebookasync_stream_throw_79_1","kind":"throw","label":"Throws exception","line":79,"detail":"public Task SaveEbookAsync(Stream data, string fileName) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"throw_79","kind":"throw","label":"Throws NotSupportedException","line":79,"detail":"throw new NotSupportedException(ErrorMessage)","visibility":"detail-only","confidence":0.7},{"id":"saveebookasync_stream_throw_80_2","kind":"throw","label":"Throws exception","line":80,"detail":"public Task SaveCoverAsync(byte[] data, string fileName) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9}]},{"name":"SaveCoverAsync (byte[])","line":74,"endLine":81,"signature":"(data: byte[], fileName: string) -> Task","purpose":"Stub cover save that throws because file storage is unsupported in WASM client.","calls":[],"actions":[{"id":"savecoverasync_byte_throw_78_0","kind":"throw","label":"Throws exception","line":78,"detail":"public Task SaveEbookAsync(byte[] data, string fileName) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"savecoverasync_byte_throw_79_1","kind":"throw","label":"Throws exception","line":79,"detail":"public Task SaveEbookAsync(Stream data, string fileName) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"savecoverasync_byte_throw_80_2","kind":"throw","label":"Throws exception","line":80,"detail":"public Task SaveCoverAsync(byte[] data, string fileName) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"throw_80","kind":"throw","label":"Throws NotSupportedException","line":80,"detail":"throw new NotSupportedException(ErrorMessage)","visibility":"detail-only","confidence":0.7},{"id":"savecoverasync_byte_throw_81_3","kind":"throw","label":"Throws exception","line":81,"detail":"public Task SaveCoverAsync(Stream data, string fileName) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9}]},{"name":"SaveCoverAsync (Stream)","line":74,"endLine":82,"signature":"(data: Stream, fileName: string) -> Task","purpose":"Stub cover save that throws because file storage is unsupported in WASM client.","calls":[],"actions":[{"id":"savecoverasync_stream_throw_78_0","kind":"throw","label":"Throws exception","line":78,"detail":"public Task SaveEbookAsync(byte[] data, string fileName) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"savecoverasync_stream_throw_79_1","kind":"throw","label":"Throws exception","line":79,"detail":"public Task SaveEbookAsync(Stream data, string fileName) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"savecoverasync_stream_throw_80_2","kind":"throw","label":"Throws exception","line":80,"detail":"public Task SaveCoverAsync(byte[] data, string fileName) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"savecoverasync_stream_throw_81_3","kind":"throw","label":"Throws exception","line":81,"detail":"public Task SaveCoverAsync(Stream data, string fileName) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"throw_81","kind":"throw","label":"Throws NotSupportedException","line":81,"detail":"throw new NotSupportedException(ErrorMessage)","visibility":"detail-only","confidence":0.7}]},{"name":"FindAuthorByNameAsync","line":84,"endLine":89,"signature":"(name: string, cancellationToken: CancellationToken) -> Task","purpose":"Ebook repository lookup stub that throws in WASM; repository operations should be done via server API.","calls":[],"actions":[{"id":"findauthorbynameasync_repository-read_88_0","kind":"repository-read","label":"Reads repository or persistence state","line":88,"detail":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","visibility":"secondary-visible","confidence":0.86},{"id":"findauthorbynameasync_throw_88_1","kind":"throw","label":"Throws exception","line":88,"detail":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"throw_88","kind":"throw","label":"Throws NotSupportedException","line":88,"detail":"throw new NotSupportedException(ErrorMessage)","visibility":"detail-only","confidence":0.7},{"id":"findauthorbynameasync_throw_89_2","kind":"throw","label":"Throws exception","line":89,"detail":"public void AddAuthor(Author author) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9}]},{"name":"AddAuthor","line":84,"endLine":90,"signature":"(author: Author) -> void","purpose":"Repository add stub that throws to prevent local data mutation in WASM.","calls":[],"actions":[{"id":"addauthor_repository-read_88_0","kind":"repository-read","label":"Reads repository or persistence state","line":88,"detail":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","visibility":"secondary-visible","confidence":0.86},{"id":"addauthor_throw_88_1","kind":"throw","label":"Throws exception","line":88,"detail":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"addauthor_throw_89_2","kind":"throw","label":"Throws exception","line":89,"detail":"public void AddAuthor(Author author) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"throw_89","kind":"throw","label":"Throws NotSupportedException","line":89,"detail":"throw new NotSupportedException(ErrorMessage)","visibility":"detail-only","confidence":0.7},{"id":"addauthor_throw_90_3","kind":"throw","label":"Throws exception","line":90,"detail":"public void AddEbook(Ebook ebook) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9}]},{"name":"AddEbook","line":84,"endLine":91,"signature":"(ebook: Ebook) -> void","purpose":"Repository add stub that throws to prevent local data mutation in WASM.","calls":[],"actions":[{"id":"addebook_repository-read_88_0","kind":"repository-read","label":"Reads repository or persistence state","line":88,"detail":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","visibility":"secondary-visible","confidence":0.86},{"id":"addebook_throw_88_1","kind":"throw","label":"Throws exception","line":88,"detail":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"addebook_throw_89_2","kind":"throw","label":"Throws exception","line":89,"detail":"public void AddAuthor(Author author) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"addebook_throw_90_3","kind":"throw","label":"Throws exception","line":90,"detail":"public void AddEbook(Ebook ebook) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"throw_90","kind":"throw","label":"Throws NotSupportedException","line":90,"detail":"throw new NotSupportedException(ErrorMessage)","visibility":"detail-only","confidence":0.7},{"id":"addebook_throw_91_4","kind":"throw","label":"Throws exception","line":91,"detail":"public Task SaveChangesAsync(CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9}]},{"name":"SaveChangesAsync","line":84,"endLine":92,"signature":"(cancellationToken: CancellationToken) -> Task","purpose":"Repository save stub that throws to prevent EF operations in WASM.","calls":[],"actions":[{"id":"savechangesasync_repository-read_88_0","kind":"repository-read","label":"Reads repository or persistence state","line":88,"detail":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","visibility":"secondary-visible","confidence":0.86},{"id":"savechangesasync_throw_88_1","kind":"throw","label":"Throws exception","line":88,"detail":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"savechangesasync_throw_89_2","kind":"throw","label":"Throws exception","line":89,"detail":"public void AddAuthor(Author author) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"savechangesasync_throw_90_3","kind":"throw","label":"Throws exception","line":90,"detail":"public void AddEbook(Ebook ebook) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"savechangesasync_throw_91_4","kind":"throw","label":"Throws exception","line":91,"detail":"public Task SaveChangesAsync(CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","visibility":"primary-visible","confidence":0.9},{"id":"throw_91","kind":"throw","label":"Throws NotSupportedException","line":91,"detail":"throw new NotSupportedException(ErrorMessage)","visibility":"detail-only","confidence":0.7}]},{"name":"BroadcastProgressAsync","line":94,"endLine":98,"signature":"(userId: string, pageId: string, timestamp: DateTime, excludedConnectionId: string?, cancellationToken: CancellationToken) -> Task","purpose":"Real-time broadcast stub that throws because server-only real-time broadcasting is unsupported in WASM.","calls":[],"actions":[{"id":"throw_96","kind":"throw","label":"Throws NotSupportedException","line":96,"detail":"throw new NotSupportedException(\"Real-time broadcasting can only be performed by the server.\")","visibility":"detail-only","confidence":0.7},{"id":"broadcastprogressasync_throw_97_0","kind":"throw","label":"Throws exception","line":97,"detail":"=> throw new NotSupportedException(\"Real-time broadcasting can only be performed by the server.\");","visibility":"primary-visible","confidence":0.9}]},{"name":"BroadcastIngestionProgressAsync","line":94,"endLine":101,"signature":"(userId: string, message: string, progress: double, cancellationToken: CancellationToken) -> Task","purpose":"Real-time ingestion progress broadcast stub that throws because server-only broadcasting is required.","calls":[],"actions":[{"id":"broadcastingestionprogressasync_throw_97_0","kind":"throw","label":"Throws exception","line":97,"detail":"=> throw new NotSupportedException(\"Real-time broadcasting can only be performed by the server.\");","visibility":"primary-visible","confidence":0.9},{"id":"throw_99","kind":"throw","label":"Throws NotSupportedException","line":99,"detail":"throw new NotSupportedException(\"Real-time broadcasting can only be performed by the server.\")","visibility":"detail-only","confidence":0.7},{"id":"broadcastingestionprogressasync_throw_100_1","kind":"throw","label":"Throws exception","line":100,"detail":"=> throw new NotSupportedException(\"Real-time broadcasting can only be performed by the server.\");","visibility":"primary-visible","confidence":0.9}]}],"types":[{"name":"ThrowingDbContextFactory","kind":"model","line":61,"purpose":"IDbContextFactory implementation that prevents EF DbContext usage in the WASM client by throwing.","fields":[]},{"name":"ThrowingEmbeddingGenerator","kind":"model","line":66,"purpose":"IEmbeddingGenerator stub that throws on GenerateAsync to prevent embedding generation in WASM.","fields":[]},{"name":"ThrowingBookStorageService","kind":"model","line":74,"purpose":"IBookStorageService stub that throws for all file storage operations in the WASM client.","fields":[{"name":"ErrorMessage","type":"string","required":true,"line":76,"description":"Static error message explaining file storage is unsupported in the WASM client."}]},{"name":"ThrowingEbookRepository","kind":"model","line":84,"purpose":"IEbookRepository stub that throws for all repository operations to force use of server API.","fields":[{"name":"ErrorMessage","type":"string","required":true,"line":86,"description":"Static error message explaining repository operations are unsupported in the WASM client."}]},{"name":"ThrowingSyncBroadcaster","kind":"model","line":94,"purpose":"ISyncBroadcaster stub that throws for real-time broadcasting operations in the WASM client.","fields":[]}],"serviceRegistrations":[{"line":18,"serviceType":"IPlatformService","implementationType":"WebPlatformService","lifetime":"scoped","factorySummary":"Platform abstraction for browser environment"},{"line":19,"serviceType":"INativeStorageService","implementationType":"WebStorageService","lifetime":"scoped","factorySummary":"Browser storage implementation"},{"line":32,"serviceType":"IIdentityService","implementationType":"IdentityService","lifetime":"scoped","factorySummary":"Client-side identity interactions"},{"line":40,"serviceType":"NexusReader.Web.Client.Handlers.AuthenticationHeaderHandler","implementationType":"NexusReader.Web.Client.Handlers.AuthenticationHeaderHandler","lifetime":"transient","factorySummary":"HTTP message handler registered for adding auth headers"},{"line":49,"serviceType":"IDbContextFactory","implementationType":"ThrowingDbContextFactory","lifetime":"singleton","factorySummary":"Server-only DbContext factory stub that throws in WASM"},{"line":55,"serviceType":"IServiceCollection (application extension)","implementationType":"NexusReader.Application (extension)","lifetime":"unknown","factorySummary":"Registers application layer services via AddApplication()"}],"startupActions":[{"name":"BuildAndRun","line":59,"kind":"middleware","targetCalls":[{"targetFile":"unknown","targetMethod":"WebAssemblyHostBuilder.Build","callLine":59,"paramSummary":"no args"},{"targetFile":"unknown","targetMethod":"RunAsync","callLine":59,"paramSummary":"await run"}]}],"dependencies":["NexusReader.Application","NexusReader.Data.Persistence","NexusReader.Application.Abstractions.Services","NexusReader.UI.Shared.Services","NexusReader.Application.Abstractions.Persistence","NexusReader.Application.Abstractions.Messaging","NexusReader.Domain.Entities","Microsoft.AspNetCore.Components.WebAssembly.Hosting"],"patterns":["Dependency Injection (DI) registration","Environment-specific stubbing (throwing stubs for server-only services)","Composition root / app bootstrap"],"domainConcepts":["Ebook","Author","Embedding","AppDbContext","Real-time sync/broadcast"],"keyDetails":"This Program.cs is the WASM client composition root: it wires client-specific implementations and intentionally registers throwing stubs for server-only services (DB, embedding generation, file storage, repository, real-time broadcasting) so that the client can still validate DI without enabling server features.","orchestrationMethods":[{"name":"Program (top-level)","line":15,"confidence":0.98,"reason":"Coordinates 9 downstream calls with 0 architectural actions.","actionKinds":["mapping","await"],"evidencePaths":["NexusReader.Web.Client/Program.cs","unknown","self","self","self","self"]},{"name":"FindAuthorByNameAsync","line":84,"confidence":0.57,"reason":"Contains 1 architectural actions relevant to business execution.","actionKinds":["repository-read","throw"],"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"name":"AddAuthor","line":84,"confidence":0.57,"reason":"Contains 1 architectural actions relevant to business execution.","actionKinds":["repository-read","throw"],"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"name":"AddEbook","line":84,"confidence":0.57,"reason":"Contains 1 architectural actions relevant to business execution.","actionKinds":["repository-read","throw"],"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"name":"SaveChangesAsync","line":84,"confidence":0.57,"reason":"Contains 1 architectural actions relevant to business execution.","actionKinds":["repository-read","throw"],"evidencePaths":["NexusReader.Web.Client/Program.cs"]}],"typedContracts":[{"name":"ThrowingDbContextFactory","kind":"model","line":61,"fieldCount":0,"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"name":"ThrowingEmbeddingGenerator","kind":"model","line":66,"fieldCount":0,"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"name":"ThrowingBookStorageService","kind":"model","line":74,"fieldCount":1,"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"name":"ThrowingEbookRepository","kind":"model","line":84,"fieldCount":1,"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"name":"ThrowingSyncBroadcaster","kind":"model","line":94,"fieldCount":0,"evidencePaths":["NexusReader.Web.Client/Program.cs"]}],"persistenceInteractions":[{"methodName":"FindAuthorByNameAsync","line":88,"kind":"persistence-read","detail":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"methodName":"AddAuthor","line":88,"kind":"persistence-read","detail":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"methodName":"AddEbook","line":88,"kind":"persistence-read","detail":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"methodName":"SaveChangesAsync","line":88,"kind":"persistence-read","detail":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","evidencePaths":["NexusReader.Web.Client/Program.cs"]}],"externalInteractions":[],"evidenceAnchors":[{"kind":"orchestration-method","label":"Program (top-level)","line":15,"summary":"Coordinates 9 downstream calls with 0 architectural actions.","confidence":0.98,"evidencePaths":["NexusReader.Web.Client/Program.cs","unknown","self","self","self","self"]},{"kind":"orchestration-method","label":"FindAuthorByNameAsync","line":84,"summary":"Contains 1 architectural actions relevant to business execution.","confidence":0.57,"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"kind":"orchestration-method","label":"AddAuthor","line":84,"summary":"Contains 1 architectural actions relevant to business execution.","confidence":0.57,"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"kind":"orchestration-method","label":"AddEbook","line":84,"summary":"Contains 1 architectural actions relevant to business execution.","confidence":0.57,"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"kind":"typed-contract","label":"ThrowingDbContextFactory","line":61,"summary":"model with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"kind":"typed-contract","label":"ThrowingEmbeddingGenerator","line":66,"summary":"model with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"kind":"typed-contract","label":"ThrowingBookStorageService","line":74,"summary":"model with 1 fields.","confidence":0.8,"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"kind":"typed-contract","label":"ThrowingEbookRepository","line":84,"summary":"model with 1 fields.","confidence":0.8,"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"kind":"persistence","label":"FindAuthorByNameAsync","line":88,"summary":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","confidence":0.82,"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"kind":"persistence","label":"AddAuthor","line":88,"summary":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","confidence":0.82,"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"kind":"persistence","label":"AddEbook","line":88,"summary":"public Task FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","confidence":0.82,"evidencePaths":["NexusReader.Web.Client/Program.cs"]},{"kind":"startup","label":"BuildAndRun","line":59,"summary":"middleware startup action","confidence":0.78,"evidencePaths":["NexusReader.Web.Client/Program.cs","unknown","unknown"]}],"cacheMetadata":{"schemaVersion":2,"analysisVersion":"2026-05-23.cache-v1","contentChecksum":"d65de4b5bfce9ae416397728793c8bab19215b329ddfb93f44b5c15d42f728f7","sourceByteSize":5704,"analyzedAt":"2026-05-23T16:19:40.943Z","technology":"dotnet"}}