feat(testnet): add yaci-store N2N consumer (#75)#76
Open
Conversation
Adds bloxbean/yaci-store as a long-running N2N consumer alongside oura, pinned by content digest. Reuses p1-configs for genesis files; H2 in-memory backing store; 30s healthcheck warm-up. Verified locally: yaci-store reaches relay tip in ~30s (slot=28, block=2 hash match), survives a relay1 restart with a clean reconnect (RestartCount=0), exits 143 on docker stop (JVM signal-exit, see R-006). Updates research.md R-006 and spec.md Assumptions to record the SIGTERM-143 behaviour (not exit 0 as initially extrapolated).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
bloxbean/yaci-storeas a long-running N2N consumer intestnets/cardano_node_master/docker-compose.yaml, alongside the existingouraservice. Pure protocol coverage — yaci-store is a widely-used Spring-Boot indexer in the Cardano ecosystem; running it under fault injection exercises a real consumer profile.Refs #75. Independent of #70 (different role — additive coverage, not the tx-generator read path).
Constitution hard gate (
findings_new ≤ baseline) is NOT met. Antithesis run 25039550313 on commit35bec7freports:Triage report: link (auth-scoped).
Compared to the most recent green main 1h baseline (06c0a64f, yest 11:12) which had 0 new findings, this branch adds 1 new finding directly attributable to yaci-store.
The finding
Property:
Correctness › No unexpected container exits › container: yaci-store, exit code: 1restart: alwayscauses a crash-loop)Root cause (from log example index 0)
What happens:
network/clog(Jammed) on links betweenrelay1.exampleandyaci-store.example,max_duration=2.75s.StartService.startthrows because the chain-handshake with the relay (interrupted by the earlier clog) failed to populate the chain "from point". Container exits 1.This is a fault-injection-sensitive startup race in yaci-store, not a SIGTERM/teardown issue. It is also unrelated to the SIGTERM-143 finding from local T021 — that was about teardown. This is about cold-start with adversarial network conditions.
Why it didn't show up locally: my T012/T013 verification used
just up(no fault injection). yaci-store reaches the relay tip in ~30s when the network is clean. With a 2.75s clog at vtime 17.8s, the handshake never completes and the JVM exits.Possible fixes (need decision before merge)
STORE_CARDANO_SYNC_START_SLOT=0plusSTORE_CARDANO_SYNC_START_BLOCKHASH=<computed_byron_genesis_hash>. Lowest-risk, closest to "fix-in-this-PR".restart: alwaysso a single crash kills yaci-store cleanly; combined with Use random staring points for adversary #1 if the first attempt still races. Removes the crash-loop noise but leaves the underlying brittleness.Design docs
Full speckit feature folder:
specs/004-yaci-store/.spec.md— 3 user stories (2×P1 + 1×P2), 10 FRs, 5 SCs.plan.md— Constitution check with one documented Principle I deviation.research.md— R-001..R-008.contracts/compose-topology.md— exact YAML stanza.quickstart.md— bring-up + every SC/FR verification command.tasks.md— T001..T044.What changed
Single source code touch:
testnets/cardano_node_master/docker-compose.yamlgains one service stanza:docker.io/bloxbean/yaci-store@sha256:aa67ee3c222eb2e6371b34dcda198ae9f2c32c90fcaf5ebdd1d8353e3205da87(upstream2.0.0, latest stable).relay1.example:3001, magic 42.p1-configsnamed volume.SPRING_DATASOURCE_URL=jdbc:h2:mem:mydb.wgeton/actuator/health.depends_on:configurator(must complete) andrelay1(must be started).No new component under
components/. Nopublish-imageschange.Local verification (T010..T015, T021)
updocker compose restart relay1just smoke-testend-to-enddocker pullof digestpublish-imagesPR check greenFindings (cumulative)
No unexpected container exitsfails 18×: yaci-store's startup chain-handshake is not tolerant of brief network faults on the relay link. Triage details above.research.mdR-006. Same family as #49.Constitution compliance
findings_new ≤ baseline): ❌ NOT met (1 > 0). Merge-blocked until resolved.