tcjs/docs/superpowers/specs/2026-05-15-rust-tauri-mvp-d...

3.4 KiB

Rust Tauri MVP Design

Goal

Build a Windows desktop MVP for the building-material radioactivity judgment system. The first version covers manual entry of repeated Ra-226, Th-232, and K-40 measurements, Rust-side uncertainty calculation, and display of IRa, Ir, relative uncertainty, and the acceptance conclusion.

Source Documents

  • temp/项目报价单.md: original Rust + Tauri quotation scope.
  • temp/项目报价单_B方案.md: C# alternative quotation.
  • temp/项目报价单_C方案.md: Python alternative quotation.
  • temp/不确定度公式.pdf: formula reference for calculation and judgment.

Technology Choice

Use Rust + Tauri + React + TypeScript. Rust owns the formula engine and later storage/reporting commands. React owns data entry and presentation. Ant Design is the preferred UI library because this app is form-heavy and table-heavy.

MVP Scope

Included:

  • Manual entry of repeated measured values for Ra-226, Th-232, and K-40.
  • Configurable calibration parameters with defaults from the PDF table 3:
    • Ra: a = 0.916, U = 6.3%, k = 2
    • Th: a = 0.884, U = 6.9%, k = 2
    • K: a = 0.961, U = 6.7%, k = 2
  • A-type uncertainty:
    • n >= 6: sample standard deviation divided by sqrt(n).
    • 2 <= n < 6: range method using table 2 coefficients.
  • B-type uncertainty:
    • urB = U / k
    • uB = a * urB
  • Calibrated activity values:
    • C = measured * calibration_factor
  • Indices:
    • IRa = C_Ra / 200
    • Ir = C_Ra / 370 + C_Th / 260 + C_K / 4200
  • Combined nuclide uncertainty and index uncertainty.
  • Relative uncertainty and three-state conclusion:
    • both relative uncertainties <= 20%: OK
    • otherwise, if sample count is below 6: 请增加试验次数至 6 次
    • otherwise: 校准仪器后重新测量

Excluded from first pass:

  • SQLite history.
  • Excel import/export.
  • PDF report export.
  • Installer packaging.

These are second-stage modules after the formula path is verified.

Architecture

The repository root starts as a Rust library crate named ceramic-radioactivity. It exposes calculation data structures and a pure calculate_sample function. Tauri integration will call this function from a command, and the React UI will pass plain JSON data to the command.

Planned modules:

  • src/lib.rs: public exports.
  • src/calculator.rs: formula implementation.
  • src/domain.rs: input, output, calibration parameters, and conclusion types.
  • tests/calculator_tests.rs: formula behavior tests.

The front end will be added after Rust tests pass:

  • src-tauri: Tauri application shell.
  • ui: React + TypeScript + Ant Design UI.

Error Handling

The calculator returns validation errors for:

  • fewer than 2 measurements for any nuclide;
  • unequal measurement counts across nuclides;
  • non-finite numeric values;
  • missing range coefficient for the 2 <= n < 6 range method.

The UI displays validation failures without saving or exporting anything.

Testing

The Rust calculator is tested first. Tests cover:

  • mean and calibrated activity calculation;
  • A-type uncertainty for both standard-deviation and range methods;
  • default B-type uncertainty;
  • index calculation;
  • conclusion switching between OK, 请增加试验次数至 6 次, and 校准仪器后重新测量.

The first implementation target is a deterministic unit test based on hand-computed small input values, then a sample-shaped test using the PDF table 1 data.