What's New · 27 June 2026

NAVAL·SEM v1.0.0 — The LTS Release

LTS fsQCA APA 7th Reporting Schema Freeze 174+ Tests
Released 27 June 2026 · Semantic version 1.0.0 · CC BY-NC-ND 4.0
🏁

Long-Term Support (LTS) milestone reached

v1.0.0 completes the dependency-ordered feature roadmap begun at v0.2. All public result schemas are now frozen under semantic versioning — no field removals or renames in patch or minor releases. This is the build to cite in your methods section.

fuzzy-set Qualitative Comparative Analysis (fsQCA)
app/fsqca.py · POST /fsqca · New schemas: NecessityEntry, TruthTableRow, FsQCAConfigTerm, FsQCASolution, FsQCAResult

NAVAL-SEM v1.0 ships a complete fsQCA engine — calibration, necessity analysis, truth table construction, and Quine-McCluskey Boolean minimisation, all in a single API call.

  • Calibration — direct method with user-supplied crossover and thresholds; fuzzy-set membership scores returned per case.
  • Necessity analysis — coverage and consistency for each condition and its negation against the outcome; Ragin (2008) necessity threshold applied.
  • Truth table — all 2ⁿ configurations, raw and net coverage, consistency per row; automatic trimming of configurations below frequency_cutoff.
  • Quine-McCluskey minimisation — complex, parsimonious, and intermediate solution types, each with raw/unique coverage and consistency per term.
  • Bubble-chart outputBubbleChartPoint[] for XY coincidence visualisation of fuzzy-set membership in the frontend.
POST /fsqca — endpoint reference
Accepts outcome, conditions, calibration params, and analysis options
// Minimal request body { "outcome": "HighPerformance", "conditions": ["LeaderSupport", "Resources", "Training"], "data": "base64encodedCSV...", "calibration": { "method": "direct", "crossover": 0.5, "thresholds": [0.05, 0.95] }, "frequency_cutoff": 1, "consistency_cutoff": 0.8, "solution_type": "complex" // or "parsimonious" | "intermediate" } // Response excerpt { "necessity": [{ "condition": "LeaderSupport", "coverage": 0.81, "consistency": 0.92, "necessary": true }], "solutions": [{ "term": "LeaderSupport*Resources", "raw_coverage": 0.64, "unique_coverage": 0.19, "consistency": 0.91 }], "bubble_chart": [{ "x": 0.82, "y": 0.75, "size": 3, "label": "case_4" }] }
Submission-ready Word (.docx) export
app/report.py · POST /report · Aggregates all prior analysis engines into publication-quality tables

The new reporting engine reads from any completed analysis run and renders journal-submission-ready APA 7th edition tables directly to a .docx file, downloadable from the UI's Downloads tab.

  • Measurement model table — loadings, AVE, CR, Cronbach's α, with asterisk significance notation.
  • Discriminant validity table — Fornell-Larcker matrix formatted with √AVE on the diagonal; HTMT matrix on a second sheet.
  • Structural model table — path coefficients, bootstrap CIs, p-values, Cohen's f², R²; standardised and unstandardised columns side-by-side.
  • Indirect effects table — mediation paths with bootstrapped 95% CIs and two-tailed significance.
  • All tables use APA 7 style: no vertical rules, horizontal rules at head/foot of table only, 12-pt Times New Roman body.
🔒
Public result models frozen — stable API surface
schemas.py · model_config = ConfigDict(extra="ignore") on all frozen result models

All public result schemas are now frozen for semantic versioning. Field names, types, and required status cannot change in patch or minor releases. New optional fields may be added; nothing may be removed or renamed. Integrations built on v1.0.x will continue to work on v1.y.z.

ModelStatusSince
ModelResultFROZENv1.0.0
BootstrapResultFROZENv1.0.0
ModerationResultFROZENv1.0.0
IPMAResultFROZENv1.0.0
NCAResultFROZENv1.0.0
NCAESSEResultFROZENv1.0.0
FIMIXResultFROZENv1.0.0
PLSPOSResultFROZENv1.0.0
MGAResultFROZENv1.0.0
ModMediationResultFROZENv1.0.0
FsQCAResultFROZENv1.0.0
ScaleDevelopmentResultFROZENv1.0.0
CVIResultFROZENv1.0.0

No breaking changes

v1.0.0 is a forward-only additive release. All v0.9 API calls work unchanged. The only behaviour difference: schemas.py models now carry model_config = ConfigDict(extra="ignore"), which means unexpected fields in a request body are silently discarded rather than raising a 422. This is a strictness relaxation, not a breaking change.

New endpoints

Add POST /fsqca and POST /report to your integration. Both follow the same request/response pattern as existing endpoints: multipart JSON body, synchronous response, error on 422.

New files introduced in this release:

app/fsqca.py app/report.py POST /fsqca POST /report

Updated files:

app/schemas.py app/main.py .github/workflows/release.yml static/index.html