Skip to content

# CI declared concurrency twice and stopped parsing - #130

Merged
Hawkynt merged 6 commits into
mainfrom
fix/ci-duplicate-concurrency
Aug 30, 2026
Merged

# CI declared concurrency twice and stopped parsing#130
Hawkynt merged 6 commits into
mainfrom
fix/ci-duplicate-concurrency

Conversation

@Hawkynt

@Hawkynt Hawkynt commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Two concurrency: blocks ended up in the same mapping — one I added in #119, one already there. A duplicate key makes the workflow unparseable, so every run since has failed before starting: runs show up named .github/workflows/ci.yml with no jobs, and PRs sit blocked with no checks to explain it.

Keeps the block that was there first; it expresses the same intent.

Two concurrency blocks landed in the same mapping at the same time — one from
me, one already there. A duplicate key makes the whole workflow unreadable, so
every run since has been a parse failure: no jobs, no checks, and pull requests
blocked with nothing to show why.

The one that was there first is kept. It says the same thing.
With the workflow unparseable nothing was verified, so these went in unchecked.

A written Unreal package was read back as a Quake one: both claim ".pak", and
Quake announces itself in the first four bytes while Unreal keeps its magic in
the footer, where a leading-bytes check never looks. A written VMware bundle
was read back as a Veeam backup, which claims ".vib" as well; the bundle is an
AR archive and says so in its first eight bytes. Both are settled by content
now, the way ".arc", ".dsk" and ".wad" already are.

Keccak advertised no digest sizes and was not in the contract test's registry.
Both are reached only as transitive project references, so nothing guarantees
they are built before the Windows single-file bundle asks for their assemblies —
and it failed there, unable to find Hawkynt.Algorithms.Checksums.dll.
The coder puts the split one below the scaled probability. Normalization only
guarantees the top bytes of low and high differ, so the range can be small
enough that the scaled probability truncates to zero — and the split then lands
one below low. Encoding a zero bit set high under low, and everything after it
was read from an inverted interval.

The high side was already clamped; the low side was not. One random payload in
a few thousand hit it, which is how it survived: the round-trip test draws its
own bytes from Random.Shared, so the failure moved around. Seed 3138 at 64 KiB
reproduces it — the literal 43020 symbols in came back one less than it went in,
and the match after that pointed at a slot nothing had filled.

12000 round-trips over 6000 seeds and two sizes are clean.
@Hawkynt Hawkynt closed this Aug 29, 2026
@Hawkynt
Hawkynt deleted the fix/ci-duplicate-concurrency branch August 29, 2026 22:43
@Hawkynt
Hawkynt restored the fix/ci-duplicate-concurrency branch August 29, 2026 22:43
@Hawkynt Hawkynt reopened this Aug 29, 2026
@Hawkynt
Hawkynt merged commit e9b411e into main Aug 30, 2026
3 checks passed
@Hawkynt
Hawkynt deleted the fix/ci-duplicate-concurrency branch August 30, 2026 01:02
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