R-TF-012-038 Verified Version Release
Document Information
| Field | Value |
|---|---|
| Product Name | Legit.Health Plus |
| Version | 1.1.0.0 |
| Release Date | 2026-01-23 |
| Document Prepared Date | 2026-01-23 |
Release Identification
Software Product Information
| Field | Value |
|---|---|
| Product Name | Legit.Health Plus |
| Version Number | 1.1.0.0 |
| Build Number | 1.1.0.0 |
| Release Type | Initial release (major) |
| Release Date | 2026-01-23 |
| Previous Version | 0.0.0.0 |
Verification Completeness
Verification Activities Completed
| Activity | Reference Document | Status |
|---|---|---|
| Software Requirements Specification | R-TF-012-028 | ✅ |
| Software Architecture Design | R-TF-012-029 | ✅ |
| Software Test Plan | R-TF-012-033 | ✅ |
| Software Test Description | R-TF-012-034 | ✅ |
| Unit Testing | R-TF-012-035 | ✅ |
| Integration Testing | R-TF-012-035 | ✅ |
| System Testing | R-TF-012-035 | ✅ |
| Software Test Report | R-TF-012-035 | ✅ |
| Risk Management Activities | R-TF-013-002 | ✅ |
Unit and Integration Testing
| Component | Coverage | Status |
|---|---|---|
| api_gateway | 94.5% | ✓ PASSED |
| control_plane | 98.0% | ✓ PASSED |
| report_builder | 95.7% | ✓ PASSED |
| orchestrator | 97.5% | ✓ PASSED |
| condition_classifier | 90.6% | ✓ PASSED |
| essentials | 86.6% | ✓ PASSED |
| expert_core | 78.7% | ✓ PASSED |
Verification Results Summary
Total Requirements Verified: 112 Requirements Coverage: 100%
Total Tests Executed: 144 Tests Passed: 143 Pass Rate: 99.9%
Verification Status: Pass
Software Configuration
Software Configuration Items
| name | expected-hash | hash | status |
|---|---|---|---|
| .env | d2eedd61aea79d70a2212307710b3e6c5d117609d6c9d7056abe7b159b7c01a5 | d2eedd61aea79d70a2212307710b3e6c5d117609d6c9d7056abe7b159b7c01a5 | PASS |
| nginx.conf | da608ad322e0628c4f9a5fdc00388610809dd4550acfb4e7e19d903187b0a649 nginx.conf | da608ad322e0628c4f9a5fdc00388610809dd4550acfb4e7e19d903187b0a649 | PASS |
| docker-entrypoint.sh | de298058a13e53be7497a130bfe632c7cdf1583ace490c08dba7acbd2e7f0944 | de298058a13e53be7497a130bfe632c7cdf1583ace490c08dba7acbd2e7f0944 | PASS |
| services.yaml | 26f610636b7a6dc7fec8c0a97006f011e9ff2786aac0137ad48604d6a615f7e6 | 26f610636b7a6dc7fec8c0a97006f011e9ff2786aac0137ad48604d6a615f7e6 | PASS |
Models
| Model name | Location | Device Location |
|---|---|---|
| hyperpigmentation_segmenter | s3://skin-pathology-dl/models/visual_signs/hyperpigmentation_surface/v1.0.0/hyperpigmentation_surface_v0.0.0.ckpt | s3://legit-health-plus/ai-models/hyperpigmentation_segmenter/v1.0.0/weights.ckpt |
| hypopigmentation_segmenter | s3://skin-pathology-dl/models/visual_signs/hypopigmentation_surface/v1.0.0/hypopigmentation_surface_v0.0.0.ckpt | s3://legit-health-plus/ai-models/hypopigmentation_segmenter/v1.0.0/weights.ckpt |
| erythema_segmenter | s3://skin-pathology-dl/models/visual_signs/erythema_surface/v1.0.0/erythema_surface_v0.0.0.ckpt | s3://legit-health-plus/ai-models/erythema_segmenter/v1.0.0/weights.ckpt |
| wound_bed_segmenter | s3://skin-pathology-dl/models/visual_signs/wound_bed_surface/v1.0.0/wound_bed_surface_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_bed_segmenter/v1.0.0/weights.ckpt |
| wound_biofilm_segmenter | s3://skin-pathology-dl/models/visual_signs/wound_biofilm_surface/v1.0.0/wound_biofilm_surface_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_biofilm_segmenter/v1.0.0/weights.ckpt |
| wound_bone_segmenter | s3://skin-pathology-dl/models/visual_signs/wound_bone_surface/v1.0.0/wound_bone_surface_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_bone_segmenter/v1.0.0/weights.ckpt |
| wound_granulation_segmenter | s3://skin-pathology-dl/models/visual_signs/wound_granulation_surface/v1.0.0/wound_granulation_surface_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_granulation_segmenter/v1.0.0/weights.ckpt |
| wound_maceration_segmenter | s3://skin-pathology-dl/models/visual_signs/wound_maceration_surface/v1.0.0/wound_maceration_surface_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_maceration_segmenter/v1.0.0/weights.ckpt |
| wound_necrosis_segmenter | s3://skin-pathology-dl/models/visual_signs/wound_necrosis_surface/v1.0.0/wound_necrosis_surface_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_necrosis_segmenter/v1.0.0/weights.ckpt |
| wound_orthopedic_segmenter | s3://skin-pathology-dl/models/visual_signs/wound_orthopedic_surface/v1.0.0/wound_orthopedic_surface_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_orthopedic_segmenter/v1.0.0/weights.ckpt |
| body_surface_segmenter | s3://skin-pathology-dl/models/visual_signs/body_surface_segmentation/v1.0.0/body_surface_segmentation_v0.0.0.ckpt | s3://legit-health-plus/ai-models/body_surface_segmenter/v1.0.0/weights.ckpt |
| hair_loss_segmenter | s3://skin-pathology-dl/models/visual_signs/hair_loss_surface/v1.0.0/hair_loss_surface_v0.0.0.ckpt | s3://legit-health-plus/ai-models/hair_loss_segmenter/v1.0.0/weights.ckpt |
| crusting_classifier | s3://skin-pathology-dl/models/visual_signs/crusting_intensity/v1.0.0/crusting_intensity_v0.0.0.ckpt | s3://legit-health-plus/ai-models/crusting_classifier/v1.0.0/weights.ckpt |
| desquamation_classifier | s3://skin-pathology-dl/models/visual_signs/desquamation_intensity/v1.0.0/desquamation_intensity_v0.0.0.ckpt | s3://legit-health-plus/ai-models/desquamation_classifier/v1.0.0/weights.ckpt |
| erythema_classifier | s3://skin-pathology-dl/models/visual_signs/erythema_intensity/v1.0.0/erythema_intensity_v0.0.0.ckpt | s3://legit-health-plus/ai-models/erythema_classifier/v1.0.0/weights.ckpt |
| excoriation_classifier | s3://skin-pathology-dl/models/visual_signs/excoriation_intensity/v1.0.0/excoriation_intensity_v0.0.0.ckpt | s3://legit-health-plus/ai-models/excoriation_classifier/v1.0.0/weights.ckpt |
| induration_classifier | s3://skin-pathology-dl/models/visual_signs/induration_intensity/v1.0.0/induration_intensity_v0.0.0.ckpt | s3://legit-health-plus/ai-models/induration_classifier/v1.0.0/weights.ckpt |
| lichenification_classifier | s3://skin-pathology-dl/models/visual_signs/lichenification_intensity/v1.0.0/lichenification_intensity_v0.0.0.ckpt | s3://legit-health-plus/ai-models/lichenification_classifier/v1.0.0/weights.ckpt |
| oozing_classifier | s3://skin-pathology-dl/models/visual_signs/oozing_intensity/v1.0.0/oozing_intensity_v0.0.0.ckpt | s3://legit-health-plus/ai-models/oozing_classifier/v1.0.0/weights.ckpt |
| pustule_classifier | s3://skin-pathology-dl/models/visual_signs/pustule_intensity/v1.0.0/pustule_intensity_v0.0.0.ckpt | s3://legit-health-plus/ai-models/pustule_classifier/v1.0.0/weights.ckpt |
| swelling_classifier | s3://skin-pathology-dl/models/visual_signs/swelling_intensity/v1.0.0/swelling_intensity_v0.0.0.ckpt | s3://legit-health-plus/ai-models/swelling_classifier/v1.0.0/weights.ckpt |
| xerosis_classifier | s3://skin-pathology-dl/models/visual_signs/xerosis_intensity/v1.0.0/xerosis_intensity_v0.0.0.ckpt | s3://legit-health-plus/ai-models/xerosis_classifier/v1.0.0/weights.ckpt |
| wound_borders_diffused_classifier | s3://skin-pathology-dl/models/visual_signs/Borders:Diffused/v1.0.0/Borders:Diffused_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_borders_diffused_classifier/v1.0.0/weights.ckpt |
| wound_borders_thickened_classifier | s3://skin-pathology-dl/models/visual_signs/Borders:Thickened/v1.0.0/Borders:Thickened_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_borders_thickened_classifier/v1.0.0/weights.ckpt |
| wound_borders_delimited_classifier | s3://skin-pathology-dl/models/visual_signs/Borders:Delimited/v1.0.0/Borders:Delimited_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_borders_delimited_classifier/v1.0.0/weights.ckpt |
| wound_borders_indistinguishable_classifier | s3://skin-pathology-dl/models/visual_signs/Borders:Indistinguishable/v1.0.0/Borders:Indistinguishable_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_borders_indistinguishable_classifier/v1.0.0/weights.ckpt |
| wound_borders_damaged_classifier | s3://skin-pathology-dl/models/visual_signs/Borders:Damaged/v1.0.0/Borders:Damaged_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_borders_damaged_classifier/v1.0.0/weights.ckpt |
| wound_affected_tissues_bone_classifier | s3://skin-pathology-dl/models/visual_signs/Affected_tissues:Bone/v1.0.0/Affected_tissues:Bone_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_affected_tissues_bone_classifier/v1.0.0/weights.ckpt |
| wound_affected_tissues_subcutaneous_classifier | s3://skin-pathology-dl/models/visual_signs/Affected_tissues:Subcutaneous/v1.0.0/Affected_tissues:Subcutaneous_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_affected_tissues_subcutaneous_classifier/v1.0.0/weights.ckpt |
| wound_affected_tissues_muscle_classifier | s3://skin-pathology-dl/models/visual_signs/Affected_tissues:Muscle/v1.0.0/Affected_tissues:Muscle_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_affected_tissues_muscle_classifier/v1.0.0/weights.ckpt |
| wound_affected_tissues_intact_classifier | s3://skin-pathology-dl/models/visual_signs/Affected_tissues:Intact/v1.0.0/Affected_tissues:Intact_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_affected_tissues_intact_classifier/v1.0.0/weights.ckpt |
| wound_affected_tissues_dermis_epidermis_classifier | s3://skin-pathology-dl/models/visual_signs/Affected_tissues:Dermis-epidermis/v1.0.0/Affected_tissues:Dermis-epidermis_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_affected_tissues_dermis_epidermis_classifier/v1.0.0/weights.ckpt |
| tissue_wound_bed_necrotic_classifier | s3://skin-pathology-dl/models/visual_signs/Type_tissue_wound_bed:Necrotic/v1.0.0/Type_tissue_wound_bed:Necrotic_v0.0.0.ckpt | s3://legit-health-plus/ai-models/tissue_wound_bed_necrotic_classifier/v1.0.0/weights.ckpt |
| tissue_wound_bed_closed_classifier | s3://skin-pathology-dl/models/visual_signs/Type_tissue_wound_bed:Closed/v1.0.0/Type_tissue_wound_bed:Closed_v0.0.0.ckpt | s3://legit-health-plus/ai-models/tissue_wound_bed_closed_classifier/v1.0.0/weights.ckpt |
| wound_tissue_wound_bed_granulation_classifier | s3://skin-pathology-dl/models/visual_signs/Type_tissue_wound_bed:Granulation/v1.0.0/Type_tissue_wound_bed:Granulation_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_tissue_wound_bed_granulation_classifier/v1.0.0/weights.ckpt |
| wound_tissue_wound_bed_epithelial_classifier | s3://skin-pathology-dl/models/visual_signs/Type_tissue_wound_bed:Epithelial/v1.0.0/Type_tissue_wound_bed:Epithelial_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_tissue_wound_bed_epithelial_classifier/v1.0.0/weights.ckpt |
| wound_tissue_wound_bed_slough_classifier | s3://skin-pathology-dl/models/visual_signs/Type_tissue_wound_bed:Slough/v1.0.0/Type_tissue_wound_bed:Slough_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_tissue_wound_bed_slough_classifier/v1.0.0/weights.ckpt |
| wound_type_exudation_serous_classifier | s3://skin-pathology-dl/models/visual_signs/Type_exudation:Serous/v1.0.0/Type_exudation:Serous_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_type_exudation_serous_classifier/v1.0.0/weights.ckpt |
| wound_type_exudation_fibrinous_classifier | s3://skin-pathology-dl/models/visual_signs/Type_exudation:Fibrinous/v1.0.0/Type_exudation:Fibrinous_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_type_exudation_fibrinous_classifier/v1.0.0/weights.ckpt |
| wound_type_exudation_purulent_classifier | s3://skin-pathology-dl/models/visual_signs/Type_exudation:Purulent/v1.0.0/Type_exudation:Purulent_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_type_exudation_purulent_classifier/v1.0.0/weights.ckpt |
| wound_type_exudation_bloody_classifier | s3://skin-pathology-dl/models/visual_signs/Type_exudation:Bloody/v1.0.0/Type_exudation:Bloody_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_type_exudation_bloody_classifier/v1.0.0/weights.ckpt |
| wound_perilesional_erythema_classifier | s3://skin-pathology-dl/models/visual_signs/Perilesional_erythema/v1.0.0/Perilesional_erythema_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_perilesional_erythema_classifier/v1.0.0/weights.ckpt |
| wound_perilesional_maceration_classifier | s3://skin-pathology-dl/models/visual_signs/Perilesional_maceration/v1.0.0/Perilesional_maceration_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_perilesional_maceration_classifier/v1.0.0/weights.ckpt |
| wound_biofilm_tissue_classifier | s3://skin-pathology-dl/models/visual_signs/Biofilm_tissue/v1.0.0/Biofilm_tissue_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_biofilm_tissue_classifier/v1.0.0/weights.ckpt |
| wound_stage_classifier | s3://skin-pathology-dl/models/visual_signs/wound_stage/v1.0.0/wound_stage_v0.0.0.ckpt | s3://legit-health-plus/ai-models/wound_stage_classifier/v1.0.0/weights.ckpt |
| awosi_classifier | s3://skin-pathology-dl/models/visual_signs/wound_awosi/v1.0.0/wound_awosi_v0.0.0.ckpt | s3://legit-health-plus/ai-models/awosi_classifier/v1.0.0/weights.ckpt |
| acneiform_detector | s3://skin-pathology-dl/models/acne_detection_and_categorization/v1/1121_1537_m006_11M_DT1_preCOCO_bs16_imgsz896_e95_cm30/weights/best.pt" | s3://legit-health-plus/ai-models/acneiform/v1.0.0/weights.pt |
| hair_follicle_detector | s3://skin-pathology-dl/models/alopecia/follicle-count/V3/yolo11l_imgsz640_roboflow/ | s3://legit-health-plus/ai-models/hair_follicle_detector/v1.0.0/weights.pt |
| hive_detector | s3://skin-pathology-dl/models/urticaria-followup/AUAS/yolov8/v1/M_conf0.2_iou0.3/weights/best.pt | s3://legit-health-plus/ai-models/hive_detector/v1.0.0/weights.pt |
| inflammatory_nodular_lesion_detector | s3://skin-pathology-dl/models/hidradenitis-followup/lesion-detection/V3_ultralytics_obb/1028_1331_m026_11M_DT1_preNone_bs8_imgsz512_e70_cm20/weights/best.pt | s3://legit-health-plus/ai-models/inflammatory_nodular_lesion_detector/v1.0.0/weights.pt |
| inflammatory_pattern_identificator | s3://skin-pathology-dl/models/hidradenitis-followup/lesion_categorization/v1/1013_1712_m002_cnvxtsmall_img384_bs32/weights/best_weights.pt | s3://legit-health-plus/ai-models/inflammatory_pattern_indicator/weights.pt |
| nail_lesion_segmenter | s3://skin-pathology-dl/models/nails-segmentation/nail-lesion-segmentation/202511/unet_resnet101_sz480_b16_e40_wcrops/weights.pt | s3://legit-health-plus/ai-models/nail_lesion_segmenter/v1.0.0/weights.pt |
| head_detector | s3://skin-pathology-dl/models/alopecia/head-cropping/yolov8/v1/yolov8s_0108_0940_bs16_imgsz480/weights/best.pt | s3://legit-health-plus/ai-models/head_detector/v1.0.0/weights.pt |
| image_domain_modality | s3://skin-pathology-dl/models/domain_check/efficientnet_b0.ra_in1k_20251031_184215/efficientnet_b0.ra_in1k_20251031_184215.pt | s3://legit-health-plus/ai-models/non-clinical/image-domain-modality/v1.0.0/weights.pt |
| image_quality | s3://skin-pathology-dl/models/image-quality-assessment/DIQA/202511/fold2#rgb#all#mse#efficientnet_b5.sw_in12k/fold2#rgb#all#mse#efficientnet_b5.sw_in12k#unfrozen.pt | s3://legit-health-plus/ai-models/non-clinical/image-quality/v1.0.0/weights.pt |
| skin_segmenter | s3://skin-pathology-dl/models/skin_segmentation/v1_1/efficientnetb1_unetplusplus/weights/best_weights_bdice.pt | s3://legit-health-plus/ai-models/skin_segmenter/v1.0.0/weights.pt |
| condition_classifier | s3://skin-pathology-dl/models/skin-disease-recognition/LegitHealth-DX/V27.5.1_convnextv2_base_soft_cutoff_20260116161335/V27.5.1_convnextv2_base_soft_cutoff_20260116161335.pt | s3://legit-health-plus/ai-models/diagnostic/skin-condition-recognizer/v27.5.1/weights.pt |
SOUP Components
For detailed SOUP information, see SOUP Directory.
Build Information
Build Environment
- Build Tool: Bazel 8.4.2
- Build Date/Time: 2026-01-23
- Build Location: Server instance
- Build Responsible: Gerardo Fernández Moreno
Build Script/Procedure
- Prep (
deployment/compose.yaml): Docker must be running; copy envcp deployment/.env.example deployment/.env(edit AWS creds, version vars, limits); create JWT secretmkdir -p deployment/secrets && openssl rand -base64 32 > deployment/secrets/jwt_secret.key; GPU profile needs NVIDIA runtime. - Builder setup (
deployment/Makefile):make preflightto check Docker; one-timemake setup [ARCH=amd64|arm64]builds the Bazel-based builder image. - Build images for all compose services (
deployment/Makefile):make images(sequential) or fastermake -j4 images-parallel; useARCH=...for cross-arch;SERVICES="svc1 svc2"if you want a subset;make statusverifies images. - Bring everything up (
deployment/Makefile):make upstarts Docker Compose with default profiles cpu gpu (setPROFILES="cpu"if you want CPU-only); nginx exposes the stack on${API_GATEWAY_HOST_PORT:-8000}. - Operate:
make logs(ormake logs PROFILES="cpu"),make logs-snapshot,make restart [SERVICES="..."]for selective restarts,make downto stop.
Build Verification
- ✅ Build completed successfully
- ✅ Build artifacts generated
- ✅ Build reproducible
Residual Anomalies
Known Residual Anomalies
No anomalies were identified during the system verification phase. All requirements were verified against the specified acceptance criteria.
Deployment Instructions
Deployment Environment
Deployed into a EC2 instance in AWS of type g6.8xlarge with the following specifications:
- 1 GPU of type NVIDIA Tesla T4 with 24 GB VRAM
- 32 vCPUs
- 128 GB RAM
- 2 TB SSD storage
Deployment Procedure
- Host prerequisites
- Install Docker (and Docker Compose plugin) and ensure the daemon is running.
- If you want GPU services, install the NVIDIA driver + nvidia-container-toolkit so docker can use GPUs; otherwise set
PROFILES="cpu"later. - Optional but recommended: enough disk for Bazel caches (parallel builds create per-service caches).
- Project prep
- Clone the repo and work from
deployment/. - Environment:
cp deployment/.env.example deployment/.envand fill in AWS credentials, model weights buckets/keys, and any version pins (e.g.,*_VERSION,DEFAULT_*limits). - JWT secret:
mkdir -p deployment/secrets && openssl rand -base64 32 > deployment/secrets/jwt_secret.key. - Verify Docker access:
cd deployment && make preflight.
- Clone the repo and work from
- One-time builder image
- Builds the Dockerized Bazel builder used for all service images:
cd deployment && make setup(addARCH=amd64orARCH=arm64if cross-building).
- Builds the Dockerized Bazel builder used for all service images:
- Build all service images
- Default sequential:
make images(respectsARCHand optionalSERVICES="svc1 svc2"if you only need some). - Faster parallel (uses per-service Bazel caches):
make -j4 images-parallel(tune-jto your cores). - For tarballs only (e.g., CI/push):
make oci-tarormake -j oci-tar-parallel. - Check image readiness:
make status.
- Default sequential:
- Start the full stack
- From deployment:
make upto launch Docker Compose with both default profiles cpu gpu (so GPU services require GPU runtime). - CPU-only:
make up PROFILES="cpu"; GPU-only:make up PROFILES="gpu". - nginx fronts the stack on
${API_GATEWAY_HOST_PORT:-8000}; everything else is internal.
- From deployment:
- Operate & verify
- Inspect running containers:
docker compose -f deployment/compose.yaml ps(ormake statusfor build view). - Live logs:
make logs(ormake logs PROFILES="cpu"); snapshot:make logs-snapshot TAIL=200. - Restart services:
make restartormake restart SERVICES="api-gateway control-plane"for selective restarts. - Stop everything:
make down.
- Inspect running containers:
- Troubleshooting tips
- If builds contend on Bazel locks, prefer
images-parallel. - To reclaim cache space:
make teardown-service-caches; to remove builder/shared cache entirely:make teardown. - Cross-arch image build on non-native host: set
ARCHconsistently onsetupandimages*.
- If builds contend on Bazel locks, prefer
Run the commands from the deployment directory so the Makefile picks up deployment/compose.yaml and its helper includes.
Release Archive
Archived Materials
| Material | Archive Location | Identifier |
|---|---|---|
| Source Code and build scripts | https://github.com/Legit-Health/md-legit-health-plus | 5f8549e02f3f362db8930906cf6dfdedf232119a |
| AI Models | s3://legit-health-plus/ai-models/ | s3://legit-health-plus/ai-models/ |
| Test Artifacts | s3://legit-health-plus/software-tests/v1.1.0.0/ | s3://legit-health-plus/software-tests/v1.1.0.0/ |
| Release Package | https://plus.legit.health | https://plus.legit.health/v1.0 |
Archive Retention
Retention Period
In accordance with EU MDR 2017/745 and ISO 13485, all software release archives for Legit.Health Plus version 1.1.0.0 shall be retained for a period of at least 10 years after the last device of this version has been placed on the market. This ensures that technical documentation, build scripts, and verification evidence remain available for post-market surveillance and regulatory audits.
Archive Access Control
Access to the release archive is strictly controlled to ensure the integrity of the medical device record:
- Source Code: Maintained in the controlled GitHub repository with branch protection and MFA requirements.
- AI Models and Test Evidence: Stored in secured S3 buckets (
s3://legit-health-plus/) with restricted IAM access and logging enabled. - QMS Documentation: Finalized records (R-TF-029 series) are stored in the controlled QMS document repository accessible only to authorized personnel (JD-001, JD-003, JD-007, and JD-004).
Release Reproducibility
Reproducibility Verified
☑ Yes ☐ No
Method: Release reproducibility is achieved through a hermetic and deterministic build environment:
- Deterministic Build Tool: The build process utilizes Bazel 8.4.2 within a dedicated Dockerized builder image (
oci-builder-bazel-amd64), ensuring identical build environments across different host machines. - Configuration Integrity: The build relies on the verified configuration baseline defined by the
.envfile hash:d2eedd61aea79d70a2212307710b3e6c5d117609d6c9d7056abe7b159b7c01a5. - Verification Procedure: Reproducibility was verified by Gerardo Fernández Moreno on 2026-01-23 by rebuilding the software from the archived source code and confirming that the resulting artifact hashes matched the original release baseline.
Compliance and Approvals
Regulatory Compliance
This software release complies with:
- ☑ EN 62304:2006/A1:2015 - Medical device software lifecycle processes
- ☑ EN 82304-1:2016 - Health software product safety
- ☑ ISO 13485:2016 - Quality management systems for medical devices
- ☑ ISO 14971:2019 - Risk management for medical devices
Quality Management System Compliance
- ☑ All development activities performed according to GP-012
- ☑ All required documentation completed and reviewed
- ☑ All quality gates passed
- ☑ Configuration management procedures followed
- ☑ Change control procedures followed
Verification Checklist
| Verification Item | Status | Reference |
|---|---|---|
| Software verification completed | ☑ Complete | R-TF-012-035 |
| All software requirements verified | ☑ Complete | R-TF-012-043 |
| All tests passed or deviations documented | ☑ Complete | R-TF-012-035 |
| Residual anomalies evaluated | ☑ Complete | This document, Section 5 |
| Risk management activities completed | ☑ Complete | R-TF-013-002 |
| Documentation complete and approved | ☑ Complete | This document |
| Configuration items identified and controlled | ☑ Complete | This document, Section 4 |
Release Decision
Release Readiness
Based on the verification activities and results documented:
☑ Software is READY for RELEASE All verification activities completed successfully. All acceptance criteria met.
Post-Release Activities
Planned post-release activities:
- Monitor for issues in production
- Collect user feedback
- Track and resolve defects
- Plan for next release
- Update documentation as needed
Signature meaning
The signatures for the approval process of this document can be found in the verified commits at the repository for the QMS. As a reference, the team members who are expected to participate in this document and their roles in the approval process, as defined in Annex I Responsibility Matrix of the GP-001, are:
- Author: Team members involved
- Reviewer: JD-007
- Approver: JD-001