Apr 29, 1-2 PM (21)
Apr 29, 2-3 PM (67)
Apr 29, 3-4 PM (25)
Apr 29, 4-5 PM (36)
Apr 29, 5-6 PM (16)
Apr 29, 6-7 PM (10)
Apr 29, 7-8 PM (14)
Apr 29, 8-9 PM (13)
Apr 29, 9-10 PM (17)
Apr 29, 10-11 PM (25)
Apr 29, 11-12 AM (29)
Apr 30, 12-1 AM (6)
Apr 30, 1-2 AM (8)
Apr 30, 2-3 AM (1)
Apr 30, 3-4 AM (6)
Apr 30, 4-5 AM (2)
Apr 30, 5-6 AM (8)
Apr 30, 6-7 AM (15)
Apr 30, 7-8 AM (17)
Apr 30, 8-9 AM (100)
Apr 30, 9-10 AM (19)
Apr 30, 10-11 AM (50)
Apr 30, 11-12 PM (120)
Apr 30, 12-1 PM (69)
Apr 30, 1-2 PM (45)
Apr 30, 2-3 PM (117)
Apr 30, 3-4 PM (29)
Apr 30, 4-5 PM (34)
Apr 30, 5-6 PM (9)
Apr 30, 6-7 PM (20)
Apr 30, 7-8 PM (23)
Apr 30, 8-9 PM (28)
Apr 30, 9-10 PM (13)
Apr 30, 10-11 PM (25)
Apr 30, 11-12 AM (15)
May 01, 12-1 AM (18)
May 01, 1-2 AM (15)
May 01, 2-3 AM (6)
May 01, 3-4 AM (7)
May 01, 4-5 AM (3)
May 01, 5-6 AM (5)
May 01, 6-7 AM (8)
May 01, 7-8 AM (15)
May 01, 8-9 AM (24)
May 01, 9-10 AM (17)
May 01, 10-11 AM (16)
May 01, 11-12 PM (17)
May 01, 12-1 PM (39)
May 01, 1-2 PM (32)
May 01, 2-3 PM (19)
May 01, 3-4 PM (16)
May 01, 4-5 PM (25)
May 01, 5-6 PM (11)
May 01, 6-7 PM (20)
May 01, 7-8 PM (22)
May 01, 8-9 PM (65)
May 01, 9-10 PM (15)
May 01, 10-11 PM (40)
May 01, 11-12 AM (61)
May 02, 12-1 AM (6)
May 02, 1-2 AM (11)
May 02, 2-3 AM (5)
May 02, 3-4 AM (8)
May 02, 4-5 AM (6)
May 02, 5-6 AM (2)
May 02, 6-7 AM (2)
May 02, 7-8 AM (14)
May 02, 8-9 AM (7)
May 02, 9-10 AM (8)
May 02, 10-11 AM (11)
May 02, 11-12 PM (7)
May 02, 12-1 PM (7)
May 02, 1-2 PM (3)
May 02, 2-3 PM (14)
May 02, 3-4 PM (9)
May 02, 4-5 PM (27)
May 02, 5-6 PM (9)
May 02, 6-7 PM (29)
May 02, 7-8 PM (11)
May 02, 8-9 PM (15)
May 02, 9-10 PM (1)
May 02, 10-11 PM (20)
May 02, 11-12 AM (18)
May 03, 12-1 AM (8)
May 03, 1-2 AM (1)
May 03, 2-3 AM (4)
May 03, 3-4 AM (7)
May 03, 4-5 AM (1)
May 03, 5-6 AM (4)
May 03, 6-7 AM (32)
May 03, 7-8 AM (5)
May 03, 8-9 AM (1)
May 03, 9-10 AM (3)
May 03, 10-11 AM (10)
May 03, 11-12 PM (11)
May 03, 12-1 PM (16)
May 03, 1-2 PM (11)
May 03, 2-3 PM (2)
May 03, 3-4 PM (2)
May 03, 4-5 PM (5)
May 03, 5-6 PM (0)
May 03, 6-7 PM (5)
May 03, 7-8 PM (6)
May 03, 8-9 PM (8)
May 03, 9-10 PM (15)
May 03, 10-11 PM (23)
May 03, 11-12 AM (17)
May 04, 12-1 AM (4)
May 04, 1-2 AM (4)
May 04, 2-3 AM (10)
May 04, 3-4 AM (9)
May 04, 4-5 AM (5)
May 04, 5-6 AM (6)
May 04, 6-7 AM (6)
May 04, 7-8 AM (28)
May 04, 8-9 AM (24)
May 04, 9-10 AM (43)
May 04, 10-11 AM (36)
May 04, 11-12 PM (61)
May 04, 12-1 PM (34)
May 04, 1-2 PM (48)
May 04, 2-3 PM (64)
May 04, 3-4 PM (33)
May 04, 4-5 PM (64)
May 04, 5-6 PM (49)
May 04, 6-7 PM (13)
May 04, 7-8 PM (31)
May 04, 8-9 PM (45)
May 04, 9-10 PM (9)
May 04, 10-11 PM (54)
May 04, 11-12 AM (24)
May 05, 12-1 AM (4)
May 05, 1-2 AM (5)
May 05, 2-3 AM (5)
May 05, 3-4 AM (11)
May 05, 4-5 AM (11)
May 05, 5-6 AM (50)
May 05, 6-7 AM (16)
May 05, 7-8 AM (36)
May 05, 8-9 AM (81)
May 05, 9-10 AM (68)
May 05, 10-11 AM (34)
May 05, 11-12 PM (72)
May 05, 12-1 PM (115)
May 05, 1-2 PM (118)
May 05, 2-3 PM (66)
May 05, 3-4 PM (91)
May 05, 4-5 PM (41)
May 05, 5-6 PM (26)
May 05, 6-7 PM (28)
May 05, 7-8 PM (73)
May 05, 8-9 PM (31)
May 05, 9-10 PM (18)
May 05, 10-11 PM (25)
May 05, 11-12 AM (17)
May 06, 12-1 AM (10)
May 06, 1-2 AM (5)
May 06, 2-3 AM (9)
May 06, 3-4 AM (22)
May 06, 4-5 AM (5)
May 06, 5-6 AM (13)
May 06, 6-7 AM (29)
May 06, 7-8 AM (11)
May 06, 8-9 AM (106)
May 06, 9-10 AM (24)
May 06, 10-11 AM (39)
May 06, 11-12 PM (45)
May 06, 12-1 PM (79)
May 06, 1-2 PM (1)
4,148 commits this week Apr 29, 2026 - May 06, 2026
Widen Exp.SignedTx to all Shelley-based eras
Reparameterise Cardano.Api.Experimental.SignedTx and its
SerialiseAsRawBytes instance on ShelleyLedgerEra era instead of
LedgerEra era. This lets SignedTx and its raw-bytes deserialisation
type for every Shelley-based era (Shelley through Dijkstra) without
widening the LedgerEra family or its Conway-onwards constraint
surface (EraCommonConstraints), which would have rippled into the
experimental tx builders.

Build paths (signTx, makeKeyWitness, convertTxBodyToUnsignedTx) take
Era era, whose constructors only cover Conway/Dijkstra, so they
remain Conway+ gated; for those eras LedgerEra era ~ ShelleyLedgerEra
era is provided by obtainCommonConstraints, so the SignedTx
constructor application elaborates with no further changes.

The motivation is unblocking cardano-cli's debug transaction view,
which handles InAnyShelleyBasedEra and needs to deserialise into
Exp.SignedTx era for pre-Conway tx files.
P2W1: Codex iteration 4 — CONVERGED
Iteration-3 fixes verified by Codex:
- synthesize_fail always writes status: fail when result.json is missing
- FAILURES counter correctly reflects synthesis-flipped verdicts
- Authored result.json is parse-validated before move; invalid JSON
  falls through to synthesize_fail
- No new blockers introduced

One cosmetic polish applied post-convergence: captured the adapter's
numeric exit code (cell_exit) and used it in the synthesized error
message (`adapter exited (exit code N) without writing result.json...`)
instead of the verdict word. Not structural; not a blocker.

Final state: 4 iterations to convergence; 6 substantive issues
addressed across iterations 1–3. The CI integration of the primitives
matrix into ecosystem-test.yml is deferred (deliberate, documented);
scripts/run-conformance.sh runs locally today and writes results in
the aggregator's expected shape so the CI wiring is mechanical when
adapter impls are validated against working SDK environments.

.codex-reviews/p2w1.md: iteration 4 verdict + final state recorded.

Milestone status: ready for human review.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
P2W1: Codex iteration 3 — close two gaps in the result.json contract
Iteration 2's synthesis path closed the original disappearing-cell bug
but introduced two new gaps Codex caught:

(P2.1) Zero-exit-no-result false PASS: if an adapter exited 0 but failed
to write result.json, the synthesized result took status from cell_status
(pass) — but missing result.json IS a contract violation regardless of
exit code. Fixed: replaced the synthesis branch with a synthesize_fail
helper that ALWAYS writes status: "fail" when result.json is missing,
and increments the FAILURES counter when synthesis flips pass → fail
so the runner's overall exit reflects reality.

(P2.2) Corrupt JSON disappearance: an adapter that wrote a partial or
unparseable result.json was blindly moved to .ci-results/, then silently
skipped by the aggregator (which `continue`s on parse failure). Fixed:
after the adapter writes result.json, the runner validates it parses as
JSON before moving; if it doesn't parse, falls through to synthesize_fail
with a clear error_summary pointing at the log file.

Both gaps were strict-mode side effects of iteration 2's strict-mode
design and don't change the milestone's deliberate deviations
(CI-wiring deferral remains documented).

.codex-reviews/p2w1.md: iteration 3 actions logged.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
P2W1: Codex iteration 2 — synthesize result.json on adapter startup failure
NEW P1: scripts/run-conformance.sh only moved an adapter-authored
result.json. When Deno/JBang/import setup fails before the adapter code
runs, no result.json gets written and the cell silently disappeared from
matrix.json. This conflicts with the runner-contract guarantee that every
attempted cell produces a result entry — silent skips are forbidden.

Fixed: when an adapter exits without writing result.json, the runner now
synthesizes one with tier: primitive, scenario id, primitive id, era,
framework, status: fail, captured duration_ms, and error_summary
pointing at the log file. The cell now appears in matrix.json regardless
of where in its lifecycle the adapter failed.

NEW P3: conformance/README.md:59 said "lands in P3 alongside use-case
scenarios" — stale after iteration 1 added the doc. Rewrote the link
description to reflect that Tier 1 is live in P2W1 and Tier 2 is
stubbed pending P3.

.codex-reviews/p2w1.md: iteration 2 actions logged.

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