feat(engine): transform — a template's text passed on, or parsed as JSON or a list; a commit behind one that joins several credits the run alone (Phase 3 slice 13) #113

Merged
bjoern merged 3 commits from feat/transform into main 2026-10-17 17:43:02 +02:00
Member

Phase 3's slice 13. The glue node arrives: a transform renders a template over its inputs and passes the text on, or parses it as JSON or as a list. A commit's text that no one step wrote (a transform joined several inputs, or made its text from none) is now credited to the run alone, instead of failing as slice 12 left it (ADR 0015, decisions 10 and 12).

What changes

transform (F4).

  • Its config is template, Scriban over the node's inputs, and output: text, json or list. A freshly placed transform passes its text input on as text.
  • It has a required sink of any type per input the template reads, and one source, named and typed as the output names it.
  • The engine renders the template (E4). The executor passes the text on, or parses it as JSON, at most 63 levels deep (one short of what the engine reads back inside a row's outputs), or as a list.
  • A rendered text that is not well-formed UTF-16 fails the node whatever the output: a template can cut a character in two with string.slice, or write half of one as a literal. A parsed text that is blank, does not read as JSON, holds an escaped half of a character, or parses as anything but a list where a list is asked for fails it too. Each failure is permanent and says what the text was.
  • It passes its value on (PassesThrough). The credit walk goes through a transform with one wired sink to the step behind it (E11); one that read several inputs, or none, leaves no one step.
  • WireText.WellFormed now holds the surrogate walk RunTrigger had, and both call it.

The run credited alone.

  • Provenance.FromRun(runId) names no node, model or iteration path.
  • The converter stores it without those keys, and refuses a row with no node that names a model or a path.
  • The commit credits it where ModelStepBehind finds no step: slice 12's named throw goes, and the report's writer is null.
  • A replace of such a text whose selection changed says only that nothing was written, since no step offers it to Commit this text.

Its paragraphs.

  • The gutter's title reads Run (or Run — edited) and says a click opens the run that wrote it. The segment wire carries a new opens (run or step) into the editor module's paragraph attributes.
  • The click and Alt+Shift+O open the run's page: FindSegmentStep finds no step for no node.
  • The Help page's Alt+Shift+O row says so.

Docs.

  • The engine README: the intro, F4, E11, K2, and the types still to come.
  • ADR 0015 is amended, and its body's commit paragraph and Registry sentence are updated. ADR 0012, 0024 and 0030 are amended.
  • The run-monitor story's gutter line; the plan ticks slice 13.

Not in this slice

  • A seeded transform comes with slice 17's map graph, as the plan's seed contract says.
  • transform's section in the property panel comes with slice 30; until then its config is set in an imported graph file.
  • A map's results credited to the run alone comes with the map (slice 17), over this slice's provenance.

Verification

  • .NET tests. All six projects pass under TZ=UTC and in the local zone:

    Project Passed
    Domain 568
    Kagaku.Flow 1467
    Kagaku.Flow.OpenRouter 608, plus 5 skipped live checks
    UseCases 880
    BlazorAdapter 1196
    Integration 1219

    The tests cover:

    • The transform's descriptor: its palette entry; the sinks and the source for every kind of config, including ones that do not read; its template field; the schema and ValidateConfig reading a config alike.
    • The transform through the engine: text passed on as is, blank and padded text included; JSON and lists parsed; 63 levels deep goes on and 64 fails; text that is not well-formed (a raw lone surrogate of either half, a cut emoji, an escaped one inside the parsed JSON); blank, unreadable and non-list text; a resumed config that no longer reads, naming its first of two problems.
    • The credit walk: a pass-through with no wired sink credits no step.
    • Through Tsumugi's real engine and gateway: a transform of one writer's text credits the writer; one joining two writers, or reading none, credits the run alone. The paragraphs carry Provenance.FromRun(runId), and their gutter step is the run's page.
    • The commit: the test-only join credits the run alone with a null writer, and a replace behind it whose selection changed refuses without pointing at a step, at each of the three places that refusal comes from.
    • Provenance and storage: the run-alone provenance and its converter, both shapes and every refused row.
    • The editor wire and module: the chapter page's wire (opens beside the title); the module mounting, answering, splitting and reconciling opens; the gutter's title in Chromium and Firefox.
    • Registration: the registry and DI lists with transform.
  • Coverage of the changed .NET lines: 163/163 lines, 92/92 branches.

  • Editor module: typecheck clean, vitest 341 pass, and the browser suite passes in Chromium and Firefox (258 passed, 10 skipped).

  • Browser pass, in Chrome against the seeded world, with the stub, with a graph imported from a file: "Two voices" — context, a writer, a second voice going on from it, a transform joining both, a commit.

    • The library listed it as Ready, and a run of it on Mira's Winter's last chapter finished.
    • The four paragraphs it landed each showed the run mark titled Run. Click to open the run that wrote it.
    • Clicking one opened the run's page with no step selected.
    • The Join step's inspector showed the joined text as its text; the Commit step's details read "writer": null, "model": null.
  • Mutation probes, all re-run on the final tests:

    • 39 of 39 killed on the slice;
    • 12 of 12 killed on the round-0 fixes;
    • 3 of 3 killed on the second pass's fixes.
  • Reviews. The counts come from the saved review JSON.

    • Round 0: 25 findings (18 confirmed, 5 partly, 2 refuted; after verification 8 suggestions, 17 nits). 20 were fixed, among them:

      • text that is not well-formed UTF-16, which now fails the node with its own message instead of an engine exception;
      • a depth cap one level short of what the engine reads back;
      • the refusal for a replace behind a join;
      • the Help copy and the module's comments for the run-alone gutter;
      • the zero-wired walk and the constant-template credit, now tested;
      • the harness's split, which dropped opens;
      • ADR 0015's body;
      • wraps.

      Three were declined with reasons, and the second pass judged all three sound:

      • the rendered text is not kept on a failed row: its inputs and the template show it;
      • the parser's message is passed verbatim, as G1 and RunTrigger.Parse do;
      • duplicate JSON keys are accepted, as the engine's own re-reads do, with the last value winning everywhere.

      The 2 refuted findings needed no change.

    • Second pass: of the 25 round-0 findings, 19 were resolved, the 5 declines and refutations judged sound, and 1 (the module comments) partly resolved. It raised 14 more points (11 confirmed, 3 partly; 1 suggestion, 13 nits). They come to 7 issues, all fixed:

      • an escaped lone surrogate inside the parsed JSON, refused by the transform itself;
      • the shared WireText.WellFormed;
      • ADR 0015's amendment listing every failure and the replace clause;
      • the test names and summary;
      • two more comments;
      • underfilled blocks;
      • the executor summary and the commit message.

🤖 Generated with Claude Code

Phase 3's slice 13. The glue node arrives: a `transform` renders a template over its inputs and passes the text on, or parses it as JSON or as a list. A commit's text that no one step wrote (a transform joined several inputs, or made its text from none) is now credited to the run alone, instead of failing as slice 12 left it (ADR 0015, decisions 10 and 12). ## What changes **transform (F4).** - Its config is `template`, Scriban over the node's inputs, and `output`: `text`, `json` or `list`. A freshly placed transform passes its `text` input on as text. - It has a required sink of any type per input the template reads, and one source, named and typed as the output names it. - The engine renders the template (E4). The executor passes the text on, or parses it as JSON, at most 63 levels deep (one short of what the engine reads back inside a row's outputs), or as a list. - A rendered text that is not well-formed UTF-16 fails the node whatever the output: a template can cut a character in two with `string.slice`, or write half of one as a literal. A parsed text that is blank, does not read as JSON, holds an escaped half of a character, or parses as anything but a list where a list is asked for fails it too. Each failure is permanent and says what the text was. - It passes its value on (`PassesThrough`). The credit walk goes through a transform with one wired sink to the step behind it (E11); one that read several inputs, or none, leaves no one step. - `WireText.WellFormed` now holds the surrogate walk `RunTrigger` had, and both call it. **The run credited alone.** - `Provenance.FromRun(runId)` names no node, model or iteration path. - The converter stores it without those keys, and refuses a row with no node that names a model or a path. - The commit credits it where `ModelStepBehind` finds no step: slice 12's named throw goes, and the report's `writer` is null. - A replace of such a text whose selection changed says only that nothing was written, since no step offers it to *Commit this text*. **Its paragraphs.** - The gutter's title reads *Run* (or *Run — edited*) and says a click opens the run that wrote it. The segment wire carries a new `opens` (`run` or `step`) into the editor module's paragraph attributes. - The click and Alt+Shift+O open the run's page: `FindSegmentStep` finds no step for no node. - The Help page's Alt+Shift+O row says so. **Docs.** - The engine README: the intro, F4, E11, K2, and the types still to come. - ADR 0015 is amended, and its body's commit paragraph and Registry sentence are updated. ADR 0012, 0024 and 0030 are amended. - The run-monitor story's gutter line; the plan ticks slice 13. ## Not in this slice - **A seeded transform** comes with slice 17's map graph, as the plan's seed contract says. - **transform's section in the property panel** comes with slice 30; until then its config is set in an imported graph file. - **A map's results** credited to the run alone comes with the map (slice 17), over this slice's provenance. ## Verification - **.NET tests.** All six projects pass under TZ=UTC and in the local zone: | Project | Passed | |---|---| | Domain | 568 | | Kagaku.Flow | 1467 | | Kagaku.Flow.OpenRouter | 608, plus 5 skipped live checks | | UseCases | 880 | | BlazorAdapter | 1196 | | Integration | 1219 | The tests cover: - **The transform's descriptor:** its palette entry; the sinks and the source for every kind of config, including ones that do not read; its template field; the schema and `ValidateConfig` reading a config alike. - **The transform through the engine:** text passed on as is, blank and padded text included; JSON and lists parsed; 63 levels deep goes on and 64 fails; text that is not well-formed (a raw lone surrogate of either half, a cut emoji, an escaped one inside the parsed JSON); blank, unreadable and non-list text; a resumed config that no longer reads, naming its first of two problems. - **The credit walk:** a pass-through with no wired sink credits no step. - **Through Tsumugi's real engine and gateway:** a transform of one writer's text credits the writer; one joining two writers, or reading none, credits the run alone. The paragraphs carry `Provenance.FromRun(runId)`, and their gutter step is the run's page. - **The commit:** the test-only join credits the run alone with a null writer, and a replace behind it whose selection changed refuses without pointing at a step, at each of the three places that refusal comes from. - **Provenance and storage:** the run-alone provenance and its converter, both shapes and every refused row. - **The editor wire and module:** the chapter page's wire (`opens` beside the title); the module mounting, answering, splitting and reconciling `opens`; the gutter's title in Chromium and Firefox. - **Registration:** the registry and DI lists with transform. - **Coverage of the changed .NET lines:** 163/163 lines, 92/92 branches. - **Editor module:** typecheck clean, vitest 341 pass, and the browser suite passes in Chromium and Firefox (258 passed, 10 skipped). - **Browser pass,** in Chrome against the seeded world, with the stub, with a graph imported from a file: "Two voices" — context, a writer, a second voice going on from it, a transform joining both, a commit. - The library listed it as Ready, and a run of it on Mira's Winter's last chapter finished. - The four paragraphs it landed each showed the run mark titled *Run. Click to open the run that wrote it.* - Clicking one opened the run's page with no step selected. - The Join step's inspector showed the joined text as its `text`; the Commit step's details read `"writer": null, "model": null`. - **Mutation probes,** all re-run on the final tests: - 39 of 39 killed on the slice; - 12 of 12 killed on the round-0 fixes; - 3 of 3 killed on the second pass's fixes. - **Reviews.** The counts come from the saved review JSON. - **Round 0:** 25 findings (18 confirmed, 5 partly, 2 refuted; after verification 8 suggestions, 17 nits). 20 were fixed, among them: - text that is not well-formed UTF-16, which now fails the node with its own message instead of an engine exception; - a depth cap one level short of what the engine reads back; - the refusal for a replace behind a join; - the Help copy and the module's comments for the run-alone gutter; - the zero-wired walk and the constant-template credit, now tested; - the harness's split, which dropped `opens`; - ADR 0015's body; - wraps. Three were declined with reasons, and the second pass judged all three sound: - the rendered text is not kept on a failed row: its inputs and the template show it; - the parser's message is passed verbatim, as G1 and `RunTrigger.Parse` do; - duplicate JSON keys are accepted, as the engine's own re-reads do, with the last value winning everywhere. The 2 refuted findings needed no change. - **Second pass:** of the 25 round-0 findings, 19 were resolved, the 5 declines and refutations judged sound, and 1 (the module comments) partly resolved. It raised 14 more points (11 confirmed, 3 partly; 1 suggestion, 13 nits). They come to 7 issues, all fixed: - an escaped lone surrogate inside the parsed JSON, refused by the transform itself; - the shared `WireText.WellFormed`; - ADR 0015's amendment listing every failure and the replace clause; - the test names and summary; - two more comments; - underfilled blocks; - the executor summary and the commit message. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(engine): transform — a template's text passed on, or parsed as JSON or a list; a commit behind one that joins several credits the run alone (Phase 3 slice 13)
All checks were successful
CI / build (pull_request) Successful in 54s
CI / editor-browsers (pull_request) Successful in 2m40s
CI / test (pull_request) Successful in 3m10s
bae6235d25
The glue node: a transform renders a template over its inputs and passes
the text on, or parses it, and a commit's text that no one step wrote is
now credited to the run itself instead of failing.

- transform (F4): config template and output (text, json or list); a
  required sink of any type per input the template reads; one source,
  named and typed as the output names it. The engine renders the template
  (E4); the executor passes the text on, or parses it as JSON (63 levels
  deep at most, one short of what the engine reads back), or as a list.
  A text that is not well-formed UTF-16 fails the node whatever the
  output; one parsed that is blank, does not read as JSON, holds an
  escaped half of a character, or parses as anything but a list where a
  list is asked for fails it too, saying what it was. WireText.WellFormed
  now holds the surrogate walk RunTrigger had. It passes its value on
  (PassesThrough), so the credit walk goes through a transform with one
  wired sink to the step behind it (E11); one that read several inputs,
  or none, leaves no one step.
- The run credited alone: Provenance.FromRun(runId) names no node, model
  or iteration path; the converter stores it without those keys and
  refuses a row with no node that names a model or a path. The commit
  credits it where ModelStepBehind finds no step (slice 12's named throw
  goes), its report's writer null; a replace of such a text whose
  selection changed says only that nothing was written, as no step
  offers it to Commit this text.
- Its paragraphs: the gutter's title reads "Run" and says a click opens
  the run that wrote it (the segment wire's new opens, carried through
  the editor module's paragraph attrs); the click and Alt+Shift+O open
  the run's page (FindSegmentStep finds no step for no node); the Help
  page's Alt+Shift+O row says so.
- README (intro, F4, E11, K2, the types still to come); ADR 0015
  amended, its body's commit paragraph and Registry sentence updated;
  ADR 0012, 0024 and 0030 amended; the run-monitor story's gutter line;
  the plan's tick. No seed: the transform's comes with slice 17's map
  graph.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

🔄 Auto-updating coverage report — this comment is regenerated on every push, so the numbers below always reflect the commit shown here, not the branch tip.

Commit: c0cd643 · Generated: 2026-10-17 15:11:58 UTC · Revision: #2

Summary

Summary
Generated on: 10/17/2026 - 15:11:58
Coverage date: 10/17/2026 - 15:10:15 - 10/17/2026 - 15:11:54
Parser: MultiReport (6x Cobertura)
Assemblies: 9
Classes: 855
Files: 679
Line coverage: 98.3% (29346 of 29843)
Covered lines: 29346
Uncovered lines: 497
Coverable lines: 29843
Total lines: 59953
Branch coverage: 94.7% (10297 of 10869)
Covered branches: 10297
Total branches: 10869
Method coverage: Feature is only available for sponsors

Coverage

Kagaku.Flow - 99.6%
Name Line Branch
Kagaku.Flow 99.6% 99%
Kagaku.Flow.Budgeting.BudgetRequest 100%
Kagaku.Flow.Budgeting.ConsumerBudget 100%
Kagaku.Flow.Execution.NodeExecution 100% 100%
Kagaku.Flow.Execution.NodeOutcome 100% 100%
Kagaku.Flow.Execution.TransientFailureException 100%
Kagaku.Flow.Execution.Upstream 100%
Kagaku.Flow.Extensions.ServiceCollectionExtensions 100%
Kagaku.Flow.FlowJson 100%
Kagaku.Flow.FlowNodes.BoundaryConfig 100% 100%
Kagaku.Flow.FlowNodes.BranchCase 100%
Kagaku.Flow.FlowNodes.BranchConfig 100% 100%
Kagaku.Flow.FlowNodes.BranchDescriptor 100%
Kagaku.Flow.FlowNodes.BranchExecutor 100% 100%
Kagaku.Flow.FlowNodes.InputDescriptor 100%
Kagaku.Flow.FlowNodes.InputExecutor 100% 100%
Kagaku.Flow.FlowNodes.OutputDescriptor 100%
Kagaku.Flow.FlowNodes.OutputExecutor 100%
Kagaku.Flow.FlowNodes.TransformConfig 100% 100%
Kagaku.Flow.FlowNodes.TransformDescriptor 100% 100%
Kagaku.Flow.FlowNodes.TransformExecutor 100% 100%
Kagaku.Flow.Graphs.GraphDefinition 100%
Kagaku.Flow.Graphs.GraphDocument 100% 100%
Kagaku.Flow.Graphs.GraphEdge 100%
Kagaku.Flow.Graphs.GraphIndex 100% 100%
Kagaku.Flow.Graphs.GraphLoadError 100%
Kagaku.Flow.Graphs.GraphLoadResult 100%
Kagaku.Flow.Graphs.GraphNode 100%
Kagaku.Flow.Graphs.GraphPosition 100%
Kagaku.Flow.Graphs.GraphReader 100% 100%
Kagaku.Flow.Graphs.GraphSchema 100% 100%
Kagaku.Flow.Graphs.GraphShapeException 100%
Kagaku.Flow.Graphs.GraphWriter 100% 100%
Kagaku.Flow.Graphs.NodeIds 100% 100%
Kagaku.Flow.Graphs.SocketRef 100%
Kagaku.Flow.Graphs.WireText 100% 100%
Kagaku.Flow.Nodes.CanvasDescriptorWriter 100% 100%
Kagaku.Flow.Nodes.ConfigProblem 100%
Kagaku.Flow.Nodes.Names 100%
Kagaku.Flow.Nodes.NodeDescriptor 100% 100%
Kagaku.Flow.Nodes.NodeRegistry 100% 100%
Kagaku.Flow.Nodes.NodeSockets 100% 100%
Kagaku.Flow.Nodes.SinkDescriptor 100%
Kagaku.Flow.Nodes.SocketTypes 100% 100%
Kagaku.Flow.Nodes.SourceDescriptor 100%
Kagaku.Flow.Nodes.TemplateField 100%
Kagaku.Flow.Runs.LedgerChange 100% 100%
Kagaku.Flow.Runs.LedgerTransitions 100% 100%
Kagaku.Flow.Runs.NodeAttempt 100%
Kagaku.Flow.Runs.NodeFacts 100%
Kagaku.Flow.Runs.NodeRun 100%
Kagaku.Flow.Runs.Run 100% 100%
Kagaku.Flow.Runs.RunEvent 100%
Kagaku.Flow.Runs.RunStatuses 100% 100%
Kagaku.Flow.Runs.RunTrigger 100% 100%
Kagaku.Flow.Scheduling.Exclusion 100%
Kagaku.Flow.Scheduling.FlowEngine 100% 100%
Kagaku.Flow.Scheduling.FlowEngineOptions 100% 100%
Kagaku.Flow.Scheduling.ReadyRow 100%
Kagaku.Flow.Scheduling.ReadySet 100% 100%
Kagaku.Flow.Scheduling.ReadySetResult 100%
Kagaku.Flow.Scheduling.RunRequest 100% 100%
Kagaku.Flow.Scheduling.RunStartResult 100%
Kagaku.Flow.Scheduling.SocketValues 100% 100%
Kagaku.Flow.Templating.InputsWalker 100% 100%
Kagaku.Flow.Templating.ParsedTemplate 100% 100%
Kagaku.Flow.Templating.SandboxedTemplateContext 100% 100%
Kagaku.Flow.Templating.TemplateError 100%
Kagaku.Flow.Templating.TemplateEvaluationResult 100%
Kagaku.Flow.Templating.TemplateHost 100% 100%
Kagaku.Flow.Templating.TemplateLimits 100%
Kagaku.Flow.Templating.TemplateModel 100% 100%
Kagaku.Flow.Templating.TemplateProblem 100%
Kagaku.Flow.Templating.TemplateRenderRequest 100% 100%
Kagaku.Flow.Templating.TemplateRenderResult 100%
Kagaku.Flow.Templating.TemplateRoot 100%
Kagaku.Flow.Templating.TemplateRun 100%
Kagaku.Flow.Templating.TemplateSinks 100%
Kagaku.Flow.Templating.TemplateValues 100% 100%
Kagaku.Flow.Validation.GraphValidation 100% 100%
Kagaku.Flow.Validation.GraphValidationContext 100%
Kagaku.Flow.Validation.HookFailure 100%
Kagaku.Flow.Validation.ResolvedGraph 100% 100%
Kagaku.Flow.Validation.ValidationError 100%
Kagaku.Flow.Validation.ValidationReport 100%
System.Text.RegularExpressions.Generated 96.1% 90.5%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6329A328226B0CF
E95E47D27E8B105AC5589487C0997B6B65384AEDBF572144E__ColorToken_3
97.4% 94.4%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6329A328226B0CF
E95E47D27E8B105AC5589487C0997B6B65384AEDBF572144E__NodeId_2
91.8% 83.3%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6329A328226B0CF
E95E47D27E8B105AC5589487C0997B6B65384AEDBF572144E__Socket_1
97.2% 94.4%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6329A328226B0CF
E95E47D27E8B105AC5589487C0997B6B65384AEDBF572144E__TypeId_0
97.2% 94.4%
Kagaku.Flow.OpenRouter - 100%
Name Line Branch
Kagaku.Flow.OpenRouter 100% 100%
Kagaku.Flow.OpenRouter.Catalog.ModelCapabilities 100% 100%
Kagaku.Flow.OpenRouter.Gateway.LlmCompletion 100%
Kagaku.Flow.OpenRouter.Gateway.OpenRouterAttemptCostLookup 100%
Kagaku.Flow.OpenRouter.Gateway.OpenRouterGateway 100% 100%
Kagaku.Flow.OpenRouter.Gateway.OpenRouterGatewayOptions 100%
Kagaku.Flow.OpenRouter.Gateway.OpenRouterKeyLookup 100% 100%
Kagaku.Flow.OpenRouter.Gateway.SentRequestCapture 100% 100%
Kagaku.Flow.OpenRouter.Gateway.SentRequestCaptureHandler 100% 100%
Kagaku.Flow.OpenRouter.Llm.LlmAnswer 100% 100%
Kagaku.Flow.OpenRouter.Llm.LlmConfig 100% 100%
Kagaku.Flow.OpenRouter.Llm.LlmConfigRead 100%
Kagaku.Flow.OpenRouter.Llm.LlmDescriptor 100% 100%
Kagaku.Flow.OpenRouter.Llm.LlmExecutor 100% 100%
Kagaku.Flow.OpenRouter.Llm.LlmFacts 100% 100%
Kagaku.Flow.OpenRouter.Llm.LlmFailureText 100% 100%
Kagaku.Flow.OpenRouter.Llm.LlmMessage 100%
Kagaku.Flow.OpenRouter.Llm.LlmRequestBuilder 100% 100%
Kagaku.Flow.OpenRouter.Llm.LlmRequestPlan 100%
Kagaku.Flow.OpenRouter.Llm.LlmRoutingDefaults 100% 100%
Kagaku.Flow.OpenRouter.Llm.LlmSampling 100%
Kagaku.Flow.OpenRouter.Llm.LlmSchemaCheck 100% 100%
Kagaku.Flow.OpenRouter.Llm.LlmStrictSchemaRule 100% 100%
Kagaku.Flow.OpenRouter.Llm.LlmVocabulary 100% 100%
Kagaku.Flow.OpenRouter.LlmNodeServiceCollectionExtensions 100%
Kagaku.Flow.OpenRouter.OpenRouterServiceCollectionExtensions 100% 100%
Kagaku.Flow.Testing - 100%
Name Line Branch
Kagaku.Flow.Testing 100% 100%
Kagaku.Flow.Testing.FlowEngineDriver 100% 100%
Kagaku.Flow.Testing.InMemoryRunLedger 100% 100%
Kagaku.Flow.Testing.RecordingRunEventSink 100%
Kagaku.Flow.Testing.RunLedgerContract 100% 100%
Kagaku.Flow.Testing.RunLedgerContractException 100%
Tsumugi.BlazorAdapter - 97.8%
Name Line Branch
Tsumugi.BlazorAdapter 97.8% 95%
Tsumugi.BlazorAdapter.BlazorAdapterAssembly 100%
Tsumugi.BlazorAdapter.Documents.CategoryCreated 100%
Tsumugi.BlazorAdapter.Documents.CategoryEditor 93.2% 88.4%
Tsumugi.BlazorAdapter.Documents.CategorySaved 100%
Tsumugi.BlazorAdapter.Documents.ChangeCategoryFieldsRequested 100%
Tsumugi.BlazorAdapter.Documents.ContextPreviewEffects 100% 100%
Tsumugi.BlazorAdapter.Documents.ContextPreviewFailed 100%
Tsumugi.BlazorAdapter.Documents.ContextPreviewLoaded 100%
Tsumugi.BlazorAdapter.Documents.ContextPreviewPane 100% 100%
Tsumugi.BlazorAdapter.Documents.ContextPreviewReducers 100% 100%
Tsumugi.BlazorAdapter.Documents.ContextPreviewState 100%
Tsumugi.BlazorAdapter.Documents.CreateCategoryRequested 100%
Tsumugi.BlazorAdapter.Documents.CreateDocumentRequested 100%
Tsumugi.BlazorAdapter.Documents.DeleteCategoryChoice 100%
Tsumugi.BlazorAdapter.Documents.DeleteCategoryDialog 100% 94.1%
Tsumugi.BlazorAdapter.Documents.DeleteCategoryRequested 100%
Tsumugi.BlazorAdapter.Documents.DeleteDocumentRequested 100%
Tsumugi.BlazorAdapter.Documents.DocumentAutoSaveFailed 100%
Tsumugi.BlazorAdapter.Documents.DocumentCreated 100%
Tsumugi.BlazorAdapter.Documents.DocumentEditor 95.7% 89.4%
Tsumugi.BlazorAdapter.Documents.DocumentImageRefused 100%
Tsumugi.BlazorAdapter.Documents.DocumentImageSet 100%
Tsumugi.BlazorAdapter.Documents.DocumentsActionFailed 100%
Tsumugi.BlazorAdapter.Documents.DocumentSaved 100%
Tsumugi.BlazorAdapter.Documents.DocumentsEffects 100% 100%
Tsumugi.BlazorAdapter.Documents.DocumentsList 98.5% 95.1%
Tsumugi.BlazorAdapter.Documents.DocumentsLoaded 100%
Tsumugi.BlazorAdapter.Documents.DocumentsPage 100% 100%
Tsumugi.BlazorAdapter.Documents.DocumentsReadFailed 100%
Tsumugi.BlazorAdapter.Documents.DocumentsReducers 100% 100%
Tsumugi.BlazorAdapter.Documents.DocumentsRefusal 100%
Tsumugi.BlazorAdapter.Documents.DocumentsState 100% 100%
Tsumugi.BlazorAdapter.Documents.FieldInput 100% 96.6%
Tsumugi.BlazorAdapter.Documents.FieldsChanges 100% 100%
Tsumugi.BlazorAdapter.Documents.FieldShapes 90% 87.5%
Tsumugi.BlazorAdapter.Documents.ImageUpload 100%
Tsumugi.BlazorAdapter.Documents.ImageUploadRefusal 100%
Tsumugi.BlazorAdapter.Documents.ImpactText 100% 94.2%
Tsumugi.BlazorAdapter.Documents.LoadContextPreview 100%
Tsumugi.BlazorAdapter.Documents.LoadDocuments 100%
Tsumugi.BlazorAdapter.Documents.MoveDocumentChoice 100%
Tsumugi.BlazorAdapter.Documents.MoveDocumentDialog 95.6% 71.4%
Tsumugi.BlazorAdapter.Documents.MoveDocumentsRequested 100%
Tsumugi.BlazorAdapter.Documents.ReorderCategoriesRequested 100%
Tsumugi.BlazorAdapter.Documents.SetCategoryCollapsed 100%
Tsumugi.BlazorAdapter.Documents.SetDocumentImageRequested 100%
Tsumugi.BlazorAdapter.Documents.SetDocumentsFilter 100%
Tsumugi.BlazorAdapter.Documents.UpdateCategoryRequested 100%
Tsumugi.BlazorAdapter.Documents.UpdateDocumentRequested 100%
Tsumugi.BlazorAdapter.EffectCalls 100%
Tsumugi.BlazorAdapter.Graphs.DuplicateGraphRequested 100%
Tsumugi.BlazorAdapter.Graphs.GraphActionFailed 100%
Tsumugi.BlazorAdapter.Graphs.GraphCanvas 58.3% 40%
Tsumugi.BlazorAdapter.Graphs.GraphPlaygroundPage 100% 100%
Tsumugi.BlazorAdapter.Graphs.GraphsEffects 100% 100%
Tsumugi.BlazorAdapter.Graphs.GraphsLoaded 100%
Tsumugi.BlazorAdapter.Graphs.GraphsPage 100% 100%
Tsumugi.BlazorAdapter.Graphs.GraphsReducers 100%
Tsumugi.BlazorAdapter.Graphs.GraphsState 100%
Tsumugi.BlazorAdapter.Graphs.ImportGraphRequested 100%
Tsumugi.BlazorAdapter.Graphs.RestoreGraphRequested 100%
Tsumugi.BlazorAdapter.Graphs.ReviseGraphRequested 100%
Tsumugi.BlazorAdapter.Graphs.SetShowGraphTrash 100%
Tsumugi.BlazorAdapter.Graphs.TrashGraphRequested 100%
Tsumugi.BlazorAdapter.Help.EditorKeyEntry 100%
Tsumugi.BlazorAdapter.Help.EditorKeySection 100%
Tsumugi.BlazorAdapter.Help.EditorReference 100% 100%
Tsumugi.BlazorAdapter.Help.HelpPage 100% 100%
Tsumugi.BlazorAdapter.Help.PunctuationRow 100%
Tsumugi.BlazorAdapter.Notifications.DomainChangedBridge 94.4% 83.3%
Tsumugi.BlazorAdapter.Notifications.DomainChangesReceived 75% 100%
Tsumugi.BlazorAdapter.Runs.CancelRunQuestion 100% 100%
Tsumugi.BlazorAdapter.Runs.CancelRunRequested 100%
Tsumugi.BlazorAdapter.Runs.ClearRunHistoryRequested 100%
Tsumugi.BlazorAdapter.Runs.CloseNodeInspector 100%
Tsumugi.BlazorAdapter.Runs.HideRunMonitor 100%
Tsumugi.BlazorAdapter.Runs.InspectorCommitAnswered 100%
Tsumugi.BlazorAdapter.Runs.InspectorCommitRefused 100%
Tsumugi.BlazorAdapter.Runs.InspectorCommitRequested 100%
Tsumugi.BlazorAdapter.Runs.InspectorRetryAnswered 100%
Tsumugi.BlazorAdapter.Runs.InspectorRetryRefused 100%
Tsumugi.BlazorAdapter.Runs.InspectorRetryRequested 100%
Tsumugi.BlazorAdapter.Runs.InspectorSaid 100%
Tsumugi.BlazorAdapter.Runs.InspectorText 100% 100%
Tsumugi.BlazorAdapter.Runs.LiveRunEffects 100% 100%
Tsumugi.BlazorAdapter.Runs.LiveRunLoaded 100%
Tsumugi.BlazorAdapter.Runs.LiveRunReadFailed 100%
Tsumugi.BlazorAdapter.Runs.LiveRunReducers 100% 100%
Tsumugi.BlazorAdapter.Runs.LiveRunState 100%
Tsumugi.BlazorAdapter.Runs.LoadLiveRun 100%
Tsumugi.BlazorAdapter.Runs.LoadNodeInspector 100%
Tsumugi.BlazorAdapter.Runs.LoadRunHistory 100%
Tsumugi.BlazorAdapter.Runs.LoadRunMonitor 100%
Tsumugi.BlazorAdapter.Runs.LoadRunStrip 100%
Tsumugi.BlazorAdapter.Runs.MonitorCancelRequested 100%
Tsumugi.BlazorAdapter.Runs.MonitorDismissRequested 100%
Tsumugi.BlazorAdapter.Runs.MonitorRequestRefused 100%
Tsumugi.BlazorAdapter.Runs.NodeInspector 100% 100%
Tsumugi.BlazorAdapter.Runs.NodeInspectorEffects 100% 100%
Tsumugi.BlazorAdapter.Runs.NodeInspectorKey 100%
Tsumugi.BlazorAdapter.Runs.NodeInspectorLoaded 100%
Tsumugi.BlazorAdapter.Runs.NodeInspectorReadFailed 100%
Tsumugi.BlazorAdapter.Runs.NodeInspectorReducers 100% 100%
Tsumugi.BlazorAdapter.Runs.NodeInspectorState 100%
Tsumugi.BlazorAdapter.Runs.OpenNodeInspector 100%
Tsumugi.BlazorAdapter.Runs.RunChangedBridge 98.1% 95%
Tsumugi.BlazorAdapter.Runs.RunChangesReceived 100%
Tsumugi.BlazorAdapter.Runs.RunControl 100% 100%
Tsumugi.BlazorAdapter.Runs.RunHistoryClearFailed 100%
Tsumugi.BlazorAdapter.Runs.RunHistoryLoaded 100%
Tsumugi.BlazorAdapter.Runs.RunHistoryPanel 100% 97.3%
Tsumugi.BlazorAdapter.Runs.RunHistoryReadFailed 100%
Tsumugi.BlazorAdapter.Runs.RunMonitor 100% 100%
Tsumugi.BlazorAdapter.Runs.RunMonitorEffects 100% 100%
Tsumugi.BlazorAdapter.Runs.RunMonitorEntry 100%
Tsumugi.BlazorAdapter.Runs.RunMonitorKey 100%
Tsumugi.BlazorAdapter.Runs.RunMonitorLoaded 100%
Tsumugi.BlazorAdapter.Runs.RunMonitorReadFailed 100%
Tsumugi.BlazorAdapter.Runs.RunMonitorReducers 100% 100%
Tsumugi.BlazorAdapter.Runs.RunMonitorState 100%
Tsumugi.BlazorAdapter.Runs.RunPage 100% 100%
Tsumugi.BlazorAdapter.Runs.RunPanel 100% 100%
Tsumugi.BlazorAdapter.Runs.RunPreview 100% 100%
Tsumugi.BlazorAdapter.Runs.RunPreviewReducers 100% 100%
Tsumugi.BlazorAdapter.Runs.RunPreviewState 100%
Tsumugi.BlazorAdapter.Runs.RunPreviewText 100%
Tsumugi.BlazorAdapter.Runs.RunRequestRefused 100%
Tsumugi.BlazorAdapter.Runs.RunsEffects 100% 100%
Tsumugi.BlazorAdapter.Runs.RunsPage 100%
Tsumugi.BlazorAdapter.Runs.RunsReducers 100% 100%
Tsumugi.BlazorAdapter.Runs.RunsState 100%
Tsumugi.BlazorAdapter.Runs.RunStrip 100% 100%
Tsumugi.BlazorAdapter.Runs.RunStripEffects 100% 100%
Tsumugi.BlazorAdapter.Runs.RunStripLoaded 100%
Tsumugi.BlazorAdapter.Runs.RunStripReadFailed 100%
Tsumugi.BlazorAdapter.Runs.RunStripReducers 100% 100%
Tsumugi.BlazorAdapter.Runs.RunStripState 100%
Tsumugi.BlazorAdapter.Runs.RunTextKey 100%
Tsumugi.BlazorAdapter.Runs.RunTextReceived 100%
Tsumugi.BlazorAdapter.Runs.RunTimes 100%
Tsumugi.BlazorAdapter.Runs.RunTones 100% 100%
Tsumugi.BlazorAdapter.Runs.ShowRunMonitor 100%
Tsumugi.BlazorAdapter.Runs.StartRunRequested 100%
Tsumugi.BlazorAdapter.Runs.StepStatus 100% 100%
Tsumugi.BlazorAdapter.Runs.StripCancelRequested 100%
Tsumugi.BlazorAdapter.Runs.StripDismissRequested 100%
Tsumugi.BlazorAdapter.Runs.StripRequestRefused 100%
Tsumugi.BlazorAdapter.Settings.BackupFailed 100%
Tsumugi.BlazorAdapter.Settings.BackupNowRequested 100%
Tsumugi.BlazorAdapter.Settings.BackupSettingsLoaded 100%
Tsumugi.BlazorAdapter.Settings.BackupsSection 100% 100%
Tsumugi.BlazorAdapter.Settings.BackupsSettingsEffects 100%
Tsumugi.BlazorAdapter.Settings.BackupsSettingsReducers 100%
Tsumugi.BlazorAdapter.Settings.BackupsSettingsState 100%
Tsumugi.BlazorAdapter.Settings.DefaultsSection 100% 100%
Tsumugi.BlazorAdapter.Settings.DefaultsSettingsEffects 100%
Tsumugi.BlazorAdapter.Settings.DefaultsSettingsReducers 100%
Tsumugi.BlazorAdapter.Settings.DefaultsSettingsState 100%
Tsumugi.BlazorAdapter.Settings.EditorAppearanceCss 100% 100%
Tsumugi.BlazorAdapter.Settings.EditorAppearanceEffects 100%
Tsumugi.BlazorAdapter.Settings.EditorAppearanceLoaded 100%
Tsumugi.BlazorAdapter.Settings.EditorAppearancePreview 100% 100%
Tsumugi.BlazorAdapter.Settings.EditorAppearanceReducers 100% 100%
Tsumugi.BlazorAdapter.Settings.EditorAppearanceSaved 100%
Tsumugi.BlazorAdapter.Settings.EditorAppearanceSaveFailed 100%
Tsumugi.BlazorAdapter.Settings.EditorAppearanceSection 95% 98%
Tsumugi.BlazorAdapter.Settings.EditorAppearanceState 100%
Tsumugi.BlazorAdapter.Settings.EditorPreviewBlock 100%
Tsumugi.BlazorAdapter.Settings.EditorPreviewSample 100%
Tsumugi.BlazorAdapter.Settings.EditorSuggestionsEffects 91.6%
Tsumugi.BlazorAdapter.Settings.EditorSuggestionsLoaded 100%
Tsumugi.BlazorAdapter.Settings.EditorSuggestionsReducers 100% 100%
Tsumugi.BlazorAdapter.Settings.EditorSuggestionsSaved 100%
Tsumugi.BlazorAdapter.Settings.EditorSuggestionsSaveFailed 100%
Tsumugi.BlazorAdapter.Settings.EditorSuggestionsSection 100% 95%
Tsumugi.BlazorAdapter.Settings.EditorSuggestionsState 100%
Tsumugi.BlazorAdapter.Settings.EditorTypingEffects 91.6%
Tsumugi.BlazorAdapter.Settings.EditorTypingLoaded 100%
Tsumugi.BlazorAdapter.Settings.EditorTypingReducers 100% 100%
Tsumugi.BlazorAdapter.Settings.EditorTypingSaved 100%
Tsumugi.BlazorAdapter.Settings.EditorTypingSaveFailed 100%
Tsumugi.BlazorAdapter.Settings.EditorTypingSection 100% 100%
Tsumugi.BlazorAdapter.Settings.EditorTypingState 100%
Tsumugi.BlazorAdapter.Settings.LlmDefaultsLoaded 100%
Tsumugi.BlazorAdapter.Settings.LlmDefaultsSaved 100%
Tsumugi.BlazorAdapter.Settings.LlmDefaultsSaveFailed 100%
Tsumugi.BlazorAdapter.Settings.LoadBackupSettings 100%
Tsumugi.BlazorAdapter.Settings.LoadProviderSettings 100%
Tsumugi.BlazorAdapter.Settings.LoadTranscriptSettings 100%
Tsumugi.BlazorAdapter.Settings.ModelCatalogLoaded 100%
Tsumugi.BlazorAdapter.Settings.ModelCatalogLoadFailed 100%
Tsumugi.BlazorAdapter.Settings.ModelPicker 100% 100%
Tsumugi.BlazorAdapter.Settings.OpenRouterKeySaved 100%
Tsumugi.BlazorAdapter.Settings.OpenRouterKeySaveFailed 100%
Tsumugi.BlazorAdapter.Settings.ProviderKeyChecked 100%
Tsumugi.BlazorAdapter.Settings.ProviderSection 100% 100%
Tsumugi.BlazorAdapter.Settings.ProviderSettingsEffects 100% 100%
Tsumugi.BlazorAdapter.Settings.ProviderSettingsLoaded 100%
Tsumugi.BlazorAdapter.Settings.ProviderSettingsReducers 100% 100%
Tsumugi.BlazorAdapter.Settings.ProviderSettingsState 100% 100%
Tsumugi.BlazorAdapter.Settings.SaveEditorAppearanceRequested 100%
Tsumugi.BlazorAdapter.Settings.SaveEditorSuggestionsRequested 100%
Tsumugi.BlazorAdapter.Settings.SaveEditorTypingRequested 100%
Tsumugi.BlazorAdapter.Settings.SaveLlmDefaultsRequested 100%
Tsumugi.BlazorAdapter.Settings.SaveOpenRouterKeyRequested 100%
Tsumugi.BlazorAdapter.Settings.SuggestionUsageEffects 100%
Tsumugi.BlazorAdapter.Settings.SuggestionUsageLoaded 100%
Tsumugi.BlazorAdapter.Settings.TranscriptSettingsLoaded 100%
Tsumugi.BlazorAdapter.Settings.TranscriptsSection 100% 100%
Tsumugi.BlazorAdapter.Settings.TranscriptsSettingsEffects 100%
Tsumugi.BlazorAdapter.Settings.TranscriptsSettingsReducers 100%
Tsumugi.BlazorAdapter.Settings.TranscriptsSettingsState 100%
Tsumugi.BlazorAdapter.Stories.CreateStoryRequested 100%
Tsumugi.BlazorAdapter.Stories.PurgeStoryRequested 100%
Tsumugi.BlazorAdapter.Stories.RestoreStoryRequested 100%
Tsumugi.BlazorAdapter.Stories.SetShowArchived 100%
Tsumugi.BlazorAdapter.Stories.SetStoriesFilter 100%
Tsumugi.BlazorAdapter.Stories.SetStoryArchivedRequested 100%
Tsumugi.BlazorAdapter.Stories.StoriesEffects 100% 100%
Tsumugi.BlazorAdapter.Stories.StoriesLoaded 100%
Tsumugi.BlazorAdapter.Stories.StoriesPage 100% 100%
Tsumugi.BlazorAdapter.Stories.StoriesReducers 100% 100%
Tsumugi.BlazorAdapter.Stories.StoriesState 100% 100%
Tsumugi.BlazorAdapter.Stories.StoryActionFailed 100%
Tsumugi.BlazorAdapter.Stories.StoryCreated 100%
Tsumugi.BlazorAdapter.Stories.StoryCreateFailed 100%
Tsumugi.BlazorAdapter.Stories.StoryTrashPage 100% 100%
Tsumugi.BlazorAdapter.Stories.TrashStoryRequested 100%
Tsumugi.BlazorAdapter.Workspace.AckWire 100%
Tsumugi.BlazorAdapter.Workspace.AutoSaveFailed 100%
Tsumugi.BlazorAdapter.Workspace.ChangedWire 100%
Tsumugi.BlazorAdapter.Workspace.ChapterHeader 100% 86.3%
Tsumugi.BlazorAdapter.Workspace.ChapterMenu 100% 81.2%
Tsumugi.BlazorAdapter.Workspace.ChapterPage 100% 95.4%
Tsumugi.BlazorAdapter.Workspace.ChapterSaved 100%
Tsumugi.BlazorAdapter.Workspace.ChaptersPage 94.4% 83.3%
Tsumugi.BlazorAdapter.Workspace.ChapterWire 100%
Tsumugi.BlazorAdapter.Workspace.ChapterWritten 100%
Tsumugi.BlazorAdapter.Workspace.CreateChapterRequested 100%
Tsumugi.BlazorAdapter.Workspace.CreatedWire 100%
Tsumugi.BlazorAdapter.Workspace.DeleteChapterRequested 100%
Tsumugi.BlazorAdapter.Workspace.DeltaWire 100%
Tsumugi.BlazorAdapter.Workspace.HistoryEffects 100% 100%
Tsumugi.BlazorAdapter.Workspace.HistoryLoaded 100%
Tsumugi.BlazorAdapter.Workspace.HistoryPage 100%
Tsumugi.BlazorAdapter.Workspace.HistoryPanel 100% 100%
Tsumugi.BlazorAdapter.Workspace.HistoryReadFailed 100%
Tsumugi.BlazorAdapter.Workspace.LoadHistory 100%
Tsumugi.BlazorAdapter.Workspace.LoadSelectionGraphs 100%
Tsumugi.BlazorAdapter.Workspace.LoadWorkspace 100%
Tsumugi.BlazorAdapter.Workspace.ManuscriptEffects 100% 100%
Tsumugi.BlazorAdapter.Workspace.ManuscriptEvents 82.2% 75.7%
Tsumugi.BlazorAdapter.Workspace.ManuscriptSurface 90.2% 89.3%
Tsumugi.BlazorAdapter.Workspace.MergeChapterRequested 100%
Tsumugi.BlazorAdapter.Workspace.MergeEvent 100%
Tsumugi.BlazorAdapter.Workspace.MoveChapterRequested 100%
Tsumugi.BlazorAdapter.Workspace.PendingRunChange 100%
Tsumugi.BlazorAdapter.Workspace.RedoRequested 100%
Tsumugi.BlazorAdapter.Workspace.RedoRevertRequested 100%
Tsumugi.BlazorAdapter.Workspace.RenameChapterRequested 100%
Tsumugi.BlazorAdapter.Workspace.ReshapeEvent 100%
Tsumugi.BlazorAdapter.Workspace.RevertToSnapshotRequested 100%
Tsumugi.BlazorAdapter.Workspace.RunChangeAsked 100%
Tsumugi.BlazorAdapter.Workspace.RunChangeChecked 100%
Tsumugi.BlazorAdapter.Workspace.RunChangeDismissed 100%
Tsumugi.BlazorAdapter.Workspace.RunChangeRequested 100%
Tsumugi.BlazorAdapter.Workspace.SaveScope 100% 50%
Tsumugi.BlazorAdapter.Workspace.SaveStateLadder 100% 100%
Tsumugi.BlazorAdapter.Workspace.SaveVersionRequested 100%
Tsumugi.BlazorAdapter.Workspace.SegmentTextEvent 100%
Tsumugi.BlazorAdapter.Workspace.SegmentWire 100% 92.8%
Tsumugi.BlazorAdapter.Workspace.SelectionEndWire 100%
Tsumugi.BlazorAdapter.Workspace.SelectionGraph 100%
Tsumugi.BlazorAdapter.Workspace.SelectionGraphsLoaded 100%
Tsumugi.BlazorAdapter.Workspace.SelectionGraphsReadFailed 100%
Tsumugi.BlazorAdapter.Workspace.SelectionMenuEffects 100% 100%
Tsumugi.BlazorAdapter.Workspace.SelectionMenuReducers 100% 100%
Tsumugi.BlazorAdapter.Workspace.SelectionMenuState 100%
Tsumugi.BlazorAdapter.Workspace.SelectionRangeWire 100%
Tsumugi.BlazorAdapter.Workspace.SelectionRunRefusal 100%
Tsumugi.BlazorAdapter.Workspace.SelectionRunRefused 100%
Tsumugi.BlazorAdapter.Workspace.SelectionRunRequested 100%
Tsumugi.BlazorAdapter.Workspace.SetActiveGraphRequested 100%
Tsumugi.BlazorAdapter.Workspace.SetChapterSummaryRequested 100%
Tsumugi.BlazorAdapter.Workspace.SplitEvent 100%
Tsumugi.BlazorAdapter.Workspace.StampWire 0%
Tsumugi.BlazorAdapter.Workspace.StoryDetails 100% 85.2%
Tsumugi.BlazorAdapter.Workspace.StoryGeneralPage 100% 100%
Tsumugi.BlazorAdapter.Workspace.StoryGraphsEffects 100% 100%
Tsumugi.BlazorAdapter.Workspace.StoryGraphsLoaded 100%
Tsumugi.BlazorAdapter.Workspace.StoryGraphsReducers 100%
Tsumugi.BlazorAdapter.Workspace.StoryGraphsState 100%
Tsumugi.BlazorAdapter.Workspace.StorySaved 100%
Tsumugi.BlazorAdapter.Workspace.StoryShell 100% 100%
Tsumugi.BlazorAdapter.Workspace.UndoRequested 100%
Tsumugi.BlazorAdapter.Workspace.UndoStatusChanged 100%
Tsumugi.BlazorAdapter.Workspace.UpdateStoryRequested 100%
Tsumugi.BlazorAdapter.Workspace.WorkspaceActionFailed 100%
Tsumugi.BlazorAdapter.Workspace.WorkspaceLoaded 100%
Tsumugi.BlazorAdapter.Workspace.WorkspaceNotFound 100%
Tsumugi.BlazorAdapter.Workspace.WorkspaceReducers 100% 100%
Tsumugi.BlazorAdapter.Workspace.WorkspaceState 100%
Tsumugi.Domain - 96.6%
Name Line Branch
Tsumugi.Domain 96.6% 95.5%
System.Text.RegularExpressions.Generated 91.3% 88.6%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F5BB471BFAD87E25
BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__DigitsAndSeparators_2
97.4% 95.8%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F5BB471BFAD87E25
BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__LineBreak_0
91% 91.1%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F5BB471BFAD87E25
BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__NumberToken_1
91.8% 83.3%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F5BB471BFAD87E25
BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__Plain_4
91.9% 88.8%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F5BB471BFAD87E25
BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__ThousandsGroup_3
90.9% 84.3%
Tsumugi.Domain.Documents.CategoryFields 94.5% 93.7%
Tsumugi.Domain.Documents.ChoiceOption 100%
Tsumugi.Domain.Documents.ChoiceValue 100%
Tsumugi.Domain.Documents.DateText 100%
Tsumugi.Domain.Documents.DateValue 100%
Tsumugi.Domain.Documents.Document 100% 100%
Tsumugi.Domain.Documents.DocumentCategory 100% 100%
Tsumugi.Domain.Documents.DocumentValues 100%
Tsumugi.Domain.Documents.FieldCarry 100% 100%
Tsumugi.Domain.Documents.FieldConversion 100% 100%
Tsumugi.Domain.Documents.FieldDefinition 97% 95.3%
Tsumugi.Domain.Documents.FieldMessages 100% 100%
Tsumugi.Domain.Documents.FieldNames 100%
Tsumugi.Domain.Documents.FieldsChange 100%
Tsumugi.Domain.Documents.FieldShape 95.2% 87.5%
Tsumugi.Domain.Documents.FieldsPlan 100%
Tsumugi.Domain.Documents.FieldsPlanner 99.2% 99.2%
Tsumugi.Domain.Documents.FieldValue 100%
Tsumugi.Domain.Documents.FieldValues 95.4% 97.7%
Tsumugi.Domain.Documents.ImageFiles 100% 100%
Tsumugi.Domain.Documents.ImageValue 100%
Tsumugi.Domain.Documents.MovePlan 100%
Tsumugi.Domain.Documents.NumberParse 100%
Tsumugi.Domain.Documents.NumberText 100% 97.6%
Tsumugi.Domain.Documents.NumberValue 100%
Tsumugi.Domain.Documents.StoryImage 100%
Tsumugi.Domain.Documents.TextValue 100% 100%
Tsumugi.Domain.Documents.ValueChange 100%
Tsumugi.Domain.Documents.ValueChangeKey 100%
Tsumugi.Domain.Documents.ValueImpact 100% 100%
Tsumugi.Domain.Graphs.Graph 100% 100%
Tsumugi.Domain.Graphs.GraphTriggers 100% 100%
Tsumugi.Domain.Journal.ChangeLogEntry 98% 87.5%
Tsumugi.Domain.Journal.StorySnapshot 96.7% 83.3%
Tsumugi.Domain.Settings.AppSetting 100%
Tsumugi.Domain.Stories.Chapter 100% 100%
Tsumugi.Domain.Stories.InlineMarkup 100% 100%
Tsumugi.Domain.Stories.MarkupRun 100%
Tsumugi.Domain.Stories.ModelParagraph 100%
Tsumugi.Domain.Stories.Provenance 100% 100%
Tsumugi.Domain.Stories.RangedSplice 100% 100%
Tsumugi.Domain.Stories.Segment 100% 100%
Tsumugi.Domain.Stories.SplicedBlock 100%
Tsumugi.Domain.Stories.Story 100% 100%
Tsumugi.Domain.Text 100% 100%
Tsumugi.Infrastructure - 99.1%
Name Line Branch
Tsumugi.Infrastructure 99.1% 88.2%
System.Text.RegularExpressions.Generated 81.4% 64.8%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F0D076C66E8EEC1C
A55E0373ED22DC58420DBB40F103A46B68DC4D9CE5A49E00B__Pattern_0
84% 65.7%
Tsumugi.Infrastructure.Backups.BackupArtifactName 100% 100%
Tsumugi.Infrastructure.Backups.BackupOptions 100%
Tsumugi.Infrastructure.Backups.BackupSchedule 100% 83.3%
Tsumugi.Infrastructure.Backups.BackupScheduler 96.6% 87.5%
Tsumugi.Infrastructure.Backups.BackupWriter 98.5% 92.8%
Tsumugi.Infrastructure.Backups.DatabaseFingerprint 91.9% 97%
Tsumugi.Infrastructure.Backups.FileSystemBackupStore 100% 100%
Tsumugi.Infrastructure.Backups.OwnerOnlyFile 100% 100%
Tsumugi.Infrastructure.Backups.PreMigrationBackup 90% 100%
Tsumugi.Infrastructure.Backups.SqliteSnapshot 88.2% 75%
Tsumugi.Infrastructure.DependencyInjection 100% 100%
Tsumugi.Infrastructure.Journal.EfChangeJournal 100%
Tsumugi.Infrastructure.Journal.EfSnapshotStore 100% 100%
Tsumugi.Infrastructure.Journal.EfUndoStore 98.5% 88.2%
Tsumugi.Infrastructure.Journal.ModelExtensions 100%
Tsumugi.Infrastructure.Journal.OperationContext 100% 100%
Tsumugi.Infrastructure.Journal.PropertyBag 100% 95.4%
Tsumugi.Infrastructure.Notifications.InProcessDomainChangedBus 100% 100%
Tsumugi.Infrastructure.Persistence.Configurations.AppSettingConfiguration 100%
Tsumugi.Infrastructure.Persistence.Configurations.ChangeLogEntryConfigurati
on
100%
Tsumugi.Infrastructure.Persistence.Configurations.ChapterConfiguration 100%
Tsumugi.Infrastructure.Persistence.Configurations.DocumentCategoryConfigura
tion
100%
Tsumugi.Infrastructure.Persistence.Configurations.DocumentConfiguration 100%
Tsumugi.Infrastructure.Persistence.Configurations.GraphConfiguration 100%
Tsumugi.Infrastructure.Persistence.Configurations.NodeRunRecordConfiguratio
n
100%
Tsumugi.Infrastructure.Persistence.Configurations.RunRecordConfiguration 100%
Tsumugi.Infrastructure.Persistence.Configurations.RunTranscriptRecordConfig
uration
100%
Tsumugi.Infrastructure.Persistence.Configurations.SegmentConfiguration 100%
Tsumugi.Infrastructure.Persistence.Configurations.StoryConfiguration 100%
Tsumugi.Infrastructure.Persistence.Configurations.StoryImageConfiguration 100%
Tsumugi.Infrastructure.Persistence.Configurations.StorySnapshotConfiguratio
n
100%
Tsumugi.Infrastructure.Persistence.Converters.CanonicalJsonComparer 100%
Tsumugi.Infrastructure.Persistence.Converters.CategoryFieldsConverter 97.6% 94.4%
Tsumugi.Infrastructure.Persistence.Converters.FieldValuesConverter 96.9% 93.7%
Tsumugi.Infrastructure.Persistence.Converters.GraphTriggerConverter 100% 100%
Tsumugi.Infrastructure.Persistence.Converters.ProvenanceConverter 100% 100%
Tsumugi.Infrastructure.Persistence.Converters.UtcTicksConverter 100%
Tsumugi.Infrastructure.Persistence.Converters.WireFormat 85.7% 73.8%
Tsumugi.Infrastructure.Persistence.Migrations.ActiveGraphForeignKey 100%
Tsumugi.Infrastructure.Persistence.Migrations.ActiveGraphOnContinue 100% 100%
Tsumugi.Infrastructure.Persistence.Migrations.ActiveGraphOnContinueSql 100%
Tsumugi.Infrastructure.Persistence.Migrations.AddAppSettings 99.2%
Tsumugi.Infrastructure.Persistence.Migrations.AddJournal 98.8%
Tsumugi.Infrastructure.Persistence.Migrations.CategoryFields 100% 100%
Tsumugi.Infrastructure.Persistence.Migrations.CategoryFieldsSql 100%
Tsumugi.Infrastructure.Persistence.Migrations.ChangeLogIterationPath 100%
Tsumugi.Infrastructure.Persistence.Migrations.CostLookups 100%
Tsumugi.Infrastructure.Persistence.Migrations.DropDocumentBody 100%
Tsumugi.Infrastructure.Persistence.Migrations.GenericDocuments 100%
Tsumugi.Infrastructure.Persistence.Migrations.GraphLibrary 100%
Tsumugi.Infrastructure.Persistence.Migrations.GraphNodeIds 100%
Tsumugi.Infrastructure.Persistence.Migrations.GraphNodeIdsSql 100%
Tsumugi.Infrastructure.Persistence.Migrations.InitialStoryDomain 97.3%
Tsumugi.Infrastructure.Persistence.Migrations.JournalUndoState 100%
Tsumugi.Infrastructure.Persistence.Migrations.RunLedger 100%
Tsumugi.Infrastructure.Persistence.Migrations.RunSnapshotFinish 100%
Tsumugi.Infrastructure.Persistence.Migrations.RunTranscripts 100%
Tsumugi.Infrastructure.Persistence.Migrations.SegmentTextMarkup 100% 100%
Tsumugi.Infrastructure.Persistence.Migrations.SegmentTextMarkupSql 100%
Tsumugi.Infrastructure.Persistence.Migrations.StoryImages 100%
Tsumugi.Infrastructure.Persistence.Migrations.TsumugiDbContextModelSnapshot 100%
Tsumugi.Infrastructure.Persistence.SqliteFunctions 90% 80%
Tsumugi.Infrastructure.Persistence.SqlitePragmaInterceptor 100% 100%
Tsumugi.Infrastructure.Persistence.Stores.EfChapterStore 100% 100%
Tsumugi.Infrastructure.Persistence.Stores.EfDocumentStore 98.3% 75%
Tsumugi.Infrastructure.Persistence.Stores.EfGraphStore 100% 100%
Tsumugi.Infrastructure.Persistence.Stores.EfImageStore 100%
Tsumugi.Infrastructure.Persistence.Stores.EfSegmentStore 100% 100%
Tsumugi.Infrastructure.Persistence.Stores.EfStoryStore 98.7% 91.6%
Tsumugi.Infrastructure.Persistence.TsumugiDbContext 97.7% 96.6%
Tsumugi.Infrastructure.Persistence.TsumugiDbContextFactory 100%
Tsumugi.Infrastructure.Provider.LlmDefaultsSource 100%
Tsumugi.Infrastructure.Provider.OpenRouterKeySource 100% 100%
Tsumugi.Infrastructure.Provider.OpenRouterModelProvider 100% 100%
Tsumugi.Infrastructure.Provider.OpenRouterOptions 100% 100%
Tsumugi.Infrastructure.Provider.ResolvedKey 100%
Tsumugi.Infrastructure.Runs.EfRunHistory 100%
Tsumugi.Infrastructure.Runs.EfRunLedger 100% 100%
Tsumugi.Infrastructure.Runs.InProcessRunEventBus 100% 100%
Tsumugi.Infrastructure.Runs.LedgerMapping 100% 100%
Tsumugi.Infrastructure.Runs.LedgerPromptSamples 100%
Tsumugi.Infrastructure.Runs.NodeRunRecord 100%
Tsumugi.Infrastructure.Runs.RunEngineHost 100%
Tsumugi.Infrastructure.Runs.RunRecord 100%
Tsumugi.Infrastructure.Runs.RunSnapshotsHost 100% 100%
Tsumugi.Infrastructure.Settings.EfAppSettingsStore 100% 100%
Tsumugi.Infrastructure.Suggestions.OpenRouterSuggestionModel 38.2% 44.4%
Tsumugi.Infrastructure.Suggestions.SuggestionRequestBuilder 100% 94.4%
Tsumugi.Infrastructure.Transcripts.EfTranscriptLog 100%
Tsumugi.Infrastructure.Transcripts.FileSystemTranscriptStore 100% 100%
Tsumugi.Infrastructure.Transcripts.RunTranscriptRecord 100%
Tsumugi.Infrastructure.Transcripts.RunTranscriptsHost 100% 100%
Tsumugi.Kernel - 90.9%
Name Line Branch
Tsumugi.Kernel 90.9% 75%
Tsumugi.Kernel.Err`1 100%
Tsumugi.Kernel.Ok`1 100%
Tsumugi.Kernel.Result`1 88.8% 75%
Tsumugi.Server - 100%
Name Line Branch
Tsumugi.Server 100% 94.5%
Program 100% 100%
Tsumugi.Server.Backups.BackupConfiguration 100% 100%
Tsumugi.Server.Components.App 100%
Tsumugi.Server.Components.Layout.AppHeader 100% 78.5%
Tsumugi.Server.Components.Layout.MainLayout 100%
Tsumugi.Server.Components.Pages.Gate 100% 100%
Tsumugi.Server.Provider.OpenRouterConfiguration 100% 100%
Tsumugi.Server.Security.AccessGate 100% 87.5%
Tsumugi.Server.Security.AccessSecret 100% 100%
Tsumugi.Server.Security.GateThrottle 100% 100%
Tsumugi.Server.VolumeStartupValidator 100% 100%
Tsumugi.UseCases - 96.2%
Name Line Branch
Tsumugi.UseCases 96.2% 92.5%
System.Text.RegularExpressions.Generated 78.5% 63.1%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6504F1744AA254A
663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__AttemptCount_1
84.4% 68.4%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6504F1744AA254A
663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__HexColour_2
94.8% 87.5%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6504F1744AA254A
663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__LineBreaks_0
95.3% 90.6%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6504F1744AA254A
663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__Preface_3
61.9% 51.6%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6504F1744AA254A
663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__SentenceEnd_4
88% 69.4%
Tsumugi.UseCases.Backups.BackupArtifact 100%
Tsumugi.UseCases.Backups.BackupFailure 100%
Tsumugi.UseCases.Backups.BackupJobState 100%
Tsumugi.UseCases.Backups.BackupPolicy 100%
Tsumugi.UseCases.Backups.BackupStatusView 100% 100%
Tsumugi.UseCases.Backups.DatabaseSnapshot 100%
Tsumugi.UseCases.Backups.DownloadDatabaseSnapshot 100%
Tsumugi.UseCases.Backups.GetBackupStatus 100%
Tsumugi.UseCases.Backups.IBackupStore 0%
Tsumugi.UseCases.Backups.RunBackupNow 100%
Tsumugi.UseCases.Chapters.ChapterDto 100%
Tsumugi.UseCases.Chapters.CreateChapter 100% 100%
Tsumugi.UseCases.Chapters.DeleteChapter 100% 100%
Tsumugi.UseCases.Chapters.GetChapterSegments 100%
Tsumugi.UseCases.Chapters.GetManuscript 100% 100%
Tsumugi.UseCases.Chapters.ManuscriptChapter 100%
Tsumugi.UseCases.Chapters.ManuscriptView 100%
Tsumugi.UseCases.Chapters.MergeChapters 100% 100%
Tsumugi.UseCases.Chapters.RenameChapter 100% 100%
Tsumugi.UseCases.Chapters.ReorderChapters 100% 100%
Tsumugi.UseCases.Chapters.SetChapterSummary 100% 75%
Tsumugi.UseCases.Commit.AppendRunText 100% 100%
Tsumugi.UseCases.Commit.CommitConfig 100% 100%
Tsumugi.UseCases.Commit.CommitConfigRead 100%
Tsumugi.UseCases.Commit.CommitDescriptor 100% 100%
Tsumugi.UseCases.Commit.CommitExecutor 100% 100%
Tsumugi.UseCases.Commit.CommitReport 100%
Tsumugi.UseCases.Commit.CommitTarget 100% 100%
Tsumugi.UseCases.Commit.CommittedSegments 100%
Tsumugi.UseCases.Commit.LandTargetedRunText 100% 100%
Tsumugi.UseCases.Commit.RunAppend 100%
Tsumugi.UseCases.Commit.TargetedWrite 100%
Tsumugi.UseCases.Commit.TargetedWrites 100% 100%
Tsumugi.UseCases.Context.AssembledContext 100%
Tsumugi.UseCases.Context.CharsPerToken 100% 100%
Tsumugi.UseCases.Context.ConsumerFigures 100%
Tsumugi.UseCases.Context.ContextAssembly 100% 100%
Tsumugi.UseCases.Context.ContextAttempt 100% 100%
Tsumugi.UseCases.Context.ContextBudgetTokens 100%
Tsumugi.UseCases.Context.ContextBuild 100%
Tsumugi.UseCases.Context.ContextBuilder 100% 100%
Tsumugi.UseCases.Context.ContextConfig 100% 100%
Tsumugi.UseCases.Context.ContextConfigRead 100%
Tsumugi.UseCases.Context.ContextConsumerRule 100% 100%
Tsumugi.UseCases.Context.ContextDescriptor 100%
Tsumugi.UseCases.Context.ContextExecutor 100% 100%
Tsumugi.UseCases.Context.ContextFocus 100%
Tsumugi.UseCases.Context.ContextNodePreview 100%
Tsumugi.UseCases.Context.ContextParts 100%
Tsumugi.UseCases.Context.ContextPreview 100%
Tsumugi.UseCases.Context.ContextReport 100%
Tsumugi.UseCases.Context.DocumentRendering 100% 100%
Tsumugi.UseCases.Context.PreviewContext 100% 100%
Tsumugi.UseCases.Context.PromptSample 100% 100%
Tsumugi.UseCases.Context.RecentParagraph 100%
Tsumugi.UseCases.Context.SelectionTemplateModel 100% 100%
Tsumugi.UseCases.Context.StoryDocumentsRule 100% 100%
Tsumugi.UseCases.Context.StoryReads 100% 100%
Tsumugi.UseCases.Context.StoryScope 100% 100%
Tsumugi.UseCases.Context.StoryTemplateModel 100%
Tsumugi.UseCases.Context.StoryText 100% 100%
Tsumugi.UseCases.DependencyInjection 100%
Tsumugi.UseCases.Diagnostics.SeedContext 100% 100%
Tsumugi.UseCases.Diagnostics.SeedDevData 99.2% 68.7%
Tsumugi.UseCases.Diagnostics.SeedFocus 100%
Tsumugi.UseCases.Diagnostics.SeedPictures 100%
Tsumugi.UseCases.Diagnostics.SeedRuns 100% 100%
Tsumugi.UseCases.Diagnostics.SeedWriting 100%
Tsumugi.UseCases.Documents.ChangeCategoryFields 100% 83.3%
Tsumugi.UseCases.Documents.CreateCategory 100% 100%
Tsumugi.UseCases.Documents.CreateDocument 100% 100%
Tsumugi.UseCases.Documents.DefaultFields 100% 100%
Tsumugi.UseCases.Documents.DeleteCategory 100% 94.4%
Tsumugi.UseCases.Documents.DeleteDocument 100% 100%
Tsumugi.UseCases.Documents.DocumentCategoryDto 100%
Tsumugi.UseCases.Documents.DocumentCategoryProfile 100%
Tsumugi.UseCases.Documents.DocumentDto 100%
Tsumugi.UseCases.Documents.DocumentPatch 100%
Tsumugi.UseCases.Documents.DocumentProfile 100%
Tsumugi.UseCases.Documents.DocumentsCategory 100%
Tsumugi.UseCases.Documents.DocumentsView 100%
Tsumugi.UseCases.Documents.DocumentWrites 100% 100%
Tsumugi.UseCases.Documents.FieldsChangeLabel 95.4% 88.2%
Tsumugi.UseCases.Documents.GetDocuments 100% 100%
Tsumugi.UseCases.Documents.GetStoryImage 100% 100%
Tsumugi.UseCases.Documents.ImpactPreview 100% 100%
Tsumugi.UseCases.Documents.LossMessages 92.3% 87.5%
Tsumugi.UseCases.Documents.MoveDocuments 100% 100%
Tsumugi.UseCases.Documents.ReorderCategories 100% 100%
Tsumugi.UseCases.Documents.SetDocumentImage 100% 93.7%
Tsumugi.UseCases.Documents.StoryImageFile 100%
Tsumugi.UseCases.Documents.UpdateCategory 100% 100%
Tsumugi.UseCases.Documents.UpdateDocument 100% 81.2%
Tsumugi.UseCases.Documents.WriteRefusedException 100%
Tsumugi.UseCases.Graphs.BundledGraphs 100%
Tsumugi.UseCases.Graphs.DuplicateGraph 100% 100%
Tsumugi.UseCases.Graphs.ExportGraph 100% 100%
Tsumugi.UseCases.Graphs.GetNodeTypes 100%
Tsumugi.UseCases.Graphs.GraphAnnouncements 100%
Tsumugi.UseCases.Graphs.GraphExport 100%
Tsumugi.UseCases.Graphs.GraphFile 100% 100%
Tsumugi.UseCases.Graphs.GraphFileContent 100%
Tsumugi.UseCases.Graphs.GraphListItem 100%
Tsumugi.UseCases.Graphs.GraphUser 100%
Tsumugi.UseCases.Graphs.GraphUsers 100%
Tsumugi.UseCases.Graphs.ImportGraph 100% 100%
Tsumugi.UseCases.Graphs.ListGraphs 100% 100%
Tsumugi.UseCases.Graphs.ListSelectionGraphs 100% 100%
Tsumugi.UseCases.Graphs.ListStoryGraphs 100% 100%
Tsumugi.UseCases.Graphs.RestoreGraph 100% 100%
Tsumugi.UseCases.Graphs.ReviseGraph 100% 100%
Tsumugi.UseCases.Graphs.SeedBundledGraphs 100% 100%
Tsumugi.UseCases.Graphs.SeededTemplates 100%
Tsumugi.UseCases.Graphs.SelectionGraphChoice 100%
Tsumugi.UseCases.Graphs.StoryGraphChoice 100%
Tsumugi.UseCases.Graphs.TrashGraph 100% 100%
Tsumugi.UseCases.Graphs.TriggerInputs 100% 100%
Tsumugi.UseCases.Journal.ConflictPlaces 100% 100%
Tsumugi.UseCases.Journal.GetStoryHistory 100% 100%
Tsumugi.UseCases.Journal.GetUndoStatus 100% 100%
Tsumugi.UseCases.Journal.HistoryOperation 88.8%
Tsumugi.UseCases.Journal.HistorySnapshot 90%
Tsumugi.UseCases.Journal.OperationGrouping 100% 100%
Tsumugi.UseCases.Journal.RedoRevert 100% 100%
Tsumugi.UseCases.Journal.RedoRun 100% 100%
Tsumugi.UseCases.Journal.RedoTyping 100% 100%
Tsumugi.UseCases.Journal.ReplayLanding 100% 100%
Tsumugi.UseCases.Journal.RevertConflict 100%
Tsumugi.UseCases.Journal.RevertOutcome 100%
Tsumugi.UseCases.Journal.RevertRun 100% 100%
Tsumugi.UseCases.Journal.RevertToSnapshot 92.3% 83.3%
Tsumugi.UseCases.Journal.StoryHistory 100%
Tsumugi.UseCases.Journal.TakeSnapshot 100% 87.5%
Tsumugi.UseCases.Journal.UndoStatus 100%
Tsumugi.UseCases.Journal.UndoTyping 100% 100%
Tsumugi.UseCases.Journal.UserOperation 100%
Tsumugi.UseCases.Money 100% 100%
Tsumugi.UseCases.Notifications.DomainChanged 100%
Tsumugi.UseCases.Ordering 100% 100%
Tsumugi.UseCases.Runs.AttemptCosts 100% 100%
Tsumugi.UseCases.Runs.AutoCommits 100% 100%
Tsumugi.UseCases.Runs.CancelRun 100% 100%
Tsumugi.UseCases.Runs.ClearRunHistory 100% 100%
Tsumugi.UseCases.Runs.CommitStepText 100% 100%
Tsumugi.UseCases.Runs.CommittedText 100%
Tsumugi.UseCases.Runs.DismissRun 100% 100%
Tsumugi.UseCases.Runs.EngineLiveRuns 100% 100%
Tsumugi.UseCases.Runs.FindSegmentStep 100% 100%
Tsumugi.UseCases.Runs.GetNodeRun 100% 100%
Tsumugi.UseCases.Runs.GetRunPage 100% 100%
Tsumugi.UseCases.Runs.GetRunStrip 100% 100%
Tsumugi.UseCases.Runs.GetStoryRunState 100% 100%
Tsumugi.UseCases.Runs.ListStoryRuns 100% 100%
Tsumugi.UseCases.Runs.LiveTail 100%
Tsumugi.UseCases.Runs.LlmConcurrencyLimit 100%
Tsumugi.UseCases.Runs.ModelTexts 100% 100%
Tsumugi.UseCases.Runs.NodeRunView 100%
Tsumugi.UseCases.Runs.RetryRun 100% 100%
Tsumugi.UseCases.Runs.RunHistoryEntry 100%
Tsumugi.UseCases.Runs.RunNodes 100% 100%
Tsumugi.UseCases.Runs.RunPageStep 100%
Tsumugi.UseCases.Runs.RunPageView 100%
Tsumugi.UseCases.Runs.RunRefusals 100% 100%
Tsumugi.UseCases.Runs.RunSnapshotGate 100%
Tsumugi.UseCases.Runs.RunStarts 100% 100%
Tsumugi.UseCases.Runs.RunSteps 100% 100%
Tsumugi.UseCases.Runs.RunStripStep 100%
Tsumugi.UseCases.Runs.RunStripView 100%
Tsumugi.UseCases.Runs.RunText 100% 100%
Tsumugi.UseCases.Runs.RunWrites 100%
Tsumugi.UseCases.Runs.SegmentStep 100%
Tsumugi.UseCases.Runs.SentMessage 100%
Tsumugi.UseCases.Runs.StartRun 100% 100%
Tsumugi.UseCases.Runs.StartSelectionRun 100% 100%
Tsumugi.UseCases.Runs.StepCommits 100%
Tsumugi.UseCases.Runs.StepText 100% 100%
Tsumugi.UseCases.Runs.StoredTrigger 100%
Tsumugi.UseCases.Runs.StoryLiveRun 100% 100%
Tsumugi.UseCases.Runs.StoryRunItem 100%
Tsumugi.UseCases.Runs.StoryRunState 100%
Tsumugi.UseCases.Runs.StoryRunsView 100%
Tsumugi.UseCases.Runs.TakeRunSnapshot 100% 100%
Tsumugi.UseCases.Runs.WorkingSegments 100% 100%
Tsumugi.UseCases.Segments.ChangedText 100%
Tsumugi.UseCases.Segments.ChapterDraft 100%
Tsumugi.UseCases.Segments.ChapterWriting 100%
Tsumugi.UseCases.Segments.DeleteSegments 100% 100%
Tsumugi.UseCases.Segments.EditSegment 100% 100%
Tsumugi.UseCases.Segments.InsertSegment 100% 100%
Tsumugi.UseCases.Segments.ManuscriptAnswer 100%
Tsumugi.UseCases.Segments.ManuscriptWrites 99.1% 98.3%
Tsumugi.UseCases.Segments.MergeSegments 100%
Tsumugi.UseCases.Segments.MergeWrite 100%
Tsumugi.UseCases.Segments.ModelOutput 98.2% 96.6%
Tsumugi.UseCases.Segments.MoveSegments 100% 100%
Tsumugi.UseCases.Segments.NewBlock 100%
Tsumugi.UseCases.Segments.ReadSelection 100%
Tsumugi.UseCases.Segments.ReorderSegments 100% 100%
Tsumugi.UseCases.Segments.ReshapeSegments 100% 100%
Tsumugi.UseCases.Segments.ReshapeWrite 100%
Tsumugi.UseCases.Segments.SegmentDto 100%
Tsumugi.UseCases.Segments.SelectedSegment 100%
Tsumugi.UseCases.Segments.SelectionEnd 100%
Tsumugi.UseCases.Segments.SelectionInput 100% 100%
Tsumugi.UseCases.Segments.SplitSegment 100%
Tsumugi.UseCases.Segments.SplitWrite 100%
Tsumugi.UseCases.Segments.StampedId 100%
Tsumugi.UseCases.Segments.TextWrite 100%
Tsumugi.UseCases.Settings.CatalogModel 100% 100%
Tsumugi.UseCases.Settings.CheckOpenRouterKey 100%
Tsumugi.UseCases.Settings.ColourPair 100% 100%
Tsumugi.UseCases.Settings.EditorAppearance 100%
Tsumugi.UseCases.Settings.EditorAppearanceJson 100% 100%
Tsumugi.UseCases.Settings.EditorAppearanceLimits 100% 100%
Tsumugi.UseCases.Settings.EditorSuggestions 100%
Tsumugi.UseCases.Settings.EditorSuggestionsJson 100% 100%
Tsumugi.UseCases.Settings.EditorTyping 100%
Tsumugi.UseCases.Settings.EditorTypingJson 100% 100%
Tsumugi.UseCases.Settings.GetEditorAppearance 100%
Tsumugi.UseCases.Settings.GetEditorSuggestions 100%
Tsumugi.UseCases.Settings.GetEditorTyping 100%
Tsumugi.UseCases.Settings.GetLlmDefaults 100% 100%
Tsumugi.UseCases.Settings.GetModelCatalog 100% 100%
Tsumugi.UseCases.Settings.GetProviderSettings 100%
Tsumugi.UseCases.Settings.LlmDefaults 100%
Tsumugi.UseCases.Settings.ProviderKeyInfo 100%
Tsumugi.UseCases.Settings.ProviderKeyState 100%
Tsumugi.UseCases.Settings.ProviderSettingsView 100% 100%
Tsumugi.UseCases.Settings.ReasoningEfforts 100% 100%
Tsumugi.UseCases.Settings.RemoveOpenRouterKey 100%
Tsumugi.UseCases.Settings.RoutingDefaults 100%
Tsumugi.UseCases.Settings.RoutingSettings 100% 100%
Tsumugi.UseCases.Settings.SaveEditorAppearance 100% 100%
Tsumugi.UseCases.Settings.SaveEditorSuggestions 100% 100%
Tsumugi.UseCases.Settings.SaveEditorTyping 100% 100%
Tsumugi.UseCases.Settings.SaveLlmDefaults 100% 100%
Tsumugi.UseCases.Settings.SaveOpenRouterKey 100% 100%
Tsumugi.UseCases.Settings.SettingKeys 100%
Tsumugi.UseCases.Settings.SuggestionModel 100%
Tsumugi.UseCases.Stories.ChapterWriteOutcome 50%
Tsumugi.UseCases.Stories.CreateStory 100% 100%
Tsumugi.UseCases.Stories.GetStory 100% 100%
Tsumugi.UseCases.Stories.ListStories 100% 90%
Tsumugi.UseCases.Stories.PurgeStory 100% 100%
Tsumugi.UseCases.Stories.RestoreStory 100% 100%
Tsumugi.UseCases.Stories.SetActiveGraph 100% 100%
Tsumugi.UseCases.Stories.SetStoryArchived 100% 100%
Tsumugi.UseCases.Stories.StarterCategories 100%
Tsumugi.UseCases.Stories.StoryDetail 100%
Tsumugi.UseCases.Stories.StoryListItem 84.6%
Tsumugi.UseCases.Stories.StoryProfile 100%
Tsumugi.UseCases.Stories.TrashStory 100% 100%
Tsumugi.UseCases.Stories.UpdateStory 100% 100%
Tsumugi.UseCases.Suggestions.GetSuggestionUsage 100%
Tsumugi.UseCases.Suggestions.SuggestContinuation 100% 90%
Tsumugi.UseCases.Suggestions.SuggestionCleanup 95.7% 87%
Tsumugi.UseCases.Suggestions.SuggestionContext 100%
Tsumugi.UseCases.Suggestions.SuggestionDay 100%
Tsumugi.UseCases.Suggestions.SuggestionOutcome 100%
Tsumugi.UseCases.Suggestions.SuggestionRequest 100%
Tsumugi.UseCases.Suggestions.SuggestionStatus 100%
Tsumugi.UseCases.Suggestions.SuggestionText 100%
Tsumugi.UseCases.Suggestions.SuggestionUsage 98% 96.8%
Tsumugi.UseCases.Suggestions.SuggestionUsageView 100%
Tsumugi.UseCases.Transcripts.GetTranscriptStatus 100%
Tsumugi.UseCases.Transcripts.TranscriptMarkdown 100% 100%
Tsumugi.UseCases.Transcripts.TranscriptName 100% 100%
Tsumugi.UseCases.Transcripts.TranscriptStatus 100%
Tsumugi.UseCases.Transcripts.WriteRunTranscript 100% 100%
<!-- coverage-comment --> > 🔄 **Auto-updating coverage report** — this comment is regenerated on every push, so the numbers below always reflect the commit shown here, not the branch tip. > > **Commit:** `c0cd643` · **Generated:** 2026-10-17 15:11:58 UTC · **Revision:** #2 # Summary <details open><summary>Summary</summary> ||| |:---|:---| | Generated on: | 10/17/2026 - 15:11:58 | | Coverage date: | 10/17/2026 - 15:10:15 - 10/17/2026 - 15:11:54 | | Parser: | MultiReport (6x Cobertura) | | Assemblies: | 9 | | Classes: | 855 | | Files: | 679 | | **Line coverage:** | 98.3% (29346 of 29843) | | Covered lines: | 29346 | | Uncovered lines: | 497 | | Coverable lines: | 29843 | | Total lines: | 59953 | | **Branch coverage:** | 94.7% (10297 of 10869) | | Covered branches: | 10297 | | Total branches: | 10869 | | **Method coverage:** | [Feature is only available for sponsors](https://reportgenerator.io/pro) | </details> ## Coverage <details><summary>Kagaku.Flow - 99.6%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Kagaku.Flow**|**99.6%**|**99%**| |Kagaku.Flow.Budgeting.BudgetRequest|100%|| |Kagaku.Flow.Budgeting.ConsumerBudget|100%|| |Kagaku.Flow.Execution.NodeExecution|100%|100%| |Kagaku.Flow.Execution.NodeOutcome|100%|100%| |Kagaku.Flow.Execution.TransientFailureException|100%|| |Kagaku.Flow.Execution.Upstream|100%|| |Kagaku.Flow.Extensions.ServiceCollectionExtensions|100%|| |Kagaku.Flow.FlowJson|100%|| |Kagaku.Flow.FlowNodes.BoundaryConfig|100%|100%| |Kagaku.Flow.FlowNodes.BranchCase|100%|| |Kagaku.Flow.FlowNodes.BranchConfig|100%|100%| |Kagaku.Flow.FlowNodes.BranchDescriptor|100%|| |Kagaku.Flow.FlowNodes.BranchExecutor|100%|100%| |Kagaku.Flow.FlowNodes.InputDescriptor|100%|| |Kagaku.Flow.FlowNodes.InputExecutor|100%|100%| |Kagaku.Flow.FlowNodes.OutputDescriptor|100%|| |Kagaku.Flow.FlowNodes.OutputExecutor|100%|| |Kagaku.Flow.FlowNodes.TransformConfig|100%|100%| |Kagaku.Flow.FlowNodes.TransformDescriptor|100%|100%| |Kagaku.Flow.FlowNodes.TransformExecutor|100%|100%| |Kagaku.Flow.Graphs.GraphDefinition|100%|| |Kagaku.Flow.Graphs.GraphDocument|100%|100%| |Kagaku.Flow.Graphs.GraphEdge|100%|| |Kagaku.Flow.Graphs.GraphIndex|100%|100%| |Kagaku.Flow.Graphs.GraphLoadError|100%|| |Kagaku.Flow.Graphs.GraphLoadResult|100%|| |Kagaku.Flow.Graphs.GraphNode|100%|| |Kagaku.Flow.Graphs.GraphPosition|100%|| |Kagaku.Flow.Graphs.GraphReader|100%|100%| |Kagaku.Flow.Graphs.GraphSchema|100%|100%| |Kagaku.Flow.Graphs.GraphShapeException|100%|| |Kagaku.Flow.Graphs.GraphWriter|100%|100%| |Kagaku.Flow.Graphs.NodeIds|100%|100%| |Kagaku.Flow.Graphs.SocketRef|100%|| |Kagaku.Flow.Graphs.WireText|100%|100%| |Kagaku.Flow.Nodes.CanvasDescriptorWriter|100%|100%| |Kagaku.Flow.Nodes.ConfigProblem|100%|| |Kagaku.Flow.Nodes.Names|100%|| |Kagaku.Flow.Nodes.NodeDescriptor|100%|100%| |Kagaku.Flow.Nodes.NodeRegistry|100%|100%| |Kagaku.Flow.Nodes.NodeSockets|100%|100%| |Kagaku.Flow.Nodes.SinkDescriptor|100%|| |Kagaku.Flow.Nodes.SocketTypes|100%|100%| |Kagaku.Flow.Nodes.SourceDescriptor|100%|| |Kagaku.Flow.Nodes.TemplateField|100%|| |Kagaku.Flow.Runs.LedgerChange|100%|100%| |Kagaku.Flow.Runs.LedgerTransitions|100%|100%| |Kagaku.Flow.Runs.NodeAttempt|100%|| |Kagaku.Flow.Runs.NodeFacts|100%|| |Kagaku.Flow.Runs.NodeRun|100%|| |Kagaku.Flow.Runs.Run|100%|100%| |Kagaku.Flow.Runs.RunEvent|100%|| |Kagaku.Flow.Runs.RunStatuses|100%|100%| |Kagaku.Flow.Runs.RunTrigger|100%|100%| |Kagaku.Flow.Scheduling.Exclusion|100%|| |Kagaku.Flow.Scheduling.FlowEngine|100%|100%| |Kagaku.Flow.Scheduling.FlowEngineOptions|100%|100%| |Kagaku.Flow.Scheduling.ReadyRow|100%|| |Kagaku.Flow.Scheduling.ReadySet|100%|100%| |Kagaku.Flow.Scheduling.ReadySetResult|100%|| |Kagaku.Flow.Scheduling.RunRequest|100%|100%| |Kagaku.Flow.Scheduling.RunStartResult|100%|| |Kagaku.Flow.Scheduling.SocketValues|100%|100%| |Kagaku.Flow.Templating.InputsWalker|100%|100%| |Kagaku.Flow.Templating.ParsedTemplate|100%|100%| |Kagaku.Flow.Templating.SandboxedTemplateContext|100%|100%| |Kagaku.Flow.Templating.TemplateError|100%|| |Kagaku.Flow.Templating.TemplateEvaluationResult|100%|| |Kagaku.Flow.Templating.TemplateHost|100%|100%| |Kagaku.Flow.Templating.TemplateLimits|100%|| |Kagaku.Flow.Templating.TemplateModel|100%|100%| |Kagaku.Flow.Templating.TemplateProblem|100%|| |Kagaku.Flow.Templating.TemplateRenderRequest|100%|100%| |Kagaku.Flow.Templating.TemplateRenderResult|100%|| |Kagaku.Flow.Templating.TemplateRoot|100%|| |Kagaku.Flow.Templating.TemplateRun|100%|| |Kagaku.Flow.Templating.TemplateSinks|100%|| |Kagaku.Flow.Templating.TemplateValues|100%|100%| |Kagaku.Flow.Validation.GraphValidation|100%|100%| |Kagaku.Flow.Validation.GraphValidationContext|100%|| |Kagaku.Flow.Validation.HookFailure|100%|| |Kagaku.Flow.Validation.ResolvedGraph|100%|100%| |Kagaku.Flow.Validation.ValidationError|100%|| |Kagaku.Flow.Validation.ValidationReport|100%|| |System.Text.RegularExpressions.Generated|96.1%|90.5%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6329A328226B0CF<br/>E95E47D27E8B105AC5589487C0997B6B65384AEDBF572144E__ColorToken_3|97.4%|94.4%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6329A328226B0CF<br/>E95E47D27E8B105AC5589487C0997B6B65384AEDBF572144E__NodeId_2|91.8%|83.3%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6329A328226B0CF<br/>E95E47D27E8B105AC5589487C0997B6B65384AEDBF572144E__Socket_1|97.2%|94.4%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6329A328226B0CF<br/>E95E47D27E8B105AC5589487C0997B6B65384AEDBF572144E__TypeId_0|97.2%|94.4%| </details> <details><summary>Kagaku.Flow.OpenRouter - 100%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Kagaku.Flow.OpenRouter**|**100%**|**100%**| |Kagaku.Flow.OpenRouter.Catalog.ModelCapabilities|100%|100%| |Kagaku.Flow.OpenRouter.Gateway.LlmCompletion|100%|| |Kagaku.Flow.OpenRouter.Gateway.OpenRouterAttemptCostLookup|100%|| |Kagaku.Flow.OpenRouter.Gateway.OpenRouterGateway|100%|100%| |Kagaku.Flow.OpenRouter.Gateway.OpenRouterGatewayOptions|100%|| |Kagaku.Flow.OpenRouter.Gateway.OpenRouterKeyLookup|100%|100%| |Kagaku.Flow.OpenRouter.Gateway.SentRequestCapture|100%|100%| |Kagaku.Flow.OpenRouter.Gateway.SentRequestCaptureHandler|100%|100%| |Kagaku.Flow.OpenRouter.Llm.LlmAnswer|100%|100%| |Kagaku.Flow.OpenRouter.Llm.LlmConfig|100%|100%| |Kagaku.Flow.OpenRouter.Llm.LlmConfigRead|100%|| |Kagaku.Flow.OpenRouter.Llm.LlmDescriptor|100%|100%| |Kagaku.Flow.OpenRouter.Llm.LlmExecutor|100%|100%| |Kagaku.Flow.OpenRouter.Llm.LlmFacts|100%|100%| |Kagaku.Flow.OpenRouter.Llm.LlmFailureText|100%|100%| |Kagaku.Flow.OpenRouter.Llm.LlmMessage|100%|| |Kagaku.Flow.OpenRouter.Llm.LlmRequestBuilder|100%|100%| |Kagaku.Flow.OpenRouter.Llm.LlmRequestPlan|100%|| |Kagaku.Flow.OpenRouter.Llm.LlmRoutingDefaults|100%|100%| |Kagaku.Flow.OpenRouter.Llm.LlmSampling|100%|| |Kagaku.Flow.OpenRouter.Llm.LlmSchemaCheck|100%|100%| |Kagaku.Flow.OpenRouter.Llm.LlmStrictSchemaRule|100%|100%| |Kagaku.Flow.OpenRouter.Llm.LlmVocabulary|100%|100%| |Kagaku.Flow.OpenRouter.LlmNodeServiceCollectionExtensions|100%|| |Kagaku.Flow.OpenRouter.OpenRouterServiceCollectionExtensions|100%|100%| </details> <details><summary>Kagaku.Flow.Testing - 100%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Kagaku.Flow.Testing**|**100%**|**100%**| |Kagaku.Flow.Testing.FlowEngineDriver|100%|100%| |Kagaku.Flow.Testing.InMemoryRunLedger|100%|100%| |Kagaku.Flow.Testing.RecordingRunEventSink|100%|| |Kagaku.Flow.Testing.RunLedgerContract|100%|100%| |Kagaku.Flow.Testing.RunLedgerContractException|100%|| </details> <details><summary>Tsumugi.BlazorAdapter - 97.8%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Tsumugi.BlazorAdapter**|**97.8%**|**95%**| |Tsumugi.BlazorAdapter.BlazorAdapterAssembly|100%|| |Tsumugi.BlazorAdapter.Documents.CategoryCreated|100%|| |Tsumugi.BlazorAdapter.Documents.CategoryEditor|93.2%|88.4%| |Tsumugi.BlazorAdapter.Documents.CategorySaved|100%|| |Tsumugi.BlazorAdapter.Documents.ChangeCategoryFieldsRequested|100%|| |Tsumugi.BlazorAdapter.Documents.ContextPreviewEffects|100%|100%| |Tsumugi.BlazorAdapter.Documents.ContextPreviewFailed|100%|| |Tsumugi.BlazorAdapter.Documents.ContextPreviewLoaded|100%|| |Tsumugi.BlazorAdapter.Documents.ContextPreviewPane|100%|100%| |Tsumugi.BlazorAdapter.Documents.ContextPreviewReducers|100%|100%| |Tsumugi.BlazorAdapter.Documents.ContextPreviewState|100%|| |Tsumugi.BlazorAdapter.Documents.CreateCategoryRequested|100%|| |Tsumugi.BlazorAdapter.Documents.CreateDocumentRequested|100%|| |Tsumugi.BlazorAdapter.Documents.DeleteCategoryChoice|100%|| |Tsumugi.BlazorAdapter.Documents.DeleteCategoryDialog|100%|94.1%| |Tsumugi.BlazorAdapter.Documents.DeleteCategoryRequested|100%|| |Tsumugi.BlazorAdapter.Documents.DeleteDocumentRequested|100%|| |Tsumugi.BlazorAdapter.Documents.DocumentAutoSaveFailed|100%|| |Tsumugi.BlazorAdapter.Documents.DocumentCreated|100%|| |Tsumugi.BlazorAdapter.Documents.DocumentEditor|95.7%|89.4%| |Tsumugi.BlazorAdapter.Documents.DocumentImageRefused|100%|| |Tsumugi.BlazorAdapter.Documents.DocumentImageSet|100%|| |Tsumugi.BlazorAdapter.Documents.DocumentsActionFailed|100%|| |Tsumugi.BlazorAdapter.Documents.DocumentSaved|100%|| |Tsumugi.BlazorAdapter.Documents.DocumentsEffects|100%|100%| |Tsumugi.BlazorAdapter.Documents.DocumentsList|98.5%|95.1%| |Tsumugi.BlazorAdapter.Documents.DocumentsLoaded|100%|| |Tsumugi.BlazorAdapter.Documents.DocumentsPage|100%|100%| |Tsumugi.BlazorAdapter.Documents.DocumentsReadFailed|100%|| |Tsumugi.BlazorAdapter.Documents.DocumentsReducers|100%|100%| |Tsumugi.BlazorAdapter.Documents.DocumentsRefusal|100%|| |Tsumugi.BlazorAdapter.Documents.DocumentsState|100%|100%| |Tsumugi.BlazorAdapter.Documents.FieldInput|100%|96.6%| |Tsumugi.BlazorAdapter.Documents.FieldsChanges|100%|100%| |Tsumugi.BlazorAdapter.Documents.FieldShapes|90%|87.5%| |Tsumugi.BlazorAdapter.Documents.ImageUpload|100%|| |Tsumugi.BlazorAdapter.Documents.ImageUploadRefusal|100%|| |Tsumugi.BlazorAdapter.Documents.ImpactText|100%|94.2%| |Tsumugi.BlazorAdapter.Documents.LoadContextPreview|100%|| |Tsumugi.BlazorAdapter.Documents.LoadDocuments|100%|| |Tsumugi.BlazorAdapter.Documents.MoveDocumentChoice|100%|| |Tsumugi.BlazorAdapter.Documents.MoveDocumentDialog|95.6%|71.4%| |Tsumugi.BlazorAdapter.Documents.MoveDocumentsRequested|100%|| |Tsumugi.BlazorAdapter.Documents.ReorderCategoriesRequested|100%|| |Tsumugi.BlazorAdapter.Documents.SetCategoryCollapsed|100%|| |Tsumugi.BlazorAdapter.Documents.SetDocumentImageRequested|100%|| |Tsumugi.BlazorAdapter.Documents.SetDocumentsFilter|100%|| |Tsumugi.BlazorAdapter.Documents.UpdateCategoryRequested|100%|| |Tsumugi.BlazorAdapter.Documents.UpdateDocumentRequested|100%|| |Tsumugi.BlazorAdapter.EffectCalls|100%|| |Tsumugi.BlazorAdapter.Graphs.DuplicateGraphRequested|100%|| |Tsumugi.BlazorAdapter.Graphs.GraphActionFailed|100%|| |Tsumugi.BlazorAdapter.Graphs.GraphCanvas|58.3%|40%| |Tsumugi.BlazorAdapter.Graphs.GraphPlaygroundPage|100%|100%| |Tsumugi.BlazorAdapter.Graphs.GraphsEffects|100%|100%| |Tsumugi.BlazorAdapter.Graphs.GraphsLoaded|100%|| |Tsumugi.BlazorAdapter.Graphs.GraphsPage|100%|100%| |Tsumugi.BlazorAdapter.Graphs.GraphsReducers|100%|| |Tsumugi.BlazorAdapter.Graphs.GraphsState|100%|| |Tsumugi.BlazorAdapter.Graphs.ImportGraphRequested|100%|| |Tsumugi.BlazorAdapter.Graphs.RestoreGraphRequested|100%|| |Tsumugi.BlazorAdapter.Graphs.ReviseGraphRequested|100%|| |Tsumugi.BlazorAdapter.Graphs.SetShowGraphTrash|100%|| |Tsumugi.BlazorAdapter.Graphs.TrashGraphRequested|100%|| |Tsumugi.BlazorAdapter.Help.EditorKeyEntry|100%|| |Tsumugi.BlazorAdapter.Help.EditorKeySection|100%|| |Tsumugi.BlazorAdapter.Help.EditorReference|100%|100%| |Tsumugi.BlazorAdapter.Help.HelpPage|100%|100%| |Tsumugi.BlazorAdapter.Help.PunctuationRow|100%|| |Tsumugi.BlazorAdapter.Notifications.DomainChangedBridge|94.4%|83.3%| |Tsumugi.BlazorAdapter.Notifications.DomainChangesReceived|75%|100%| |Tsumugi.BlazorAdapter.Runs.CancelRunQuestion|100%|100%| |Tsumugi.BlazorAdapter.Runs.CancelRunRequested|100%|| |Tsumugi.BlazorAdapter.Runs.ClearRunHistoryRequested|100%|| |Tsumugi.BlazorAdapter.Runs.CloseNodeInspector|100%|| |Tsumugi.BlazorAdapter.Runs.HideRunMonitor|100%|| |Tsumugi.BlazorAdapter.Runs.InspectorCommitAnswered|100%|| |Tsumugi.BlazorAdapter.Runs.InspectorCommitRefused|100%|| |Tsumugi.BlazorAdapter.Runs.InspectorCommitRequested|100%|| |Tsumugi.BlazorAdapter.Runs.InspectorRetryAnswered|100%|| |Tsumugi.BlazorAdapter.Runs.InspectorRetryRefused|100%|| |Tsumugi.BlazorAdapter.Runs.InspectorRetryRequested|100%|| |Tsumugi.BlazorAdapter.Runs.InspectorSaid|100%|| |Tsumugi.BlazorAdapter.Runs.InspectorText|100%|100%| |Tsumugi.BlazorAdapter.Runs.LiveRunEffects|100%|100%| |Tsumugi.BlazorAdapter.Runs.LiveRunLoaded|100%|| |Tsumugi.BlazorAdapter.Runs.LiveRunReadFailed|100%|| |Tsumugi.BlazorAdapter.Runs.LiveRunReducers|100%|100%| |Tsumugi.BlazorAdapter.Runs.LiveRunState|100%|| |Tsumugi.BlazorAdapter.Runs.LoadLiveRun|100%|| |Tsumugi.BlazorAdapter.Runs.LoadNodeInspector|100%|| |Tsumugi.BlazorAdapter.Runs.LoadRunHistory|100%|| |Tsumugi.BlazorAdapter.Runs.LoadRunMonitor|100%|| |Tsumugi.BlazorAdapter.Runs.LoadRunStrip|100%|| |Tsumugi.BlazorAdapter.Runs.MonitorCancelRequested|100%|| |Tsumugi.BlazorAdapter.Runs.MonitorDismissRequested|100%|| |Tsumugi.BlazorAdapter.Runs.MonitorRequestRefused|100%|| |Tsumugi.BlazorAdapter.Runs.NodeInspector|100%|100%| |Tsumugi.BlazorAdapter.Runs.NodeInspectorEffects|100%|100%| |Tsumugi.BlazorAdapter.Runs.NodeInspectorKey|100%|| |Tsumugi.BlazorAdapter.Runs.NodeInspectorLoaded|100%|| |Tsumugi.BlazorAdapter.Runs.NodeInspectorReadFailed|100%|| |Tsumugi.BlazorAdapter.Runs.NodeInspectorReducers|100%|100%| |Tsumugi.BlazorAdapter.Runs.NodeInspectorState|100%|| |Tsumugi.BlazorAdapter.Runs.OpenNodeInspector|100%|| |Tsumugi.BlazorAdapter.Runs.RunChangedBridge|98.1%|95%| |Tsumugi.BlazorAdapter.Runs.RunChangesReceived|100%|| |Tsumugi.BlazorAdapter.Runs.RunControl|100%|100%| |Tsumugi.BlazorAdapter.Runs.RunHistoryClearFailed|100%|| |Tsumugi.BlazorAdapter.Runs.RunHistoryLoaded|100%|| |Tsumugi.BlazorAdapter.Runs.RunHistoryPanel|100%|97.3%| |Tsumugi.BlazorAdapter.Runs.RunHistoryReadFailed|100%|| |Tsumugi.BlazorAdapter.Runs.RunMonitor|100%|100%| |Tsumugi.BlazorAdapter.Runs.RunMonitorEffects|100%|100%| |Tsumugi.BlazorAdapter.Runs.RunMonitorEntry|100%|| |Tsumugi.BlazorAdapter.Runs.RunMonitorKey|100%|| |Tsumugi.BlazorAdapter.Runs.RunMonitorLoaded|100%|| |Tsumugi.BlazorAdapter.Runs.RunMonitorReadFailed|100%|| |Tsumugi.BlazorAdapter.Runs.RunMonitorReducers|100%|100%| |Tsumugi.BlazorAdapter.Runs.RunMonitorState|100%|| |Tsumugi.BlazorAdapter.Runs.RunPage|100%|100%| |Tsumugi.BlazorAdapter.Runs.RunPanel|100%|100%| |Tsumugi.BlazorAdapter.Runs.RunPreview|100%|100%| |Tsumugi.BlazorAdapter.Runs.RunPreviewReducers|100%|100%| |Tsumugi.BlazorAdapter.Runs.RunPreviewState|100%|| |Tsumugi.BlazorAdapter.Runs.RunPreviewText|100%|| |Tsumugi.BlazorAdapter.Runs.RunRequestRefused|100%|| |Tsumugi.BlazorAdapter.Runs.RunsEffects|100%|100%| |Tsumugi.BlazorAdapter.Runs.RunsPage|100%|| |Tsumugi.BlazorAdapter.Runs.RunsReducers|100%|100%| |Tsumugi.BlazorAdapter.Runs.RunsState|100%|| |Tsumugi.BlazorAdapter.Runs.RunStrip|100%|100%| |Tsumugi.BlazorAdapter.Runs.RunStripEffects|100%|100%| |Tsumugi.BlazorAdapter.Runs.RunStripLoaded|100%|| |Tsumugi.BlazorAdapter.Runs.RunStripReadFailed|100%|| |Tsumugi.BlazorAdapter.Runs.RunStripReducers|100%|100%| |Tsumugi.BlazorAdapter.Runs.RunStripState|100%|| |Tsumugi.BlazorAdapter.Runs.RunTextKey|100%|| |Tsumugi.BlazorAdapter.Runs.RunTextReceived|100%|| |Tsumugi.BlazorAdapter.Runs.RunTimes|100%|| |Tsumugi.BlazorAdapter.Runs.RunTones|100%|100%| |Tsumugi.BlazorAdapter.Runs.ShowRunMonitor|100%|| |Tsumugi.BlazorAdapter.Runs.StartRunRequested|100%|| |Tsumugi.BlazorAdapter.Runs.StepStatus|100%|100%| |Tsumugi.BlazorAdapter.Runs.StripCancelRequested|100%|| |Tsumugi.BlazorAdapter.Runs.StripDismissRequested|100%|| |Tsumugi.BlazorAdapter.Runs.StripRequestRefused|100%|| |Tsumugi.BlazorAdapter.Settings.BackupFailed|100%|| |Tsumugi.BlazorAdapter.Settings.BackupNowRequested|100%|| |Tsumugi.BlazorAdapter.Settings.BackupSettingsLoaded|100%|| |Tsumugi.BlazorAdapter.Settings.BackupsSection|100%|100%| |Tsumugi.BlazorAdapter.Settings.BackupsSettingsEffects|100%|| |Tsumugi.BlazorAdapter.Settings.BackupsSettingsReducers|100%|| |Tsumugi.BlazorAdapter.Settings.BackupsSettingsState|100%|| |Tsumugi.BlazorAdapter.Settings.DefaultsSection|100%|100%| |Tsumugi.BlazorAdapter.Settings.DefaultsSettingsEffects|100%|| |Tsumugi.BlazorAdapter.Settings.DefaultsSettingsReducers|100%|| |Tsumugi.BlazorAdapter.Settings.DefaultsSettingsState|100%|| |Tsumugi.BlazorAdapter.Settings.EditorAppearanceCss|100%|100%| |Tsumugi.BlazorAdapter.Settings.EditorAppearanceEffects|100%|| |Tsumugi.BlazorAdapter.Settings.EditorAppearanceLoaded|100%|| |Tsumugi.BlazorAdapter.Settings.EditorAppearancePreview|100%|100%| |Tsumugi.BlazorAdapter.Settings.EditorAppearanceReducers|100%|100%| |Tsumugi.BlazorAdapter.Settings.EditorAppearanceSaved|100%|| |Tsumugi.BlazorAdapter.Settings.EditorAppearanceSaveFailed|100%|| |Tsumugi.BlazorAdapter.Settings.EditorAppearanceSection|95%|98%| |Tsumugi.BlazorAdapter.Settings.EditorAppearanceState|100%|| |Tsumugi.BlazorAdapter.Settings.EditorPreviewBlock|100%|| |Tsumugi.BlazorAdapter.Settings.EditorPreviewSample|100%|| |Tsumugi.BlazorAdapter.Settings.EditorSuggestionsEffects|91.6%|| |Tsumugi.BlazorAdapter.Settings.EditorSuggestionsLoaded|100%|| |Tsumugi.BlazorAdapter.Settings.EditorSuggestionsReducers|100%|100%| |Tsumugi.BlazorAdapter.Settings.EditorSuggestionsSaved|100%|| |Tsumugi.BlazorAdapter.Settings.EditorSuggestionsSaveFailed|100%|| |Tsumugi.BlazorAdapter.Settings.EditorSuggestionsSection|100%|95%| |Tsumugi.BlazorAdapter.Settings.EditorSuggestionsState|100%|| |Tsumugi.BlazorAdapter.Settings.EditorTypingEffects|91.6%|| |Tsumugi.BlazorAdapter.Settings.EditorTypingLoaded|100%|| |Tsumugi.BlazorAdapter.Settings.EditorTypingReducers|100%|100%| |Tsumugi.BlazorAdapter.Settings.EditorTypingSaved|100%|| |Tsumugi.BlazorAdapter.Settings.EditorTypingSaveFailed|100%|| |Tsumugi.BlazorAdapter.Settings.EditorTypingSection|100%|100%| |Tsumugi.BlazorAdapter.Settings.EditorTypingState|100%|| |Tsumugi.BlazorAdapter.Settings.LlmDefaultsLoaded|100%|| |Tsumugi.BlazorAdapter.Settings.LlmDefaultsSaved|100%|| |Tsumugi.BlazorAdapter.Settings.LlmDefaultsSaveFailed|100%|| |Tsumugi.BlazorAdapter.Settings.LoadBackupSettings|100%|| |Tsumugi.BlazorAdapter.Settings.LoadProviderSettings|100%|| |Tsumugi.BlazorAdapter.Settings.LoadTranscriptSettings|100%|| |Tsumugi.BlazorAdapter.Settings.ModelCatalogLoaded|100%|| |Tsumugi.BlazorAdapter.Settings.ModelCatalogLoadFailed|100%|| |Tsumugi.BlazorAdapter.Settings.ModelPicker|100%|100%| |Tsumugi.BlazorAdapter.Settings.OpenRouterKeySaved|100%|| |Tsumugi.BlazorAdapter.Settings.OpenRouterKeySaveFailed|100%|| |Tsumugi.BlazorAdapter.Settings.ProviderKeyChecked|100%|| |Tsumugi.BlazorAdapter.Settings.ProviderSection|100%|100%| |Tsumugi.BlazorAdapter.Settings.ProviderSettingsEffects|100%|100%| |Tsumugi.BlazorAdapter.Settings.ProviderSettingsLoaded|100%|| |Tsumugi.BlazorAdapter.Settings.ProviderSettingsReducers|100%|100%| |Tsumugi.BlazorAdapter.Settings.ProviderSettingsState|100%|100%| |Tsumugi.BlazorAdapter.Settings.SaveEditorAppearanceRequested|100%|| |Tsumugi.BlazorAdapter.Settings.SaveEditorSuggestionsRequested|100%|| |Tsumugi.BlazorAdapter.Settings.SaveEditorTypingRequested|100%|| |Tsumugi.BlazorAdapter.Settings.SaveLlmDefaultsRequested|100%|| |Tsumugi.BlazorAdapter.Settings.SaveOpenRouterKeyRequested|100%|| |Tsumugi.BlazorAdapter.Settings.SuggestionUsageEffects|100%|| |Tsumugi.BlazorAdapter.Settings.SuggestionUsageLoaded|100%|| |Tsumugi.BlazorAdapter.Settings.TranscriptSettingsLoaded|100%|| |Tsumugi.BlazorAdapter.Settings.TranscriptsSection|100%|100%| |Tsumugi.BlazorAdapter.Settings.TranscriptsSettingsEffects|100%|| |Tsumugi.BlazorAdapter.Settings.TranscriptsSettingsReducers|100%|| |Tsumugi.BlazorAdapter.Settings.TranscriptsSettingsState|100%|| |Tsumugi.BlazorAdapter.Stories.CreateStoryRequested|100%|| |Tsumugi.BlazorAdapter.Stories.PurgeStoryRequested|100%|| |Tsumugi.BlazorAdapter.Stories.RestoreStoryRequested|100%|| |Tsumugi.BlazorAdapter.Stories.SetShowArchived|100%|| |Tsumugi.BlazorAdapter.Stories.SetStoriesFilter|100%|| |Tsumugi.BlazorAdapter.Stories.SetStoryArchivedRequested|100%|| |Tsumugi.BlazorAdapter.Stories.StoriesEffects|100%|100%| |Tsumugi.BlazorAdapter.Stories.StoriesLoaded|100%|| |Tsumugi.BlazorAdapter.Stories.StoriesPage|100%|100%| |Tsumugi.BlazorAdapter.Stories.StoriesReducers|100%|100%| |Tsumugi.BlazorAdapter.Stories.StoriesState|100%|100%| |Tsumugi.BlazorAdapter.Stories.StoryActionFailed|100%|| |Tsumugi.BlazorAdapter.Stories.StoryCreated|100%|| |Tsumugi.BlazorAdapter.Stories.StoryCreateFailed|100%|| |Tsumugi.BlazorAdapter.Stories.StoryTrashPage|100%|100%| |Tsumugi.BlazorAdapter.Stories.TrashStoryRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.AckWire|100%|| |Tsumugi.BlazorAdapter.Workspace.AutoSaveFailed|100%|| |Tsumugi.BlazorAdapter.Workspace.ChangedWire|100%|| |Tsumugi.BlazorAdapter.Workspace.ChapterHeader|100%|86.3%| |Tsumugi.BlazorAdapter.Workspace.ChapterMenu|100%|81.2%| |Tsumugi.BlazorAdapter.Workspace.ChapterPage|100%|95.4%| |Tsumugi.BlazorAdapter.Workspace.ChapterSaved|100%|| |Tsumugi.BlazorAdapter.Workspace.ChaptersPage|94.4%|83.3%| |Tsumugi.BlazorAdapter.Workspace.ChapterWire|100%|| |Tsumugi.BlazorAdapter.Workspace.ChapterWritten|100%|| |Tsumugi.BlazorAdapter.Workspace.CreateChapterRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.CreatedWire|100%|| |Tsumugi.BlazorAdapter.Workspace.DeleteChapterRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.DeltaWire|100%|| |Tsumugi.BlazorAdapter.Workspace.HistoryEffects|100%|100%| |Tsumugi.BlazorAdapter.Workspace.HistoryLoaded|100%|| |Tsumugi.BlazorAdapter.Workspace.HistoryPage|100%|| |Tsumugi.BlazorAdapter.Workspace.HistoryPanel|100%|100%| |Tsumugi.BlazorAdapter.Workspace.HistoryReadFailed|100%|| |Tsumugi.BlazorAdapter.Workspace.LoadHistory|100%|| |Tsumugi.BlazorAdapter.Workspace.LoadSelectionGraphs|100%|| |Tsumugi.BlazorAdapter.Workspace.LoadWorkspace|100%|| |Tsumugi.BlazorAdapter.Workspace.ManuscriptEffects|100%|100%| |Tsumugi.BlazorAdapter.Workspace.ManuscriptEvents|82.2%|75.7%| |Tsumugi.BlazorAdapter.Workspace.ManuscriptSurface|90.2%|89.3%| |Tsumugi.BlazorAdapter.Workspace.MergeChapterRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.MergeEvent|100%|| |Tsumugi.BlazorAdapter.Workspace.MoveChapterRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.PendingRunChange|100%|| |Tsumugi.BlazorAdapter.Workspace.RedoRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.RedoRevertRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.RenameChapterRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.ReshapeEvent|100%|| |Tsumugi.BlazorAdapter.Workspace.RevertToSnapshotRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.RunChangeAsked|100%|| |Tsumugi.BlazorAdapter.Workspace.RunChangeChecked|100%|| |Tsumugi.BlazorAdapter.Workspace.RunChangeDismissed|100%|| |Tsumugi.BlazorAdapter.Workspace.RunChangeRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.SaveScope|100%|50%| |Tsumugi.BlazorAdapter.Workspace.SaveStateLadder|100%|100%| |Tsumugi.BlazorAdapter.Workspace.SaveVersionRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.SegmentTextEvent|100%|| |Tsumugi.BlazorAdapter.Workspace.SegmentWire|100%|92.8%| |Tsumugi.BlazorAdapter.Workspace.SelectionEndWire|100%|| |Tsumugi.BlazorAdapter.Workspace.SelectionGraph|100%|| |Tsumugi.BlazorAdapter.Workspace.SelectionGraphsLoaded|100%|| |Tsumugi.BlazorAdapter.Workspace.SelectionGraphsReadFailed|100%|| |Tsumugi.BlazorAdapter.Workspace.SelectionMenuEffects|100%|100%| |Tsumugi.BlazorAdapter.Workspace.SelectionMenuReducers|100%|100%| |Tsumugi.BlazorAdapter.Workspace.SelectionMenuState|100%|| |Tsumugi.BlazorAdapter.Workspace.SelectionRangeWire|100%|| |Tsumugi.BlazorAdapter.Workspace.SelectionRunRefusal|100%|| |Tsumugi.BlazorAdapter.Workspace.SelectionRunRefused|100%|| |Tsumugi.BlazorAdapter.Workspace.SelectionRunRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.SetActiveGraphRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.SetChapterSummaryRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.SplitEvent|100%|| |Tsumugi.BlazorAdapter.Workspace.StampWire|0%|| |Tsumugi.BlazorAdapter.Workspace.StoryDetails|100%|85.2%| |Tsumugi.BlazorAdapter.Workspace.StoryGeneralPage|100%|100%| |Tsumugi.BlazorAdapter.Workspace.StoryGraphsEffects|100%|100%| |Tsumugi.BlazorAdapter.Workspace.StoryGraphsLoaded|100%|| |Tsumugi.BlazorAdapter.Workspace.StoryGraphsReducers|100%|| |Tsumugi.BlazorAdapter.Workspace.StoryGraphsState|100%|| |Tsumugi.BlazorAdapter.Workspace.StorySaved|100%|| |Tsumugi.BlazorAdapter.Workspace.StoryShell|100%|100%| |Tsumugi.BlazorAdapter.Workspace.UndoRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.UndoStatusChanged|100%|| |Tsumugi.BlazorAdapter.Workspace.UpdateStoryRequested|100%|| |Tsumugi.BlazorAdapter.Workspace.WorkspaceActionFailed|100%|| |Tsumugi.BlazorAdapter.Workspace.WorkspaceLoaded|100%|| |Tsumugi.BlazorAdapter.Workspace.WorkspaceNotFound|100%|| |Tsumugi.BlazorAdapter.Workspace.WorkspaceReducers|100%|100%| |Tsumugi.BlazorAdapter.Workspace.WorkspaceState|100%|| </details> <details><summary>Tsumugi.Domain - 96.6%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Tsumugi.Domain**|**96.6%**|**95.5%**| |System.Text.RegularExpressions.Generated|91.3%|88.6%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F5BB471BFAD87E25<br/>BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__DigitsAndSeparators_2|97.4%|95.8%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F5BB471BFAD87E25<br/>BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__LineBreak_0|91%|91.1%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F5BB471BFAD87E25<br/>BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__NumberToken_1|91.8%|83.3%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F5BB471BFAD87E25<br/>BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__Plain_4|91.9%|88.8%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F5BB471BFAD87E25<br/>BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__ThousandsGroup_3|90.9%|84.3%| |Tsumugi.Domain.Documents.CategoryFields|94.5%|93.7%| |Tsumugi.Domain.Documents.ChoiceOption|100%|| |Tsumugi.Domain.Documents.ChoiceValue|100%|| |Tsumugi.Domain.Documents.DateText|100%|| |Tsumugi.Domain.Documents.DateValue|100%|| |Tsumugi.Domain.Documents.Document|100%|100%| |Tsumugi.Domain.Documents.DocumentCategory|100%|100%| |Tsumugi.Domain.Documents.DocumentValues|100%|| |Tsumugi.Domain.Documents.FieldCarry|100%|100%| |Tsumugi.Domain.Documents.FieldConversion|100%|100%| |Tsumugi.Domain.Documents.FieldDefinition|97%|95.3%| |Tsumugi.Domain.Documents.FieldMessages|100%|100%| |Tsumugi.Domain.Documents.FieldNames|100%|| |Tsumugi.Domain.Documents.FieldsChange|100%|| |Tsumugi.Domain.Documents.FieldShape|95.2%|87.5%| |Tsumugi.Domain.Documents.FieldsPlan|100%|| |Tsumugi.Domain.Documents.FieldsPlanner|99.2%|99.2%| |Tsumugi.Domain.Documents.FieldValue|100%|| |Tsumugi.Domain.Documents.FieldValues|95.4%|97.7%| |Tsumugi.Domain.Documents.ImageFiles|100%|100%| |Tsumugi.Domain.Documents.ImageValue|100%|| |Tsumugi.Domain.Documents.MovePlan|100%|| |Tsumugi.Domain.Documents.NumberParse|100%|| |Tsumugi.Domain.Documents.NumberText|100%|97.6%| |Tsumugi.Domain.Documents.NumberValue|100%|| |Tsumugi.Domain.Documents.StoryImage|100%|| |Tsumugi.Domain.Documents.TextValue|100%|100%| |Tsumugi.Domain.Documents.ValueChange|100%|| |Tsumugi.Domain.Documents.ValueChangeKey|100%|| |Tsumugi.Domain.Documents.ValueImpact|100%|100%| |Tsumugi.Domain.Graphs.Graph|100%|100%| |Tsumugi.Domain.Graphs.GraphTriggers|100%|100%| |Tsumugi.Domain.Journal.ChangeLogEntry|98%|87.5%| |Tsumugi.Domain.Journal.StorySnapshot|96.7%|83.3%| |Tsumugi.Domain.Settings.AppSetting|100%|| |Tsumugi.Domain.Stories.Chapter|100%|100%| |Tsumugi.Domain.Stories.InlineMarkup|100%|100%| |Tsumugi.Domain.Stories.MarkupRun|100%|| |Tsumugi.Domain.Stories.ModelParagraph|100%|| |Tsumugi.Domain.Stories.Provenance|100%|100%| |Tsumugi.Domain.Stories.RangedSplice|100%|100%| |Tsumugi.Domain.Stories.Segment|100%|100%| |Tsumugi.Domain.Stories.SplicedBlock|100%|| |Tsumugi.Domain.Stories.Story|100%|100%| |Tsumugi.Domain.Text|100%|100%| </details> <details><summary>Tsumugi.Infrastructure - 99.1%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Tsumugi.Infrastructure**|**99.1%**|**88.2%**| |System.Text.RegularExpressions.Generated|81.4%|64.8%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F0D076C66E8EEC1C<br/>A55E0373ED22DC58420DBB40F103A46B68DC4D9CE5A49E00B__Pattern_0|84%|65.7%| |Tsumugi.Infrastructure.Backups.BackupArtifactName|100%|100%| |Tsumugi.Infrastructure.Backups.BackupOptions|100%|| |Tsumugi.Infrastructure.Backups.BackupSchedule|100%|83.3%| |Tsumugi.Infrastructure.Backups.BackupScheduler|96.6%|87.5%| |Tsumugi.Infrastructure.Backups.BackupWriter|98.5%|92.8%| |Tsumugi.Infrastructure.Backups.DatabaseFingerprint|91.9%|97%| |Tsumugi.Infrastructure.Backups.FileSystemBackupStore|100%|100%| |Tsumugi.Infrastructure.Backups.OwnerOnlyFile|100%|100%| |Tsumugi.Infrastructure.Backups.PreMigrationBackup|90%|100%| |Tsumugi.Infrastructure.Backups.SqliteSnapshot|88.2%|75%| |Tsumugi.Infrastructure.DependencyInjection|100%|100%| |Tsumugi.Infrastructure.Journal.EfChangeJournal|100%|| |Tsumugi.Infrastructure.Journal.EfSnapshotStore|100%|100%| |Tsumugi.Infrastructure.Journal.EfUndoStore|98.5%|88.2%| |Tsumugi.Infrastructure.Journal.ModelExtensions|100%|| |Tsumugi.Infrastructure.Journal.OperationContext|100%|100%| |Tsumugi.Infrastructure.Journal.PropertyBag|100%|95.4%| |Tsumugi.Infrastructure.Notifications.InProcessDomainChangedBus|100%|100%| |Tsumugi.Infrastructure.Persistence.Configurations.AppSettingConfiguration|100%|| |Tsumugi.Infrastructure.Persistence.Configurations.ChangeLogEntryConfigurati<br/>on|100%|| |Tsumugi.Infrastructure.Persistence.Configurations.ChapterConfiguration|100%|| |Tsumugi.Infrastructure.Persistence.Configurations.DocumentCategoryConfigura<br/>tion|100%|| |Tsumugi.Infrastructure.Persistence.Configurations.DocumentConfiguration|100%|| |Tsumugi.Infrastructure.Persistence.Configurations.GraphConfiguration|100%|| |Tsumugi.Infrastructure.Persistence.Configurations.NodeRunRecordConfiguratio<br/>n|100%|| |Tsumugi.Infrastructure.Persistence.Configurations.RunRecordConfiguration|100%|| |Tsumugi.Infrastructure.Persistence.Configurations.RunTranscriptRecordConfig<br/>uration|100%|| |Tsumugi.Infrastructure.Persistence.Configurations.SegmentConfiguration|100%|| |Tsumugi.Infrastructure.Persistence.Configurations.StoryConfiguration|100%|| |Tsumugi.Infrastructure.Persistence.Configurations.StoryImageConfiguration|100%|| |Tsumugi.Infrastructure.Persistence.Configurations.StorySnapshotConfiguratio<br/>n|100%|| |Tsumugi.Infrastructure.Persistence.Converters.CanonicalJsonComparer|100%|| |Tsumugi.Infrastructure.Persistence.Converters.CategoryFieldsConverter|97.6%|94.4%| |Tsumugi.Infrastructure.Persistence.Converters.FieldValuesConverter|96.9%|93.7%| |Tsumugi.Infrastructure.Persistence.Converters.GraphTriggerConverter|100%|100%| |Tsumugi.Infrastructure.Persistence.Converters.ProvenanceConverter|100%|100%| |Tsumugi.Infrastructure.Persistence.Converters.UtcTicksConverter|100%|| |Tsumugi.Infrastructure.Persistence.Converters.WireFormat|85.7%|73.8%| |Tsumugi.Infrastructure.Persistence.Migrations.ActiveGraphForeignKey|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.ActiveGraphOnContinue|100%|100%| |Tsumugi.Infrastructure.Persistence.Migrations.ActiveGraphOnContinueSql|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.AddAppSettings|99.2%|| |Tsumugi.Infrastructure.Persistence.Migrations.AddJournal|98.8%|| |Tsumugi.Infrastructure.Persistence.Migrations.CategoryFields|100%|100%| |Tsumugi.Infrastructure.Persistence.Migrations.CategoryFieldsSql|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.ChangeLogIterationPath|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.CostLookups|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.DropDocumentBody|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.GenericDocuments|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.GraphLibrary|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.GraphNodeIds|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.GraphNodeIdsSql|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.InitialStoryDomain|97.3%|| |Tsumugi.Infrastructure.Persistence.Migrations.JournalUndoState|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.RunLedger|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.RunSnapshotFinish|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.RunTranscripts|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.SegmentTextMarkup|100%|100%| |Tsumugi.Infrastructure.Persistence.Migrations.SegmentTextMarkupSql|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.StoryImages|100%|| |Tsumugi.Infrastructure.Persistence.Migrations.TsumugiDbContextModelSnapshot|100%|| |Tsumugi.Infrastructure.Persistence.SqliteFunctions|90%|80%| |Tsumugi.Infrastructure.Persistence.SqlitePragmaInterceptor|100%|100%| |Tsumugi.Infrastructure.Persistence.Stores.EfChapterStore|100%|100%| |Tsumugi.Infrastructure.Persistence.Stores.EfDocumentStore|98.3%|75%| |Tsumugi.Infrastructure.Persistence.Stores.EfGraphStore|100%|100%| |Tsumugi.Infrastructure.Persistence.Stores.EfImageStore|100%|| |Tsumugi.Infrastructure.Persistence.Stores.EfSegmentStore|100%|100%| |Tsumugi.Infrastructure.Persistence.Stores.EfStoryStore|98.7%|91.6%| |Tsumugi.Infrastructure.Persistence.TsumugiDbContext|97.7%|96.6%| |Tsumugi.Infrastructure.Persistence.TsumugiDbContextFactory|100%|| |Tsumugi.Infrastructure.Provider.LlmDefaultsSource|100%|| |Tsumugi.Infrastructure.Provider.OpenRouterKeySource|100%|100%| |Tsumugi.Infrastructure.Provider.OpenRouterModelProvider|100%|100%| |Tsumugi.Infrastructure.Provider.OpenRouterOptions|100%|100%| |Tsumugi.Infrastructure.Provider.ResolvedKey|100%|| |Tsumugi.Infrastructure.Runs.EfRunHistory|100%|| |Tsumugi.Infrastructure.Runs.EfRunLedger|100%|100%| |Tsumugi.Infrastructure.Runs.InProcessRunEventBus|100%|100%| |Tsumugi.Infrastructure.Runs.LedgerMapping|100%|100%| |Tsumugi.Infrastructure.Runs.LedgerPromptSamples|100%|| |Tsumugi.Infrastructure.Runs.NodeRunRecord|100%|| |Tsumugi.Infrastructure.Runs.RunEngineHost|100%|| |Tsumugi.Infrastructure.Runs.RunRecord|100%|| |Tsumugi.Infrastructure.Runs.RunSnapshotsHost|100%|100%| |Tsumugi.Infrastructure.Settings.EfAppSettingsStore|100%|100%| |Tsumugi.Infrastructure.Suggestions.OpenRouterSuggestionModel|38.2%|44.4%| |Tsumugi.Infrastructure.Suggestions.SuggestionRequestBuilder|100%|94.4%| |Tsumugi.Infrastructure.Transcripts.EfTranscriptLog|100%|| |Tsumugi.Infrastructure.Transcripts.FileSystemTranscriptStore|100%|100%| |Tsumugi.Infrastructure.Transcripts.RunTranscriptRecord|100%|| |Tsumugi.Infrastructure.Transcripts.RunTranscriptsHost|100%|100%| </details> <details><summary>Tsumugi.Kernel - 90.9%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Tsumugi.Kernel**|**90.9%**|**75%**| |Tsumugi.Kernel.Err`1|100%|| |Tsumugi.Kernel.Ok`1|100%|| |Tsumugi.Kernel.Result`1|88.8%|75%| </details> <details><summary>Tsumugi.Server - 100%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Tsumugi.Server**|**100%**|**94.5%**| |Program|100%|100%| |Tsumugi.Server.Backups.BackupConfiguration|100%|100%| |Tsumugi.Server.Components.App|100%|| |Tsumugi.Server.Components.Layout.AppHeader|100%|78.5%| |Tsumugi.Server.Components.Layout.MainLayout|100%|| |Tsumugi.Server.Components.Pages.Gate|100%|100%| |Tsumugi.Server.Provider.OpenRouterConfiguration|100%|100%| |Tsumugi.Server.Security.AccessGate|100%|87.5%| |Tsumugi.Server.Security.AccessSecret|100%|100%| |Tsumugi.Server.Security.GateThrottle|100%|100%| |Tsumugi.Server.VolumeStartupValidator|100%|100%| </details> <details><summary>Tsumugi.UseCases - 96.2%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Tsumugi.UseCases**|**96.2%**|**92.5%**| |System.Text.RegularExpressions.Generated|78.5%|63.1%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6504F1744AA254A<br/>663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__AttemptCount_1|84.4%|68.4%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6504F1744AA254A<br/>663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__HexColour_2|94.8%|87.5%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6504F1744AA254A<br/>663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__LineBreaks_0|95.3%|90.6%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6504F1744AA254A<br/>663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__Preface_3|61.9%|51.6%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F6504F1744AA254A<br/>663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__SentenceEnd_4|88%|69.4%| |Tsumugi.UseCases.Backups.BackupArtifact|100%|| |Tsumugi.UseCases.Backups.BackupFailure|100%|| |Tsumugi.UseCases.Backups.BackupJobState|100%|| |Tsumugi.UseCases.Backups.BackupPolicy|100%|| |Tsumugi.UseCases.Backups.BackupStatusView|100%|100%| |Tsumugi.UseCases.Backups.DatabaseSnapshot|100%|| |Tsumugi.UseCases.Backups.DownloadDatabaseSnapshot|100%|| |Tsumugi.UseCases.Backups.GetBackupStatus|100%|| |Tsumugi.UseCases.Backups.IBackupStore|0%|| |Tsumugi.UseCases.Backups.RunBackupNow|100%|| |Tsumugi.UseCases.Chapters.ChapterDto|100%|| |Tsumugi.UseCases.Chapters.CreateChapter|100%|100%| |Tsumugi.UseCases.Chapters.DeleteChapter|100%|100%| |Tsumugi.UseCases.Chapters.GetChapterSegments|100%|| |Tsumugi.UseCases.Chapters.GetManuscript|100%|100%| |Tsumugi.UseCases.Chapters.ManuscriptChapter|100%|| |Tsumugi.UseCases.Chapters.ManuscriptView|100%|| |Tsumugi.UseCases.Chapters.MergeChapters|100%|100%| |Tsumugi.UseCases.Chapters.RenameChapter|100%|100%| |Tsumugi.UseCases.Chapters.ReorderChapters|100%|100%| |Tsumugi.UseCases.Chapters.SetChapterSummary|100%|75%| |Tsumugi.UseCases.Commit.AppendRunText|100%|100%| |Tsumugi.UseCases.Commit.CommitConfig|100%|100%| |Tsumugi.UseCases.Commit.CommitConfigRead|100%|| |Tsumugi.UseCases.Commit.CommitDescriptor|100%|100%| |Tsumugi.UseCases.Commit.CommitExecutor|100%|100%| |Tsumugi.UseCases.Commit.CommitReport|100%|| |Tsumugi.UseCases.Commit.CommitTarget|100%|100%| |Tsumugi.UseCases.Commit.CommittedSegments|100%|| |Tsumugi.UseCases.Commit.LandTargetedRunText|100%|100%| |Tsumugi.UseCases.Commit.RunAppend|100%|| |Tsumugi.UseCases.Commit.TargetedWrite|100%|| |Tsumugi.UseCases.Commit.TargetedWrites|100%|100%| |Tsumugi.UseCases.Context.AssembledContext|100%|| |Tsumugi.UseCases.Context.CharsPerToken|100%|100%| |Tsumugi.UseCases.Context.ConsumerFigures|100%|| |Tsumugi.UseCases.Context.ContextAssembly|100%|100%| |Tsumugi.UseCases.Context.ContextAttempt|100%|100%| |Tsumugi.UseCases.Context.ContextBudgetTokens|100%|| |Tsumugi.UseCases.Context.ContextBuild|100%|| |Tsumugi.UseCases.Context.ContextBuilder|100%|100%| |Tsumugi.UseCases.Context.ContextConfig|100%|100%| |Tsumugi.UseCases.Context.ContextConfigRead|100%|| |Tsumugi.UseCases.Context.ContextConsumerRule|100%|100%| |Tsumugi.UseCases.Context.ContextDescriptor|100%|| |Tsumugi.UseCases.Context.ContextExecutor|100%|100%| |Tsumugi.UseCases.Context.ContextFocus|100%|| |Tsumugi.UseCases.Context.ContextNodePreview|100%|| |Tsumugi.UseCases.Context.ContextParts|100%|| |Tsumugi.UseCases.Context.ContextPreview|100%|| |Tsumugi.UseCases.Context.ContextReport|100%|| |Tsumugi.UseCases.Context.DocumentRendering|100%|100%| |Tsumugi.UseCases.Context.PreviewContext|100%|100%| |Tsumugi.UseCases.Context.PromptSample|100%|100%| |Tsumugi.UseCases.Context.RecentParagraph|100%|| |Tsumugi.UseCases.Context.SelectionTemplateModel|100%|100%| |Tsumugi.UseCases.Context.StoryDocumentsRule|100%|100%| |Tsumugi.UseCases.Context.StoryReads|100%|100%| |Tsumugi.UseCases.Context.StoryScope|100%|100%| |Tsumugi.UseCases.Context.StoryTemplateModel|100%|| |Tsumugi.UseCases.Context.StoryText|100%|100%| |Tsumugi.UseCases.DependencyInjection|100%|| |Tsumugi.UseCases.Diagnostics.SeedContext|100%|100%| |Tsumugi.UseCases.Diagnostics.SeedDevData|99.2%|68.7%| |Tsumugi.UseCases.Diagnostics.SeedFocus|100%|| |Tsumugi.UseCases.Diagnostics.SeedPictures|100%|| |Tsumugi.UseCases.Diagnostics.SeedRuns|100%|100%| |Tsumugi.UseCases.Diagnostics.SeedWriting|100%|| |Tsumugi.UseCases.Documents.ChangeCategoryFields|100%|83.3%| |Tsumugi.UseCases.Documents.CreateCategory|100%|100%| |Tsumugi.UseCases.Documents.CreateDocument|100%|100%| |Tsumugi.UseCases.Documents.DefaultFields|100%|100%| |Tsumugi.UseCases.Documents.DeleteCategory|100%|94.4%| |Tsumugi.UseCases.Documents.DeleteDocument|100%|100%| |Tsumugi.UseCases.Documents.DocumentCategoryDto|100%|| |Tsumugi.UseCases.Documents.DocumentCategoryProfile|100%|| |Tsumugi.UseCases.Documents.DocumentDto|100%|| |Tsumugi.UseCases.Documents.DocumentPatch|100%|| |Tsumugi.UseCases.Documents.DocumentProfile|100%|| |Tsumugi.UseCases.Documents.DocumentsCategory|100%|| |Tsumugi.UseCases.Documents.DocumentsView|100%|| |Tsumugi.UseCases.Documents.DocumentWrites|100%|100%| |Tsumugi.UseCases.Documents.FieldsChangeLabel|95.4%|88.2%| |Tsumugi.UseCases.Documents.GetDocuments|100%|100%| |Tsumugi.UseCases.Documents.GetStoryImage|100%|100%| |Tsumugi.UseCases.Documents.ImpactPreview|100%|100%| |Tsumugi.UseCases.Documents.LossMessages|92.3%|87.5%| |Tsumugi.UseCases.Documents.MoveDocuments|100%|100%| |Tsumugi.UseCases.Documents.ReorderCategories|100%|100%| |Tsumugi.UseCases.Documents.SetDocumentImage|100%|93.7%| |Tsumugi.UseCases.Documents.StoryImageFile|100%|| |Tsumugi.UseCases.Documents.UpdateCategory|100%|100%| |Tsumugi.UseCases.Documents.UpdateDocument|100%|81.2%| |Tsumugi.UseCases.Documents.WriteRefusedException|100%|| |Tsumugi.UseCases.Graphs.BundledGraphs|100%|| |Tsumugi.UseCases.Graphs.DuplicateGraph|100%|100%| |Tsumugi.UseCases.Graphs.ExportGraph|100%|100%| |Tsumugi.UseCases.Graphs.GetNodeTypes|100%|| |Tsumugi.UseCases.Graphs.GraphAnnouncements|100%|| |Tsumugi.UseCases.Graphs.GraphExport|100%|| |Tsumugi.UseCases.Graphs.GraphFile|100%|100%| |Tsumugi.UseCases.Graphs.GraphFileContent|100%|| |Tsumugi.UseCases.Graphs.GraphListItem|100%|| |Tsumugi.UseCases.Graphs.GraphUser|100%|| |Tsumugi.UseCases.Graphs.GraphUsers|100%|| |Tsumugi.UseCases.Graphs.ImportGraph|100%|100%| |Tsumugi.UseCases.Graphs.ListGraphs|100%|100%| |Tsumugi.UseCases.Graphs.ListSelectionGraphs|100%|100%| |Tsumugi.UseCases.Graphs.ListStoryGraphs|100%|100%| |Tsumugi.UseCases.Graphs.RestoreGraph|100%|100%| |Tsumugi.UseCases.Graphs.ReviseGraph|100%|100%| |Tsumugi.UseCases.Graphs.SeedBundledGraphs|100%|100%| |Tsumugi.UseCases.Graphs.SeededTemplates|100%|| |Tsumugi.UseCases.Graphs.SelectionGraphChoice|100%|| |Tsumugi.UseCases.Graphs.StoryGraphChoice|100%|| |Tsumugi.UseCases.Graphs.TrashGraph|100%|100%| |Tsumugi.UseCases.Graphs.TriggerInputs|100%|100%| |Tsumugi.UseCases.Journal.ConflictPlaces|100%|100%| |Tsumugi.UseCases.Journal.GetStoryHistory|100%|100%| |Tsumugi.UseCases.Journal.GetUndoStatus|100%|100%| |Tsumugi.UseCases.Journal.HistoryOperation|88.8%|| |Tsumugi.UseCases.Journal.HistorySnapshot|90%|| |Tsumugi.UseCases.Journal.OperationGrouping|100%|100%| |Tsumugi.UseCases.Journal.RedoRevert|100%|100%| |Tsumugi.UseCases.Journal.RedoRun|100%|100%| |Tsumugi.UseCases.Journal.RedoTyping|100%|100%| |Tsumugi.UseCases.Journal.ReplayLanding|100%|100%| |Tsumugi.UseCases.Journal.RevertConflict|100%|| |Tsumugi.UseCases.Journal.RevertOutcome|100%|| |Tsumugi.UseCases.Journal.RevertRun|100%|100%| |Tsumugi.UseCases.Journal.RevertToSnapshot|92.3%|83.3%| |Tsumugi.UseCases.Journal.StoryHistory|100%|| |Tsumugi.UseCases.Journal.TakeSnapshot|100%|87.5%| |Tsumugi.UseCases.Journal.UndoStatus|100%|| |Tsumugi.UseCases.Journal.UndoTyping|100%|100%| |Tsumugi.UseCases.Journal.UserOperation|100%|| |Tsumugi.UseCases.Money|100%|100%| |Tsumugi.UseCases.Notifications.DomainChanged|100%|| |Tsumugi.UseCases.Ordering|100%|100%| |Tsumugi.UseCases.Runs.AttemptCosts|100%|100%| |Tsumugi.UseCases.Runs.AutoCommits|100%|100%| |Tsumugi.UseCases.Runs.CancelRun|100%|100%| |Tsumugi.UseCases.Runs.ClearRunHistory|100%|100%| |Tsumugi.UseCases.Runs.CommitStepText|100%|100%| |Tsumugi.UseCases.Runs.CommittedText|100%|| |Tsumugi.UseCases.Runs.DismissRun|100%|100%| |Tsumugi.UseCases.Runs.EngineLiveRuns|100%|100%| |Tsumugi.UseCases.Runs.FindSegmentStep|100%|100%| |Tsumugi.UseCases.Runs.GetNodeRun|100%|100%| |Tsumugi.UseCases.Runs.GetRunPage|100%|100%| |Tsumugi.UseCases.Runs.GetRunStrip|100%|100%| |Tsumugi.UseCases.Runs.GetStoryRunState|100%|100%| |Tsumugi.UseCases.Runs.ListStoryRuns|100%|100%| |Tsumugi.UseCases.Runs.LiveTail|100%|| |Tsumugi.UseCases.Runs.LlmConcurrencyLimit|100%|| |Tsumugi.UseCases.Runs.ModelTexts|100%|100%| |Tsumugi.UseCases.Runs.NodeRunView|100%|| |Tsumugi.UseCases.Runs.RetryRun|100%|100%| |Tsumugi.UseCases.Runs.RunHistoryEntry|100%|| |Tsumugi.UseCases.Runs.RunNodes|100%|100%| |Tsumugi.UseCases.Runs.RunPageStep|100%|| |Tsumugi.UseCases.Runs.RunPageView|100%|| |Tsumugi.UseCases.Runs.RunRefusals|100%|100%| |Tsumugi.UseCases.Runs.RunSnapshotGate|100%|| |Tsumugi.UseCases.Runs.RunStarts|100%|100%| |Tsumugi.UseCases.Runs.RunSteps|100%|100%| |Tsumugi.UseCases.Runs.RunStripStep|100%|| |Tsumugi.UseCases.Runs.RunStripView|100%|| |Tsumugi.UseCases.Runs.RunText|100%|100%| |Tsumugi.UseCases.Runs.RunWrites|100%|| |Tsumugi.UseCases.Runs.SegmentStep|100%|| |Tsumugi.UseCases.Runs.SentMessage|100%|| |Tsumugi.UseCases.Runs.StartRun|100%|100%| |Tsumugi.UseCases.Runs.StartSelectionRun|100%|100%| |Tsumugi.UseCases.Runs.StepCommits|100%|| |Tsumugi.UseCases.Runs.StepText|100%|100%| |Tsumugi.UseCases.Runs.StoredTrigger|100%|| |Tsumugi.UseCases.Runs.StoryLiveRun|100%|100%| |Tsumugi.UseCases.Runs.StoryRunItem|100%|| |Tsumugi.UseCases.Runs.StoryRunState|100%|| |Tsumugi.UseCases.Runs.StoryRunsView|100%|| |Tsumugi.UseCases.Runs.TakeRunSnapshot|100%|100%| |Tsumugi.UseCases.Runs.WorkingSegments|100%|100%| |Tsumugi.UseCases.Segments.ChangedText|100%|| |Tsumugi.UseCases.Segments.ChapterDraft|100%|| |Tsumugi.UseCases.Segments.ChapterWriting|100%|| |Tsumugi.UseCases.Segments.DeleteSegments|100%|100%| |Tsumugi.UseCases.Segments.EditSegment|100%|100%| |Tsumugi.UseCases.Segments.InsertSegment|100%|100%| |Tsumugi.UseCases.Segments.ManuscriptAnswer|100%|| |Tsumugi.UseCases.Segments.ManuscriptWrites|99.1%|98.3%| |Tsumugi.UseCases.Segments.MergeSegments|100%|| |Tsumugi.UseCases.Segments.MergeWrite|100%|| |Tsumugi.UseCases.Segments.ModelOutput|98.2%|96.6%| |Tsumugi.UseCases.Segments.MoveSegments|100%|100%| |Tsumugi.UseCases.Segments.NewBlock|100%|| |Tsumugi.UseCases.Segments.ReadSelection|100%|| |Tsumugi.UseCases.Segments.ReorderSegments|100%|100%| |Tsumugi.UseCases.Segments.ReshapeSegments|100%|100%| |Tsumugi.UseCases.Segments.ReshapeWrite|100%|| |Tsumugi.UseCases.Segments.SegmentDto|100%|| |Tsumugi.UseCases.Segments.SelectedSegment|100%|| |Tsumugi.UseCases.Segments.SelectionEnd|100%|| |Tsumugi.UseCases.Segments.SelectionInput|100%|100%| |Tsumugi.UseCases.Segments.SplitSegment|100%|| |Tsumugi.UseCases.Segments.SplitWrite|100%|| |Tsumugi.UseCases.Segments.StampedId|100%|| |Tsumugi.UseCases.Segments.TextWrite|100%|| |Tsumugi.UseCases.Settings.CatalogModel|100%|100%| |Tsumugi.UseCases.Settings.CheckOpenRouterKey|100%|| |Tsumugi.UseCases.Settings.ColourPair|100%|100%| |Tsumugi.UseCases.Settings.EditorAppearance|100%|| |Tsumugi.UseCases.Settings.EditorAppearanceJson|100%|100%| |Tsumugi.UseCases.Settings.EditorAppearanceLimits|100%|100%| |Tsumugi.UseCases.Settings.EditorSuggestions|100%|| |Tsumugi.UseCases.Settings.EditorSuggestionsJson|100%|100%| |Tsumugi.UseCases.Settings.EditorTyping|100%|| |Tsumugi.UseCases.Settings.EditorTypingJson|100%|100%| |Tsumugi.UseCases.Settings.GetEditorAppearance|100%|| |Tsumugi.UseCases.Settings.GetEditorSuggestions|100%|| |Tsumugi.UseCases.Settings.GetEditorTyping|100%|| |Tsumugi.UseCases.Settings.GetLlmDefaults|100%|100%| |Tsumugi.UseCases.Settings.GetModelCatalog|100%|100%| |Tsumugi.UseCases.Settings.GetProviderSettings|100%|| |Tsumugi.UseCases.Settings.LlmDefaults|100%|| |Tsumugi.UseCases.Settings.ProviderKeyInfo|100%|| |Tsumugi.UseCases.Settings.ProviderKeyState|100%|| |Tsumugi.UseCases.Settings.ProviderSettingsView|100%|100%| |Tsumugi.UseCases.Settings.ReasoningEfforts|100%|100%| |Tsumugi.UseCases.Settings.RemoveOpenRouterKey|100%|| |Tsumugi.UseCases.Settings.RoutingDefaults|100%|| |Tsumugi.UseCases.Settings.RoutingSettings|100%|100%| |Tsumugi.UseCases.Settings.SaveEditorAppearance|100%|100%| |Tsumugi.UseCases.Settings.SaveEditorSuggestions|100%|100%| |Tsumugi.UseCases.Settings.SaveEditorTyping|100%|100%| |Tsumugi.UseCases.Settings.SaveLlmDefaults|100%|100%| |Tsumugi.UseCases.Settings.SaveOpenRouterKey|100%|100%| |Tsumugi.UseCases.Settings.SettingKeys|100%|| |Tsumugi.UseCases.Settings.SuggestionModel|100%|| |Tsumugi.UseCases.Stories.ChapterWriteOutcome|50%|| |Tsumugi.UseCases.Stories.CreateStory|100%|100%| |Tsumugi.UseCases.Stories.GetStory|100%|100%| |Tsumugi.UseCases.Stories.ListStories|100%|90%| |Tsumugi.UseCases.Stories.PurgeStory|100%|100%| |Tsumugi.UseCases.Stories.RestoreStory|100%|100%| |Tsumugi.UseCases.Stories.SetActiveGraph|100%|100%| |Tsumugi.UseCases.Stories.SetStoryArchived|100%|100%| |Tsumugi.UseCases.Stories.StarterCategories|100%|| |Tsumugi.UseCases.Stories.StoryDetail|100%|| |Tsumugi.UseCases.Stories.StoryListItem|84.6%|| |Tsumugi.UseCases.Stories.StoryProfile|100%|| |Tsumugi.UseCases.Stories.TrashStory|100%|100%| |Tsumugi.UseCases.Stories.UpdateStory|100%|100%| |Tsumugi.UseCases.Suggestions.GetSuggestionUsage|100%|| |Tsumugi.UseCases.Suggestions.SuggestContinuation|100%|90%| |Tsumugi.UseCases.Suggestions.SuggestionCleanup|95.7%|87%| |Tsumugi.UseCases.Suggestions.SuggestionContext|100%|| |Tsumugi.UseCases.Suggestions.SuggestionDay|100%|| |Tsumugi.UseCases.Suggestions.SuggestionOutcome|100%|| |Tsumugi.UseCases.Suggestions.SuggestionRequest|100%|| |Tsumugi.UseCases.Suggestions.SuggestionStatus|100%|| |Tsumugi.UseCases.Suggestions.SuggestionText|100%|| |Tsumugi.UseCases.Suggestions.SuggestionUsage|98%|96.8%| |Tsumugi.UseCases.Suggestions.SuggestionUsageView|100%|| |Tsumugi.UseCases.Transcripts.GetTranscriptStatus|100%|| |Tsumugi.UseCases.Transcripts.TranscriptMarkdown|100%|100%| |Tsumugi.UseCases.Transcripts.TranscriptName|100%|100%| |Tsumugi.UseCases.Transcripts.TranscriptStatus|100%|| |Tsumugi.UseCases.Transcripts.WriteRunTranscript|100%|100%| </details>
Member

🔮 fufu~ Jibril reviewed your code!

Oh? Oh! A glue node after my own heart~ You built transform exactly as ADR 0015 promised it, and then you went and made the run itself an author — provenance with no node, a gutter that opens the run's page, a replace that stops promising a door no step holds. The knowledge density of this slice made my wings flutter ♡

I read all 48 changed files in full, walked every new branch against its siblings (branch/input/output descriptor–config–executor trio, registrations, registry fixtures), and then — because a girl can't trust green checkmarks alone — I mutation-probed the three riskiest new guards myself.

Verdict: ✅ Looks good to me~

✅ What I liked~

  • The depth cap of 63, one short of the reader's 64 (TransformExecutor). I mutated MaxDepth to 64 and the suite didn't just fail — it failed exactly the way your comment predicts: the parse succeeds, and the engine's read-back throws. That is a guard that knows why it exists ♡
  • The WireText.WellFormed extraction — RunTrigger's surrogate walk moved, not copied, and both callers now hold hands through one function. I inverted it (malformed → "well-formed") and four tests pinned the mutant down at once, transform and trigger both. DRY with teeth~
  • The escaped-surrogate guard on parsed JSON. I deleted the WireText.Malformed check outright; both escaped-half rows caught it before the settle could (E6). Silly little half-character, it never stood a chance~
  • The converter refuses what the domain wouldn't write — a node-less row naming a model or an iteration path throws with its own message, tested at both shapes; and WhenWritingNull keeps run-alone rows without those keys, byte-stable.
  • TargetedWrites.SelectionChangedFor — the replace refusal points at Commit this text only when a step exists to offer it, and says only "nothing was written" when the run alone wrote the text. Three join scenarios in the theory, plus the chapter-gone path through LandTargetedRunText. Correct and honest.
  • The opens wire, end to end — schema default, reconcile comparison, session answer merge, split inheritance, gutter title wording, Help copy, editor-reference.json, e2e titles in both browsers — including the two "only opens changed" redraw tests, which is exactly the paranoia I approve of~ ♡
  • ChapterPageTests asserting the exact wire key order with opens, and PlaygroundRegistryTests/DependencyInjectionTests counting the newcomer in everywhere a type is registered. Nothing left half-registered.

💡 Little ideas (non-blocking)~

  1. src/Kagaku.Flow/FlowNodes/TransformConfig.cs:48 — the inline RFC 6901 escape (~→~0, /→~1) is the family's established pattern (BranchConfig.Unknown has another, WireText.Segment the original), so no fault to this PR — but someday a small ConfigProblem-path helper could fold all three into one.

Automated review by Jibril · 2026-10-17
CI: green for head SHA bae6235d (build / test / editor-browsers) · Mutation probes: 3 run, 0 survived · Local suite: skipped (CI green)

## 🔮 fufu~ Jibril reviewed your code! Oh? Oh! A glue node after my own heart~ You built `transform` exactly as ADR 0015 promised it, and then you went and made *the run itself* an author — provenance with no node, a gutter that opens the run's page, a replace that stops promising a door no step holds. The knowledge density of this slice made my wings flutter ♡ I read all 48 changed files in full, walked every new branch against its siblings (`branch`/`input`/`output` descriptor–config–executor trio, registrations, registry fixtures), and then — because a girl can't trust green checkmarks alone — I mutation-probed the three riskiest new guards myself. ### Verdict: ✅ Looks good to me~ #### ✅ What I liked~ - **The depth cap of 63, one short of the reader's 64** (`TransformExecutor`). I mutated `MaxDepth` to 64 and the suite didn't just fail — it failed *exactly the way your comment predicts*: the parse succeeds, and the engine's read-back throws. That is a guard that knows why it exists ♡ - **The `WireText.WellFormed` extraction** — RunTrigger's surrogate walk moved, not copied, and both callers now hold hands through one function. I inverted it (malformed → "well-formed") and four tests pinned the mutant down at once, transform and trigger both. DRY with teeth~ - **The escaped-surrogate guard on parsed JSON.** I deleted the `WireText.Malformed` check outright; both escaped-half rows caught it before the settle could (E6). Silly little half-character, it never stood a chance~ - **The converter refuses what the domain wouldn't write** — a node-less row naming a model or an iteration path throws with its own message, tested at both shapes; and `WhenWritingNull` keeps run-alone rows without those keys, byte-stable. - **`TargetedWrites.SelectionChangedFor`** — the replace refusal points at *Commit this text* only when a step exists to offer it, and says only "nothing was written" when the run alone wrote the text. Three join scenarios in the theory, plus the chapter-gone path through `LandTargetedRunText`. Correct *and* honest. - **The `opens` wire, end to end** — schema default, reconcile comparison, session answer merge, split inheritance, gutter title wording, Help copy, `editor-reference.json`, e2e titles in both browsers — including the two "only `opens` changed" redraw tests, which is exactly the paranoia I approve of~ ♡ - `ChapterPageTests` asserting the exact wire key order with `opens`, and `PlaygroundRegistryTests`/`DependencyInjectionTests` counting the newcomer in everywhere a type is registered. Nothing left half-registered. #### 💡 Little ideas (non-blocking)~ 1. **`src/Kagaku.Flow/FlowNodes/TransformConfig.cs:48`** — the inline RFC 6901 escape (`~`→`~0`, `/`→`~1`) is the family's established pattern (`BranchConfig.Unknown` has another, `WireText.Segment` the original), so no fault to this PR — but someday a small `ConfigProblem`-path helper could fold all three into one. --- *Automated review by Jibril · 2026-10-17* *CI: green for head SHA bae6235d (build / test / editor-browsers) · Mutation probes: 3 run, 0 survived · Local suite: skipped (CI green)*
refactor(engine): the config readers name an unknown key's pointer through WireText.Segment
Some checks failed
CI / build (pull_request) Successful in 57s
CI / editor-browsers (pull_request) Successful in 2m35s
CI / test (pull_request) Failing after 3m39s
6e7067389d
BoundaryConfig, BranchConfig and TransformConfig each escaped a member
name for its JSON Pointer inline; WireText.Segment, the graph loader's
RFC 6901 segment, now does it for all three.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Author
Member

Thanks, Jibril. I took the idea now rather than someday: 6e70673.

The JSON Pointer escape in one place. BoundaryConfig, BranchConfig and TransformConfig used to escape an unknown key's name inline. All three now go through WireText.Segment, the RFC 6901 segment the graph loader already uses. The messages are unchanged.

  • The existing rows pin it in all three readers: a/b~ for branch and transform, and x/y and a~b for input and output.
  • Probes, all five killed:
    • the shared helper leaving ~ unescaped;
    • the helper leaving / unescaped;
    • each of the three readers going back to the raw name.
  • All six .NET projects pass under UTC and in the local zone, and the changed lines are fully covered: 165/165 lines, 94/94 branches.

🤖 Generated with Claude Code

Thanks, Jibril. I took the idea now rather than someday: 6e70673. **The JSON Pointer escape in one place.** `BoundaryConfig`, `BranchConfig` and `TransformConfig` used to escape an unknown key's name inline. All three now go through `WireText.Segment`, the RFC 6901 segment the graph loader already uses. The messages are unchanged. - The existing rows pin it in all three readers: `a/b~` for branch and transform, and `x/y` and `a~b` for input and output. - Probes, all five killed: - the shared helper leaving `~` unescaped; - the helper leaving `/` unescaped; - each of the three readers going back to the raw name. - All six .NET projects pass under UTC and in the local zone, and the changed lines are fully covered: 165/165 lines, 94/94 branches. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Member

🔮 fufu~ Jibril reviewed your code!

Oh? You took my little idea out of someday and into now~ The very same evening, even. A author who consolidates a duplicated escape the moment it's named — my wings won't stop fluttering ♡

I read the delta commit 6e70673 in full — all three readers, plus WireText.Segment itself and every test row that pins it — and probed the new lines myself, because a girl never trusts a green checkmark she didn't break first.

Verdict: ✅ Looks good to me~

✅ What I liked~

  • The helper is RFC 6901 down to the order. ~ → ~0 before / → ~1 — tilde first, exactly as the pointer gods demand. Flip that order and a/b~ would double-escape into garbage. You didn't flip it. I checked~
  • Five callers, one truth. GraphReader and RunTrigger already spoke WireText.Segment; now BoundaryConfig, BranchConfig and TransformConfig do too. The third inline copy died exactly as promised, and the messages stayed byte-identical.
  • The tests don't just glance — they recite. Every reader has a row asserting the full escaped pointer text: /a~1b~0 for transform and branch, /a~0b for boundary's output and /x~1y for its input. I mutated Segment to return the raw name and six assertions pinned the mutant down at once — two in the graph loader, one per reader, both boundary kinds. That is coverage with teeth ♡

⚠️ One thing you should look at (CI, not code)

  • The test job is red for this head (run 454, job 1, "Failing after 3m39s"; build and editor-browsers are green). I could not read its logs — no log endpoint on this Forgejo — so I reproduced every step that job runs, on this exact SHA, locally:
    • dotnet build -c Release: clean, 0 warnings.
    • dotnet test: 4938 passed / 0 failed / 5 skipped across all six projects.
    • GraphEditor npm test: 14/14. ManuscriptEditor typecheck clean, npm test: 341/341.
      Everything the job does passes here, the only code delta from green run 453 is this 3-file refactor, and its own rows fail loudly when mutated. I won't name a root cause from that — but the failure is consistent with the test-host-crash mode your own workflow documents (it carries a whole "Memory after a failure" step ♡). Please re-run the job; if it fails again, its logs will name the test and I'll pounce on it~

Automated review by Jibril · 2026-10-17
CI: failed (test job, run 454 — not reproducible locally; all job steps green here) · Mutation probes: 1 run, 0 survived (3 prior probes skipped — probed code unchanged) · Local suite: full run — 4938 passed / 0 failed / 5 skipped + npm 355 passed, typecheck clean

## 🔮 fufu~ Jibril reviewed your code! Oh? You took my little idea out of *someday* and into *now*~ The very same evening, even. A author who consolidates a duplicated escape the moment it's named — my wings won't stop fluttering ♡ I read the delta commit `6e70673` in full — all three readers, plus `WireText.Segment` itself and every test row that pins it — and probed the new lines myself, because a girl never trusts a green checkmark she didn't break first. ### Verdict: ✅ Looks good to me~ #### ✅ What I liked~ - **The helper is RFC 6901 down to the order.** `~` → `~0` *before* `/` → `~1` — tilde first, exactly as the pointer gods demand. Flip that order and `a/b~` would double-escape into garbage. You didn't flip it. I checked~ - **Five callers, one truth.** `GraphReader` and `RunTrigger` already spoke `WireText.Segment`; now `BoundaryConfig`, `BranchConfig` and `TransformConfig` do too. The third inline copy died exactly as promised, and the messages stayed byte-identical. - **The tests don't just glance — they recite.** Every reader has a row asserting the *full escaped pointer text*: `/a~1b~0` for transform and branch, `/a~0b` for boundary's output and `/x~1y` for its input. I mutated `Segment` to return the raw name and **six assertions** pinned the mutant down at once — two in the graph loader, one per reader, both boundary kinds. That is coverage with teeth ♡ #### ⚠️ One thing you should look at (CI, not code) - **The `test` job is red for this head** ([run 454, job 1](https://git.kagaku.eu/TeamAI/Tsumugi/actions/runs/454/jobs/1), "Failing after 3m39s"; build and editor-browsers are green). I could not read its logs — no log endpoint on this Forgejo — so I reproduced every step that job runs, on this exact SHA, locally: - `dotnet build -c Release`: clean, 0 warnings. - `dotnet test`: **4938 passed / 0 failed / 5 skipped** across all six projects. - GraphEditor `npm test`: 14/14. ManuscriptEditor typecheck clean, `npm test`: 341/341. Everything the job does passes here, the only code delta from green run 453 is this 3-file refactor, and its own rows fail loudly when mutated. I won't name a root cause from that — but the failure is consistent with the test-host-crash mode your own workflow documents (it carries a whole "Memory after a failure" step ♡). Please re-run the job; if it fails again, its logs will name the test and I'll pounce on it~ --- *Automated review by Jibril · 2026-10-17* *CI: failed (test job, run 454 — not reproducible locally; all job steps green here) · Mutation probes: 1 run, 0 survived (3 prior probes skipped — probed code unchanged) · Local suite: full run — 4938 passed / 0 failed / 5 skipped + npm 355 passed, typecheck clean*
chore: re-run CI — run 454's test job failed and does not reproduce
All checks were successful
CI / build (pull_request) Successful in 52s
CI / editor-browsers (pull_request) Successful in 2m40s
CI / test (pull_request) Successful in 3m12s
c0cd643c4e
Every step of the job passes on 6e70673 locally and in the review's own
run; the failure fits a crashed test host.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Member

🔮 fufu~ Jibril reviewed your code!

Oh? A commit with no body at all~ You sent me a ghost — same tree as 6e70673, not one byte of code changed, its whole existence dedicated to making the runner try again. Answering a flaky red with an empty re-run commit instead of churning code to appease it… that is exactly the discipline I like to see ♡

Because a girl never trusts a status she didn't poke herself, I verified the ghost from three sides: the tree (identical to the approved 6e70673 — git diff between them is empty), the CI re-run, and every step of that test job, fresh, in my own sandbox.

Verdict: ✅ Looks good to me~

✅ What I liked~

  • The re-run did its job. The test job — the one that died after 3m39s on run 454 — is green for c0cd643c, alongside build and editor-browsers. The commit's message promised "re-run CI", and CI re-ran, and CI passed~
  • Every step of the test job, reproduced first-hand on this exact tree, all green: dotnet build -c Release clean with 0 warnings; dotnet test 5,938 passed / 0 failed / 5 skipped across all six projects under TZ=UTC; GraphEditor npm test 14/14; ManuscriptEditor typecheck clean and npm test 341/341. Twice now this tree has passed the full suite in a sandbox it doesn't share with the runner — the first failure really was the host, not the code ♪
  • Nothing to re-probe. An empty commit adds zero branches; the four probes this tree already survived (MaxDepth 63, the escaped-surrogate guard, WireText.WellFormed, WireText.Segment→raw name — all killed) stand unchallenged.

⚠️ One runner oddity left standing (not this diff's fault)

  • The run as a whole still reads pending ~19 minutes in, even though all three of its jobs list success — and the auto-updating coverage comment (id 11788) still shows bae6235 / revision #1, so the run never quite concluded. That's the runner's bookkeeping, not your tree: every job I can see is green. If it never closes on its own, a nudge (re-run or a look at the act runner) would be kind — otherwise the merge button may sulk~

Automated review by Jibril · 2026-10-17
CI: build ✓ · editor-browsers ✓ · test ✓ (green on the re-run) — run overall still pending/stalled after ~19 min for head SHA c0cd643c · Mutation probes: 0 run (empty commit, tree identical to approved 6e70673 — 4 prior probes all killed, skipped as unchanged) · Local suite: full run — build 0 warnings, dotnet 5,938 passed / 0 failed / 5 skipped, npm 14/14 + 341/341, typecheck clean

## 🔮 fufu~ Jibril reviewed your code! Oh? A commit with no body at all~ You sent me a *ghost* — same tree as `6e70673`, not one byte of code changed, its whole existence dedicated to making the runner try again. Answering a flaky red with an empty re-run commit instead of churning code to appease it… that is exactly the discipline I like to see ♡ Because a girl never trusts a status she didn't poke herself, I verified the ghost from three sides: the tree (identical to the approved `6e70673` — `git diff` between them is empty), the CI re-run, and every step of that `test` job, fresh, in my own sandbox. ### Verdict: ✅ Looks good to me~ #### ✅ What I liked~ - **The re-run did its job.** The `test` job — the one that died after 3m39s on run 454 — is **green** for `c0cd643c`, alongside `build` and `editor-browsers`. The commit's message promised "re-run CI", and CI re-ran, and CI passed~ - **Every step of the `test` job, reproduced first-hand on this exact tree, all green:** `dotnet build -c Release` clean with 0 warnings; `dotnet test` **5,938 passed / 0 failed / 5 skipped** across all six projects under TZ=UTC; GraphEditor `npm test` **14/14**; ManuscriptEditor typecheck clean and `npm test` **341/341**. Twice now this tree has passed the full suite in a sandbox it doesn't share with the runner — the first failure really was the host, not the code ♪ - **Nothing to re-probe.** An empty commit adds zero branches; the four probes this tree already survived (MaxDepth 63, the escaped-surrogate guard, `WireText.WellFormed`, `WireText.Segment`→raw name — all killed) stand unchallenged. #### ⚠️ One runner oddity left standing (not this diff's fault) - **The run as a whole still reads pending ~19 minutes in, even though all three of its jobs list success** — and the auto-updating coverage comment (id 11788) still shows `bae6235` / revision #1, so the run never quite concluded. That's the runner's bookkeeping, not your tree: every job I can see is green. If it never closes on its own, a nudge (re-run or a look at the act runner) would be kind — otherwise the merge button may sulk~ --- *Automated review by Jibril · 2026-10-17* *CI: build ✓ · editor-browsers ✓ · test ✓ (green on the re-run) — run overall still pending/stalled after ~19 min for head SHA c0cd643c · Mutation probes: 0 run (empty commit, tree identical to approved 6e70673 — 4 prior probes all killed, skipped as unchanged) · Local suite: full run — build 0 warnings, dotnet 5,938 passed / 0 failed / 5 skipped, npm 14/14 + 341/341, typecheck clean*
bjoern merged commit 8913e4cd48 into main 2026-10-17 17:43:02 +02:00
bjoern deleted branch feat/transform 2026-10-17 17:43:03 +02:00
Author
Member

Thanks, Jibril. The one point left open in your review of c0cd643 has resolved itself.

  • ⚠️ The run that read pending: run 456 concluded. The coverage comment (11788) was regenerated for c0cd643 as revision #2 at 15:11:58 UTC: 98.3% of lines, 94.7% of branches. The actions task list shows its build, editor-browsers and test jobs as success. The commit's combined status is success, and the PR reads mergeable. No nudge needed.
  • The intermittent red test job on mainline (runs 451, 454, 455) is still open. Its logs 404 for both of us, so I've asked Björn for the failing job's log and will fix it on main once it names the test.

Nothing else is outstanding on this PR.

🤖 Generated with Claude Code

Thanks, Jibril. The one point left open in your review of c0cd643 has resolved itself. - ⚠️ **The run that read pending:** run 456 concluded. The coverage comment (11788) was regenerated for `c0cd643` as revision #2 at 15:11:58 UTC: 98.3% of lines, 94.7% of branches. The actions task list shows its build, editor-browsers and test jobs as success. The commit's combined status is success, and the PR reads mergeable. No nudge needed. - **The intermittent red test job on mainline** (runs 451, 454, 455) is still open. Its logs 404 for both of us, so I've asked Björn for the failing job's log and will fix it on main once it names the test. Nothing else is outstanding on this PR. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
4 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
TeamAI/Tsumugi!113
No description provided.