• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

valkyrjaio / sindri-ts / 30325084291
100%

Build:
DEFAULT BRANCH: 26.x
Ran 28 Jul 2026 03:08AM UTC
Jobs 1
Files 45
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

28 Jul 2026 03:08AM UTC coverage: 100.0%. Remained the same
30325084291

push

github

web-flow
[Sindri] Resolve binding-key constants declared with as const (#67)

# Description

Sindri generated an empty container cache — `AppContainerData` was
always `super({})` — so a cached (non-debug) application could not
resolve the services the framework itself publishes. In the starter app,
running the CLI with `debug=false` threw
`ContainerInvalidReferenceException: Service with
'Valkyrja.Cli.Server.Handler.InputHandlerContract' not found`, even
though the framework's `CliServerServiceProvider` publishes exactly that
key.

The cause is a single node-kind check.
`AstReader::resolveStaticProperty` tested a static property's
initializer with `isKind(SyntaxKind.StringLiteral)`, but the framework
declares its binding keys as

```ts
static readonly Data = 'Valkyrja.Container.Data.ContainerData' as const;
```

so the initializer is an `AsExpression` wrapping the literal, not the
literal itself. The check failed, the constant resolved to `undefined`,
and `ServiceProviderReader` then dropped every publisher whose key is a
computed `[SomeServiceId.Foo]` — which is how every framework provider
and the application's own `DataServiceProvider` write theirs. With no
publishers surviving, `GenerateDataFromAst::generateContainerData` had
nothing to emit.

Stripping the type-only wrappers an expression may be dressed in — `as`,
`satisfies`, parentheses — reaches the value node underneath, and the
existing string-literal path handles it unchanged. `satisfies` and
parentheses are not used by the framework today, but they are the same
class of purely-typing wrapper and cost nothing to unwrap; leaving them
out would only defer the identical bug.

Verified against the starter app: the CLI cache goes from zero
publishers to 25 (including
`Valkyrja.Cli.Server.Handler.InputHandlerContract`), and the HTTP cache
to 18. The four golden snapshots are unchanged — the golden generators
take publishers as direct input, so nothing about the emitted shape
moved.

This builds on #66, wh... (continued)

836 of 836 branches covered (100.0%)

Branch coverage included in aggregate %.

8 of 8 new or added lines in 1 file covered. (100.0%)

1333 of 1333 relevant lines covered (100.0%)

12.56 hits per line

Jobs
ID Job ID Ran Files Coverage
1 30325084291.1 28 Jul 2026 03:08AM UTC 45
100.0
GitHub Action Run
Source Files on build 30325084291
  • Tree
  • List 45
  • Changed 1
  • Source Changed 1
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #30325084291
  • 9f105d98 on github
  • Prev Build on 26.x (#30322548766)
  • Next Build on 26.x (#30325566677)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc