feat: gate heavy solver JSON, field traceability API, GUI rod/export depth

- C: emit profiles/diagnostics/fourier only when enable flags are set; null otherwise
- API: fieldTraceability on case parse/default and solve; fix GET /solve/default options
- Tests: golden fingerprint, quality gates, C diagnostics invariants; cardQa mean empty guard
- Makefile: test-solver-sanitize ASan/UBSan target; README and COMPUTE_PLAN updates
- GUI: taper weight/MTS/guides/sinker round-trip, rod catalog, solver output toggles,
  results (profiles/diagnostics/Fourier/traceability), engineering checks and tabs
- Restore canonical WellName in base-case for regression; trace TaperGuidesCountArray

Made-with: Cursor
This commit is contained in:
2026-04-16 23:19:00 -06:00
parent 10f6ae1c2b
commit 64e9d31373
39 changed files with 1318 additions and 369 deletions

View File

@@ -1,6 +1,6 @@
SHELL := /bin/bash
.PHONY: run down logs test smoke
.PHONY: run down logs test smoke test-solver-sanitize
run:
docker compose up --build
@@ -16,6 +16,14 @@ test:
cd gui-ts && npm test
./solver-c/test_solver
# ASan/UBSan regression for solver-c (rebuilds a throwaway binary under solver-c/)
test-solver-sanitize:
cd solver-c && gcc -std=c99 -fsanitize=address,undefined -g -O1 \
-Iinclude \
src/solver_common.c src/json_stdin.c src/trajectory.c src/solver_diagnostic.c \
src/solver.c src/solver_fea.c src/solver_fourier.c \
tests/test_solver.c -lm -o test_solver_sanitize && ./test_solver_sanitize
smoke:
@echo "Checking API health..."
@for i in {1..30}; do \