Skip to content

fix: round 2026 09 29 - #68

Merged
Theauxm merged 3 commits into
mainfrom
fix/round-2026-09-29
Sep 30, 2026
Merged

Theauxm merged 3 commits into
mainfrom
fix/round-2026-09-29

Conversation

@Theauxm

@Theauxm Theauxm commented Sep 30, 2026

Copy link
Copy Markdown
Member

No description provided.

A junction whose constructor needs an unregistered service failed its first run with
"Could not find type: (IClock).", which names neither the junction, the train, nor whether the
value was expected from an earlier junction or from the container. Every lookup that can miss
now says who asked: a junction's constructor argument or input, an IChain's junction, an
Extract's source and Resolve's result each name the junction or step, the train, the missing
type, and what to do (register it, or chain a junction that outputs it first).

A junction Trax cannot build from its constructor (more or fewer than one public constructor,
abstract, or not a class) fails every run, so Chain<T>() and ShortCircuit<T>() now record it
as a refusal when the chain is read, and the startup chain check refuses the host instead of
the first run failing. A junction passed as an instance is not checked: its constructors
never run.

Resolve() of a value-type result that nothing produced returned the type's default as a
success, because the missing value came back as default rather than null; it now fails.

The new JunctionResolutionMessageTests failed against the old messages and recorder and pass
with this change.
A null service threw a plain Exception out of AddServices at run time, while every other
invalid argument records a TrainException on the chain. It now records a TrainException that
names the type argument and, when several services are passed, its position, and stores none of
that call's services.

AddServicesNullParamTests failed with the thrown Exception before this change and pass after.
…ool timing

The train in DeclaredChain_ABodyThatAwaitsBeforeReturning_IsRefused awaited Task.Yield, so on a
fast thread pool the rest of its body could finish before DeclaredChain checked whether the
declaration had completed, and no refusal was recorded. It failed that way once in CI under the
Release build. The body now awaits a task that never completes, which is what the test means by a
body that awaits something before returning.
@codecov

codecov Bot commented Sep 30, 2026

Copy link
Copy Markdown

@Theauxm
Theauxm merged commit e3ceced into main Sep 30, 2026
4 checks passed
@Theauxm
Theauxm deleted the fix/round-2026-09-29 branch September 30, 2026 16:16
@github-actions

Copy link
Copy Markdown
Contributor

This PR is included in version 1.7.6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant