Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,20 @@

All notable changes to the FIVUCSAS platform. Dates are in ISO 8601 format. See each submodule's own `CHANGELOG.md` for granular per-repo changes.

## [2026-05-30] Stabilize-&-harden backlog — COMPLETE

The 2026-05-30 stabilize-&-harden roadmap (P0-1/P0-2/P0-2b, P1-1…P1-5, P2-1/P2-2/P2-3 + frontend tests) is fully shipped and, where applicable, deployed. Two prod deploys done (identity-core-api P1-5 Flyway repair; biometric-processor P0-2b canonical reproducible build).

- **P1-1** (identity-core-api #155/#156) — cross-tenant isolation ITs promoted to a REQUIRED, blocking CI gate (`-Dtest='*IntegrationTest,*IT'`, no `continue-on-error`, asserts they ran); 3 unit tests fixed to unblock `needs: test`.
- **P1-5** (identity-core-api #157, DEPLOYED) — Flyway chain DR-safe from a fresh DB: V29 resolves Default-Login + EMAIL_OTP by natural keys; V40 pkey collision + V40/V41 `COMMENT` syntax fixed; applies 71/71 from empty DB; one-time `flyway repair` (validate-on-migrate=true). Runbook: `identity-core-api/docs/RUNBOOK_FLYWAY_V29_REPAIR.md`.
- **P0-2b** (biometric-processor #125, DEPLOYED) — canonical reproducible bio build restored: digest-pinned base + lock-as-constraints; boots clean under prod `read_only`+`cap_drop` runtime; overlay demoted to fallback.
- **P2-2** (biometric-processor #124–#129) — CI honestly green (647 pass); masking removed.
- **P2-1** (spoof-detector #68) — results-integrity cleanup (leaked 100%/0.00%-ACER withdrawn, EER-on-test opt-in, weights heuristic; runtime unchanged).
- **P2-3** (parent #100) — `OPERATOR_SECURITY_RUNBOOKS.md` added.
- **Frontend tests** (web-app #133/#134) — +80 edge-case specs; suite 914 passing, 0 failing.

**Operator follow-ups:** (1) add the `Integration tests (Testcontainers)` required status check in identity-core-api branch protection; (2) execute `OPERATOR_SECURITY_RUNBOOKS.md`.

## [2026-05-30] Identity & account-linking (Phases 1-5) + ROOT role/user_type unification — SHIPPED

A person operating multiple tenant accounts no longer re-enrols biometrics per account, and the platform-owner tier is now unambiguous. All deployed 2026-05-30. Design of record: `identity-core-api/docs/IDENTITY_ACCOUNT_LINKING_DESIGN.md` + `IDENTITY_ROLE_UNIFICATION.md`. See each submodule CHANGELOG/CLAUDE.md for granular detail.
Expand Down
21 changes: 20 additions & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,25 @@
# FIVUCSAS — Product Roadmap

> Last updated: 2026-05-30 — **Identity & account-linking (Phases 1-5) + ROOT role/user_type unification SHIPPED** (see the "Identity & Account-Linking — SHIPPED 2026-05-30" section directly below). Prior 2026-05-29 admin-walkthrough wave (9 PRs) + the 2026-05-12 wave (11 PRs) + the phase-A/B/C/I closures remain valid below. Verbose tier breakdown: `archive/2026-05/reviews/INVESTIGATION_MASTER_2026-05-07.md`.
> Last updated / verified: 2026-05-30 — **stabilize-&-harden backlog COMPLETE** (see "Stabilize & harden — COMPLETE 2026-05-30" directly below) **plus** the same-day Identity & account-linking (Phases 1-5) + ROOT role/user_type unification ship (section after it). Prior 2026-05-29 admin-walkthrough wave (9 PRs) + the 2026-05-12 wave (11 PRs) + the phase-A/B/C/I closures remain valid below. Verbose tier breakdown: `archive/2026-05/reviews/INVESTIGATION_MASTER_2026-05-07.md`.

## Stabilize & harden — COMPLETE 2026-05-30

The 2026-05-30 stabilize-&-harden roadmap (P0-1/P0-2/P0-2b, P1-1…P1-5, P2-1/P2-2/P2-3) is **fully shipped and (where applicable) deployed**:

| Item | What shipped | Where |
|---|---|---|
| **P0-1 / P0-2 / P1-2 / P1-3 / P1-4** | earlier in this wave — see each repo's CHANGELOG/CLAUDE.md | api / bio / web |
| **P0-2b** | Canonical reproducible bio build RESTORED — both `Dockerfile` `FROM` lines digest-pinned (`python:3.12-slim@sha256:090ba77e…`) + known-good lock as pip constraints; boots clean (no segfault) under prod `read_only`+`cap_drop` runtime; `Dockerfile.liveness-overlay` demoted to fallback. **DEPLOYED.** | biometric-processor #125 |
| **P1-1** | Cross-tenant isolation ITs are now a REQUIRED CI gate — `integration-tests` actually RUNS the ITs (`-Dtest='*IntegrationTest,*IT'`), BLOCKS (no `continue-on-error`), asserts they executed; 3 unit tests fixed to unblock `needs: test`. | identity-core-api #155 / #156 |
| **P1-5** | Flyway chain DR-safe from a fresh DB — V29 resolves Default-Login flow + EMAIL_OTP by natural keys (was prod-only hardcoded UUIDs); fixed V40 pkey collision + V40/V41 `COMMENT 'a'||'b'` syntax; applies 71/71 from empty DB; shipped via one-time `flyway repair` (validate-on-migrate=true). Runbook: `identity-core-api/docs/RUNBOOK_FLYWAY_V29_REPAIR.md`. **DEPLOYED.** | identity-core-api #157 |
| **P2-1** | spoof-detector results-integrity cleanup — leaked 100%/0.00%-ACER synthetic numbers withdrawn, EER-threshold-on-test made opt-in, fuser weights marked heuristic. Runtime unchanged. | spoof-detector #68 |
| **P2-2** | bio CI honestly green (647 pass) — `--ignore` / `continue-on-error` masking removed; lazy DeepFace import; stack-dependent ITs env-gated, not hidden. | biometric-processor #124–#129 |
| **P2-3** | `OPERATOR_SECURITY_RUNBOOKS.md` added (operator-gated security-hygiene runbooks). | parent #100 |
| **Frontend tests** | +80 edge-case specs (linking / consent / switcher / formatApiError); suite **914 passing, 0 failing**. | web-app #133 / #134 |

**Operator follow-ups (2 remaining):**
1. Add the `Integration tests (Testcontainers)` REQUIRED status check in `identity-core-api` `main`-branch protection (so the P1-1 gate can't be merged around).
2. Execute the steps in parent `OPERATOR_SECURITY_RUNBOOKS.md` (P2-3 — operator-gated hygiene).

## Identity & Account-Linking (Phases 1-5) + ROOT unification — SHIPPED 2026-05-30

Expand Down
2 changes: 1 addition & 1 deletion biometric-processor
2 changes: 1 addition & 1 deletion identity-core-api
Submodule identity-core-api updated 2 files
+14 −0 CHANGELOG.md
+16 −0 CLAUDE.md
2 changes: 1 addition & 1 deletion spoof-detector
Submodule spoof-detector updated 81 files
+20 −19 README.md
+1 −1 ROADMAP.md
+21 −8 RUNBOOK_PAPER_PREP.md
+37 −0 SECURITY.md
+1 −1 docs/SPOOF_DETECTOR_BROWSER_READINESS.md
+0 −0 docs/archive/SUBDOMAIN_MIGRATION.md
+9 −8 paper/README.md
+1 −1 paper/archive/outline_v1_pre_paper.md
+34 −0 paper/figures/WITHDRAWN_in_house_synthetic_results.md
+28 −7 paper/figures/build_tables.py
+0 −2 paper/figures/results_in_house_clean_hybrid.csv
+0 −267 paper/figures/results_in_house_clean_hybrid.json
+0 −2 paper/figures/results_in_house_clean_image_only.csv
+0 −267 paper/figures/results_in_house_clean_image_only.json
+0 −2 paper/figures/results_in_house_clean_minifasnet_only.csv
+0 −267 paper/figures/results_in_house_clean_minifasnet_only.json
+0 −2 paper/figures/results_in_house_default_hybrid.csv
+0 −147 paper/figures/results_in_house_default_hybrid.json
+0 −2 paper/figures/results_in_house_default_image_only.csv
+0 −147 paper/figures/results_in_house_default_image_only.json
+0 −2 paper/figures/results_in_house_default_minifasnet_only.csv
+0 −147 paper/figures/results_in_house_default_minifasnet_only.json
+0 −2 paper/figures/results_in_house_replay_only_hybrid.csv
+0 −72 paper/figures/results_in_house_replay_only_hybrid.json
+0 −2 paper/figures/results_in_house_replay_only_image_only.csv
+0 −72 paper/figures/results_in_house_replay_only_image_only.json
+0 −2 paper/figures/results_in_house_replay_only_minifasnet_only.csv
+0 −72 paper/figures/results_in_house_replay_only_minifasnet_only.json
+0 −2 paper/figures/results_in_house_replay_only_v2_hybrid.csv
+0 −156 paper/figures/results_in_house_replay_only_v2_hybrid.json
+0 −2 paper/figures/results_in_house_replay_only_v2_image_only.csv
+0 −156 paper/figures/results_in_house_replay_only_v2_image_only.json
+0 −2 paper/figures/results_in_house_replay_only_v2_minifasnet_only.csv
+0 −156 paper/figures/results_in_house_replay_only_v2_minifasnet_only.json
+1 −1 paper/figures/results_kainyyy_all_n200_image_only.csv
+734 −732 paper/figures/results_kainyyy_all_n200_image_only.json
+1 −1 paper/figures/results_kainyyy_all_n200_minifasnet_only.csv
+734 −732 paper/figures/results_kainyyy_all_n200_minifasnet_only.json
+0 −11 paper/figures/results_kainyyy_train_n200_image_only.json
+0 −11 paper/figures/results_kainyyy_train_n200_minifasnet_only.json
+0 −16 paper/figures/table1_headline.md
+1,782 −0 paper/figures/weightcfg_in_house_replay_n100_calibrated.json
+1,782 −0 paper/figures/weightcfg_in_house_replay_n100_minifasnet_dominant.json
+1,782 −0 paper/figures/weightcfg_in_house_replay_n100_partial.json
+1,782 −0 paper/figures/weightcfg_in_house_replay_n100_uniform.json
+1 −1 paper/sections/00_abstract.md
+3 −3 paper/sections/01_introduction.md
+3 −3 paper/sections/04_method.md
+14 −14 paper/sections/05_calibration.md
+1 −1 paper/sections/06_experimental_setup.md
+40 −27 paper/sections/07_results.md
+43 −35 paper/sections/08_ablations.md
+3 −1 paper/sections/09_discussion.md
+2 −2 paper/sections/10_conclusion.md
+24 −0 paper/sections/11_reproducibility.md
+22 −10 src/infrastructure/fusion/multi_class_fuser.py
+4 −1 src/metrics/bootstrap.py
+37 −4 src/metrics/standard.py
+178 −39 tests/benchmark/ablation_leave_one_out.py
+2 −1 tests/benchmark/active_challenge.py
+6 −1 tests/benchmark/calibration_sweep.py
+48 −14 tests/benchmark/datasets/kainyyy_largecrowd.py
+5 −0 tests/benchmark/runner.py
+18 −1 tests/unit/metrics/test_iso30107.py
+2 −0 web/README.md
+20 −0 web/__tests__/BlinkAnalyzer.test.ts
+98 −0 web/__tests__/FlashReflectionAnalyzer.test.ts
+168 −0 web/__tests__/LandmarkPlanarityAnalyzer.test.ts
+66 −0 web/__tests__/fuser.test.ts
+212 −0 web/amispoof/PIPELINE_DESIGN.md
+5 −5 web/amispoof/README.md
+340 −3 web/amispoof/app.js
+22 −16 web/amispoof/index.html
+110 −3 web/src/application/SessionEngine.ts
+20 −2 web/src/domain/session.ts
+9 −0 web/src/domain/taxonomy.ts
+28 −0 web/src/index.ts
+19 −0 web/src/infrastructure/analyzers/BlinkAnalyzer.ts
+244 −0 web/src/infrastructure/analyzers/FlashReflectionAnalyzer.ts
+382 −0 web/src/infrastructure/analyzers/LandmarkPlanarityAnalyzer.ts
+30 −0 web/src/infrastructure/fusion/MultiClassFuser.ts
2 changes: 1 addition & 1 deletion web-app
Submodule web-app updated 1 files
+8 −0 CHANGELOG.md