feat(go): fixture capture + characterization framework (M3) #12

Merged
kacerr merged 1 commits from feat/m3-fixture-capture into main 2026-05-06 23:29:49 +02:00
Owner

Summary

  • 98 PII-free JSON fixtures captured from the live Python implementation, covering all 10 pure-domain functions (M2.1–M2.9) and 10 reconcile branch-coverage cases (M2.10).
  • Capture pipeline: scripts/capture_fixtures.py (function dispatcher) + scripts/scrub_fixtures.py (deterministic SHA-256 PII scrubber) + scripts/_fixture_seeds.py (seed registry with synthetic names only).
  • Go parity test runner under //go:build parity: go/tests/parity/parityio.go shared loader + 11 test packages (10 pure + 1 reconcile), all green.
  • make go-parity, make go-test-all, make capture-fixtures Makefile targets.
  • go/tests/fixtures/README.md: refresh workflow and PII audit guide.

Test plan

  • make go-build — clean
  • make go-test — all M2 unit tests green, no parity tests run
  • make go-parity — all 11 parity packages green (98 fixtures)
  • make go-lint — clean (both with and without -tags=parity)
  • PII audit: no real member names in committed fixtures
## Summary - 98 PII-free JSON fixtures captured from the live Python implementation, covering all 10 pure-domain functions (M2.1–M2.9) and 10 reconcile branch-coverage cases (M2.10). - Capture pipeline: `scripts/capture_fixtures.py` (function dispatcher) + `scripts/scrub_fixtures.py` (deterministic SHA-256 PII scrubber) + `scripts/_fixture_seeds.py` (seed registry with synthetic names only). - Go parity test runner under `//go:build parity`: `go/tests/parity/parityio.go` shared loader + 11 test packages (10 pure + 1 reconcile), all green. - `make go-parity`, `make go-test-all`, `make capture-fixtures` Makefile targets. - `go/tests/fixtures/README.md`: refresh workflow and PII audit guide. ## Test plan - [x] `make go-build` — clean - [x] `make go-test` — all M2 unit tests green, no parity tests run - [x] `make go-parity` — all 11 parity packages green (98 fixtures) - [x] `make go-lint` — clean (both with and without `-tags=parity`) - [x] PII audit: no real member names in committed fixtures
kacerr added 1 commit 2026-05-06 23:26:40 +02:00
feat(go): fixture capture + characterization framework (M3)
All checks were successful
Deploy to K8s / deploy (push) Successful in 7s
67d2f11d7c
Closes M3.1–M3.6.  Parity safety net proving Go output matches Python
for every ported pure-domain function (M2.1–M2.9) and reconcile (M2.10).

Capture pipeline:
- scripts/capture_fixtures.py: calls each Python function with seeded
  inputs, emits JSON fixtures to stdout (never writes files directly).
- scripts/scrub_fixtures.py: deterministic PII scrubber — SHA-256
  pseudonyms for member names, digit-preserving hashes for VS/account/
  bank_id, name-sweep in message text.  Idempotent; no salt.
- scripts/_fixture_seeds.py: handcrafted seeds for all 11 functions;
  synthetic names throughout (no real roster members).
- scripts/capture_all_fixtures.sh: convenience wrapper for full corpus
  regeneration outside of make.

Fixture corpus (98 files, all PII-free):
- go/tests/fixtures/pure/<func>/<case>.json — 10 function directories.
- go/tests/fixtures/reconcile/<NN>_<case>.json — 10 branch-coverage
  cases: greedy, overpayment credit, proportional remainder, even-split,
  out-of-window, exception override, other: purpose, junior ?, multi-
  person+month fan-out, unmatched.

Go parity tests (//go:build parity):
- go/tests/parity/parityio.go: generic LoadDir/RunAll helpers + typed
  In/Out struct pairs for all 10 pure functions; Envelope decoder for
  int/float/none disambiguation.
- 10 pure-function test packages + bespoke reconcile test with per-cell
  float tolerance (math.Abs <= 0.01 for `paid` values).

Makefile: go-parity, go-test-all, capture-fixtures targets.
go/tests/fixtures/README.md: refresh workflow + PII audit guide.

Gate: make go-test green, make go-parity green (11/11 packages),
      make go-lint clean (parity tag), make go-build clean.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
kacerr merged commit 57518a8a68 into main 2026-05-06 23:29:49 +02:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kacerr/fuj-management#12