docs: stale-reference sweep — engine rename, Dockerfile, ADR-0007 errata#311
docs: stale-reference sweep — engine rename, Dockerfile, ADR-0007 errata#311lgahdl wants to merge 9 commits into
Conversation
|
Nice cleanup! The new text references Since this section cross-references those files and shows the |
3653ce8 to
4e69f91
Compare
4e69f91 to
f61b04a
Compare
b8aeb1c to
d94a4bd
Compare
0eb2ace to
9457e82
Compare
d94a4bd to
6db87ec
Compare
9457e82 to
ff77942
Compare
b4734ce to
e15aa66
Compare
ff77942 to
d7227ad
Compare
e15aa66 to
4c508ec
Compare
d7227ad to
09a7c78
Compare
4c508ec to
6f83ed6
Compare
09a7c78 to
24d9f1b
Compare
Introduce the world-neutral half of the poll loop in nexum_sdk::keeper: a ConditionalSource trait (one watch in, one outcome out, generic over the host, no venue-transport pre-abstraction), a Tick carrying the dispatch instant, and the RetryAction (try-next-block / backoff / drop) whose effects the Retrier runs through the gate and watch-set stores. RetryAction moves out of shepherd-sdk; the CoW crate re-exports it so no module rewires. shepherd-sdk keeps classify_api_error as the CoW errorType table but returns the keeper action, and encodes two fixes in the one classification path: classify_poll_error maps an unrecognised revert selector with a structured payload to DontTryAgain instead of re-polling every block forever, and DuplicatedOrder (both spellings) classifies as already-submitted - the run records the submitted: receipt and keeps the watch rather than dropping every future tranche. classify_submit_error widens the table to the whole CowApiError surface and gives Backoff its producer: a rate-limit fault with server guidance gates the watch on the epoch clock. cow::run composes the loop: watch-set scan -> gate check -> source poll -> PollOutcome dispatch, driving submission through the existing CowApiHost seam with the journal as the idempotency guard and the retry ledger as the failure dispatch. Acceptance tests run against the composed shepherd-sdk-test MockHost as integration tests; no module is rewired yet.
RpcError.data is now Bytes; the test helper takes raw Vec<u8> and wraps it (Vec -> Bytes is O(1)).
The run logged through the LoggingHost seam, which the guest tracing capture cannot observe - module tests proving behaviour identity for keeper ports assert on tracing events. Route the submit-path diagnostics through the tracing macros with the wording the legacy twap poll loop established, and give ConditionalSource a defaulted label so shared log lines attribute the strategy that produced them.
Reduce strategy.rs to decode and evaluate: log decoding persists watches through the keeper watch set, and the getTradeableOrderWithSignature evaluation moves behind ConditionalSource. The hand-rolled gate keys, watch-update lifecycle, submitted: markers, and submit-retry dispatch are deleted in favour of cow::run over the keeper stores and retry ledger, still on the legacy CowApiHost seam. The MockHost dispatch tests are untouched - the behaviour-identity proof for the port.
Rework MockLocalStore to mirror the runtime store's shape: namespaced views over one shared row map, so identical key strings in sibling namespaces never collide, plus store-wide entry and byte limits that span namespaces the way one database file does. Fault injection stays per-view.
Script per-call venue behaviour where MockCowApi replays one response: a strictly-draining queue of submit outcomes with a configurable steady-state fallback, per-route response sequences whose final entry sticks (a terminal order status persists across re-polls), and venue fault injection that overrides both without consuming them. MockHost grows a defaulted venue type parameter so the composed host carries either mock on the same CowApiHost seam. Acceptance tests drive the keeper run across multi-tick retry, backoff, and outage scenarios, and module-shaped strategy code against status sequences.
…ata (#123, #108, #62) - deployment.md: replace the "planned for M5" Dockerfile sketch with a pointer to the real Dockerfile + docker.md; update nexum-runtime log directive examples - qa-signoff.md: nexum-engine → nexum-runtime in crate-dependency row - adr/0007: add errata noting the nexum-engine → nexum-runtime rename and the [patch.crates-io] retirement now that cowprotocol 0.1.0 is on crates.io Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TfSsJPYDQ1GQGbnSVFxATx
…tion.md 3.1 Review catches on the stale-reference sweep itself: - ADR-0007 errata and sdk.md Versioning both claimed cowprotocol is a clean 0.1.0 registry dependency "with no git override". The branch's own Cargo.toml pins 0.2.0 WITH an active [patch.crates-io] override to nullislabs/cow-rs (pending the hash-only OrderCreationAppData constructor release). Both now describe that state and point at the patch-block comment as the source of truth. - production.md 3.1 still shipped the "interim" hand-rolled Dockerfile recipe issue #123 flagged; replaced with a pointer to the real root Dockerfile and docs/deployment/docker.md. - 02-modules-events-packaging.md: un-garble the parenthetical the earlier rename made self-contradictory ("was module.toml in earlier drafts" -> "was nexum.toml"). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TfSsJPYDQ1GQGbnSVFxATx
24d9f1b to
a9c0c50
Compare
|
Good catch @jean-neiverth — confirmed, and you've identified the exact coordination knot: PR #220 owns that rename (it fixes So the landing order that keeps everything consistent:
The transient window where an operator could see two names only exists on the train branch between this PR landing and the next rebase — never on @mfw78 — this is one more reason to get #220 in ahead of the next train rebase; flagging the dependency here so it's visible when you sequence. |
02e6276 to
6076837
Compare
What
Docs-only sweep clearing stale references left over from the crate rename and the M5 Docker ship:
docs/deployment.md: replaces the "Dockerfile is planned for M5" placeholder and inline sketch with a pointer to the realDockerfile+docker-compose.ymlat the repo root, and todocs/deployment/docker.mdfor the full container workflow. Notes the image is published toghcr.io/nullislabs/shepherd:<tag>on every merged commit tomain.docs/production.md: replaces the "Dockerfile (interim)" multi-stage sketch and its status note with a pointer to the real rootDockerfile, plus thedocker build/rootdocker-compose.ymlbuild path.docs/qa-signoff.md:nexum-engine->nexum-runtimein thewarn(unused_crate_dependencies)check row.docs/adr/0007-upstream-protocol-logic-to-cow-rs.md: adds errata noting thecrates/nexum-engine->crates/nexum-runtime+crates/nexum-clirename, and that the workspace now pinscowprotocol = "0.2.0"from crates.io with a temporary[patch.crates-io]git override tonullislabs/cow-rspending a release with the hash-onlyOrderCreationAppDataconstructor.docs/sdk.md: updates the versioning section fromcowprotocol = "0.1.0"(no patch) to0.2.0with the same temporary patch override described above.docs/02-modules-events-packaging.md: fixes the manifest-naming aside, the pre-rename filename wasnexum.toml, notmodule.tomlas the earlier draft claimed.Historical ADRs, migration docs, and operations reports that describe what was true at the time are left as-is.
Why
Several docs pages still described planned-but-since-shipped work (the Dockerfile) or pre-rename crate/manifest names (
nexum-engine,nexum.toml), which misleads new operators and reviewers cross-referencing the ADRs against the current tree.Testing
Docs-only change, no build required. Verified crate names against the current workspace
Cargo.tomland confirmed the linkeddocs/deployment/docker.mdand rootDockerfile/docker-compose.ymlexist and match the described workflow.Closes #123, #108, #62