Apr 19, 4-5 PM (4)
Apr 19, 5-6 PM (3)
Apr 19, 6-7 PM (8)
Apr 19, 7-8 PM (3)
Apr 19, 8-9 PM (8)
Apr 19, 9-10 PM (6)
Apr 19, 10-11 PM (25)
Apr 19, 11-12 AM (23)
Apr 20, 12-1 AM (4)
Apr 20, 1-2 AM (5)
Apr 20, 2-3 AM (2)
Apr 20, 3-4 AM (7)
Apr 20, 4-5 AM (1)
Apr 20, 5-6 AM (8)
Apr 20, 6-7 AM (12)
Apr 20, 7-8 AM (29)
Apr 20, 8-9 AM (42)
Apr 20, 9-10 AM (37)
Apr 20, 10-11 AM (95)
Apr 20, 11-12 PM (42)
Apr 20, 12-1 PM (39)
Apr 20, 1-2 PM (53)
Apr 20, 2-3 PM (68)
Apr 20, 3-4 PM (47)
Apr 20, 4-5 PM (41)
Apr 20, 5-6 PM (31)
Apr 20, 6-7 PM (24)
Apr 20, 7-8 PM (10)
Apr 20, 8-9 PM (7)
Apr 20, 9-10 PM (16)
Apr 20, 10-11 PM (28)
Apr 20, 11-12 AM (18)
Apr 21, 12-1 AM (24)
Apr 21, 1-2 AM (5)
Apr 21, 2-3 AM (13)
Apr 21, 3-4 AM (4)
Apr 21, 4-5 AM (3)
Apr 21, 5-6 AM (8)
Apr 21, 6-7 AM (15)
Apr 21, 7-8 AM (44)
Apr 21, 8-9 AM (119)
Apr 21, 9-10 AM (36)
Apr 21, 10-11 AM (35)
Apr 21, 11-12 PM (98)
Apr 21, 12-1 PM (57)
Apr 21, 1-2 PM (71)
Apr 21, 2-3 PM (60)
Apr 21, 3-4 PM (33)
Apr 21, 4-5 PM (31)
Apr 21, 5-6 PM (27)
Apr 21, 6-7 PM (38)
Apr 21, 7-8 PM (35)
Apr 21, 8-9 PM (37)
Apr 21, 9-10 PM (14)
Apr 21, 10-11 PM (34)
Apr 21, 11-12 AM (12)
Apr 22, 12-1 AM (2)
Apr 22, 1-2 AM (3)
Apr 22, 2-3 AM (3)
Apr 22, 3-4 AM (4)
Apr 22, 4-5 AM (3)
Apr 22, 5-6 AM (17)
Apr 22, 6-7 AM (34)
Apr 22, 7-8 AM (21)
Apr 22, 8-9 AM (37)
Apr 22, 9-10 AM (18)
Apr 22, 10-11 AM (47)
Apr 22, 11-12 PM (45)
Apr 22, 12-1 PM (56)
Apr 22, 1-2 PM (64)
Apr 22, 2-3 PM (44)
Apr 22, 3-4 PM (86)
Apr 22, 4-5 PM (46)
Apr 22, 5-6 PM (17)
Apr 22, 6-7 PM (10)
Apr 22, 7-8 PM (18)
Apr 22, 8-9 PM (15)
Apr 22, 9-10 PM (23)
Apr 22, 10-11 PM (31)
Apr 22, 11-12 AM (17)
Apr 23, 12-1 AM (7)
Apr 23, 1-2 AM (4)
Apr 23, 2-3 AM (4)
Apr 23, 3-4 AM (6)
Apr 23, 4-5 AM (3)
Apr 23, 5-6 AM (8)
Apr 23, 6-7 AM (17)
Apr 23, 7-8 AM (26)
Apr 23, 8-9 AM (33)
Apr 23, 9-10 AM (33)
Apr 23, 10-11 AM (29)
Apr 23, 11-12 PM (30)
Apr 23, 12-1 PM (51)
Apr 23, 1-2 PM (69)
Apr 23, 2-3 PM (65)
Apr 23, 3-4 PM (26)
Apr 23, 4-5 PM (21)
Apr 23, 5-6 PM (7)
Apr 23, 6-7 PM (7)
Apr 23, 7-8 PM (11)
Apr 23, 8-9 PM (14)
Apr 23, 9-10 PM (6)
Apr 23, 10-11 PM (28)
Apr 23, 11-12 AM (18)
Apr 24, 12-1 AM (7)
Apr 24, 1-2 AM (4)
Apr 24, 2-3 AM (7)
Apr 24, 3-4 AM (5)
Apr 24, 4-5 AM (8)
Apr 24, 5-6 AM (13)
Apr 24, 6-7 AM (12)
Apr 24, 7-8 AM (33)
Apr 24, 8-9 AM (40)
Apr 24, 9-10 AM (41)
Apr 24, 10-11 AM (71)
Apr 24, 11-12 PM (57)
Apr 24, 12-1 PM (37)
Apr 24, 1-2 PM (53)
Apr 24, 2-3 PM (34)
Apr 24, 3-4 PM (19)
Apr 24, 4-5 PM (16)
Apr 24, 5-6 PM (38)
Apr 24, 6-7 PM (26)
Apr 24, 7-8 PM (12)
Apr 24, 8-9 PM (41)
Apr 24, 9-10 PM (17)
Apr 24, 10-11 PM (30)
Apr 24, 11-12 AM (16)
Apr 25, 12-1 AM (8)
Apr 25, 1-2 AM (1)
Apr 25, 2-3 AM (10)
Apr 25, 3-4 AM (5)
Apr 25, 4-5 AM (3)
Apr 25, 5-6 AM (13)
Apr 25, 6-7 AM (1)
Apr 25, 7-8 AM (4)
Apr 25, 8-9 AM (24)
Apr 25, 9-10 AM (17)
Apr 25, 10-11 AM (4)
Apr 25, 11-12 PM (4)
Apr 25, 12-1 PM (13)
Apr 25, 1-2 PM (3)
Apr 25, 2-3 PM (10)
Apr 25, 3-4 PM (6)
Apr 25, 4-5 PM (10)
Apr 25, 5-6 PM (16)
Apr 25, 6-7 PM (12)
Apr 25, 7-8 PM (30)
Apr 25, 8-9 PM (55)
Apr 25, 9-10 PM (13)
Apr 25, 10-11 PM (20)
Apr 25, 11-12 AM (21)
Apr 26, 12-1 AM (5)
Apr 26, 1-2 AM (0)
Apr 26, 2-3 AM (2)
Apr 26, 3-4 AM (5)
Apr 26, 4-5 AM (2)
Apr 26, 5-6 AM (2)
Apr 26, 6-7 AM (3)
Apr 26, 7-8 AM (8)
Apr 26, 8-9 AM (3)
Apr 26, 9-10 AM (0)
Apr 26, 10-11 AM (2)
Apr 26, 11-12 PM (1)
Apr 26, 12-1 PM (6)
Apr 26, 1-2 PM (4)
Apr 26, 2-3 PM (14)
Apr 26, 3-4 PM (10)
Apr 26, 4-5 PM (0)
3,790 commits this week Apr 19, 2026 - Apr 26, 2026
chore(deps-dev): bump eslint from 9.39.2 to 10.2.1
Bumps [eslint](https://github.com/eslint/eslint) from 9.39.2 to 10.2.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.39.2...v10.2.1)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.2.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
chore(deps-dev): bump postcss from 8.5.8 to 8.5.10 (#381)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.8 to 8.5.10.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.8...8.5.10)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
chore(deps): bump github.com/blinklabs-io/gouroboros
Bumps [github.com/blinklabs-io/gouroboros](https://github.com/blinklabs-io/gouroboros) from 0.153.1 to 0.165.3.
- [Release notes](https://github.com/blinklabs-io/gouroboros/releases)
- [Changelog](https://github.com/blinklabs-io/gouroboros/blob/main/RELEASE_NOTES.md)
- [Commits](https://github.com/blinklabs-io/gouroboros/compare/v0.153.1...v0.165.3)

---
updated-dependencies:
- dependency-name: github.com/blinklabs-io/gouroboros
  dependency-version: 0.165.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
testnet: remove asteria-player from cardano_node_master compose
Unblocks scheduled runs. asteria-player:dev never published —
publish-images skips it ("Tag 'dev' not found in repo"), so
Antithesis fails to pull and every scheduled run since 2026-04-25
came back Incomplete with zero container stdout.

Asteria work continues under #56 / PR #67. Re-add to compose once a
real image tag is published.

Ogmios already absent from main (removed in 7e0f8f5 pending #49).
chore(deps): bump go.opentelemetry.io/otel from 1.39.0 to 1.41.0 (#552)
Bumps [go.opentelemetry.io/otel](https://github.com/open-telemetry/opentelemetry-go) from 1.39.0 to 1.41.0.
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.39.0...v1.41.0)

---
updated-dependencies:
- dependency-name: go.opentelemetry.io/otel
  dependency-version: 1.41.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
build(deps): bump go.opentelemetry.io/otel from 1.39.0 to 1.41.0 (#557)
Bumps [go.opentelemetry.io/otel](https://github.com/open-telemetry/opentelemetry-go) from 1.39.0 to 1.41.0.
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.39.0...v1.41.0)

---
updated-dependencies:
- dependency-name: go.opentelemetry.io/otel
  dependency-version: 1.41.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
chore(deps): Bump github.com/gdamore/tcell/v2 from 2.13.8 to 2.13.9 (#443)
Bumps [github.com/gdamore/tcell/v2](https://github.com/gdamore/tcell) from 2.13.8 to 2.13.9.
- [Release notes](https://github.com/gdamore/tcell/releases)
- [Changelog](https://github.com/gdamore/tcell/blob/main/CHANGESv3.md)
- [Commits](https://github.com/gdamore/tcell/compare/v2.13.8...v2.13.9)

---
updated-dependencies:
- dependency-name: github.com/gdamore/tcell/v2
  dependency-version: 2.13.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
feat(lsp): enhance LSP project with dependency caching and incremental compilation
- Introduced `LspDepCache` to store type information and checked modules for improved performance.
- Added methods to `LspProject` for managing the dependency cache, including `new_with_cache`, `dep_cache`, and cache management during compilation.
- Updated `Project` struct to support skipping dependency checks and injecting module types from the cache.
- Enhanced the `compile` method to utilize cached data, reducing unnecessary re-inference of modules.
- Modified `Platform` and `Dependency` enums to derive `Hash` for improved caching capabilities.
- Implemented incremental caching logic in `type_check` to avoid re-parsing unchanged modules.
fix(ci): also try origin/<tag> when resolving image tags
Fresh clones don't expose feature branches as bare refs — only
as @origin/<branch>@ remote-tracking refs. The publish script's
@git rev-list -n 1 <tag>@ failed to find @asteria-spawn-v2@
even though the branch existed on origin. Falling through to
@origin/<tag>@ when the bare lookup fails covers the
feature-branch case while still working for git tags and
explicit commit SHAs.
ci: make published component packages public on ghcr
Antithesis pulls images anonymously; ghcr packages default to
private on first push. Adds a post-push step that PATCHes each
component package referenced in the testnet's docker-compose to
public visibility. Idempotent for already-public packages and a
no-op for packages that haven't been published yet (they'll be
flipped on the next run).
feat(asteria-player): spawn-ship works end-to-end against the cluster (#56)
Off-chain wiring that takes the asteria spawn flow from build-only
to accepted-on-chain in the antithesis local cluster, on top of
lambdasistemi/cardano-node-clients PR #77.

- `Game.hs` no longer emits an explicit `payTo` for the new
  PILOT NFT — the upstream `balanceTx` residual-MA folding drops
  it into the player's ADA change output, matching mainnet
  asteria's 3-output spawn shape.
- `PlayerMain.hs` calls the new `buildWith` with a 1.2x
  ExUnits margin (mirrors cardano-cli's submit-time overshoot)
  to absorb cardano-ledger version drift between the client and
  the cluster's cardano-node 10.7.1.
- `configurator.sh` writes Conway-mainnet `maxTxExUnits`
  (16.5 M mem, 10 B steps; block 62 M / 40 B) into
  `alonzo-genesis.json`.
- `docker-compose.yaml` mounts the configurator script for
  local iteration without rebuilding the configurator image, and
  bumps the asteria-player image tag from `:dev` (a local-only
  placeholder that the publish-images job can't resolve to a
  git ref) to `:asteria-spawn-v2` — the branch name. The
  publish-images script clones origin and resolves
  `asteria-spawn-v2` to the branch tip, builds and publishes
  the image at that tag.
- `apply-params.sh` strips traces via `--trace-level silent`
  to keep validator eval cost down.
- `cabal.project` pins cardano-node-clients to the merged main
  SHA `f578d6cf...`.

Verified locally: asteria_player_ship_spawn_attempted_1 →
ship_spawn_built_1 → ship_spawned_1 on a single attempt with no
failures, on the local docker-compose cluster.
fix(ci): publish-images fails loudly when an entry can't be built
Previously the script logged `Error: Tag '<tag>' not found in repo.
Skipping <name>.` and exited 0, so silent skips left CI green
while the antithesis testnet ran against stale registry images.

Now:
- Already-published `<name>:<tag>` images take a fast path and
  skip the build/git-resolve cleanly. This handles legacy
  components whose original commit has since been rebased away
  (e.g. sidecar:1362c5b, tracer-sidecar:ff408d6) — their image is
  still served from ghcr, so the testnet keeps working.
- Anything that is NOT in the registry MUST resolve its tag
  against the repo. If it can't, the entry is recorded and the
  job fails with a non-zero exit at the end with a clear summary
  of which images couldn't be built and why.

This makes it impossible to merge a PR that bumps a docker-compose
image tag without the corresponding git ref and component
directory landing in the same commit.
feat(asteria-player): spawn-ship succeeds end-to-end against the cluster (#56)
Three coupled changes that take the spawn flow from build-only to
accepted-on-chain in the antithesis local cluster.

`Game.hs` no longer emits an explicit `payTo` for the new PILOT
NFT — `balanceTx`'s residual-MA folding (lambdasistemi/cardano-node-clients
PR #77) drops the NFT into the player's ADA change output, matching
mainnet asteria's 3-output spawn shape.

`PlayerMain.hs` calls the new `buildWith` with
`boExUnitsMargin = 1.2x` to mirror cardano-cli's submit-time
overshoot. Without it the asteria spend script's actual cost on
the cluster's submit-time evaluator runs ~751 mem above what the
client-side `evalTxExUnits` reports (cardano-ledger version drift
between CHaP 2026-02-17 here and cardano-node 10.7.1's CHaP).

`configurator.sh` writes Conway-mainnet `maxTxExUnits` (16.5 M
mem, 10 B steps) into `alonzo-genesis.json` so the cluster's
budget matches what the validator was deployed against on
mainnet. `docker-compose.yaml` mounts the script for local
iteration without rebuilding the configurator image, and
`apply-params.sh` uses `--trace-level silent` so the validator's
runtime trace overhead is stripped.

Pin bumped to the merged main SHA of cardano-node-clients
(f578d6cf...).

Verified: asteria_player_ship_spawn_attempted_1 →
ship_spawn_built_1 → ship_spawned_1 on a single attempt with no
failures, on the local docker-compose cluster.
docs(skills): split AShard from Ewrap in debug-epoch-mismatch guide
After this branch's restructure, per-account reward application,
unspendable routing, and EWRAP-time registration filtering live in
AShard; only MIRs, refunds, and boundary close remain in Ewrap.
Update the Classify, Work Units, Source Files, and Instrumentation
tables so the bisection workflow points at the right work unit
(and module path) for each failure shape.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
feat(cardano): validate account_shards at startup
The divides-256 invariant on account_shards is enforced only via
debug_assert! in shard_key_range(), which is stripped in release
builds. An invalid TOML value (0, 3, 7, 100, ...) would deserialize
cleanly and silently corrupt key-range coverage.

Call validate_total_shards() at the top of CardanoLogic::initialize
and surface failures as ChainError::InvalidConfig so misconfiguration
fails the startup with a clear message.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
fix(cardano): make EpochEndAccumulate::undo no-op on skipped apply
apply has three early-return guards (idempotent repeat, out-of-order,
total_shards mismatch) that leave state untouched. undo unconditionally
subtracted the deltas and overwrote ashard_progress, so a rollback
following a skipped apply would underflow the u64 end.* fields and
clobber the cursor.

Capture prev_ashard_progress and set an applied flag during apply only
when state is actually mutated; undo early-returns when !applied and
restores from the snapshot. Same pattern as EpochWrapUp/EpochStatsUpdate.

Also broaden any_epoch_state to vary ashard_progress so the existing
roundtrip proptests for EpochWrapUp and EpochTransition exercise the
Some(_) → None → Some(_) path their apply/undo introduced earlier in
this branch (previously only None → None was covered). Add a dedicated
epoch_end_accumulate_roundtrip proptest covering all four progress
shapes and all three skip branches.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>