Code coverage doesn't match lcov.info contents?

I have the scanner picking up my typescript coverage report successfully (running in GitHub Actions), but the coverage shown in the dashboard is lower than what I expected.

For example, the first file reported in the lcov.info has all lines covered once, but SonarCloud shows zero lines. The locally generated coverage report shows what I expected. Is this normal?

The local coverage report:
local coverage report

The first few lines of the coverage report file (lcov.info):
lcov.info

What I see on SonarCloud:

And here are the relevant log lines from the scanner:

2024-02-23T01:33:30.9450414Z 01:33:30.942 INFO: Sensor JavaScript/TypeScript Coverage [javascript]
2024-02-23T01:33:30.9453212Z 01:33:30.942 DEBUG: Property sonar.typescript.lcov.reportPaths is used.
2024-02-23T01:33:30.9456759Z 01:33:30.943 DEBUG: Using 'out/coverage/lcov.info' to resolve LCOV files
2024-02-23T01:33:30.9458978Z 01:33:30.943 INFO: Analysing [/github/workspace/out/coverage/lcov.info]

Hello @Wilco, welcome to the Sonar Community!

Can you please give us some more details about your setup? Specifically:

  • How are you executing the scanner? Are you using the command line tool (sonar-scanner) or the official SonarQube Scan action?
  • What options are you passing to the scanner besides sonar.typescript.lcov.reportPaths?
  • What tool do you use to generate the LCOV report?
  • Without disclosing any private information, can you tell us more about your project: directory structure, framework (typically, it seems like you are using some decorators in app.module.ts), test framework, and/or test runner?

Thanks in advance,

Eric.