Priority: P1 — Go side of the shared conformance/fault-injection matrix (twin of Amperstrand/tollgate-module-basic-rust#15).

オープン
#503 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
25/100
issue の種類
機能追加
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
github-actions, go, yaml
領域
backend, testing

調査の方向性

Read Rust issue #15 first and coordinate ownership of the shared YAML matrix in PRTA tests/conformance/; then inspect Go tests/cloud-lab/ and the CI workflow. Start by identifying how the existing cloud-lab tests launch backends and exercise mint interactions. Done means make conformance BACKEND=go emits verdicts for the same scenarios as Rust, with a nightly Go×Rust comparison artifact; G09 and the shared-spec dependency need coordination.

索引モデルが issue の本文から書いたものです。

説明

Priority: P1 — Go side of the shared conformance/fault-injection matrix (twin of Amperstrand/tollgate-module-basic-rust#15).

Problem

Go's correctness claims rest on per-flow unit tests and cloud-lab lanes that each backends' own doubles. No shared, invariant-based fault matrix runs identically against Go and Rust, so "which backend is safer" is currently an assertion, not a measurement — and Go's own regression surface (restart, ambiguous outcomes, aliases) is not systematically swept either.

Why it matters

The Go-vs-Rust architecture decision needs identical-scenario evidence. Also: several Go fixes (#266, #433, #440/#447) have repro-specific tests but no standing kill-at-boundary lanes, so regressions of the class (not the symptom) go unnoticed.

Current behavior

  • tests/cloud-lab/: smoke, swap fees, keyset rotation, mint failure, two-router autopay — real mints (cdk-mintd), no fault proxy, no process-kill matrix, Go-only.
  • PRTA: multi-backend venue support (--backend go|rust-basic|rust), physical + QEMU + SHC.
  • Rust #15 defines the shared matrix spec + mint-fault proxy.

Desired invariant (asserted per scenario, identical for both backends)

  1. No funds disappear (mint ledger ↔ wallet balance ↔ payment records reconcile).
  2. No value double-counted.
  3. No deterministic output re-exposed to a mint (proxy/mint records every blinded message).
  4. Customer receives service or recoverable value.
  5. Operator wallet spendable (no unbounded reserved proofs).
  6. Retries don't corrupt state.
  7. Restart converges (bounded time).

Proposed scope

  1. Co-own the matrix spec (YAML in PRTA) with the Rust issue; do not fork it.
  2. Implement Go-side enabling hooks if the assertions need them: stable payment-record output (G09), pending-proof visibility, blinded-message logging at the mint proxy.
  3. Wire the matrix into CI as a nightly lane (full) + PR lane (fast subset: duplicate, timeout-retry, restart-mid-payment, alias spellings).
  4. Publish the differential table per run; divergences become issues on the responsible repo.

Areas / files

PRTA tests/conformance/, Go tests/cloud-lab/ (proxy integration), CI workflow.

Acceptance criteria

  • make conformance BACKEND=go produces the verdict table; identical scenario set as Rust runs.
  • Nightly artifact: Go×Rust comparison visible at a glance.

Required tests / Failure-injection tests

This issue IS the harness.

Compatibility

Matrix must use only HTTP + mint + process control (backend-agnostic).

Dependencies

G09 (payment records) for scenario assertions; Rust #15 for the shared spec (coordinate authorship).

Out of scope

  • MT3000 physical runs (PRTA's own lanes; hardware campaign is Rust #16's scope — Go already has physical evidence).
主要言語
Go
スター
12
フォーク
14
平均マージ
3日 22時間
マージ済み PR(30日)
262

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

OpenTollGate/tollgate-module-basic-go のほかの issue

OpenTollGate/tollgate-module-basic-go の issue をすべて見る

似ている issue

Go の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。