✔ D5.3.20 builds OOXML Word from the frozen act snapshot without external document dependencies (0.295001ms) ✔ F4 keeps report generation act-scoped while findings and inspection lifecycle remain independent (0.143439ms) ✔ D5.3.21/F4 stores configurable recipients without hardcoding addresses and retires Director delivery (0.917552ms) ✔ D5.3.21 creates an immutable act PDF and separates its delivery from the editable INF Word (0.210622ms) ✔ D5.3.21 keeps an auditable retryable outbox with explicit waiting states (0.560927ms) ✔ F4 SMTP can be administered in database while retaining environment fallback (0.150419ms) ✔ D5.3.21/F4 delivery stays act-scoped after multiple acts per inspection (0.28184ms) ✔ D5.3.22 revision ledger is retained as historical INF versioning (4.398318ms) ✔ F4 explicitly retires Director review approval and final-signature state (0.316654ms) ✔ F4 removes active Director endpoints but preserves historical signature evidence (0.2821ms) ✔ F4 replaces Director approval with editable INF then immutable GEDO IF officialization (0.142208ms) ✔ F4 delivery has no Director recipient while preserving company office and inspector copies (0.711827ms) ✔ F4 Director-retirement rollback reconstructs schema and RBAC contract without inventing deleted data (0.188258ms) ✔ F4 document workflow changes do not reopen acts or mutate finding history (0.175518ms) ✔ D5.3.23 records field discoveries as auditable provisional inventory records (1.286345ms) ✔ D5.3.23 only lets a mobile assigned inspector create during an active visit (0.324586ms) ✔ F1.1 preserves D5.3.23 field discovery while linking only to the current draft act (0.174145ms) ✔ D5.3.23 office review can approve match or reject without deleting historical objects (0.143959ms) ✔ D5.3.23 preserves immutable inspection history when matching an existing inventory object (0.11166ms) ✔ D5.3.24 stores parent area and operator as explicit non-overlapping temporal context (1.196528ms) ✔ D5.3.24 reconstructs previous context from immutable asset versions during migration (0.2022ms) ✔ D5.3.24 separates ordinary editing from an audited context transfer (0.380211ms) ✔ D5.3.24 closes the previous interval and appends the replacement without deleting history (0.311366ms) ✔ D5.3.24 temporal reconstruction resolves context by effective validity at the requested instant (0.128326ms) ✔ D5.3.25 creates an append-only verification event ledger and reconstructs prior history (1.180773ms) ✔ D5.3.25 records every office control-date change without replacing historical events (0.344516ms) ✔ D5.3.25 makes one field result immutable and appends its result event (0.204622ms) ✔ D5.3.25 preserves successive verification visits as separate historical attempts (0.162829ms) ✔ D5.3.25 exposes the complete verification history through finding detail and a dedicated endpoint (0.122506ms) ✔ D5.3.3 separates operational state from data quality and adds registry structures (7.456258ms) ✔ D5.3.3 keeps physical hierarchy separate from legal and organizational relations (2.766806ms) ✔ D5.3.3 only accepts OPERATOR relations for exclusive asset assignment (1.844447ms) ✔ D5.4.1 exports controller-visible selection views so Nest declaration build can name them (1.15939ms) ✔ D5.4 models type applicability and concrete Inventory exceptions separately (0.650814ms) ✔ D5.4 exposes only applicable catalog items and enforces the same rule on field creation (0.193336ms) ✔ D5.4 stores suggested and actual severity independently on the 1 to 10 scale (0.11777ms) ✔ D5.4 turns OTHER into an office proposal without rewriting the original finding (0.109057ms) ✔ D5.4 keeps contextual catalog administration in office permissions and audited routes (0.114915ms) ✔ D5.5 stores explicit Area and Operator context plus append-only checklist generations (0.970663ms) ✔ D5.5 exposes Area then active OPERATOR choices and a server-generated planning checklist (0.273358ms) ✔ D5.5 classifies antecedents overdue items and next controls while adding actionable assets automatically (0.181567ms) ✔ D5.5 treats manual additions as preventive and requires an auditable reason for exclusions (0.580006ms) ✔ D5.5/F4 keeps verification visits inside the Area Operator contract and start remains APK-only (0.280779ms) ✔ D5.5/F4 requires a current checklist before planning or start and keeps start under mobile policy (0.17053ms) ✔ D5.6.1 exposes controlled administrative password reset with the existing user-update permission (1.759537ms) ✔ D5.6.1 resets lockout revokes sessions and audits without persisting the password value (0.32766ms) ✔ D5.6.4/F4 generates inspection codes server-side with an annual transactional sequence (2.655176ms) ✔ D5.6.4/F4 creates one inspection from Area Operator, start and lead inspector without legacy title or end date (0.771449ms) ✔ D5.6.4 assigns the lead inspector and generates the checklist in the same creation transaction (0.238124ms) ✔ D5.6.4/F4 uses the same inspection numbering and start-only planning for verification visits (2.250126ms) ✔ D5.6 immutable act closure survives F4 as LOCKED then SEALED (1.235957ms) ✔ D5.6 preserves findings responses evidence and verification history as non destructive follow-up (0.460113ms) ✔ D5.6 keeps Inventory temporal context and contextual finding applicability independent and historical (0.378999ms) ✔ F4 preserves reviewed web planning and APK-only inspection execution (0.254518ms) ✔ D5.6 report generation remains attached to sealing each act (3.344449ms) ✔ F4 replaces Director approval with editable INF then immutable GEDO IF officialization (0.397407ms) ✔ F4 keeps auditable delivery, removes Director recipient and makes SMTP administrable (0.289062ms) ✔ D5.6 remains a historical closure baseline while Phase F introduces explicit migrations (0.525242ms) ✔ F1.1/F4 allows many acts per inspection while keeping only one draft at a time (1.042772ms) ✔ F1.1/F4 preserves exactly one frozen report per act instead of per inspection (0.232816ms) ✔ F4 seals one act without closing its parent inspection (0.411588ms) ✔ F4 closes an inspection only after every non-cancelled act is sealed (0.200506ms) ✔ F4 requires exactly one terminal company outcome before an act can be sealed (0.199666ms) ✔ F1.1/F4 keeps field-created Inventory linked only to the current draft act (1.029412ms) ✔ F1.2 stores one append-only administrative deadline ledger per Act (1.337452ms) ✔ F1.2 preserves ambiguous historical finding deadlines instead of collapsing them (0.124ms) ✔ F1.2 stores company responses and protected PDF metadata at Act level (0.096167ms) ✔ F1.2 deadline and company response DTOs reject invalid office input (4.580706ms) ✔ F1.2 derives administrative queues from Acts instead of replacing finding history (0.125301ms) ✔ F1.3 agrupa pendientes de campo por Acta y Hallazgo (0.947207ms) ✔ F1.3 expone el briefing para una inspección planificada (0.548969ms) ✔ F1.3 no usa el plazo del Hallazgo como plazo administrativo (0.290023ms) ✔ F4 removes the Survey execution controller from the active API (1.177319ms) ✔ F4 removes Survey execution and review permissions from active authorization (0.202219ms) ✔ F4 removes Survey execution DTOs together with the retired endpoint surface (1.497698ms) ✔ F4 drops Survey report tables without CASCADE so unexpected dependencies stop migration (0.427983ms) ✔ F4 rollback can reconstruct the historical Survey report integrity rules (2.065725ms) ✔ F4 removes Survey planning controllers from the active API (0.917031ms) ✔ F4 removes Survey planning permissions and their role bindings (0.208758ms) ✔ F4 rollback retains the former role-permission map only as a reversible migration path (0.146303ms) ✔ F4 removes Survey planning DTOs from the active code surface (0.860645ms) ✔ F4 drops Survey planning tables after removing their permissions (0.225524ms) ✔ F4 rollback can reconstruct historical Survey planning dates and asset references (0.169258ms) ✔ TokenService issues and verifies access tokens (9.027128ms) ✔ TokenService rotates opaque refresh credentials without storing plaintext (1.128814ms) ℹ tests 436 ℹ suites 0 ℹ pass 436 ℹ fail 0 ℹ cancelled 0 ℹ skipped 0 ℹ todo 0 ℹ duration_ms 66598.450181 ========== BUILD WEB CANDIDATA ========== #0 building with "default" instance using docker driver #1 [internal] load build definition from Dockerfile #1 transferring dockerfile: 334B done #1 DONE 0.0s #2 [internal] load metadata for docker.io/library/node:24-alpine #2 DONE 0.5s #3 [internal] load metadata for docker.io/library/nginx:alpine #3 DONE 0.7s #4 [internal] load .dockerignore #4 transferring context: 75B done #4 DONE 0.0s #5 [builder 1/7] FROM docker.io/library/node:24-alpine@sha256:50c8e8ca1d27439048670df5883f32d57cf81cff6233222c893fd0d9884cbd81 #5 resolve docker.io/library/node:24-alpine@sha256:50c8e8ca1d27439048670df5883f32d57cf81cff6233222c893fd0d9884cbd81 0.0s done #5 DONE 0.0s #6 [stage-1 1/3] FROM docker.io/library/nginx:alpine@sha256:72ba65eb42c10344912a84ff42408db7d34f2feb642204570ab8fc5ffd29f1d3 #6 resolve docker.io/library/nginx:alpine@sha256:72ba65eb42c10344912a84ff42408db7d34f2feb642204570ab8fc5ffd29f1d3 0.0s done #6 DONE 0.0s #7 [internal] load build context #7 transferring context: 1.22MB 0.0s done #7 DONE 0.1s #8 [builder 2/7] WORKDIR /app #8 CACHED #9 [builder 3/7] COPY package*.json ./ #9 CACHED #10 [builder 5/7] COPY tsconfig*.json vite.config.ts index.html ./ #10 CACHED #11 [stage-1 2/3] COPY nginx/default.conf /etc/nginx/conf.d/default.conf #11 CACHED #12 [builder 7/7] RUN npm run build #12 CACHED #13 [builder 4/7] RUN npm ci #13 CACHED #14 [builder 6/7] COPY src ./src #14 CACHED #15 [stage-1 3/3] COPY --from=builder /app/dist /usr/share/nginx/html #15 CACHED #16 exporting to image #16 exporting layers 0.0s done #16 exporting manifest sha256:8e9f8366bc74717e1d301433dd6b09b523db6e7b597eb4ac2f1fb05dcaa262e3 #16 exporting manifest sha256:8e9f8366bc74717e1d301433dd6b09b523db6e7b597eb4ac2f1fb05dcaa262e3 done #16 exporting config sha256:ba767c7801e6c8e6d587a9350a3b5b23f55ebe6cb10138371a826fa70f0ba175 done #16 exporting attestation manifest sha256:849ebc2f367dff660e0b6826edfee9762b074aa9bb4ee6f9172cd93e18850f9d 0.0s done #16 exporting manifest list sha256:a0e05698f017dfc919d8fa9881030a66450e5f0a5ba14693875c771b6a03dc11 0.0s done #16 naming to docker.io/library/dhv2-web:gitea-20260914_110058 done #16 unpacking to docker.io/library/dhv2-web:gitea-20260914_110058 0.1s done #16 DONE 0.2s ========== BACKUP PRE ========== database-before.dump: OK source-before.tar.gz: OK .env: OK previous.sha: OK target.sha: OK docker-before.txt: OK ========== FAST-FORWARD ========== 2388052 fix(api): align health version with package metadata 637c28d fix(web): align visible version with 0.23.0-2 fc0c62c docs(android): pin 0.19.2 server compatibility 3ab10b3 chore(web): bump version for deferred Acta urgency c6475c8 fix(api): clear legacy draft urgency during migration b757bf7 ci(gitea): run planning smoke API requests inside container e30e5d9 fix(android): align Acta flow and defer urgency to close d44ae04 test(android): align 0.19.1 release contract and record field review 78e9297 fix(android): align GPS and technical inventory field workflow 7fcb1d4 fix(android): harden field session and writes for 0.19.1 candidate Updating e55684b..2388052 Fast-forward .github/workflows/android.yml | 10 +- android-app/FINAL_RELEASE_CHECKLIST.md | 9 +- android-app/RELEASE.md | 48 ++++++++-- android-app/REVIEW_0_19_1.md | 49 ++++++++++ android-app/app/build.gradle.kts | 4 +- .../com/korexlabs/dhinspeccion/MainViewModel.kt | 100 ++++++++++---------- .../com/korexlabs/dhinspeccion/OperationTracker.kt | 16 ++++ .../com/korexlabs/dhinspeccion/data/DhMobile.kt | 31 +++--- .../dhinspeccion/data/FieldCoordinates.kt | 14 +++ .../dhinspeccion/data/FieldFindingsMobile.kt | 24 ++--- .../com/korexlabs/dhinspeccion/data/MobileActs.kt | 45 ++++----- .../dhinspeccion/data/MobileInspectionOpen.kt | 18 +--- .../dhinspeccion/data/MobileSessionCoordinator.kt | 32 +++++++ .../korexlabs/dhinspeccion/data/TechnicalValues.kt | 64 +++++++++++++ .../dhinspeccion/ui/FieldFindingScreen.kt | 4 + .../com/korexlabs/dhinspeccion/ui/LoginGate.kt | 12 ++- .../korexlabs/dhinspeccion/ui/MobileActsScreen.kt | 51 +++++----- .../dhinspeccion/ui/ModernMobileActsScreen.kt | 76 ++++++++------- .../korexlabs/dhinspeccion/ui/ModernVisitRoot.kt | 61 +++++------- .../dhinspeccion/ui/TechnicalFieldsButton.kt | 99 +++++++++++++++++++ .../korexlabs/dhinspeccion/FieldCoordinatesTest.kt | 24 +++++ .../dhinspeccion/FinalFieldFlowContractTest.kt | 2 +- .../dhinspeccion/MobileSessionCoordinatorTest.kt | 105 +++++++++++++++++++++ .../korexlabs/dhinspeccion/OperationTrackerTest.kt | 28 ++++++ .../korexlabs/dhinspeccion/ReleaseMetadataTest.kt | 4 +- .../korexlabs/dhinspeccion/TechnicalValuesTest.kt | 28 ++++++ api-v3/package-lock.json | 4 +- api-v3/package.json | 2 +- .../src/database/entities/inspection-act.entity.ts | 4 +- .../1790113800000-f6-1-act-urgency-at-lock.ts | 17 ++++ .../dto/create-inspection-act.dto.ts | 5 - .../dto/update-inspection-act.dto.ts | 6 -- .../src/inspection-acts/inspection-acts.service.ts | 5 +- .../dto/prepare-inspection-act.dto.ts | 7 ++ .../inspection-closing.controller.ts | 4 +- .../inspection-closing.service.ts | 34 ++++--- api-v3/src/version.ts | 2 +- .../unit/f4-act-web-lifecycle-contract.test.ts | 2 +- api-v3/test/unit/f4-android-act-contract.test.ts | 2 +- api-v3/test/unit/f4-health-metadata.test.ts | 6 +- api-v3/test/unit/f5-android-test-cut.test.ts | 4 +- .../test/unit/f6-3-mobile-act-finding-flow.test.ts | 32 +++++-- api-v3/test/unit/inspection-acts-dto.test.ts | 6 +- api-v3/test/unit/inspection-closing-dto.test.ts | 12 +++ scripts/ci-inspection-planning-smoke.sh | 44 +++++---- web-v2/package-lock.json | 4 +- web-v2/package.json | 2 +- web-v2/src/config/version.ts | 2 +- .../inspections/InspectionClosurePanel.tsx | 2 +- web-v2/src/lib/inspectionActF4Api.ts | 4 +- web-v2/src/pages/InspectionActEditorPage.tsx | 2 +- 51 files changed, 850 insertions(+), 322 deletions(-) create mode 100644 android-app/REVIEW_0_19_1.md create mode 100644 android-app/app/src/main/java/com/korexlabs/dhinspeccion/OperationTracker.kt create mode 100644 android-app/app/src/main/java/com/korexlabs/dhinspeccion/data/FieldCoordinates.kt create mode 100644 android-app/app/src/main/java/com/korexlabs/dhinspeccion/data/MobileSessionCoordinator.kt create mode 100644 android-app/app/src/main/java/com/korexlabs/dhinspeccion/data/TechnicalValues.kt create mode 100644 android-app/app/src/main/java/com/korexlabs/dhinspeccion/ui/TechnicalFieldsButton.kt create mode 100644 android-app/app/src/test/java/com/korexlabs/dhinspeccion/FieldCoordinatesTest.kt create mode 100644 android-app/app/src/test/java/com/korexlabs/dhinspeccion/MobileSessionCoordinatorTest.kt create mode 100644 android-app/app/src/test/java/com/korexlabs/dhinspeccion/OperationTrackerTest.kt create mode 100644 android-app/app/src/test/java/com/korexlabs/dhinspeccion/TechnicalValuesTest.kt create mode 100644 api-v3/src/database/migrations/1790113800000-f6-1-act-urgency-at-lock.ts create mode 100644 api-v3/src/inspection-closing/dto/prepare-inspection-act.dto.ts ========== BUILD PRODUCCIÓN ========== Image dhv2-api Building Image dhv2-web Building Image dhv2-migrate Building #1 [internal] load local bake definitions #1 reading from stdin 1.35kB done #1 DONE 0.0s #2 [migrate internal] load build definition from Dockerfile #2 transferring dockerfile: 595B done #2 DONE 0.0s #3 [web internal] load build definition from Dockerfile #3 transferring dockerfile: 407B done #3 DONE 0.0s #4 [web internal] load metadata for docker.io/library/node:24-alpine #4 ... #5 [web internal] load metadata for docker.io/library/nginx:alpine #5 DONE 0.2s #4 [migrate internal] load metadata for docker.io/library/node:24-alpine #4 DONE 0.2s #6 [web internal] load .dockerignore #6 transferring context: 148B done #6 DONE 0.0s #7 [migrate internal] load .dockerignore #7 transferring context: 147B done #7 DONE 0.0s #8 [web internal] load build context #8 DONE 0.0s #9 [migrate internal] load build context #9 DONE 0.0s #10 [migrate builder 1/7] FROM docker.io/library/node:24-alpine@sha256:50c8e8ca1d27439048670df5883f32d57cf81cff6233222c893fd0d9884cbd81 #10 resolve docker.io/library/node:24-alpine@sha256:50c8e8ca1d27439048670df5883f32d57cf81cff6233222c893fd0d9884cbd81 0.1s done #10 DONE 0.1s #11 [web stage-1 1/3] FROM docker.io/library/nginx:alpine@sha256:72ba65eb42c10344912a84ff42408db7d34f2feb642204570ab8fc5ffd29f1d3 #11 resolve docker.io/library/nginx:alpine@sha256:72ba65eb42c10344912a84ff42408db7d34f2feb642204570ab8fc5ffd29f1d3 0.1s done #11 DONE 0.1s #9 [migrate internal] load build context #9 ... #8 [web internal] load build context #8 transferring context: 1.23MB 0.1s done #8 DONE 0.1s #9 [migrate internal] load build context #9 transferring context: 2.61MB 0.3s done #9 DONE 0.3s #12 [web stage-1 2/3] COPY nginx/default.conf /etc/nginx/conf.d/default.conf #12 CACHED #13 [web builder 2/7] WORKDIR /app #13 CACHED #14 [web builder 3/7] COPY package*.json ./ #14 CACHED #15 [web builder 4/7] RUN npm ci #15 CACHED #16 [web builder 5/7] COPY tsconfig*.json vite.config.ts index.html ./ #16 CACHED #17 [web builder 6/7] COPY src ./src #17 CACHED #18 [web builder 7/7] RUN npm run build #18 CACHED #19 [web stage-1 3/3] COPY --from=builder /app/dist /usr/share/nginx/html #19 CACHED #13 [migrate builder 2/7] WORKDIR /app #13 CACHED #20 [migrate builder 3/7] COPY package*.json ./ #20 CACHED #21 [migrate builder 4/7] RUN npm ci #21 CACHED #22 [migrate builder 5/7] COPY nest-cli.json tsconfig.json ./ #22 CACHED #23 [migrate builder 6/7] COPY src ./src #23 DONE 0.2s #24 [web] exporting to image #24 exporting layers 0.0s done #24 exporting manifest sha256:15b625150665274f80bb75f1b9c89f5b7c5a3177ca19dd97c4c4d831ef6d0501 0.0s done #24 exporting config sha256:bb75764566f45722d26fedc2e7489b01fee987c36a3919b7c50a59d0d4003c67 0.0s done #24 exporting attestation manifest sha256:460c9215c7446620029d7064fd5a9a5ad6a3fe9688eaefcc3da5f668a858bdde 0.2s done #24 exporting manifest list sha256:5dfe1b3588504ea21f4dc8f1a62b5856b4b48f7de313a0c0d2242aa789495c71 0.0s done #24 naming to docker.io/library/dhv2-web:latest #24 naming to docker.io/library/dhv2-web:latest done #24 unpacking to docker.io/library/dhv2-web:latest 0.1s done #24 DONE 0.5s #25 [migrate builder 7/7] RUN npm run build #25 ... #26 [web] resolving provenance for metadata file #26 DONE 0.1s #25 [migrate builder 7/7] RUN npm run build #25 0.748 #25 0.748 > dhv2-api@0.29.0-2 build #25 0.748 > nest build #25 0.748 #25 DONE 17.0s #27 [migrate runner 3/7] WORKDIR /app #27 CACHED #28 [migrate runner 4/7] COPY package*.json ./ #28 CACHED #29 [migrate runner 2/7] RUN apk add --no-cache unzip #29 CACHED #30 [migrate runner 5/7] RUN npm ci --omit=dev && npm cache clean --force #30 CACHED #27 [api runner 3/7] WORKDIR /app #27 CACHED #28 [api runner 4/7] COPY package*.json ./ #28 CACHED #29 [api runner 2/7] RUN apk add --no-cache unzip #29 CACHED #31 [migrate runner 6/7] COPY --from=builder /app/dist ./dist #31 DONE 0.2s #32 [api runner 7/7] RUN mkdir -p /app/storage/asset-media/imports && chown -R node:node /app/storage #32 DONE 0.3s #33 [migrate] exporting to image #33 exporting layers #33 exporting layers 0.3s done #33 exporting manifest sha256:a033ecd35eaf16fa7b010b8c6938c30193d39698afaadbb4440f1a2b556b1f5b #33 exporting manifest sha256:a033ecd35eaf16fa7b010b8c6938c30193d39698afaadbb4440f1a2b556b1f5b 0.1s done #33 exporting config sha256:1e83d24727773012322785c76364a7b88fc2280343842ac3199c8a877662031c 0.0s done #33 exporting attestation manifest sha256:39dd978b8b39a25c62e1f2c64bc2b8d121f7fb066bd3fbd6e2a86f7174454ff1 #33 exporting attestation manifest sha256:39dd978b8b39a25c62e1f2c64bc2b8d121f7fb066bd3fbd6e2a86f7174454ff1 0.0s done #33 exporting manifest list sha256:56fbd9d6fa8de6c61c855c7d1b92656fc947fe7df340d5a7954e1a83651c5088 0.0s done #33 naming to docker.io/library/dhv2-migrate:latest done #33 unpacking to docker.io/library/dhv2-migrate:latest #33 unpacking to docker.io/library/dhv2-migrate:latest 0.2s done #33 DONE 0.7s #34 [api] exporting to image #34 exporting layers 0.3s done #34 exporting manifest sha256:d119421e73e4de4be5a657c4e0c7908e453f42dafa5edc3a274747693d893349 0.1s done #34 exporting config sha256:a771ceb481567df296ab27eca910fa466aab92cc8fdea0218e41eb32b978146c 0.0s done #34 exporting attestation manifest sha256:d5d52d4eb3fd70550f99db6e1f5e6397accb6ec57fbea549a9d79dad09d27518 0.0s done #34 exporting manifest list sha256:c86ab4dc337d1fa817c0c9c1c0f783a68068b4ffe1670ea5364c38da8a6dcec7 0.0s done #34 naming to docker.io/library/dhv2-api:latest 0.0s done #34 unpacking to docker.io/library/dhv2-api:latest 0.2s done #34 DONE 0.8s #35 [migrate] resolving provenance for metadata file #35 ... #36 [api] resolving provenance for metadata file #36 DONE 0.1s #35 [migrate] resolving provenance for metadata file #35 DONE 0.2s Image dhv2-migrate Built Image dhv2-web Built Image dhv2-api Built ========== MIGRACIONES ========== Container dhv2-db Running Container dhv2-db Waiting Container dhv2-db Healthy Container dhv2-migrate-run-a4a410304c0a Creating Container dhv2-migrate-run-a4a410304c0a Created > dhv2-api@0.29.0-2 migration:run > node dist/database/migration-cli.js run Applied migrations: 0 npm notice npm notice New major version of npm available! 11.19.0 -> 12.0.2 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2 npm notice To update run: npm install -g npm@12.0.2 npm notice Container dhv2-db Running Container dhv2-db Waiting Container dhv2-db Healthy Container dhv2-migrate-run-a0fcf0498b48 Creating Container dhv2-migrate-run-a0fcf0498b48 Created > dhv2-api@0.29.0-2 migration:show > node dist/database/migration-cli.js show Pending migrations: no npm notice npm notice New major version of npm available! 11.19.0 -> 12.0.2 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2 npm notice To update run: npm install -g npm@12.0.2 npm notice ========== RECREATE API + WEB ========== Container dhv2-api Recreate Container dhv2-api Recreated Container dhv2-web Recreate Container dhv2-web Recreated Container dhv2-api Starting Container dhv2-api Started Container dhv2-web Starting Container dhv2-web Started ========== HEALTH ========== {"status":"ok","service":"dhv2-api","api":"v3","version":"0.29.0-2","phase":"F6.1","database":"ok","time":"2026-09-14T14:03:13.928Z","latencyMs":3} ========== VERIFICACIÓN FINAL ========== NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS dhv2-api dhv2-api "docker-entrypoint.s…" api 5 seconds ago Up 2 seconds 127.0.0.1:3101->3000/tcp dhv2-db postgis/postgis:16-3.5 "docker-entrypoint.s…" db 4 weeks ago Up 4 weeks (healthy) 5432/tcp dhv2-web dhv2-web "/docker-entrypoint.…" web 4 seconds ago Up 2 seconds 127.0.0.1:8182->80/tcp Servicios críticos: OK database-before.dump: OK source-before.tar.gz: OK .env: OK previous.sha: OK target.sha: OK docker-before.txt: OK database-after.dump: OK deployed.sha: OK deployed-versions.txt: OK health.json: OK migrations.txt: OK docker-after.txt: OK ============================================================ DH V2 · DEPLOY OK ============================================================ Commit: 23880521d94f56a7ca6963a7616f77a5bac9a552 API: 0.29.0-2 WEB: 0.23.0-2 Backup: /root/DH_V2_BACKUPS/GITEA_DEPLOY_20260914_110058 ============================================================