Refactor code structure for improved readability and maintainability
@ -0,0 +1,225 @@
|
||||
{
|
||||
"results": [
|
||||
{
|
||||
"id": "B3",
|
||||
"result": "pass: two persisted evolutions; legacy root and two revisions unchanged"
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-01",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
201
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-02",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
201
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-03",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
409
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-04",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
201
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-05",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
201
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-06",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
201
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-07",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
201,
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-08",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-09",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
404
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-10",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
404
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-11",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-12",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
409
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-13",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200,
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-14",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200,
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-15",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
409
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-16",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200,
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-17",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-18",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200,
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-19",
|
||||
"result": "pass: stock accepted; copied/support/SMB/access/certificate/license rejected",
|
||||
"http": [
|
||||
201,
|
||||
409
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-20",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "C1",
|
||||
"result": "pass: observed InnoDB catalog wait; one equivalent persisted",
|
||||
"http": [
|
||||
201,
|
||||
409
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "C2",
|
||||
"result": "pass: deactivation first, waiting installation rejected",
|
||||
"http": [
|
||||
200,
|
||||
409
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "C3",
|
||||
"result": "pass: commercial identity fixed; exactly one optimistic admin update",
|
||||
"http": [
|
||||
409,
|
||||
201,
|
||||
200,
|
||||
409
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "C4a",
|
||||
"result": "pass: rollback of root/values/revisions, same creation UUID retry succeeds",
|
||||
"http": [
|
||||
500,
|
||||
201
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "C4b",
|
||||
"result": "pass: no partial installation or orphan revision; Resource unchanged",
|
||||
"http": [
|
||||
500
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "D",
|
||||
"result": "pass: exact capabilities v2, v3 OS, incompatible reads and unauthorized writes rejected",
|
||||
"http": [
|
||||
200,
|
||||
409,
|
||||
400,
|
||||
403
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "F",
|
||||
"result": "pass: all six gates closed; read/history/removal preserved",
|
||||
"http": [
|
||||
200,
|
||||
409
|
||||
]
|
||||
}
|
||||
],
|
||||
"databaseCases": 20,
|
||||
"companies": 15,
|
||||
"principal": {
|
||||
"people": 50,
|
||||
"assets": 50,
|
||||
"workstations": 50,
|
||||
"profiles": 50,
|
||||
"resourcesAtLeast": 53
|
||||
},
|
||||
"orphanRevisions": 0,
|
||||
"semanticSqlUnique": false,
|
||||
"productionActivated": false
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
{
|
||||
"integration": 0,
|
||||
"regressions": 0
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
▶ Cierre SO: matriz DB-SO, evolución, integridad y concurrencia real
|
||||
✔ B3 — evolución SQL doble conserva campos, valores, personalizaciones y revisiones (0.701606ms)
|
||||
✔ DB-SO-01 crear SO global (42.871762ms)
|
||||
✔ DB-SO-02 crear aplicación global mantiene su tipo (42.436359ms)
|
||||
✔ DB-SO-03 licencia global rechazada sin raíz persistida (21.908985ms)
|
||||
✔ DB-SO-04 instalación válida desde A (121.539228ms)
|
||||
✔ DB-SO-05 mismo producto desde B, instalación y licencia independientes (162.366074ms)
|
||||
✔ DB-SO-06 dos activos de A usan el mismo SO global (315.915072ms)
|
||||
✔ DB-SO-07 particulares y globales equivalentes conservan UUID e instalaciones (137.643465ms)
|
||||
✔ DB-SO-08 licencia de A válida y particular (117.865997ms)
|
||||
✔ DB-SO-09 licencia de A no puede vincularse desde B (157.376231ms)
|
||||
✔ DB-SO-10 SO excluido de ApplicationConfiguration (126.53987ms)
|
||||
✔ DB-SO-11 desactivar conserva instalaciones usadas (50.935631ms)
|
||||
✔ DB-SO-12 inactivo bloquea nueva instalación (108.274915ms)
|
||||
✔ DB-SO-13 historial y resolver conservan SO inactivo (29.59105ms)
|
||||
✔ DB-SO-14 versión instalada genera revisión sin cambiar producto (365.216789ms)
|
||||
✔ DB-SO-15 destino de instalación inmutable (223.936693ms)
|
||||
✔ DB-SO-16 retirada de instalación de producto inactivo (570.283255ms)
|
||||
✔ DB-SO-17 replay de creación no duplica ni reactiva (33.73864ms)
|
||||
✔ DB-SO-18 activar/desactivar preserva UUID, historial y referencias (177.183762ms)
|
||||
✔ DB-SO-19 solo stock: copia y otros tipos no adquieren globalidad (315.072142ms)
|
||||
✔ DB-SO-20 particular anterior incompleto sigue siendo editable y local (145.260533ms)
|
||||
✔ C1 — equivalentes concurrentes esperan el lock de catálogo y solo uno persiste (230.848842ms)
|
||||
✔ C2 — desactivación confirma primero y asociación revalida después de esperar (468.860536ms)
|
||||
✔ C3 — identidad, instalación, metadatos y desactivación concurrentes (288.411751ms)
|
||||
✔ C4a — fallo tras escribir raíz global revierte raíz, características y revisiones (76.707246ms)
|
||||
✔ C4b — fallo en revisión de instalación revierte instalación completa (146.788844ms)
|
||||
✔ D — contratos v2/v3, propósito, capabilities y autorización (248.643069ms)
|
||||
✔ F — cerrar gates conserva lectura, historial y retirada legítima (1726.083172ms)
|
||||
✔ Cierre SO: matriz DB-SO, evolución, integridad y concurrencia real (47759.450137ms)
|
||||
ℹ tests 29
|
||||
ℹ suites 0
|
||||
ℹ pass 29
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 49098.971929
|
||||
@ -0,0 +1,101 @@
|
||||
{
|
||||
"resourceId": "01a174ef-6735-710e-91a9-8bca64fef0dc",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"originalBindings": [
|
||||
{
|
||||
"id": "01a174ee-f269-72eb-9e8e-de87e373415b",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ee-f266-714f-ab98-ef87f8982b5f",
|
||||
"required": 0,
|
||||
"position": 0,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
},
|
||||
{
|
||||
"id": "01a174ee-f269-72eb-9e8e-ee01d44d287d",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ee-f267-762b-ae6a-91610b309fd2",
|
||||
"required": 0,
|
||||
"position": 1,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
},
|
||||
{
|
||||
"id": "01a174ee-f269-72eb-9e8e-f37d9579e79c",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ee-f267-762b-ae6a-6fbf417e65f2",
|
||||
"required": 0,
|
||||
"position": 2,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
},
|
||||
{
|
||||
"id": "01a174ef-66ee-7763-8065-815a5c68b2cf",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ef-66ae-77ec-8d19-1ef89cb4745c",
|
||||
"required": 0,
|
||||
"position": 3,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
}
|
||||
],
|
||||
"evolvedBindings": [
|
||||
{
|
||||
"id": "01a174ee-f269-72eb-9e8e-de87e373415b",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ee-f266-714f-ab98-ef87f8982b5f",
|
||||
"required": 0,
|
||||
"position": 0,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
},
|
||||
{
|
||||
"id": "01a174ee-f269-72eb-9e8e-ee01d44d287d",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ee-f267-762b-ae6a-91610b309fd2",
|
||||
"required": 0,
|
||||
"position": 1,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
},
|
||||
{
|
||||
"id": "01a174ee-f269-72eb-9e8e-f37d9579e79c",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ee-f267-762b-ae6a-6fbf417e65f2",
|
||||
"required": 0,
|
||||
"position": 2,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
},
|
||||
{
|
||||
"id": "01a174ef-66ee-7763-8065-815a5c68b2cf",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ef-66ae-77ec-8d19-1ef89cb4745c",
|
||||
"required": 0,
|
||||
"position": 3,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
},
|
||||
{
|
||||
"id": "01a174ef-6805-739a-8977-95d3221286d2",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ef-6804-747b-b42c-b10560610789",
|
||||
"required": 0,
|
||||
"position": 4,
|
||||
"sectionId": null
|
||||
},
|
||||
{
|
||||
"id": "01a174ef-6805-739a-8977-99e426769780",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ef-6804-747b-b42c-b4deee355760",
|
||||
"required": 0,
|
||||
"position": 5,
|
||||
"sectionId": null
|
||||
},
|
||||
{
|
||||
"id": "01a174ef-6805-739a-8977-9d7c602e1672",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ef-6804-747b-b42c-bb5123934ce6",
|
||||
"required": 0,
|
||||
"position": 6,
|
||||
"sectionId": null
|
||||
}
|
||||
],
|
||||
"originalResourcesUnchanged": true,
|
||||
"revisionsPreserved": 2,
|
||||
"evolutionRuns": 2,
|
||||
"customizationPreserved": true,
|
||||
"availabilityPreserved": true
|
||||
}
|
||||
@ -0,0 +1,202 @@
|
||||
{
|
||||
"date": "2026-10-25T20:00:24.598547+00:00",
|
||||
"head": "d2bf856c973419277f0b30f6437242cd82f7d720",
|
||||
"node": "v24.20.0",
|
||||
"pnpm": "11.25.0",
|
||||
"technical": [
|
||||
{
|
||||
"command": "pnpm --filter @metis/resources test (loopback permitido)",
|
||||
"exitCode": 0,
|
||||
"log": "technical/resources-test.log"
|
||||
},
|
||||
{
|
||||
"command": "script test Companies con --test-isolation=none",
|
||||
"exitCode": 1,
|
||||
"log": "technical/companies-detailed.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm --filter @metis/assets test",
|
||||
"exitCode": 0,
|
||||
"log": "technical/assets-test.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm --filter @metis/web test",
|
||||
"exitCode": 0,
|
||||
"log": "technical/web-test.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm build",
|
||||
"exitCode": 0,
|
||||
"log": "technical/build.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm typecheck",
|
||||
"exitCode": 2,
|
||||
"log": "technical/root-typecheck.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm lint",
|
||||
"exitCode": 1,
|
||||
"log": "technical/lint.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm check",
|
||||
"exitCode": 1,
|
||||
"log": "technical/check.log"
|
||||
},
|
||||
{
|
||||
"command": "Biome de dos TS nuevos y package.json",
|
||||
"exitCode": 0,
|
||||
"log": "technical/own-biome.log"
|
||||
},
|
||||
{
|
||||
"command": "ESLint de dos TS nuevos",
|
||||
"exitCode": 0,
|
||||
"log": "technical/own-eslint.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm --filter @metis/resources typecheck",
|
||||
"exitCode": 0,
|
||||
"log": "technical/resources-types.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm --filter @metis/companies typecheck",
|
||||
"exitCode": 0,
|
||||
"log": "technical/companies-types.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm --filter @metis/assets typecheck",
|
||||
"exitCode": 0,
|
||||
"log": "technical/assets-types.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm --filter @metis/web typecheck",
|
||||
"exitCode": 0,
|
||||
"log": "technical/web-types.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm --filter @metis/server typecheck",
|
||||
"exitCode": 0,
|
||||
"log": "technical/server-types.log"
|
||||
}
|
||||
],
|
||||
"verdict": "NO-GO: current software panel regression; concurrent UI not visually verified; general baseline failures recorded separately",
|
||||
"productionInspected": false,
|
||||
"productionActivated": false,
|
||||
"integration": {
|
||||
"integration": 0,
|
||||
"regressions": 0
|
||||
},
|
||||
"files": {
|
||||
"closure-results.json": "cc1bf4d8d95066d2d26a3a311c2faa47ca1708e740a81b3f5add4885334d1ab0",
|
||||
"commands.json": "3be89d419e1522940dca425372f8819cdccb2b105b51f52b47c3853f2b679797",
|
||||
"integration.log": "4a52945c8c985e66a61ad1fc09f4326bf11f990b78e5a30975110562029309ee",
|
||||
"legacy-evolution.json": "b42063be117206f78ecf52337ad51713f141c6a8483fc3b1e77004b7aa63e5f8",
|
||||
"migration-cli.log": "00b8b6468d8f1f12accbd3bda2ffb89b19026a4b79c54e2368e2f3e4b29e1511",
|
||||
"previous-ui/global-os-asset-current-os.png": "04d91e8ac9d5c63e88825316722810c2c591590542217f7fa4634c2264b97f2d",
|
||||
"previous-ui/global-os-create-review.png": "fa4a1819372f0cb9357448dbe997464197fe875efd8125bd65137d57811199e5",
|
||||
"previous-ui/global-os-created-detail.png": "63cdbdabbee8250c4b12a9db2bc4af6514edc3e5af2c749d1ced508f15b6422f",
|
||||
"previous-ui/global-os-empty.png": "4728d22812a5a35e869ec9d28e65411f8863686f9f2b9457b584bd7af7d749f1",
|
||||
"previous-ui/global-os-english-form.png": "49739898c7d44891eaadf1bed78f3900c4f114b8bfbf82dba2e4b78edde5178c",
|
||||
"previous-ui/global-os-identity-error.png": "861e3f4e75853c31d42cf29f363051fa3488ddb84f5fb90150d076f073b26370",
|
||||
"previous-ui/global-os-installation-history-global-link.png": "b6ccad18e28276e2f2039ab424e90812b0fe2cdf4742842ad6ad6af536c174b7",
|
||||
"previous-ui/global-os-list-dark-1024.png": "5246d3cde105d8922dd4e0bb8b677f7f24704864dffd6c0fa07bbcc0bd68dc62",
|
||||
"previous-ui/global-os-list-dark-1280.png": "011defd978d3525a93664f795c9d3ececd0809eea62038d4e47e7435a372e1c9",
|
||||
"previous-ui/global-os-list-dark-1600.png": "f67e198bb5af48beaaebd43f63c6daa9210befd69506b2be496e1a1d455fbb98",
|
||||
"previous-ui/global-os-list-dark-320.png": "fc6c5f6f89914a863200082079e2af563ab9537fdf87201082d5ef4e5d14c101",
|
||||
"previous-ui/global-os-list-dark-390.png": "3090626d0526ccaaa4b8b80ea0868dfe2451ee8644d498922e6ca11562609f38",
|
||||
"previous-ui/global-os-list-dark-768.png": "02ce9944bdd51afd79aa8c98f82d4e718fd3ea488e41fc2d376cb219d2d5e0fa",
|
||||
"previous-ui/global-os-list-error.png": "d9cf753aa3b8860682a384ce49cef16447df2e2e9201fe34e596e9d90a3e0c8f",
|
||||
"previous-ui/global-os-list-light-1024.png": "73a89add6661dd90c360dce567cb23d088e132c4fce396648f272435903d60c6",
|
||||
"previous-ui/global-os-list-light-1280.png": "7727d4a0339da4b2122a35f1fff5ac4814e16fcafc4485ddbca1a98a76ac2f40",
|
||||
"previous-ui/global-os-list-light-1600.png": "36f901f92df98cb4c9b612c29c3a773a7144c439d79e7975294507f3d81ee153",
|
||||
"previous-ui/global-os-list-light-320.png": "891cdc1875a12ed6275a2b4e69cdcd2a2a4aaf92a5922df9b17aa2ae6895412a",
|
||||
"previous-ui/global-os-list-light-390.png": "42a0a2f27df0f17b2d117ef5709344bc0cba2cfc40fc6a04652673bac0d175d3",
|
||||
"previous-ui/global-os-list-light-768.png": "54cee20c8cac78ef32e20ada33552829e3ea738b7f7791900ca013afeb97bf49",
|
||||
"previous-ui/global-os-list-loading.png": "36a4f535a36e594587470d50b6c06a9eccf2bb937f49ff0ea329cd98f519f55a",
|
||||
"previous-ui/global-os-mixed-picker.png": "1c4ac0eca0418d66934e44f21e383ddbdac26905857dbb666eb2bbe02cfdbd55",
|
||||
"previous-ui/global-os-mobile-form.png": "a031175d5e23ecf7dffa3972a13f4b0341df633d481889d52a9ca3c0f6e1f130",
|
||||
"previous-ui/global-os-no-results.png": "4c6169565fc8713e9dc2502c1d06c2f9cc7abf62d8495a8976fdcd3533c76049",
|
||||
"previous-ui/global-os-ordinary-detail.png": "8c0aaed14ee140cc92d60163f93c7a8eb470209db3c016b44ebf8e8312008583",
|
||||
"previous-ui/global-os-workplace-map-global-os.png": "88980eb4a4b94262b39b3c4a69b4775ccd9387b9159fe0a6ef191697125e2909",
|
||||
"previous-ui/global-os-workstation-current-os.png": "e596d8f2a71ba738de182ff20caa7e2e454d2cb462be8ab64a1bd0a589b6c04e",
|
||||
"previous-ui/report.json": "2def22f53cce8bc5ddb992326212862e52fd7247f489d249e3dbb03ca67376f2",
|
||||
"previous-ui/verification.json": "42d9505c605ca1e4cd4ad489c08443080e572db21004a35a520a0d354ae52d17",
|
||||
"regression-suites/operating-systems/commands.json": "e9ffa10814d008d45a9a071714ed0b1d7ce823e45eba51e4c1cf46c2fa4a9069",
|
||||
"regression-suites/operating-systems/integration.log": "84ddf07ec6983a5597d405c63d87383c0230a5f7933beb78234d0c8e0a79cfb2",
|
||||
"regression-suites/r2-3/commands.json": "e9ffa10814d008d45a9a071714ed0b1d7ce823e45eba51e4c1cf46c2fa4a9069",
|
||||
"regression-suites/r2-3/integration.log": "88d3c5ab276672c6a61b8345b63fb79b4706400d8c30af2307364b7c8d912c7c",
|
||||
"regression-suites/r2-4/commands.json": "e9ffa10814d008d45a9a071714ed0b1d7ce823e45eba51e4c1cf46c2fa4a9069",
|
||||
"regression-suites/r2-4/integration.log": "41fefc09235f2f9a601e4ffc5ae08c6683963b527693b28b25d1ef572b0b128e",
|
||||
"regression-suites/r2-5/commands.json": "e9ffa10814d008d45a9a071714ed0b1d7ce823e45eba51e4c1cf46c2fa4a9069",
|
||||
"regression-suites/r2-5/integration.log": "8c464be40411fa321fb1347fef4883eace08eeced9249d53115a584d3f832d61",
|
||||
"regression-suites/r2-6/commands.json": "e9ffa10814d008d45a9a071714ed0b1d7ce823e45eba51e4c1cf46c2fa4a9069",
|
||||
"regression-suites/r2-6/integration.log": "11d069bcf8d6e4eabfba4dfe2994cc6f8dc4a1f4e8ada1b33b13a3a700400d6c",
|
||||
"regressions.log": "d3b164d02c1fc7071f90217cd9ed3ab1de06ec4cb993a89ac7543f1862718bfc",
|
||||
"schema.json": "00a5a6e6bdd2fc21d4a59b8113785ee9c7d193a840667690343c5c5fcd647296",
|
||||
"technical/assets-test.log": "a927f4a908440e0e34f21989204f5cd304a089ee57322bcbf993066731a15786",
|
||||
"technical/assets-types.log": "29c5ee0f6b0b20dbb259b99d01276198c3d28190090706394608d4deda6d2c0b",
|
||||
"technical/build.log": "39e30833028fbeeb06ae6c8112ca1911b67d7abd297037b921a1af6f512fcddd",
|
||||
"technical/catalog.log": "ad948787e9d0f4e695ef48bc905347d0eec64d0af9977688b608f92a9bf0f232",
|
||||
"technical/check.log": "fb2d51a910873b8e65683a209859a656a692faa2b02f086b369b2d38c4c031bd",
|
||||
"technical/coincidences.log": "80156ede41737decab73fa335d0cc71dbf320635a7ef52d9224423d4a001e43f",
|
||||
"technical/companies-detailed.log": "f240c595ccd1644ec23498642b3bbbbd4c6d52a32aa938de653a65b575b4d8ea",
|
||||
"technical/companies-test.log": "e76f8daf8260a806dc0156f9ecbffb0c89d8defbd1cddcd898f34defd37a6f11",
|
||||
"technical/companies-types.log": "29c5ee0f6b0b20dbb259b99d01276198c3d28190090706394608d4deda6d2c0b",
|
||||
"technical/format.log": "6384edeeb7751d4254d1ab27f266e7e8ceac4e0a9ffb3ca24991afd8befd1bf1",
|
||||
"technical/integration-command.log": "f9cf09b1fcc7504596980256bb2212f868cc280ccaa32ecd3c992d5a2dfed978",
|
||||
"technical/lint.log": "526cd60a21c4b920d57e42e87290ee571b7593ad38f761510c3af364996db83f",
|
||||
"technical/operating-systems.log": "4b300dac9e217497dee2b8997daf579a09ecda2c0989c20b5a04cb12e6646238",
|
||||
"technical/own-biome.log": "f6094bf816e08645c4872b737ea97d1ba6305444d3ec69d644bc57aefd365694",
|
||||
"technical/own-eslint.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"technical/profiles.log": "405a6721a62e4269940fcf152c61f041ea98242bc7814f73ba55683a81cf6985",
|
||||
"technical/resources-test.log": "af55b1421bab3a23bcacfe980bddcac0c209918570d49e60848d956dd9269fab",
|
||||
"technical/resources-types.log": "29c5ee0f6b0b20dbb259b99d01276198c3d28190090706394608d4deda6d2c0b",
|
||||
"technical/root-typecheck.log": "02e53ca53ee6f872901bf9445730fedf6b96633922faf92340295aef48978dbf",
|
||||
"technical/server-types.log": "29c5ee0f6b0b20dbb259b99d01276198c3d28190090706394608d4deda6d2c0b",
|
||||
"technical/software-component.log": "31569d75b6d29ff963a93b6c0147f38e548a7bcf2994258e532911642bd33362",
|
||||
"technical/software.log": "a444d81ceb6565ac6db7f4c26f7946c4c48f07a5f999c7c3d9219ca0d830e9fa",
|
||||
"technical/tests.log": "1822508b22736b1ae30036c2603829fba954429baba102758fe56ba5a9f09e07",
|
||||
"technical/types.log": "e94314bb64c72174bcf3e71c89cb0fc5dff3584f5a3994e7f842628b34456348",
|
||||
"technical/web-test.log": "885f89448030a9261d3ead27adc6d9e717efdbad2992ba6ae5e137c4d585b1a0",
|
||||
"technical/web-types.log": "29c5ee0f6b0b20dbb259b99d01276198c3d28190090706394608d4deda6d2c0b",
|
||||
"working-tree-status.txt": "f0240942bcfd661a05b12384fb06b7369bc0fde11f9bedc7c4c3171684f04de3"
|
||||
},
|
||||
"sourceFiles": {
|
||||
"apps/server/src/global-operating-systems-closure.integration.test.ts": "771ccf735641dbd257569b4366f0ac70eb81d63cc729db2d5f4ed5e30358669a",
|
||||
"apps/server/src/global-operating-systems-legacy.fixture.ts": "45f10913233b328f157bd1d0d098f04dc8176aa263f368f9d3a80de98f537a19",
|
||||
"docs/architecture/cierre-tecnico-catalogo-global-sistemas-operativos.md": "5ad72a64a197220084ca4a792ff31c2a08d0c40c4d608c681a42712d24fb290d",
|
||||
"docs/auditorias/workplace-node-actions/01-inventario-entidades-acciones.md": "e7b8bfa8902b16ff22bd18598d48bcdf9cafcf53298f48b8ada631c0f006a36b",
|
||||
"docs/auditorias/workplace-node-actions/02-matriz-acciones.md": "5bfaf864392130853424363d1c8f8544ddfa06bc8ee7c8bef7fc67a1c1a6edbb",
|
||||
"docs/auditorias/workplace-node-actions/03-contrato-ui.md": "7f0bfc95e6ec5e3a948a8cfe98e7ed733d2172d7e47138850974ecb78b84616f",
|
||||
"docs/auditorias/workplace-node-actions/04-trazabilidad.md": "4ca33335e808103d36fa4990fc3a23cda3a1ce8fa9d1c7ae61dc8f1548f7a4d1",
|
||||
"modules/assets/src/web/assets/detail/ui/asset-history-dialog.tsx": "757b575359249cb6ee3191449430e8087fbaeb118f46e3456486e530e691b65e",
|
||||
"modules/companies/src/web/software-installations/shared/controllers/use-software-installation-editor-data.ts": "71fef135cf5b273d38ae23372d4d81e06ea0586f11d75148af195d9eeef5732d",
|
||||
"modules/companies/src/web/software-installations/shared/helpers/software-installation-options.ts": "12d0dab60c1aed5650e4f955273d4ec5d8f69478d5b5456b31b289b52f9e4449",
|
||||
"modules/companies/src/web/workstations/detail/controllers/use-workplace-node-actions.ts": "5311b5048bdba80cb616f048b570204f32c411b99d7c34246db3af337b43db34",
|
||||
"modules/companies/src/web/workstations/detail/helpers/workplace-node-actions.test.tsx": "301b38bfbaed11b6e25761751c276c4772b961d1c00fd4910a409e33eb057198",
|
||||
"modules/companies/src/web/workstations/detail/helpers/workplace-node-actions.ts": "360617bc875971ddee5928405627866a0f37b2f8672555a8448a943d55961cc7",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-asset-action-dialog.tsx": "76548ae75d060bf0556eb37cec8aa6984b8e976a93457311bb34e901a06c1b61",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-installation-editor-dialog.tsx": "6dcd900dad363eb354811c94b1b2851cfb11bc7014e05bb12912c8899535b0fd",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-node-action-dialogs.tsx": "5212e4b69914b655219740feeae1ddbf2bb557a75211cf087c09142886df65a6",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-node-actions-menu.tsx": "de9356258ac418eb81d1b79a75cc91f465eb700341093f159c1b379bfca6a6f0",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-node-unavailable-dialog.tsx": "d1653c1ea696c8ee371de56b11d96b087d0600f678098731cfd4d6a1cecf73a8",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-software-action-dialog.tsx": "004e54a1cc1386c4ca4a24773cd27fa867994e7a9348b249089a21b004de582c",
|
||||
"docs/architecture/implementacion-catalogo-global-sistemas-operativos.md": "af1e11f352f954eaa4ff32825ff02f6852b99d47adc62403bb5725edc511a1cb",
|
||||
"modules/assets/src/common/locales/en.json": "ea4529d517d5e64202a572eb812c68ac8f2a88816630793d6bc7bf1e9b0c27f6",
|
||||
"modules/assets/src/common/locales/es.json": "0a36b2693a5cc69d7f5ae12d8b814b34d3d59e921678522f87b98317185b5aac",
|
||||
"modules/assets/src/web/index.ts": "30a8c78828a2bad2707b129bb8c96c059915680a3e075618250fd0a2dcaf2332",
|
||||
"modules/companies/package.json": "4ec1fae0055094934c42e4e72c21488094e7da124e2bcc73729eebaba88dc146",
|
||||
"modules/companies/src/web/software-installations/history/ui/software-history-dialog.tsx": "2fed9ead7fceaddc4c4a17252ac43b3623b6a79af4ade3c9ca3c45aa1cc991df",
|
||||
"modules/companies/src/web/software-installations/list/ui/software-installations-panel.tsx": "c5395ac32b2b1f8c63cd9eafceac04d7f595d4a36de681bcb7f1c3df1dc0db32",
|
||||
"modules/companies/src/web/software-installations/shared/software.test.tsx": "d2c6b0430966a8d1ecc57ee47c5258815482e27136aa7510870f09ba6704c64a",
|
||||
"modules/companies/src/web/software-installations/shared/ui/software-installation-editor-dialog.tsx": "d89d4a6f793b4d615538e8d0bf3db7a23a63bafaaf52b7514414f8184d381620",
|
||||
"modules/companies/src/web/workstations/detail/helpers/workplace-map-model.ts": "bf25c7e88b8c8bf318c398986dbc08f3ec2f77eb739588555e711fe1e123cb4c",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-equipment-card.tsx": "e0eda9c6a7c39d731a172d776bafdbb47f33cdcdfc86e9eba01271742b146194",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-software-card.tsx": "034a1069c6f01104fc1c81f999ea06e16fab1a9b5633a355c0bea8afcad9a65b",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-visual-map-card.tsx": "aee738391e04ff12444fc0f02fdc0307cd9d34b8357a96628368951c911de1c6",
|
||||
"modules/companies/src/web/workstations/detail/ui/workstation-software-dialog.tsx": "9ec3268fd9b7ffbc4e092a131e37f6a7a3f6948a437f97b77e677c3b97daeea9",
|
||||
"package.json": "c86cf84959bf2c01e6cda2e7c85c03db48b535ab0b2f47432fb28e173ad5b30a",
|
||||
"scripts/resource-scope-test.py": "b4c06cf30ee7b8d6695119e32d2c3460af9b92a915aa366ea5ad22bdde36f0c7"
|
||||
}
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
Resource scope: scoped; pasos aplicados: ninguno.
|
||||
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 142 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 147 KiB |
|
After Width: | Height: | Size: 164 KiB |
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 155 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 147 KiB |
|
After Width: | Height: | Size: 147 KiB |
|
After Width: | Height: | Size: 153 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 163 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 149 KiB |
|
After Width: | Height: | Size: 169 KiB |
@ -0,0 +1,429 @@
|
||||
{
|
||||
"checks": [
|
||||
"empty-catalog",
|
||||
"identity-fields",
|
||||
"known-edition",
|
||||
"review-required",
|
||||
"identity-review-invalidation",
|
||||
"create-in-browser",
|
||||
"history",
|
||||
"server-rejects-product-transformation-form-preserved",
|
||||
"dialog-focus-return",
|
||||
"51-global-products",
|
||||
"cursor-pagination",
|
||||
"search-empty-recovery",
|
||||
"computed-text-contrast-light",
|
||||
"list-light-320-390-768-1024-1280-1600",
|
||||
"computed-text-contrast-dark",
|
||||
"list-dark-320-390-768-1024-1280-1600",
|
||||
"mobile-form-keyboard-close",
|
||||
"transport-error-retry",
|
||||
"initial-loading",
|
||||
"inactive-draft-in-browser",
|
||||
"english-form-labels-edition-options",
|
||||
"ordinary-public-projection",
|
||||
"asset-global-os-navigation",
|
||||
"installation-panel-and-history-global-os-navigation",
|
||||
"workstation-global-os-navigation",
|
||||
"map-click-opens-global-os-detail",
|
||||
"map-equipment-pointer-navigation",
|
||||
"mixed-picker-global-local-no-replacement"
|
||||
],
|
||||
"screenshots": [
|
||||
{
|
||||
"file": "global-os-empty.png",
|
||||
"sha256": "4728d22812a5a35e869ec9d28e65411f8863686f9f2b9457b584bd7af7d749f1"
|
||||
},
|
||||
{
|
||||
"file": "global-os-create-review.png",
|
||||
"sha256": "fa4a1819372f0cb9357448dbe997464197fe875efd8125bd65137d57811199e5"
|
||||
},
|
||||
{
|
||||
"file": "global-os-created-detail.png",
|
||||
"sha256": "63cdbdabbee8250c4b12a9db2bc4af6514edc3e5af2c749d1ced508f15b6422f"
|
||||
},
|
||||
{
|
||||
"file": "global-os-identity-error.png",
|
||||
"sha256": "861e3f4e75853c31d42cf29f363051fa3488ddb84f5fb90150d076f073b26370"
|
||||
},
|
||||
{
|
||||
"file": "global-os-no-results.png",
|
||||
"sha256": "4c6169565fc8713e9dc2502c1d06c2f9cc7abf62d8495a8976fdcd3533c76049"
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-light-320.png",
|
||||
"sha256": "891cdc1875a12ed6275a2b4e69cdcd2a2a4aaf92a5922df9b17aa2ae6895412a"
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-light-390.png",
|
||||
"sha256": "42a0a2f27df0f17b2d117ef5709344bc0cba2cfc40fc6a04652673bac0d175d3"
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-light-768.png",
|
||||
"sha256": "54cee20c8cac78ef32e20ada33552829e3ea738b7f7791900ca013afeb97bf49"
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-light-1024.png",
|
||||
"sha256": "73a89add6661dd90c360dce567cb23d088e132c4fce396648f272435903d60c6"
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-light-1280.png",
|
||||
"sha256": "7727d4a0339da4b2122a35f1fff5ac4814e16fcafc4485ddbca1a98a76ac2f40"
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-light-1600.png",
|
||||
"sha256": "36f901f92df98cb4c9b612c29c3a773a7144c439d79e7975294507f3d81ee153"
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-dark-320.png",
|
||||
"sha256": "fc6c5f6f89914a863200082079e2af563ab9537fdf87201082d5ef4e5d14c101"
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-dark-390.png",
|
||||
"sha256": "3090626d0526ccaaa4b8b80ea0868dfe2451ee8644d498922e6ca11562609f38"
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-dark-768.png",
|
||||
"sha256": "02ce9944bdd51afd79aa8c98f82d4e718fd3ea488e41fc2d376cb219d2d5e0fa"
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-dark-1024.png",
|
||||
"sha256": "5246d3cde105d8922dd4e0bb8b677f7f24704864dffd6c0fa07bbcc0bd68dc62"
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-dark-1280.png",
|
||||
"sha256": "011defd978d3525a93664f795c9d3ececd0809eea62038d4e47e7435a372e1c9"
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-dark-1600.png",
|
||||
"sha256": "f67e198bb5af48beaaebd43f63c6daa9210befd69506b2be496e1a1d455fbb98"
|
||||
},
|
||||
{
|
||||
"file": "global-os-mobile-form.png",
|
||||
"sha256": "a031175d5e23ecf7dffa3972a13f4b0341df633d481889d52a9ca3c0f6e1f130"
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-error.png",
|
||||
"sha256": "d9cf753aa3b8860682a384ce49cef16447df2e2e9201fe34e596e9d90a3e0c8f"
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-loading.png",
|
||||
"sha256": "36a4f535a36e594587470d50b6c06a9eccf2bb937f49ff0ea329cd98f519f55a"
|
||||
},
|
||||
{
|
||||
"file": "global-os-english-form.png",
|
||||
"sha256": "49739898c7d44891eaadf1bed78f3900c4f114b8bfbf82dba2e4b78edde5178c"
|
||||
},
|
||||
{
|
||||
"file": "global-os-ordinary-detail.png",
|
||||
"sha256": "8c0aaed14ee140cc92d60163f93c7a8eb470209db3c016b44ebf8e8312008583"
|
||||
},
|
||||
{
|
||||
"file": "global-os-asset-current-os.png",
|
||||
"sha256": "04d91e8ac9d5c63e88825316722810c2c591590542217f7fa4634c2264b97f2d"
|
||||
},
|
||||
{
|
||||
"file": "global-os-installation-history-global-link.png",
|
||||
"sha256": "b6ccad18e28276e2f2039ab424e90812b0fe2cdf4742842ad6ad6af536c174b7"
|
||||
},
|
||||
{
|
||||
"file": "global-os-workstation-current-os.png",
|
||||
"sha256": "e596d8f2a71ba738de182ff20caa7e2e454d2cb462be8ab64a1bd0a589b6c04e"
|
||||
},
|
||||
{
|
||||
"file": "global-os-workplace-map-global-os.png",
|
||||
"sha256": "88980eb4a4b94262b39b3c4a69b4775ccd9387b9159fe0a6ef191697125e2909"
|
||||
},
|
||||
{
|
||||
"file": "global-os-mixed-picker.png",
|
||||
"sha256": "1c4ac0eca0418d66934e44f21e383ddbdac26905857dbb666eb2bbe02cfdbd55"
|
||||
}
|
||||
],
|
||||
"measurements": [
|
||||
{
|
||||
"theme": "light",
|
||||
"contrast": [
|
||||
{
|
||||
"text": "Definiciones de productos compartidas por todas las compañías. Busca por nombre ",
|
||||
"ratio": 4.710670667667247
|
||||
},
|
||||
{
|
||||
"text": "Mostrando 1–25 sistemas operativos",
|
||||
"ratio": 4.832895561154151
|
||||
},
|
||||
{
|
||||
"text": "Sistema operativo\n↑",
|
||||
"ratio": 18.44602285960225
|
||||
},
|
||||
{
|
||||
"text": "Identidad comercial",
|
||||
"ratio": 18.44602285960225
|
||||
},
|
||||
{
|
||||
"text": "Proveedor",
|
||||
"ratio": 18.44602285960225
|
||||
},
|
||||
{
|
||||
"text": "Estado",
|
||||
"ratio": 18.44602285960225
|
||||
},
|
||||
{
|
||||
"text": "Acciones",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 100 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 101 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 102 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 103 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 104 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 105 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 106 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 107 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 108 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 109 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.982567698070397
|
||||
},
|
||||
{
|
||||
"text": "Windows 11 Pro",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 110 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 111 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 112 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 113 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 114 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 115 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 116 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 117 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 118 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 119 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 120 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 121 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 122 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 123 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Mostrando 1–25 sistemas operativos",
|
||||
"ratio": 4.832895561154151
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"theme": "dark",
|
||||
"contrast": [
|
||||
{
|
||||
"text": "Definiciones de productos compartidas por todas las compañías. Busca por nombre ",
|
||||
"ratio": 7.5264967258525335
|
||||
},
|
||||
{
|
||||
"text": "Mostrando 1–25 sistemas operativos",
|
||||
"ratio": 6.849496704697561
|
||||
},
|
||||
{
|
||||
"text": "Sistema operativo\n↑",
|
||||
"ratio": 18.801878630570016
|
||||
},
|
||||
{
|
||||
"text": "Identidad comercial",
|
||||
"ratio": 18.801878630570016
|
||||
},
|
||||
{
|
||||
"text": "Proveedor",
|
||||
"ratio": 18.801878630570016
|
||||
},
|
||||
{
|
||||
"text": "Estado",
|
||||
"ratio": 18.801878630570016
|
||||
},
|
||||
{
|
||||
"text": "Acciones",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 100 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 101 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 102 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 103 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 104 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 105 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 106 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 107 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 108 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 109 Pro — Producto sintético Álvarez",
|
||||
"ratio": 15.760664563314249
|
||||
},
|
||||
{
|
||||
"text": "Windows 11 Pro",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 110 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 111 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 112 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 113 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 114 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 115 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 116 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 117 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 118 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 119 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 120 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 121 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 122 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 123 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Mostrando 1–25 sistemas operativos",
|
||||
"ratio": 6.849496704697561
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"database": "metis_desk_test",
|
||||
"companies": 15,
|
||||
"principal": {
|
||||
"people": 50,
|
||||
"assetsAtLeast": 50,
|
||||
"resourcesAtLeast": 50,
|
||||
"profiles": 50,
|
||||
"workstations": 50
|
||||
},
|
||||
"mcp": "Docker stdio de .codex/config.toml",
|
||||
"productionEnabled": false
|
||||
}
|
||||
@ -0,0 +1,448 @@
|
||||
{
|
||||
"source": ".artifacts/playwright/authenticated-al820anx/global-operating-systems-report.json",
|
||||
"execution": "previous intervention; not rerun in closure",
|
||||
"checks": [
|
||||
"empty-catalog",
|
||||
"identity-fields",
|
||||
"known-edition",
|
||||
"review-required",
|
||||
"identity-review-invalidation",
|
||||
"create-in-browser",
|
||||
"history",
|
||||
"server-rejects-product-transformation-form-preserved",
|
||||
"dialog-focus-return",
|
||||
"51-global-products",
|
||||
"cursor-pagination",
|
||||
"search-empty-recovery",
|
||||
"computed-text-contrast-light",
|
||||
"list-light-320-390-768-1024-1280-1600",
|
||||
"computed-text-contrast-dark",
|
||||
"list-dark-320-390-768-1024-1280-1600",
|
||||
"mobile-form-keyboard-close",
|
||||
"transport-error-retry",
|
||||
"initial-loading",
|
||||
"inactive-draft-in-browser",
|
||||
"english-form-labels-edition-options",
|
||||
"ordinary-public-projection",
|
||||
"asset-global-os-navigation",
|
||||
"installation-panel-and-history-global-os-navigation",
|
||||
"workstation-global-os-navigation",
|
||||
"map-click-opens-global-os-detail",
|
||||
"map-equipment-pointer-navigation",
|
||||
"mixed-picker-global-local-no-replacement"
|
||||
],
|
||||
"screenshots": [
|
||||
{
|
||||
"file": "global-os-empty.png",
|
||||
"sha256": "4728d22812a5a35e869ec9d28e65411f8863686f9f2b9457b584bd7af7d749f1",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-create-review.png",
|
||||
"sha256": "fa4a1819372f0cb9357448dbe997464197fe875efd8125bd65137d57811199e5",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-created-detail.png",
|
||||
"sha256": "63cdbdabbee8250c4b12a9db2bc4af6514edc3e5af2c749d1ced508f15b6422f",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-identity-error.png",
|
||||
"sha256": "861e3f4e75853c31d42cf29f363051fa3488ddb84f5fb90150d076f073b26370",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-no-results.png",
|
||||
"sha256": "4c6169565fc8713e9dc2502c1d06c2f9cc7abf62d8495a8976fdcd3533c76049",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-light-320.png",
|
||||
"sha256": "891cdc1875a12ed6275a2b4e69cdcd2a2a4aaf92a5922df9b17aa2ae6895412a",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-light-390.png",
|
||||
"sha256": "42a0a2f27df0f17b2d117ef5709344bc0cba2cfc40fc6a04652673bac0d175d3",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-light-768.png",
|
||||
"sha256": "54cee20c8cac78ef32e20ada33552829e3ea738b7f7791900ca013afeb97bf49",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-light-1024.png",
|
||||
"sha256": "73a89add6661dd90c360dce567cb23d088e132c4fce396648f272435903d60c6",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-light-1280.png",
|
||||
"sha256": "7727d4a0339da4b2122a35f1fff5ac4814e16fcafc4485ddbca1a98a76ac2f40",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-light-1600.png",
|
||||
"sha256": "36f901f92df98cb4c9b612c29c3a773a7144c439d79e7975294507f3d81ee153",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-dark-320.png",
|
||||
"sha256": "fc6c5f6f89914a863200082079e2af563ab9537fdf87201082d5ef4e5d14c101",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-dark-390.png",
|
||||
"sha256": "3090626d0526ccaaa4b8b80ea0868dfe2451ee8644d498922e6ca11562609f38",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-dark-768.png",
|
||||
"sha256": "02ce9944bdd51afd79aa8c98f82d4e718fd3ea488e41fc2d376cb219d2d5e0fa",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-dark-1024.png",
|
||||
"sha256": "5246d3cde105d8922dd4e0bb8b677f7f24704864dffd6c0fa07bbcc0bd68dc62",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-dark-1280.png",
|
||||
"sha256": "011defd978d3525a93664f795c9d3ececd0809eea62038d4e47e7435a372e1c9",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-dark-1600.png",
|
||||
"sha256": "f67e198bb5af48beaaebd43f63c6daa9210befd69506b2be496e1a1d455fbb98",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-mobile-form.png",
|
||||
"sha256": "a031175d5e23ecf7dffa3972a13f4b0341df633d481889d52a9ca3c0f6e1f130",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-error.png",
|
||||
"sha256": "d9cf753aa3b8860682a384ce49cef16447df2e2e9201fe34e596e9d90a3e0c8f",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-list-loading.png",
|
||||
"sha256": "36a4f535a36e594587470d50b6c06a9eccf2bb937f49ff0ea329cd98f519f55a",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-english-form.png",
|
||||
"sha256": "49739898c7d44891eaadf1bed78f3900c4f114b8bfbf82dba2e4b78edde5178c",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-ordinary-detail.png",
|
||||
"sha256": "8c0aaed14ee140cc92d60163f93c7a8eb470209db3c016b44ebf8e8312008583",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-asset-current-os.png",
|
||||
"sha256": "04d91e8ac9d5c63e88825316722810c2c591590542217f7fa4634c2264b97f2d",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-installation-history-global-link.png",
|
||||
"sha256": "b6ccad18e28276e2f2039ab424e90812b0fe2cdf4742842ad6ad6af536c174b7",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-workstation-current-os.png",
|
||||
"sha256": "e596d8f2a71ba738de182ff20caa7e2e454d2cb462be8ab64a1bd0a589b6c04e",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-workplace-map-global-os.png",
|
||||
"sha256": "88980eb4a4b94262b39b3c4a69b4775ccd9387b9159fe0a6ef191697125e2909",
|
||||
"exists": true
|
||||
},
|
||||
{
|
||||
"file": "global-os-mixed-picker.png",
|
||||
"sha256": "1c4ac0eca0418d66934e44f21e383ddbdac26905857dbb666eb2bbe02cfdbd55",
|
||||
"exists": true
|
||||
}
|
||||
],
|
||||
"contrast": [
|
||||
{
|
||||
"theme": "light",
|
||||
"contrast": [
|
||||
{
|
||||
"text": "Definiciones de productos compartidas por todas las compañías. Busca por nombre ",
|
||||
"ratio": 4.710670667667247
|
||||
},
|
||||
{
|
||||
"text": "Mostrando 1–25 sistemas operativos",
|
||||
"ratio": 4.832895561154151
|
||||
},
|
||||
{
|
||||
"text": "Sistema operativo\n↑",
|
||||
"ratio": 18.44602285960225
|
||||
},
|
||||
{
|
||||
"text": "Identidad comercial",
|
||||
"ratio": 18.44602285960225
|
||||
},
|
||||
{
|
||||
"text": "Proveedor",
|
||||
"ratio": 18.44602285960225
|
||||
},
|
||||
{
|
||||
"text": "Estado",
|
||||
"ratio": 18.44602285960225
|
||||
},
|
||||
{
|
||||
"text": "Acciones",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 100 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 101 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 102 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 103 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 104 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 105 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 106 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 107 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 108 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 109 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.982567698070397
|
||||
},
|
||||
{
|
||||
"text": "Windows 11 Pro",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 110 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 111 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 112 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 113 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 114 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 115 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 116 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 117 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 118 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 119 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 120 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 121 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 122 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Windows 123 Pro — Producto sintético Álvarez",
|
||||
"ratio": 18.924630543800298
|
||||
},
|
||||
{
|
||||
"text": "Mostrando 1–25 sistemas operativos",
|
||||
"ratio": 4.832895561154151
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"theme": "dark",
|
||||
"contrast": [
|
||||
{
|
||||
"text": "Definiciones de productos compartidas por todas las compañías. Busca por nombre ",
|
||||
"ratio": 7.5264967258525335
|
||||
},
|
||||
{
|
||||
"text": "Mostrando 1–25 sistemas operativos",
|
||||
"ratio": 6.849496704697561
|
||||
},
|
||||
{
|
||||
"text": "Sistema operativo\n↑",
|
||||
"ratio": 18.801878630570016
|
||||
},
|
||||
{
|
||||
"text": "Identidad comercial",
|
||||
"ratio": 18.801878630570016
|
||||
},
|
||||
{
|
||||
"text": "Proveedor",
|
||||
"ratio": 18.801878630570016
|
||||
},
|
||||
{
|
||||
"text": "Estado",
|
||||
"ratio": 18.801878630570016
|
||||
},
|
||||
{
|
||||
"text": "Acciones",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 100 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 101 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 102 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 103 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 104 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 105 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 106 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 107 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 108 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 109 Pro — Producto sintético Álvarez",
|
||||
"ratio": 15.760664563314249
|
||||
},
|
||||
{
|
||||
"text": "Windows 11 Pro",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 110 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 111 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 112 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 113 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 114 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 115 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 116 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 117 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 118 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 119 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 120 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 121 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 122 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Windows 123 Pro — Producto sintético Álvarez",
|
||||
"ratio": 17.11067053013637
|
||||
},
|
||||
{
|
||||
"text": "Mostrando 1–25 sistemas operativos",
|
||||
"ratio": 6.849496704697561
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"allHashesVerified": true
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"integration": 0
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
▶ SO global: identidad, contratos, administración e instalaciones HTTP/MariaDB
|
||||
✔ autorización, CSRF, idempotencia y revisión vinculada a identidad (114.708375ms)
|
||||
✔ identidad incompleta, edición contradictoria, duplicado normalizado y concurrencia (235.662191ms)
|
||||
✔ borrador desconocido, edición no aplicable explícita y activación revisada (174.718577ms)
|
||||
✔ aplicaciones y licencias no contaminan el catálogo SO; lecturas públicas sin notas (97.842759ms)
|
||||
✔ mismo SO entre compañías, versiones y licencias aisladas, contrato anterior (551.383077ms)
|
||||
✔ candidatos mixtos, negociación y propósito de perfiles (198.028101ms)
|
||||
✔ metadatos e historial, identidad publicada fija y propagación protegida (175.523127ms)
|
||||
✔ versión instalada cambia sin modificar producto y conserva historial (155.329974ms)
|
||||
✔ desactivación conserva resolución histórica, edición instalada y retirada (381.160081ms)
|
||||
✔ carrera SO: instalación confirma antes de desactivar, catálogo coordinado (561.221238ms)
|
||||
✔ rollback de gates conserva referencias, historial y retirada (4828.319087ms)
|
||||
✔ SO global: identidad, contratos, administración e instalaciones HTTP/MariaDB (84010.06887ms)
|
||||
ℹ tests 12
|
||||
ℹ suites 0
|
||||
ℹ pass 12
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 90093.26907
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"integration": 0
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
▶ R2.3: catálogo global autorizado, historia, idempotencia, privacidad y consumidores cerrados
|
||||
✔ catálogo de compañía combina ámbitos, pagina y permite altas locales aisladas (465.702236ms)
|
||||
✔ scope y plantilla persistidos, autorización real y proyección mínima (108.833026ms)
|
||||
✔ idempotencia de creationId y concurrencia sin duplicar historia (178.698854ms)
|
||||
✔ límites de plantilla, propietario y UUID; sin borrado global (116.027079ms)
|
||||
✔ edición y optimistic concurrency, snapshot original e idempotencia semántica (258.943962ms)
|
||||
✔ desactivar/reactivar conserva UUID e historia y excluye candidatos (165.175852ms)
|
||||
✔ colección paginada, homónimos y búsqueda literal sin N+1 de cliente (1219.637125ms)
|
||||
✔ rollback por error de infraestructura y recuperación por el mismo creationId (84.204436ms)
|
||||
✔ propagación autorizada global/local y campos nuevos sin reescribir snapshots (1542.964828ms)
|
||||
✔ CRUD local y consumidores continúan locales tras existir catálogo (381.32227ms)
|
||||
✔ reinicio HTTP: replay persistido y cierre de altas/edición/reactivación con lectura conservada (4389.71498ms)
|
||||
✔ R2.3: catálogo global autorizado, historia, idempotencia, privacidad y consumidores cerrados (86043.106669ms)
|
||||
ℹ tests 12
|
||||
ℹ suites 0
|
||||
ℹ pass 12
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 92135.435256
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"integration": 0
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
▶ R2.4: software global, licencia local, negociación y serialización HTTP/MariaDB
|
||||
✔ mismo producto, instalaciones, versiones, estados, activos y licencias independientes (172.711315ms)
|
||||
✔ matriz negativa, destino inmutable, CSRF y autenticación reales (1182.867487ms)
|
||||
✔ compatibilidad v2: locales legacy y respuesta completa global sin downgrade silencioso (866.827969ms)
|
||||
✔ instalación local de SO mantiene contrato y validación de licencia (134.67442ms)
|
||||
✔ candidatos mixtos paginados, proyección mínima, búsqueda, homónimos y perfiles cerrados (1714.606052ms)
|
||||
✔ edición idempotente, licencia propia, renombrado e inactivo histórico con needsReview derivado (770.805307ms)
|
||||
✔ carrera: instalación primero, desactivación espera el commit y deriva revisión (641.682428ms)
|
||||
✔ carrera: desactivación primero, instalación espera y se rechaza al releer (450.102029ms)
|
||||
✔ dos compañías instalan a la vez sin lock exclusivo de catálogo (240.964152ms)
|
||||
✔ volumen operativo: cincuenta instalaciones particulares con productos locales distintos (8314.236632ms)
|
||||
✔ gates independientes de candidatos y asociación, sin abrir perfil (5108.787193ms)
|
||||
✔ gate cerrado tras reinicio: lectura, notas y retirada siguen; nuevas dependencias no (1381.595352ms)
|
||||
✔ R2.4: software global, licencia local, negociación y serialización HTTP/MariaDB (98362.487369ms)
|
||||
ℹ tests 13
|
||||
ℹ suites 0
|
||||
ℹ pass 13
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 103447.064487
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"integration": 0
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
▶ R2.5: configuraciones globales locales al perfil, HTTP y concurrencia MariaDB
|
||||
✔ mismo UUID en varios perfiles y compañías, delivery/versión/estado propios, sin instalaciones (336.190847ms)
|
||||
✔ matriz negativa, recurso/perfil inmutables, autorización, CSRF y contrato estricto (1762.934516ms)
|
||||
✔ locales de serie y plantilla propia application, legacy y negociación global v2 (1360.327541ms)
|
||||
✔ candidatos de perfil mixtos sin SO/licencias, proyección privada y cursor por propósito (1387.27243ms)
|
||||
✔ edición semántica, historial y UUID preservados tras renombrar/desactivar; notas y retirada (1667.5848ms)
|
||||
✔ carrera: configuración primero, desactivación espera el commit (883.304512ms)
|
||||
✔ carrera: desactivación primero, revalidación posterior rechaza sin crear revisión (539.384189ms)
|
||||
✔ concurrencia de la pareja: un único registro abierto y revisiones propias (469.031255ms)
|
||||
✔ volumen de cincuenta configuraciones preserva aislamiento por perfil (8010.486866ms)
|
||||
✔ gates independientes y apagado: lectores, notas, retirada y locales siguen funcionando (4951.537395ms)
|
||||
✔ R2.5: configuraciones globales locales al perfil, HTTP y concurrencia MariaDB (102145.083007ms)
|
||||
ℹ tests 11
|
||||
ℹ suites 0
|
||||
ℹ pass 11
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 106247.428378
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"integration": 0
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
▶ R2.6: coincidencias contextuales acotadas sin mutaciones
|
||||
✔ volumen 10/100/1000/10000: recorrido acotado y consultas medidas (5900.569896ms)
|
||||
✔ paginación determinista, inactivos y proyección mínima sin escribir (1678.282967ms)
|
||||
✔ contexto, elegibilidad, validación, autenticación y cursores (304.452911ms)
|
||||
✔ uso local conserva producto, licencia, versión, configuración e historial (911.088407ms)
|
||||
✔ catálogo cerrado no permite detección ni altera referencias existentes (792.884598ms)
|
||||
✔ R2.6: coincidencias contextuales acotadas sin mutaciones (89475.784755ms)
|
||||
ℹ tests 6
|
||||
ℹ suites 0
|
||||
ℹ pass 6
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 93921.300192
|
||||
@ -0,0 +1,70 @@
|
||||
✔ HTTP real: estado, contrato, errores y trazas sin datos sensibles (64.878761ms)
|
||||
✔ HTTP real: entrada JSON inválida y errores internos conservan un contrato seguro (27.548096ms)
|
||||
✔ MariaDB y HTTP: pertenencias, controladores, transiciones, aislamiento e integridad (2213.707827ms)
|
||||
✔ el puerto usa un valor local por defecto y acepta los límites válidos (0.364602ms)
|
||||
✔ el arranque rechaza puertos inválidos sin revelar el valor recibido (0.816006ms)
|
||||
✔ MariaDB: dominios, contexto atómico, concurrencia, integridad y ciclo de vida (792.630633ms)
|
||||
✔ HTTP infraestructura: sesión, pertenencia, validación, identidad e idempotencia (30.063319ms)
|
||||
✔ diagnóstico: causas de Sequelize, ciclos y valores lanzados que no son Error (0.571405ms)
|
||||
✔ diagnóstico: mensajes multilínea, propiedades y cadenas largas no se vuelcan (0.524903ms)
|
||||
✔ contextos de servidor: sesión vigente, ámbito existente, copias y revocación (0.955607ms)
|
||||
▶ MariaDB: publicaciones SMB, historial, proveedor y HTTP autenticado
|
||||
✔ registro y cardinalidad; publicador desconocido y distintos tipos sin AD (356.392903ms)
|
||||
✔ traslado atómico, replay estable y finalización identificada sin tocar accesos (111.981018ms)
|
||||
✔ concurrencia: altas iguales, publicadores distintos, traslados y finalización (148.241983ms)
|
||||
✔ restricciones SQL y protección de borrado también después de finalizar (119.178071ms)
|
||||
✔ fallo al insertar sucesor revierte el cierre anterior (118.745467ms)
|
||||
✔ proveedor: SQL keyset, orientación, historial y cursores ligados a consulta (28.355508ms)
|
||||
✔ resolución SMB por lotes: no confunde dominios, recursos ordinarios o compañías (165.029105ms)
|
||||
✔ estados y desactivación concurrente conservan publicaciones documentadas (514.990061ms)
|
||||
✔ UI 3.5: selector remoto filtra en SQL y pagina sin hidratar el inventario (1436.471586ms)
|
||||
✔ HTTP: sesión, CSRF, validación, idempotencia y consultas paginadas (123.198399ms)
|
||||
✔ MariaDB: publicaciones SMB, historial, proveedor y HTTP autenticado (4756.605138ms)
|
||||
▶ MariaDB: SMB, unicidad vigente, historial, diagnóstico e integridad
|
||||
✔ alta, presentación, lector público y aislamiento (38.900183ms)
|
||||
✔ conflicto funcional, rollback, alias e inactivos (142.198937ms)
|
||||
✔ edición atómica, UUID estable, idempotencia y revisión de UNC (95.592397ms)
|
||||
✔ desactivación libera dirección y reactivación conflictiva conserva estado (163.774395ms)
|
||||
✔ concurrencia: una sola alta y ninguna raíz huérfana (82.283001ms)
|
||||
✔ restricciones SQL: compañía, 1:1, protocolo y unicidad (47.664648ms)
|
||||
✔ legado: ausente, inválido, válido, duplicado y candidato access; diagnóstico sin escritura (439.420705ms)
|
||||
✔ integración access existente y cambio de UNC conservan contexto y referencias (175.55068ms)
|
||||
✔ FolderMapping conserva UNC, letra e historial y detecta dirección desactualizada (409.768588ms)
|
||||
✔ HTTP autenticado: contrato SMB y diagnóstico acotado sin aceptar parámetros (65.420477ms)
|
||||
✔ borrado sin referencias limpia proyección; una FK externa impide borrado (261.540007ms)
|
||||
✔ MariaDB: SMB, unicidad vigente, historial, diagnóstico e integridad (2639.933755ms)
|
||||
▶ MariaDB: nuevas carpetas SMB integradas con accesos sin adoptar históricos
|
||||
✔ alta automática: misma identidad, ninguna dependencia de dominio o publicador (12.60939ms)
|
||||
✔ renombrar el tipo de acceso conserva su UUID para las siguientes altas (55.298894ms)
|
||||
✔ el cliente no puede imponer buzón, otro tipo ni contexto; se revierte el tipo preparado (74.970834ms)
|
||||
✔ renombrado, UNC y estados sincronizan valores y UUID de todas las revisiones (133.734351ms)
|
||||
✔ necesidad y concesiones AD y NAS local: cobertura documental y borrado protegido (1191.363179ms)
|
||||
✔ fallo después de escribir acceso revierte Resource, SMB, AccessItem y tipo (38.852577ms)
|
||||
✔ carpeta anterior sin integración: lectura, edición y estado no la adoptan (158.133526ms)
|
||||
✔ MariaDB: nuevas carpetas SMB integradas con accesos sin adoptar históricos (2343.789395ms)
|
||||
✔ MariaDB: las plantillas propagan estructura en todas las compañías de forma atómica e idempotente (1585.94158ms)
|
||||
▶ MariaDB: proveedor real, lotes, seguridad, SQL paginado y transiciones de pertenencias
|
||||
✔ registro estático y consultas vacías desde ambos extremos (6.754748ms)
|
||||
✔ directa, inversa, either, roles y UUID canónicos sin duplicados (40.533589ms)
|
||||
✔ keyset SQL: páginas de uno, fin y cursores ligados a consulta (26.276387ms)
|
||||
✔ lotes reales sin N+1, orden, repetidos, estados y referencias inaccesibles (19.499839ms)
|
||||
✔ traslado y fin conservan identidad, estado y rol histórico (38.136271ms)
|
||||
✔ ámbito, contextos falsificados, sesión revocada y acceso inverso (18.632432ms)
|
||||
✔ EXPLAIN real e índices disponibles para ambos extremos (6.075043ms)
|
||||
✔ MariaDB: proveedor real, lotes, seguridad, SQL paginado y transiciones de pertenencias (1486.420567ms)
|
||||
ℹ {"column":"assetId","includeEnded":false,"plan":[{"id":1,"select_type":"SIMPLE","table":"asset_directory_memberships","type":"range","possible_keys":"PRIMARY,directory_membership_identity_scope,directory_membership_asset,directory_membership_domain,directory_membership_domain_page","key":"PRIMARY","key_len":"144","ref":null,"rows":"4","Extra":"Using where"}]}
|
||||
ℹ {"column":"assetId","includeEnded":false,"forcedIndexPlan":[{"key":"directory_membership_asset","Extra":"Using index condition; Using where"}]}
|
||||
ℹ {"column":"assetId","includeEnded":true,"plan":[{"id":1,"select_type":"SIMPLE","table":"asset_directory_memberships","type":"range","possible_keys":"PRIMARY,directory_membership_identity_scope,directory_membership_asset,directory_membership_domain,directory_membership_domain_page","key":"PRIMARY","key_len":"144","ref":null,"rows":"4","Extra":"Using where"}]}
|
||||
ℹ {"column":"assetId","includeEnded":true,"forcedIndexPlan":[{"key":"directory_membership_asset","Extra":"Using index condition"}]}
|
||||
ℹ {"column":"domainResourceId","includeEnded":false,"plan":[{"id":1,"select_type":"SIMPLE","table":"asset_directory_memberships","type":"range","possible_keys":"PRIMARY,directory_membership_identity_scope,directory_membership_asset,directory_membership_domain,directory_membership_domain_fk,directory_membership_domain_page","key":"PRIMARY","key_len":"144","ref":null,"rows":"4","Extra":"Using where"}]}
|
||||
ℹ {"column":"domainResourceId","includeEnded":false,"forcedIndexPlan":[{"key":"directory_membership_domain_page","Extra":"Using index condition; Using where"}]}
|
||||
ℹ {"column":"domainResourceId","includeEnded":true,"plan":[{"id":1,"select_type":"SIMPLE","table":"asset_directory_memberships","type":"range","possible_keys":"PRIMARY,directory_membership_identity_scope,directory_membership_asset,directory_membership_domain,directory_membership_domain_fk,directory_membership_domain_page","key":"PRIMARY","key_len":"144","ref":null,"rows":"4","Extra":"Using where"}]}
|
||||
ℹ {"column":"domainResourceId","includeEnded":true,"forcedIndexPlan":[{"key":"directory_membership_domain_page","Extra":"Using index condition"}]}
|
||||
ℹ tests 50
|
||||
ℹ suites 0
|
||||
ℹ pass 50
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 17252.621293
|
||||
17020
.artifacts/resources-global-operating-systems-closure/schema.json
Normal file
@ -0,0 +1,38 @@
|
||||
$ TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/api/domain/asset-catalog.test.ts src/api/domain/asset.test.ts src/api/domain/asset-template-propagation.test.ts src/api/domain/infrastructure.test.ts src/api/domain/workstation.test.ts src/api/domain/asset-relationship.test.ts src/web/catalog/shared/catalog.test.tsx src/web/assets/shared/inventory.test.tsx src/web/assets/shared/helpers/asset-columns.test.tsx src/web/assets/detail/ui/asset-detail.test.tsx src/web/infrastructure/shared/infrastructure.test.tsx src/api/domain/support.test.ts src/web/support-connections/shared/support.test.tsx src/api/domain/brand.test.ts src/web/brands/shared/brands.test.tsx src/api/domain/template-sections.test.ts src/web/workstations/shared/helpers/workstation-creation.test.ts src/web/workstations/shared/workstation-name.test.ts src/web/workstations/rename/api/rename-workstation.test.ts src/web/assets/list/asset-workstation.test.tsx src/web/assets/select/asset-selection.test.tsx src/web/catalog-fields/select/catalog-field-selection.test.tsx src/api/domain/directory-membership.test.ts src/api/infrastructure/persistence/directory-membership-provider.test.ts src/web/directory-memberships/shared/directory-memberships.test.tsx src/api/domain/network-share-publication.test.ts src/web/network-share-publications/shared/network-share-ui.test.tsx src/api/application/workstation-concurrency.test.ts src/web/workstations/shared/helpers/workstation-asset-availability.test.ts
|
||||
✔ src/api/application/workstation-concurrency.test.ts (1805.850284ms)
|
||||
✔ src/api/domain/asset-catalog.test.ts (3672.490506ms)
|
||||
✔ src/api/domain/asset-relationship.test.ts (1906.713751ms)
|
||||
✔ src/api/domain/asset-template-propagation.test.ts (1373.267618ms)
|
||||
✔ src/api/domain/asset.test.ts (2819.543982ms)
|
||||
✔ src/api/domain/brand.test.ts (2285.294553ms)
|
||||
✔ src/api/domain/directory-membership.test.ts (2885.375016ms)
|
||||
✔ src/api/domain/infrastructure.test.ts (1678.589939ms)
|
||||
✔ src/api/domain/network-share-publication.test.ts (2834.393078ms)
|
||||
✔ src/api/domain/support.test.ts (1774.624174ms)
|
||||
✔ src/api/domain/template-sections.test.ts (3356.167116ms)
|
||||
✔ src/api/domain/workstation.test.ts (2920.479074ms)
|
||||
✔ src/api/infrastructure/persistence/directory-membership-provider.test.ts (1261.035436ms)
|
||||
✔ src/web/assets/detail/ui/asset-detail.test.tsx (11912.666775ms)
|
||||
✔ src/web/assets/list/asset-workstation.test.tsx (12709.86633ms)
|
||||
✔ src/web/assets/select/asset-selection.test.tsx (7380.556563ms)
|
||||
✔ src/web/assets/shared/helpers/asset-columns.test.tsx (8488.725162ms)
|
||||
✔ src/web/assets/shared/inventory.test.tsx (16682.328738ms)
|
||||
✔ src/web/brands/shared/brands.test.tsx (13072.747402ms)
|
||||
✔ src/web/catalog-fields/select/catalog-field-selection.test.tsx (7499.952903ms)
|
||||
✔ src/web/catalog/shared/catalog.test.tsx (9983.964911ms)
|
||||
✔ src/web/directory-memberships/shared/directory-memberships.test.tsx (11209.237203ms)
|
||||
✔ src/web/infrastructure/shared/infrastructure.test.tsx (9338.639663ms)
|
||||
✔ src/web/network-share-publications/shared/network-share-ui.test.tsx (5132.101073ms)
|
||||
✔ src/web/support-connections/shared/support.test.tsx (7789.254696ms)
|
||||
✔ src/web/workstations/rename/api/rename-workstation.test.ts (2703.323239ms)
|
||||
✔ src/web/workstations/shared/helpers/workstation-asset-availability.test.ts (1870.853328ms)
|
||||
✔ src/web/workstations/shared/helpers/workstation-creation.test.ts (741.320698ms)
|
||||
✔ src/web/workstations/shared/workstation-name.test.ts (843.545118ms)
|
||||
ℹ tests 29
|
||||
ℹ suites 0
|
||||
ℹ pass 29
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 19590.592877
|
||||
@ -0,0 +1 @@
|
||||
$ tsc -p tsconfig.json
|
||||
@ -0,0 +1,48 @@
|
||||
$ turbo run build
|
||||
• turbo 2.9.14
|
||||
|
||||
• Packages in scope: @metis/assets, @metis/companies, @metis/core, @metis/identity, @metis/relationship-contracts, @metis/resources, @metis/server, @metis/web, @repo/rdx-ddd, @repo/rdx-ui, @repo/rdx-utils, @repo/shadcn-ui, @repo/typescript-config
|
||||
• Running build in 13 packages
|
||||
• Remote caching disabled
|
||||
|
||||
@metis/server:build: cache miss, executing 113b1431b2dc1c6c
|
||||
@metis/web:build: cache miss, executing ccb6604b36a92184
|
||||
@metis/server:build: $ tsup --config tsup.config.ts
|
||||
@metis/web:build: $ vite build
|
||||
@metis/web:build: vite v8.3.0 building client environment for production...
|
||||
@metis/server:build: CLI Building entry: src/index.ts
|
||||
@metis/server:build: CLI Using tsconfig: tsconfig.json
|
||||
@metis/server:build: CLI tsup v8.5.1
|
||||
@metis/server:build: CLI Using tsup config: /home/david/dev/metis-desk/apps/server/tsup.config.ts
|
||||
@metis/server:build: CLI Target: node24
|
||||
@metis/server:build: CLI Cleaning output folder
|
||||
@metis/server:build: ESM Build start
|
||||
@metis/web:build: transforming...
|
||||
@metis/server:build: ESM dist/index.js 1.70 MB
|
||||
@metis/server:build: ESM dist/index.js.map 3.22 MB
|
||||
@metis/server:build: ESM ⚡️ Build success in 696ms
|
||||
@metis/web:build: ✓ 10062 modules transformed.
|
||||
@metis/web:build: rendering chunks...
|
||||
@metis/web:build: computing gzip size...
|
||||
@metis/web:build: dist/index.html 0.54 kB │ gzip: 0.35 kB
|
||||
@metis/web:build: dist/assets/geist-mono-latin-ext-variable-Bwz-egvJ.woff2 14.69 kB
|
||||
@metis/web:build: dist/assets/geist-mono-latin-variable-XN7g48iV.woff2 23.12 kB
|
||||
@metis/web:build: dist/assets/roboto-serif-latin-ext-variable-B9BEn9Tg.woff2 49.84 kB
|
||||
@metis/web:build: dist/assets/roboto-serif-latin-variable-CusprKnR.woff2 66.10 kB
|
||||
@metis/web:build: dist/assets/inter-variable-DiVDrmQJ.woff2 352.24 kB
|
||||
@metis/web:build: dist/assets/workplace-map-canvas-DLioOiRN.css 15.41 kB │ gzip: 2.56 kB
|
||||
@metis/web:build: dist/assets/index-l9KX1rbN.css 252.79 kB │ gzip: 38.81 kB
|
||||
@metis/web:build: dist/assets/workplace-map-canvas-COR1jRY6.js 227.75 kB │ gzip: 74.26 kB
|
||||
@metis/web:build: dist/assets/index-Doj9XccG.js 1,814.61 kB │ gzip: 509.01 kB
|
||||
@metis/web:build:
|
||||
@metis/web:build: [plugin builtin:vite-reporter]
|
||||
@metis/web:build: (!) Some chunks are larger than 500 kB after minification. Consider:
|
||||
@metis/web:build: - Using dynamic import() to code-split the application
|
||||
@metis/web:build: - Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting
|
||||
@metis/web:build: - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
|
||||
@metis/web:build: ✓ built in 2.55s
|
||||
|
||||
Tasks: 2 successful, 2 total
|
||||
Cached: 0 cached, 2 total
|
||||
Time: 4.274s
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
Evidencias: .artifacts/resources-global-scope/r2-3
|
||||
MariaDB desechable retirada.
|
||||
@ -0,0 +1,2 @@
|
||||
Evidencias: .artifacts/resources-global-scope/r2-6
|
||||
MariaDB desechable retirada.
|
||||
@ -0,0 +1,366 @@
|
||||
✔ contexto AD: creación pura con identidades propias, sin cuentas, grupos ni activos (4.523835ms)
|
||||
✔ clasificación independiente del nombre; no se adopta un sistema existente por llamarse AD (1.169609ms)
|
||||
✔ se rechazan compañías distintas, referencias inexistentes y entornos sin clasificación (0.579104ms)
|
||||
✔ DNS repetido no crea dos entornos; otro dominio comparte sistema y obtiene un entorno distinto (0.623805ms)
|
||||
✔ identidad local: vínculo por UUID, alta y retirada idempotentes con identidad e historial protegidos (1.539512ms)
|
||||
✔ identidad local: clasificación explícita rechaza AD por sistema o entorno, sin comparar etiquetas (0.419404ms)
|
||||
✔ identidad local: crear entorno utiliza AccessWorkspace y conserva cuentas y sistema existentes (0.638505ms)
|
||||
✔ catálogos globales no se duplican con adiciones locales y no se admiten grupos anidados (1.050908ms)
|
||||
✔ renombrar una cuenta conserva UUID, historial y semántica de repetición; su uso permanece fijo (1.188209ms)
|
||||
✔ cerrar una autorización configurada deja retirada pendiente y cerrar una pendiente no inventa un acceso (1.819814ms)
|
||||
✔ titulares no se solapan incluso en periodos cerrados; el relevo conserva una retirada anterior (0.819007ms)
|
||||
✔ responsabilidad técnica no concede acceso y se permite sobre una cuenta caducada o inactiva (0.616505ms)
|
||||
✔ valores reconstruyen UUID y fechas, rechazan fechas imposibles y no permiten credenciales (1.569712ms)
|
||||
✔ las referencias UUID se normalizan y no permiten duplicar cuentas variando mayúsculas (0.827106ms)
|
||||
✔ aplicaciones: contrato estricto, versión opcional y solo instalada (1.814814ms)
|
||||
✔ aplicaciones: UUID, idempotencia, versión auditada, destino fijo y retirada (2.474119ms)
|
||||
✔ aplicaciones: ámbito y clasificación explícita, duplicados abiertos y reapertura nueva (1.735514ms)
|
||||
✔ aplicaciones: inactividad conserva notas y permite retirada, impide reconfigurar (1.514312ms)
|
||||
✔ aplicaciones: persistencia preserva historial y rechaza claves y orden incoherentes (2.096117ms)
|
||||
✔ R2.5: global conserva perfil, delivery e historial; disponibilidad distinta de lectura histórica (0.772806ms)
|
||||
✔ certificados: contrato estricto, ubicación opcional y límites (0.965307ms)
|
||||
✔ certificados: UUID, idempotencia, ubicación auditada, destino fijo y retirada (1.420811ms)
|
||||
✔ certificados: ámbito y clasificación explícita, duplicados abiertos y reapertura nueva (1.26921ms)
|
||||
✔ certificados: inactividad conserva notas y permite retirada, impide reconfigurar (0.682406ms)
|
||||
✔ certificados: persistencia preserva historial y rechaza claves y orden incoherentes (1.555612ms)
|
||||
✔ certificados: caducidad inclusiva, revisión y retirada sin perder historial (0.766006ms)
|
||||
✔ compañía, contacto y sede tienen UUID v7 propios y se conserva la identidad al editar (0.729206ms)
|
||||
✔ la pertenencia impide asociar o editar entidades de otra compañía (0.600304ms)
|
||||
✔ la dirección y el teléfono son optativos y se pueden borrar (0.284702ms)
|
||||
✔ nombres, email, teléfono y longitud de dirección se validan en los Value Objects (0.474504ms)
|
||||
✔ sedes: archivar y reactivar conserva identidad y datos; repetir el estado es idempotente (0.399904ms)
|
||||
✔ FolderMapping: cuenta desconocida, cuenta alternativa y cobertura independiente de la necesidad (4.578036ms)
|
||||
✔ FolderMapping: ausencia conserva cuenta, null la retira y cada cambio real crea revisión (2.119217ms)
|
||||
✔ FolderMapping: rechaza cuenta ausente, otro subtipo, otra persona, caducada o desactivada (2.010215ms)
|
||||
✔ FolderMapping: Coverage por grupo exige pertenencia directa de la cuenta y configuración vigente (3.279525ms)
|
||||
✔ FolderMapping: cobertura derivada cambia al retirar concesión, necesidad, cuenta o asociación personal (4.788537ms)
|
||||
✔ FolderMapping: todas las autorizaciones necesarias deben proceder de la cuenta seleccionada (0.964907ms)
|
||||
✔ Correo: UUIDv7, normalización, no-op, historial y retirada explícita (1.418511ms)
|
||||
✔ Correo: buzón independiente, vigencia, perfiles, varios buzones y duplicados abiertos (2.061416ms)
|
||||
✔ Correo: persistencia conserva identidad e historial y rechaza corrupción (35.405076ms)
|
||||
✔ Correo: vinculación explícita del legado conserva UUID e historial, sin inferir propiedad (2.129316ms)
|
||||
✔ Buzón: identidad, dirección única, cuenta opcional, ámbito y cambios auditados (0.859307ms)
|
||||
✔ Uso de buzón: fechas inclusiva/exclusiva, mismo día, solapes, varias personas e historial (1.041608ms)
|
||||
✔ Buzones: mapper conserva identidad y revisiones, rechaza corrupción (1.801614ms)
|
||||
✔ personas con datos opcionales no requieren cuenta de acceso y conservan su UUID (0.314902ms)
|
||||
✔ departamentos únicos por compañía, ignorando mayúsculas y espacios exteriores (0.520605ms)
|
||||
✔ varios departamentos, un único principal y sin periodos solapados (1.093508ms)
|
||||
✔ ediciones conservan revisiones y una repetición semántica no añade historial (1.468711ms)
|
||||
✔ inactivos no reciben nuevas asignaciones; se conservan y pueden cerrarse las existentes (0.468304ms)
|
||||
✔ asignaciones rechazan pertenencias cruzadas y fechas inválidas (0.488604ms)
|
||||
✔ la persistencia rechaza periodos inválidos y revisiones que no reflejan el estado actual (0.965107ms)
|
||||
✔ impresoras: contratos estrictos, notas opcionales y predeterminada solo vigente (0.778506ms)
|
||||
✔ impresoras: UUID, historial, igualdad semántica, destino fijo y retirada terminal (1.398011ms)
|
||||
✔ impresoras: duplicados por perfil, predeterminada única y destinos del ámbito (0.775406ms)
|
||||
✔ impresoras: indisponibilidad señala revisión y permite notas y retirada (0.597505ms)
|
||||
✔ impresoras: rehidratación conserva identidades y detecta corrupción (4.413435ms)
|
||||
✔ procesos: contratos estrictos, normalización y límites (2.816222ms)
|
||||
✔ procesos: UUID v7, tareas con identidad, actualización idempotente e historial (1.684713ms)
|
||||
✔ procesos: completar exige todas resueltas; cierre terminal y sujeto/tareas fijos (2.059916ms)
|
||||
✔ procesos: añadir revisiones conserva las resueltas e identidades y no duplica (2.391319ms)
|
||||
✔ plantillas: copia de instrucciones, igualdad semántica y cambios independientes (0.738606ms)
|
||||
✔ procesos: rehidratación bidireccional y rechazo de raíces/historial alterados (2.268618ms)
|
||||
✔ revisión: personales, retirada pendiente y relaciones finalizadas aún configuradas (0.288202ms)
|
||||
✔ revisión: incluye configuraciones de perfiles archivados, excluye cerradas y evita duplicar (0.128801ms)
|
||||
✔ remotos: origen personal sin detalle, destinos tipados y contrato estricto (1.170909ms)
|
||||
✔ remotos: UUID e historial, destino fijo, idempotencia y cierre terminal (1.194709ms)
|
||||
✔ remotos: referencias de compañía y duplicados abiertos por recorrido y herramienta (0.912407ms)
|
||||
✔ remotos: configuración y autorización independientes; caducidad y revocación no borran acceso (1.111809ms)
|
||||
✔ remotos: disponibilidad de origen y destino, retirada y método personalizado (0.362603ms)
|
||||
✔ remotos: persistencia conserva auditoría y detecta referencias, claves e historial corruptos (2.268617ms)
|
||||
✔ remotos: una sede archivada conserva conexiones existentes pero rechaza nuevas (0.411903ms)
|
||||
✔ instalaciones: pertenecen al equipo, admiten SO/aplicaciones y rechazan recursos ajenos y destinos variables (1.579012ms)
|
||||
✔ instalaciones: versiones, idempotencia, retirada, revisión y persistencia de historial (2.68862ms)
|
||||
✔ licencia del software: opcional, misma compañía y tipo, vigencia, desvinculación e historial idempotente (2.838322ms)
|
||||
✔ R2.4: global activo e inactivo separan alta, reconfiguración y recuperación histórica (0.613205ms)
|
||||
✔ teletrabajo: ausencia, límites, fechas reales y contrato estricto (0.553104ms)
|
||||
✔ teletrabajo: UUID, renovación y revocación auditadas, igualdad y destino fijo (0.837506ms)
|
||||
✔ teletrabajo: vigencia inclusiva, programación, caducidad y persona inactiva (0.764806ms)
|
||||
✔ teletrabajo: ámbito, unicidad incluso revocada, disponibilidad y retirada (0.582805ms)
|
||||
✔ teletrabajo: rehidratación preserva identidad y detecta corrupción de raíz e historial (3.225625ms)
|
||||
✔ Perfil: cuenta opcional, UUID, historial, identidad fija e idempotencia (0.981707ms)
|
||||
✔ Perfil: desactivar conserva valores e historial, es idempotente y precede al borrado (0.423103ms)
|
||||
✔ Perfil: misma persona/dispositivo único vigente, múltiples dispositivos/personas y revisión sin pérdida de datos (0.801806ms)
|
||||
✔ Perfil: cuenta autorizada, vigencia inclusiva de caducidad, cierre de autorización y cuenta técnica (0.692606ms)
|
||||
✔ Perfil: persistencia conserva revisiones y rechaza raíz o cuenta histórica incoherentes (2.887322ms)
|
||||
✔ Perfil: solo un ordenador principal activo admite altas y reactivaciones; el historial se conserva (0.487304ms)
|
||||
✔ PNG, JPEG y WebP se normalizan sin recorte y sin metadatos a un avatar ligero (59.965167ms)
|
||||
✔ se rechazan archivos vacíos, corruptos, SVG y GIF aunque simulen un MIME válido (0.904207ms)
|
||||
✔ se rechazan excesos de peso y dimensión antes de almacenar (2.112816ms)
|
||||
✔ los PNG animados se rechazan antes de decodificarlos (1.455812ms)
|
||||
✔ el contexto distingue cuentas y grupos del entorno, sin incluir otros entornos o datos globales (0.337503ms)
|
||||
✔ recurso contextual: incluye identidades de sistemas distintos sin mezclar necesidades y concesiones ajenas (0.884007ms)
|
||||
✔ filtro vacío no incluye elementos ajenos y las rutas validan UUID y contexto de compañía (1.903715ms)
|
||||
✔ los catálogos presentan alta mediante acción y no un formulario junto al listado (60.671172ms)
|
||||
✔ cuentas ofrecen caducidad opcional y campos sin contraseña (14.451313ms)
|
||||
✔ la ayuda explica todos los elementos en ambos idiomas y distingue el ámbito (31.223543ms)
|
||||
✔ los ejemplos del sistema orientan sin rellenar datos del alta (3.129924ms)
|
||||
✔ las altas rápidas respetan el contexto, ámbito y relaciones históricas (0.526104ms)
|
||||
✔ los formularios ofrecen altas relacionadas y el segundo modal evita altas anidadas (65.035106ms)
|
||||
✔ aplicaciones: listado sin formularios, alta en cabecera y traducciones (17.470736ms)
|
||||
✔ aplicaciones: selectores con alta rápida y ayuda inferior antes de guardar (13.715607ms)
|
||||
✔ R2.5: perfil muestra nombre, origen y versión global sin ResourceDTO local ni mezcla de perfiles (32.873556ms)
|
||||
✔ certificados: listado sin formularios, alta en cabecera y traducciones (16.538729ms)
|
||||
✔ certificados: selectores con alta rápida y ayuda inferior antes de guardar (12.360096ms)
|
||||
✔ la compañía de origen es ámbito visible, no un filtro eliminable con Limpiar filtros (49.387184ms)
|
||||
✔ directorio: orden y página proceden de URL sin perder la consulta (20.258258ms)
|
||||
✔ el dashboard no ofrece selector de compañía y conserva las métricas de cada ámbito (19.497952ms)
|
||||
✔ el resumen de compañía es la entrada por defecto y ofrece destinos reales (28.582922ms)
|
||||
✔ los índices de catálogos distinguen definiciones globales y variantes de compañía (4.279033ms)
|
||||
✔ el listado presenta estado vacío y acceso al alta sin formularios visibles (8.388865ms)
|
||||
✖ la ficha presenta datos de la compañía, contactos y acceso a sedes (15.284819ms)
|
||||
✔ el formulario de sede ofrece dirección y teléfono opcionales (1.700613ms)
|
||||
✖ el formulario de persona distingue contactos de cuentas de acceso y permite datos opcionales (3.012124ms)
|
||||
✔ asignar un departamento permite añadir el primero y conserva el selector en edición (4.144632ms)
|
||||
✔ el tablero de compañía tiene composición propia, acciones arriba y métricas limitadas a su ámbito (3.894931ms)
|
||||
✔ el menú de compañía ordena trabajo y personas por grupos sin repetir las acciones de usuario (7.165556ms)
|
||||
✔ sedes: listado traducido con filtro de archivadas y solo sedes activas por defecto (11.462489ms)
|
||||
✔ la navegación de compañía conserva 21 enlaces reales, sección activa y contexto es/en (28.700723ms)
|
||||
✔ el logo sustituye iniciales con URL versionada, dimensiones fijas y carga diferida (0.532004ms)
|
||||
✔ sin logotipo aparecen iniciales y las listas consultan la misma caché de compañías (0.440003ms)
|
||||
✔ cuentas del mapeo: exige asociación vigente y catálogos activos; no atribuye por login o por perfil (0.640805ms)
|
||||
✔ actualización del mapeo: omitir cuenta conserva semántica distinta de retirarla explícitamente; admite revisión capturada (0.448803ms)
|
||||
✔ uso de impresora: agrupa perfiles de un mismo equipo y separa pendientes e historial (0.738606ms)
|
||||
✔ uso de impresora: referencias sin resolver no se presentan como ausencia de uso (0.137601ms)
|
||||
✔ identidades locales: entorno del activo, navegación por UUID y estado vigente en es/en (3.413127ms)
|
||||
✔ propietario local: vínculo retirado conserva navegación y no ofrece reasignación (0.431303ms)
|
||||
✔ cuenta del mapeo: seleccionar perfil es una acción explícita; el render no infiere ni cambia cuenta (2.315518ms)
|
||||
✔ correo: listado traducido, alta en cabecera y formularios ocultos (6.473151ms)
|
||||
✔ correo: selectores reutilizables con altas y ayuda inmediatamente antes de guardar (3.676329ms)
|
||||
✔ Buzones: alta en modal, cuenta opcional y ayuda al final (6.754252ms)
|
||||
✔ L04.2: correo mantiene tabla y criterios mientras faltan sus referencias (3.966831ms)
|
||||
✔ Personas conserva búsqueda por nombre, contactos, consulta y distinción ñ/n en es/en (52.71641ms)
|
||||
✔ organización: resuelve departamento y cargo vigentes del responsable (0.267702ms)
|
||||
✔ organización: sin responsable o asignación no infiere datos desde perfiles ni cargo genérico de persona (0.1015ms)
|
||||
✔ organización: periodos semiabiertos, históricos y futuros (0.0768ms)
|
||||
✔ organización: varias vigentes conservan todas, principal primero y orden estable sin mutar (0.150301ms)
|
||||
✔ organización: dos principales no ocultan información seleccionando una arbitrariamente (0.077401ms)
|
||||
✔ organización: aislamiento de compañía y persona, y referencias incompletas (0.091401ms)
|
||||
✔ organización: cambios y refetch se derivan de la fuente actual (0.117201ms)
|
||||
✔ impresoras: listado sin formularios, alta en cabecera y traducciones (6.249649ms)
|
||||
✔ impresoras: selectores con alta rápida y ayuda inferior antes de guardar (6.027247ms)
|
||||
✔ L04.2: Procesos recupera búsqueda, cerrados, orden y página en sus enlaces (13.449205ms)
|
||||
✔ procesos: listados es/en sin formularios junto a los datos (13.290503ms)
|
||||
✔ procesos: alta rápida y ayuda inferior antes del pie (5.541243ms)
|
||||
✔ plantillas: instrucciones, desactivación y ayuda global es/en sin datos de compañía (4.110332ms)
|
||||
✔ seguimiento: origen personal, revisión actual y edición sin afirmar retirada real; cerrados sin editar (17.681837ms)
|
||||
✔ remotos: consulta sin formularios y traducciones (5.499642ms)
|
||||
✔ remotos: formulario, altas rápidas y ayuda antes del pie (9.768376ms)
|
||||
✔ remotos: origen personal, acceso configurado sin autorización y VPN separada (1.24441ms)
|
||||
✔ las consultas de compañías conservan sus rutas y rechazan respuestas inválidas (20.336958ms)
|
||||
✔ lectura y guardado de accesos están separados sin cambiar el contrato HTTP (1.31591ms)
|
||||
✔ el guardado de usos de buzón mantiene su endpoint y no se confunde con la consulta (1.155609ms)
|
||||
✔ los adapters mantienen la ausencia semántica sin modificar los campos del formulario (0.145101ms)
|
||||
✔ las instrucciones de proceso conservan el orden y excluyen líneas vacías (0.114801ms)
|
||||
✔ la validación de logos conserva tipos permitidos, vacío y límite exacto de tamaño (0.131101ms)
|
||||
✔ la tabla espera todas sus referencias y distingue actualización de disponibilidad (0.0774ms)
|
||||
✔ un fallo recuperable conserva datos anteriores sin presentarlos como actualizados (0.0996ms)
|
||||
✔ una fuente denegada impide mostrar la caché de todo el listado compuesto (0.208401ms)
|
||||
✔ dashboard: HTTP 401 conserva la semántica de disponibilidad (0.345302ms)
|
||||
✔ dashboard: HTTP 403 conserva la semántica de disponibilidad (0.141601ms)
|
||||
✔ dashboard: HTTP 503 conserva la semántica de disponibilidad (0.177201ms)
|
||||
✔ dashboard: una lectura correcta valida y conserva la página del proveedor (0.746105ms)
|
||||
✔ iniciales y siglas soportan nombres vacíos, Unicode y separadores (0.481804ms)
|
||||
✔ el color es estable con variaciones de espacios, mayúsculas y acentos (0.155901ms)
|
||||
✔ los colores generados mantienen contraste AA para texto pequeño (0.630705ms)
|
||||
✔ el avatar conserva su nombre accesible y puede ser decorativo dentro de un botón etiquetado (0.424103ms)
|
||||
✔ OSUI-01/02/17: SO actual desde instalación, independiente de cualquier valor de fábrica (1.092308ms)
|
||||
✔ OSUI-03/04/05/18: vacío, pendiente y retirado no son SO actual (4.290433ms)
|
||||
✔ OSUI-06/07: varios SO, orden determinista y aplicaciones excluidas (1.730613ms)
|
||||
✔ OSUI-08/12: cambiar de activo conserva solo su SO, sin aceptar compañías ajenas (1.048708ms)
|
||||
✔ OSUI-09: versión de instalación y redundancia literal sin reglas de fabricante (2.851622ms)
|
||||
✔ OSUI-10: referencia no resoluble no significa ausencia; inactiva resoluble conserva información (1.431712ms)
|
||||
✔ OSUI-11: error con datos previos, error de resolver y carga no se presentan como vacío (3.226925ms)
|
||||
✔ OSUI-13/14: servidor sin puesto y plantilla propia consumen la misma lectura por activo (1.616113ms)
|
||||
✔ OSUI-16: presentación es/en y versión opcional (2.675721ms)
|
||||
✔ SO global: selector conserva scope y destino SO; la versión instalada sigue separada (0.222002ms)
|
||||
✖ software del puesto es/en: SO actual, versión, enlaces y separación por ordenador sin formularios incrustados (6.377449ms)
|
||||
✔ formulario software: recurso fijo en edición, estados permitidos, ayuda y ausencia de persona/perfil (3.118824ms)
|
||||
✔ R2.4: nombre, origen y enlace global se resuelven sin ResourceDTO local; licencia continúa particular (8.764668ms)
|
||||
✔ teletrabajo: consulta sin formularios y traducciones (4.797537ms)
|
||||
✔ teletrabajo: formulario con alta rápida de persona, fechas opcionales y ayuda inferior (3.301326ms)
|
||||
✔ teletrabajo: sin autorización no se presupone permiso; persona inactiva requiere revisión (1.342011ms)
|
||||
✔ teletrabajo: alta desde un perfil fija la persona y no abre otra alta rápida (1.705414ms)
|
||||
✔ teletrabajo es/en: conserva estado documental, vigencia y revisión como mensajes independientes (6.536251ms)
|
||||
✔ entorno: reúne varios correos y configuraciones, distingue pendiente, retirada y revisión (0.777306ms)
|
||||
✔ entorno: excluye cerradas, otros perfiles, compañías y correo antiguo sin adivinar relaciones (0.425204ms)
|
||||
✔ entorno: composición vigente del puesto y datos actuales sin duplicación (0.457704ms)
|
||||
✔ entorno: ficha es/en con estados y acciones, sin formularios; muestra falso y varios correos (12.635298ms)
|
||||
✔ entorno: carga, fallo parcial sin falsa ficha vacía, perfil inexistente y aviso de archivado (11.245887ms)
|
||||
✔ entorno: consulta autorización por persona, común a sus perfiles y sin confundir preparación (14.23231ms)
|
||||
✔ entorno: accesos abiertos de la persona y sus orígenes sin confundirlos con configuraciones del perfil (4.617236ms)
|
||||
✔ las entidades de los selectores se pluralizan en es/en sin reutilizar el verbo de acción (1.36901ms)
|
||||
✔ perfiles: listado es/en, alta en cabecera y ausencia de formulario junto al listado (5.892546ms)
|
||||
✔ perfiles: la cabecera breve conserva el motivo completo en la celda de revisión (9.400873ms)
|
||||
✔ perfiles: alta en cuatro pasos, sin guardado intermedio y contenido de ayuda conservado (4.848338ms)
|
||||
✔ perfiles: selección de persona explícita y cuenta opcional con altas independientes (6.252049ms)
|
||||
✔ perfiles: el puesto fijado aporta su ordenador y no selecciona al responsable como usuario (3.230525ms)
|
||||
✔ perfiles: requisitos por paso, cuenta opcional y propuesta basada en persona y ordenador (0.272803ms)
|
||||
✔ perfiles: el nombre sugerido respeta el límite del contrato (0.107601ms)
|
||||
✔ perfiles: resumen con listas, ordenador único y ausencias representadas por guion (1.686613ms)
|
||||
✔ perfiles: edición completa con identidad fija aunque el perfil requiera revisión (2.795121ms)
|
||||
✔ perfiles: orden y página navegables conservan búsqueda y archivados al abrir entorno (11.298688ms)
|
||||
✔ el catálogo de aplicaciones de compañía conserva cursor, filtros y retorno a ficha (1.318811ms)
|
||||
✔ las funcionalidades archivadas no tienen rutas activas (0.445704ms)
|
||||
✔ el filtro de plantilla permite abrir listados y fichas de activos y recursos (0.572505ms)
|
||||
✔ el filtro de plantilla se limita a los inventarios que conocen sus definiciones (0.295202ms)
|
||||
✔ todas las secciones de compañía tienen una ruta propia y el índice es el resumen (0.754306ms)
|
||||
✔ los índices de catálogos y los cinco catálogos globales son destinos independientes (0.212202ms)
|
||||
✔ las configuraciones conservan la compañía y el UUID del perfil (0.242802ms)
|
||||
✔ las rutas desconocidas y los parámetros inválidos no abren una sección por defecto (1.091609ms)
|
||||
✔ la ficha de puesto tiene ruta propia, conserva el UUID y rechaza identificadores inválidos (0.525204ms)
|
||||
✔ dominios: enlaces a cuentas y grupos limitados al entorno de la compañía (0.590104ms)
|
||||
✔ los parámetros de contexto llegan al consumidor sin crear rutas nuevas ni aceptar claves ajenas (0.636505ms)
|
||||
✔ catálogo de aplicaciones: UUID global y criterios propios sin compañía ficticia (0.468604ms)
|
||||
✔ catálogo SO: ruta específica y filtros, sin confundir con aplicaciones (0.242002ms)
|
||||
✔ la barra comienza desplegada sin navegador o sin una preferencia válida (0.300703ms)
|
||||
✔ plegar y desplegar persisten la preferencia sin modificar otras claves (0.167901ms)
|
||||
✔ un fallo de lectura, escritura o acceso a localStorage no bloquea la barra (0.175201ms)
|
||||
✔ la capacidad del shell fuerza modos sin cambiar la preferencia manual (0.197802ms)
|
||||
✔ un menú solo libera su modalidad si su presentación pasa a estar disponible fija (0.116601ms)
|
||||
✔ layout 640px: 0 asociados y 0 instalaciones (5.066039ms)
|
||||
✔ layout 640px: 0 asociados y 3 instalaciones (5.252841ms)
|
||||
✔ layout 640px: 1 asociados y 0 instalaciones (1.949916ms)
|
||||
✔ layout 640px: 1 asociados y 2 instalaciones (2.800522ms)
|
||||
✔ layout 640px: 2 asociados y 3 instalaciones (3.637428ms)
|
||||
✔ layout 748px: 0 asociados y 0 instalaciones (0.794006ms)
|
||||
✔ layout 748px: 0 asociados y 3 instalaciones (2.209217ms)
|
||||
✔ layout 748px: 1 asociados y 0 instalaciones (1.32501ms)
|
||||
✔ layout 748px: 1 asociados y 2 instalaciones (2.203217ms)
|
||||
✔ layout 748px: 2 asociados y 3 instalaciones (3.329025ms)
|
||||
✔ layout 900px: 0 asociados y 0 instalaciones (0.555404ms)
|
||||
✔ layout 900px: 0 asociados y 3 instalaciones (1.890015ms)
|
||||
✔ layout 900px: 1 asociados y 0 instalaciones (1.030108ms)
|
||||
✔ layout 900px: 1 asociados y 2 instalaciones (1.958115ms)
|
||||
✔ layout 900px: 2 asociados y 3 instalaciones (3.023124ms)
|
||||
✔ layout 1200px: 0 asociados y 0 instalaciones (0.710706ms)
|
||||
✔ layout 1200px: 0 asociados y 3 instalaciones (2.236018ms)
|
||||
✔ layout 1200px: 1 asociados y 0 instalaciones (1.120209ms)
|
||||
✔ layout 1200px: 1 asociados y 2 instalaciones (2.301317ms)
|
||||
✔ layout 1200px: 2 asociados y 3 instalaciones (2.930423ms)
|
||||
✔ layout: dos asociados se reparten por capacidad; sin principal no se fabrican conexiones (3.512227ms)
|
||||
✔ preview: conserva límites y publica solo cobertura real de fuentes conocidas (0.300702ms)
|
||||
✔ WD04.4: acción estable de presentación, fuera de las relaciones y contadores, sin solapamientos (55.576631ms)
|
||||
✔ WD04.5: acciones ordenadas del principal y periférico sin inferir software por categoría (0.872407ms)
|
||||
✔ WD04.5: lectura sin permisos de edición, carga/error parcial y activos retirados (0.298002ms)
|
||||
✔ WD04.5: distingue instalación, producto global/inactivo y licencia particular (0.435403ms)
|
||||
✔ WD04.5: producto particular y gates cerrados no crean acciones administrativas (0.709905ms)
|
||||
✔ WD04.5: estados terminales, refetch y cambio de principal o compañía no reutilizan acciones antiguas (0.189802ms)
|
||||
✔ WD04.5: trigger es/en separado del enlace, tarjetas sin acciones y añadir sin menú (8.156964ms)
|
||||
✔ dashboard: ordenador y equipamiento actuales, personas por perfiles y archivados separados (0.397804ms)
|
||||
✔ dashboard: sin responsable sigue mostrando usuarios y un puesto desmantelado no cuenta historia como miembros (0.202402ms)
|
||||
✔ dashboard: sustituir ordenador resuelve perfiles del nuevo host sin trasladar los anteriores (0.164401ms)
|
||||
✔ dashboard: referencias ajenas o principal fuera de composición no aportan relaciones (0.119201ms)
|
||||
✔ pendientes: solo pending, perfiles activos, compañía correcta y deduplicación por familia e identidad (0.613705ms)
|
||||
✔ último cambio: orden cronológico sin mutación, altas de miembros y campos realmente cambiados (0.215102ms)
|
||||
✔ equipamiento: principal válido primero, miembros únicos y secundarios en orden declarado (0.163001ms)
|
||||
✔ equipamiento: activos sin principal no adquieren un principal por su tipo o posición (0.160701ms)
|
||||
✔ equipamiento: principal fuera de composición se advierte sin añadirlo a miembros (0.112601ms)
|
||||
✔ equipamiento: referencia ausente o de otra compañía no inventa datos ni marca principal (0.213802ms)
|
||||
✔ equipamiento: vacío y desmantelado no recuperan miembros del historial (0.127101ms)
|
||||
✔ equipamiento: averiado sigue asignado y conserva ambos estados originales (0.136301ms)
|
||||
✔ expansión: todos abiertos inicialmente y plegado independiente de cada perfil (0.128801ms)
|
||||
✔ refetch conserva plegados y filtros individuales, incluso con error o fuentes incompletas (0.122101ms)
|
||||
✔ retirada o archivo limpia únicamente el estado del perfil afectado (0.088501ms)
|
||||
✔ cambio de compañía, puesto u ordenador restablece todos los perfiles abiertos y los filtros (0.123401ms)
|
||||
✔ orden estable y numérico del resumen y los pendientes, sin mutar datos remotos (0.143601ms)
|
||||
✔ incluye solo perfiles del ordenador principal, distingue inactivos y deduplica personas (0.281003ms)
|
||||
✔ puesto inexistente o sin composición no hereda perfiles de otros activos (0.196401ms)
|
||||
✔ persona: responsabilidad y uso son independientes y solo se consideran puestos y perfiles vigentes (0.343002ms)
|
||||
✔ ficha de puesto es/en: cabecera, retorno, bloques vacíos y edición modal sin formulario incrustado (16.087925ms)
|
||||
✔ un UUID de puesto ausente muestra no encontrado sin cabecera ni edición de otro puesto (1.341011ms)
|
||||
✔ ficha de persona es/en: distingue responsabilidad y uso, y enlaza los puestos (1.956716ms)
|
||||
✔ ficha: ordenador destacado y periféricos sin repetir, perfiles solo del ordenador y personas deduplicadas (26.374705ms)
|
||||
✔ personas y perfiles: carga y error no se presentan como listados vacíos (5.594643ms)
|
||||
✔ ficha: no permite crear perfiles si el ordenador está retirado o el puesto está desactivado (29.037025ms)
|
||||
✔ historial del puesto es/en: revisiones de más reciente a más antigua con autor y valores de cada momento (4.435735ms)
|
||||
✔ personas es/en: enlaces a todos sus puestos bajo responsabilidad, sin confundirlos con puestos usados (20.126357ms)
|
||||
✔ menú de compañía es/en: totales en badges alineados y cero real en secciones vacías (16.386228ms)
|
||||
✔ ruta de activo de compañía abre la página con información, historial, software y solo sus perfiles (75.822589ms)
|
||||
✔ equipamiento es/en: badges de principal, técnico y uso conservan su significado (5.14184ms)
|
||||
✔ equipamiento: inventario fallido no se presenta como vacío y permite reintentar (3.230625ms)
|
||||
✔ equipamiento: principal inconsistente se explica y no se incorpora como miembro válido (2.012815ms)
|
||||
✔ personas y perfiles es/en: expansión contextual, enlaces independientes y resumen cero real (5.797345ms)
|
||||
✔ cabecera es/en: responsable largo o ausente, contexto independiente y mapa con resumen (73.704572ms)
|
||||
✔ perfiles: lista completa y todos desplegados por defecto, incluso con cincuenta perfiles (65.403608ms)
|
||||
✔ perfiles: carga, error y datos retenidos no publican un total como actual (3.463327ms)
|
||||
✔ equipamiento: contador conocido cero, uno, cinco y seis; error conserva filas sin publicar total (9.399973ms)
|
||||
✔ configuración: cobertura desconocida, revisión y notas permanecen fuera del disclosure técnico (2.127716ms)
|
||||
✔ perfiles: una actualización en curso conserva el total conocido y anuncia la actividad (1.27171ms)
|
||||
✔ v2.2: dependencia sin principal conserva mapa y resumen y una explicación principal sin tabla vacía (10.768083ms)
|
||||
✔ v2.2: un vacío confirmado de perfiles conserva el alta y evita cabeceras de una tabla sin filas (0.915007ms)
|
||||
✔ v2.2: soporte distingue perfiles en carga, error, ausencia confirmada y persona no resuelta (2.074516ms)
|
||||
✔ v2.2: referencia de principal no resuelta no publica cero pendientes ni ausencia de perfiles (4.727336ms)
|
||||
✔ v3: Software conserva los tres estados documentales con la misma representación que las familias (20.223157ms)
|
||||
✔ v3: estados técnicos de equipamiento conservan principal y asignación en es/en (10.818084ms)
|
||||
✔ responsable es/en: avatar y nombre abren un único popup y la ausencia no ofrece acciones (2.780222ms)
|
||||
✔ mapa visual: aísla compañías, deduplica miembros y conserva software y estados reales (2.760122ms)
|
||||
✔ mapa es/en: principal solo, vacíos confirmados y error de software conservan navegación y gestión (31.968549ms)
|
||||
✔ mapa: composición vacía y sin principal no fabrica relaciones ni instalaciones (0.884007ms)
|
||||
✔ contexto de persona: rechaza datos de otra compañía y no ofrece acciones (0.537504ms)
|
||||
✔ mapa es/en: carga inicial y carga parcial mantienen estados accesibles (15.615222ms)
|
||||
✔ mapa es/en: leyenda con tres conceptos y cobertura explícita sin totales inventados (1.520912ms)
|
||||
✔ mapa es/en: revisión de software traducida incluso sin referencia navegable (0.999408ms)
|
||||
✔ WD04.4 es/en: acción autorizada, vacío accionable y lectura sin permiso (4.483635ms)
|
||||
✔ perfiles del puesto: configuraciones de todos los activos abiertas y destinos accesibles únicos (11.467489ms)
|
||||
ℹ tests 305
|
||||
ℹ suites 0
|
||||
ℹ pass 302
|
||||
ℹ fail 3
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 5488.410922
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at src/web/companies/shared/companies-page.test.tsx:1:4385
|
||||
✖ la ficha presenta datos de la compañía, contactos y acceso a sedes (15.284819ms)
|
||||
AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
|
||||
|
||||
assert.ok(markup.includes("Personas (1)"))
|
||||
|
||||
at TestContext.<anonymous> (/home/david/dev/metis-desk/modules/companies/src/web/companies/shared/companies-page.test.tsx:180:10)
|
||||
at async Test.run (node:internal/test_runner/test:1404:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:969:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: false,
|
||||
expected: true,
|
||||
operator: '==',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at src/web/companies/shared/companies-page.test.tsx:1:5801
|
||||
✖ el formulario de persona distingue contactos de cuentas de acceso y permite datos opcionales (3.012124ms)
|
||||
AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
|
||||
|
||||
assert.ok(markup.includes("Esta persona no tiene acceso a Metis Desk"))
|
||||
|
||||
at TestContext.<anonymous> (/home/david/dev/metis-desk/modules/companies/src/web/companies/shared/companies-page.test.tsx:210:10)
|
||||
at async Test.run (node:internal/test_runner/test:1404:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:969:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: false,
|
||||
expected: true,
|
||||
operator: '==',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at src/web/software-installations/shared/software.test.tsx:1:2755
|
||||
✖ software del puesto es/en: SO actual, versión, enlaces y separación por ordenador sin formularios incrustados (6.377449ms)
|
||||
AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
|
||||
|
||||
assert.ok(html.includes("Windows 11 Pro"))
|
||||
|
||||
at TestContext.<anonymous> (/home/david/dev/metis-desk/modules/companies/src/web/software-installations/shared/software.test.tsx:126:12)
|
||||
at async Test.run (node:internal/test_runner/test:1404:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:969:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: false,
|
||||
expected: true,
|
||||
operator: '==',
|
||||
diff: 'simple'
|
||||
}
|
||||
@ -0,0 +1,72 @@
|
||||
$ TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/api/domain/company.aggregate.test.ts src/api/domain/people.test.ts src/web/companies/shared/companies-page.test.tsx src/web/people/list/people-search.test.tsx src/web/companies/list/company-filters.test.tsx src/web/shared/helpers/company-list-query-state.test.ts src/api/domain/access/access.test.ts src/api/domain/mail-configuration.test.ts src/api/domain/mailbox.test.ts src/web/access/shared/access.test.tsx src/web/mail-configurations/shared/mail.test.tsx src/api/domain/work-profile.test.ts src/web/work-profiles/shared/profile.test.tsx src/api/domain/printer-configuration.test.ts src/web/printer-configurations/shared/printer.test.tsx src/api/domain/application-configuration.test.ts src/web/application-configurations/shared/application.test.tsx src/api/domain/certificate-configuration.test.ts src/web/certificate-configurations/shared/certificate.test.tsx src/web/work-environments/shared/work-environment.test.tsx src/api/domain/telework-authorization.test.ts src/web/telework-authorizations/shared/telework.test.tsx src/api/domain/remote-connection.test.ts src/api/domain/process.test.ts src/web/remote-connections/shared/remote.test.tsx src/web/processes/shared/processes.test.tsx src/web/shared/initials-avatar.test.tsx src/api/infrastructure/company-logo-processor.test.ts src/web/companies/shared/company-avatar.test.tsx src/web/shared/client-contracts.test.ts src/web/infrastructure/shared/helpers/printer-usage.test.ts src/web/workstations/detail/helpers/workstation-relations.test.ts src/web/workstations/detail/helpers/workplace-map-layout.test.ts src/web/workstations/detail/helpers/workstation-dashboard.test.ts src/web/workstations/detail/helpers/workstation-equipment.test.ts src/web/workstations/detail/helpers/workstation-profile-expansion.test.ts src/web/people/shared/helpers/person-organization.test.ts src/web/workstations/detail/ui/workstation-detail.test.tsx src/web/workspace/shared/workspace-routes.test.ts src/web/workspace/view/helpers/sidebar-preference.test.ts src/api/domain/software-installation.test.ts src/web/software-installations/shared/software.test.tsx src/web/software-installations/shared/current-operating-systems.test.tsx src/api/application/directory-context-plan.test.ts src/web/access/list/helpers/access-environment-filter.test.ts src/api/domain/folder-mapping-account.test.ts src/api/application/local-identity-plan.test.ts src/web/access/list/helpers/access-resource-filter.test.ts src/web/folder-mappings/shared/helpers/folder-account-options.test.ts src/web/local-identity-environments/shared/local-identities-ui.test.tsx
|
||||
✔ src/api/application/directory-context-plan.test.ts (920.725499ms)
|
||||
✔ src/api/application/local-identity-plan.test.ts (1597.65105ms)
|
||||
✔ src/api/domain/access/access.test.ts (1030.916136ms)
|
||||
✔ src/api/domain/application-configuration.test.ts (1519.584147ms)
|
||||
✔ src/api/domain/certificate-configuration.test.ts (1942.098476ms)
|
||||
✔ src/api/domain/company.aggregate.test.ts (710.69082ms)
|
||||
✔ src/api/domain/folder-mapping-account.test.ts (918.243503ms)
|
||||
✔ src/api/domain/mail-configuration.test.ts (1773.265986ms)
|
||||
✔ src/api/domain/mailbox.test.ts (1535.917558ms)
|
||||
✔ src/api/domain/people.test.ts (1001.85018ms)
|
||||
✔ src/api/domain/printer-configuration.test.ts (1611.824206ms)
|
||||
✔ src/api/domain/process.test.ts (965.452238ms)
|
||||
✔ src/api/domain/remote-connection.test.ts (1492.164608ms)
|
||||
✔ src/api/domain/software-installation.test.ts (2293.478641ms)
|
||||
✔ src/api/domain/telework-authorization.test.ts (2263.296019ms)
|
||||
✔ src/api/domain/work-profile.test.ts (1534.323611ms)
|
||||
✔ src/api/infrastructure/company-logo-processor.test.ts (2068.693288ms)
|
||||
✔ src/web/access/list/helpers/access-environment-filter.test.ts (1258.956017ms)
|
||||
✔ src/web/access/list/helpers/access-resource-filter.test.ts (1600.5636ms)
|
||||
✔ src/web/access/shared/access.test.tsx (14115.559107ms)
|
||||
✔ src/web/application-configurations/shared/application.test.tsx (13474.239924ms)
|
||||
✔ src/web/certificate-configurations/shared/certificate.test.tsx (17911.55171ms)
|
||||
✔ src/web/companies/list/company-filters.test.tsx (17539.353653ms)
|
||||
✖ src/web/companies/shared/companies-page.test.tsx (21388.530279ms)
|
||||
✔ src/web/companies/shared/company-avatar.test.tsx (8513.269383ms)
|
||||
✔ src/web/folder-mappings/shared/helpers/folder-account-options.test.ts (1232.913374ms)
|
||||
✔ src/web/infrastructure/shared/helpers/printer-usage.test.ts (1567.906176ms)
|
||||
✔ src/web/local-identity-environments/shared/local-identities-ui.test.tsx (15163.294853ms)
|
||||
✔ src/web/mail-configurations/shared/mail.test.tsx (13050.269887ms)
|
||||
✔ src/web/people/list/people-search.test.tsx (16444.424925ms)
|
||||
✔ src/web/people/shared/helpers/person-organization.test.ts (2405.646764ms)
|
||||
✔ src/web/printer-configurations/shared/printer.test.tsx (12996.914812ms)
|
||||
✔ src/web/processes/shared/processes.test.tsx (14187.430002ms)
|
||||
✔ src/web/remote-connections/shared/remote.test.tsx (13031.307554ms)
|
||||
✔ src/web/shared/client-contracts.test.ts (2840.562757ms)
|
||||
✔ src/web/shared/helpers/company-list-query-state.test.ts (2270.104791ms)
|
||||
✔ src/web/shared/initials-avatar.test.tsx (8237.453737ms)
|
||||
✔ src/web/software-installations/shared/current-operating-systems.test.tsx (8163.639095ms)
|
||||
✖ src/web/software-installations/shared/software.test.tsx (8681.566598ms)
|
||||
✔ src/web/telework-authorizations/shared/telework.test.tsx (8892.452181ms)
|
||||
✔ src/web/work-environments/shared/work-environment.test.tsx (9091.554995ms)
|
||||
✔ src/web/work-profiles/shared/profile.test.tsx (8689.973168ms)
|
||||
✔ src/web/workspace/shared/workspace-routes.test.ts (1224.900444ms)
|
||||
✔ src/web/workspace/view/helpers/sidebar-preference.test.ts (837.895283ms)
|
||||
✔ src/web/workstations/detail/helpers/workplace-map-layout.test.ts (1539.042534ms)
|
||||
✔ src/web/workstations/detail/helpers/workstation-dashboard.test.ts (1277.891709ms)
|
||||
✔ src/web/workstations/detail/helpers/workstation-equipment.test.ts (1373.061762ms)
|
||||
✔ src/web/workstations/detail/helpers/workstation-profile-expansion.test.ts (713.74885ms)
|
||||
✔ src/web/workstations/detail/helpers/workstation-relations.test.ts (1062.474981ms)
|
||||
✔ src/web/workstations/detail/ui/workstation-detail.test.tsx (10063.261661ms)
|
||||
ℹ tests 50
|
||||
ℹ suites 0
|
||||
ℹ pass 48
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 32386.430128
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at src/web/companies/shared/companies-page.test.tsx:1:1
|
||||
✖ src/web/companies/shared/companies-page.test.tsx (21388.530279ms)
|
||||
'test failed'
|
||||
|
||||
test at src/web/software-installations/shared/software.test.tsx:1:1
|
||||
✖ src/web/software-installations/shared/software.test.tsx (8681.566598ms)
|
||||
'test failed'
|
||||
/home/david/dev/metis-desk/modules/companies:
|
||||
[ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL] @metis/companies@0.1.0 test: `TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/api/domain/company.aggregate.test.ts src/api/domain/people.test.ts src/web/companies/shared/companies-page.test.tsx src/web/people/list/people-search.test.tsx src/web/companies/list/company-filters.test.tsx src/web/shared/helpers/company-list-query-state.test.ts src/api/domain/access/access.test.ts src/api/domain/mail-configuration.test.ts src/api/domain/mailbox.test.ts src/web/access/shared/access.test.tsx src/web/mail-configurations/shared/mail.test.tsx src/api/domain/work-profile.test.ts src/web/work-profiles/shared/profile.test.tsx src/api/domain/printer-configuration.test.ts src/web/printer-configurations/shared/printer.test.tsx src/api/domain/application-configuration.test.ts src/web/application-configurations/shared/application.test.tsx src/api/domain/certificate-configuration.test.ts src/web/certificate-configurations/shared/certificate.test.tsx src/web/work-environments/shared/work-environment.test.tsx src/api/domain/telework-authorization.test.ts src/web/telework-authorizations/shared/telework.test.tsx src/api/domain/remote-connection.test.ts src/api/domain/process.test.ts src/web/remote-connections/shared/remote.test.tsx src/web/processes/shared/processes.test.tsx src/web/shared/initials-avatar.test.tsx src/api/infrastructure/company-logo-processor.test.ts src/web/companies/shared/company-avatar.test.tsx src/web/shared/client-contracts.test.ts src/web/infrastructure/shared/helpers/printer-usage.test.ts src/web/workstations/detail/helpers/workstation-relations.test.ts src/web/workstations/detail/helpers/workplace-map-layout.test.ts src/web/workstations/detail/helpers/workstation-dashboard.test.ts src/web/workstations/detail/helpers/workstation-equipment.test.ts src/web/workstations/detail/helpers/workstation-profile-expansion.test.ts src/web/people/shared/helpers/person-organization.test.ts src/web/workstations/detail/ui/workstation-detail.test.tsx src/web/workspace/shared/workspace-routes.test.ts src/web/workspace/view/helpers/sidebar-preference.test.ts src/api/domain/software-installation.test.ts src/web/software-installations/shared/software.test.tsx src/web/software-installations/shared/current-operating-systems.test.tsx src/api/application/directory-context-plan.test.ts src/web/access/list/helpers/access-environment-filter.test.ts src/api/domain/folder-mapping-account.test.ts src/api/application/local-identity-plan.test.ts src/web/access/list/helpers/access-resource-filter.test.ts src/web/folder-mappings/shared/helpers/folder-account-options.test.ts src/web/local-identity-environments/shared/local-identities-ui.test.tsx`
|
||||
Exit status 1
|
||||
@ -0,0 +1 @@
|
||||
$ tsc -p tsconfig.json
|
||||
@ -0,0 +1 @@
|
||||
Checked 3 files in 84ms. Fixed 2 files.
|
||||
@ -0,0 +1,2 @@
|
||||
Evidencias: .artifacts/resources-global-operating-systems-closure
|
||||
MariaDB desechable retirada.
|
||||
@ -0,0 +1,471 @@
|
||||
$ biome lint .
|
||||
docs/auditorias/ficha-puesto-trabajo/implementacion-v3/mediciones.json lint ━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
i The size of the file is 2.5 MiB, which exceeds the configured maximum of 1.0 MiB for this project.
|
||||
Use the `files.maxSize` configuration to change the maximum size of files processed, or `files.includes` to ignore the file.
|
||||
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:33:9 lint/complexity/useSimplifiedLogicExpression FIXABLE ━━━━━━━━━━
|
||||
|
||||
i Logical expression contains unnecessary complexity.
|
||||
|
||||
32 │ async save(companyId: string, personId: string, data: Uint8Array) {
|
||||
> 33 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes)
|
||||
|
||||
i Safe fix: Reduce the complexity of the logical expression.
|
||||
|
||||
31 31 │
|
||||
32 32 │ async save(companyId: string, personId: string, data: Uint8Array) {
|
||||
33 │ - ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success)
|
||||
33 │ + ····if·(!(z.uuid().safeParse(companyId).success·&&·z.uuid().safeParse(personId).success))
|
||||
34 34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
35 35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes)
|
||||
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:49:9 lint/complexity/useSimplifiedLogicExpression FIXABLE ━━━━━━━━━━
|
||||
|
||||
i Logical expression contains unnecessary complexity.
|
||||
|
||||
48 │ async remove(companyId: string, personId: string) {
|
||||
> 49 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
50 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
51 │
|
||||
|
||||
i Safe fix: Reduce the complexity of the logical expression.
|
||||
|
||||
47 47 │
|
||||
48 48 │ async remove(companyId: string, personId: string) {
|
||||
49 │ - ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success)
|
||||
49 │ + ····if·(!(z.uuid().safeParse(companyId).success·&&·z.uuid().safeParse(personId).success))
|
||||
50 50 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
51 51 │
|
||||
|
||||
|
||||
modules/companies/src/api/infrastructure/person-photo-processor.ts:18:9 lint/complexity/useSimplifiedLogicExpression FIXABLE ━━━━━━━━━━
|
||||
|
||||
i Logical expression contains unnecessary complexity.
|
||||
|
||||
17 │ if (
|
||||
> 18 │ !metadata.width ||
|
||||
│ ^^^^^^^^^^^^^^^^^^
|
||||
> 19 │ !metadata.height ||
|
||||
│ ^^^^^^^^^^^^^^^^
|
||||
20 │ metadata.width > PERSON_PHOTO_LIMITS.inputDimension ||
|
||||
21 │ metadata.height > PERSON_PHOTO_LIMITS.inputDimension ||
|
||||
|
||||
i Safe fix: Reduce the complexity of the logical expression.
|
||||
|
||||
16 16 │
|
||||
17 17 │ if (
|
||||
18 │ - ········!metadata.width·||
|
||||
19 │ - ········!metadata.height·||
|
||||
18 │ + ········!(metadata.width·&&metadata.height·)·||
|
||||
20 19 │ metadata.width > PERSON_PHOTO_LIMITS.inputDimension ||
|
||||
21 20 │ metadata.height > PERSON_PHOTO_LIMITS.inputDimension ||
|
||||
|
||||
|
||||
.agents/skills/shadcn/assets/showcase/color-pair.tsx:81:17 lint/style/noNegationElse FIXABLE ━━━━━━━━━━
|
||||
|
||||
! Invert blocks when performing a negation test.
|
||||
|
||||
79 │ }, [])
|
||||
80 │
|
||||
> 81 │ const level = !info
|
||||
│ ^^^^^
|
||||
> 82 │ ? ""
|
||||
...
|
||||
> 88 │ ? "AA Large"
|
||||
> 89 │ : "Fail"
|
||||
│ ^^^^^^^^
|
||||
90 │
|
||||
91 │ return (
|
||||
|
||||
i Safe fix: Invert the condition and the blocks.
|
||||
|
||||
79 79 │ }, [])
|
||||
80 80 │
|
||||
81 │ - ··const·level·=·!info
|
||||
82 │ - ····?·""
|
||||
83 │ - ····:·info.ratio·>=·7
|
||||
81 │ + ··const·level·=·info
|
||||
82 │ + ····?·info.ratio·>=·7
|
||||
84 83 │ ? "AAA"
|
||||
85 84 │ : info.ratio >= 4.5
|
||||
······· │
|
||||
87 86 │ : info.ratio >= 3
|
||||
88 87 │ ? "AA Large"
|
||||
89 │ - ··········:·"Fail"
|
||||
88 │ + ··········:·"Fail"
|
||||
89 │ + ····:·""
|
||||
90 90 │
|
||||
91 91 │ return (
|
||||
|
||||
|
||||
.agents/skills/shadcn/assets/showcase/state-matrix.tsx:1:8 lint/style/useImportType FIXABLE ━━━━━━━━━━
|
||||
|
||||
× All these imports are only used as types.
|
||||
|
||||
> 1 │ import * as React from "react"
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
2 │
|
||||
3 │ import { cn } from "@/lib/utils"
|
||||
|
||||
i Importing the types with import type ensures that they are removed by the compilers and avoids loading unnecessary modules.
|
||||
|
||||
i Safe fix: Use import type.
|
||||
|
||||
1 │ import·type·*·as·React·from·"react"
|
||||
│ +++++
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:25:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
24 │ async get(personId: string) {
|
||||
> 25 │ if (!z.uuid().safeParse(personId).success)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 26 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
27 │ const photo = await this.repository.get(personId);
|
||||
28 │
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
23 23 │
|
||||
24 24 │ async get(personId: string) {
|
||||
25 │ - ····if·(!z.uuid().safeParse(personId).success)
|
||||
26 │ - ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST"));
|
||||
25 │ + ····if·(!z.uuid().safeParse(personId).success)·{
|
||||
26 │ + ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST"));
|
||||
27 │ + ····}
|
||||
27 28 │ const photo = await this.repository.get(personId);
|
||||
28 29 │
|
||||
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:33:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
32 │ async save(companyId: string, personId: string, data: Uint8Array) {
|
||||
> 33 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes)
|
||||
36 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE"));
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
31 31 │
|
||||
32 32 │ async save(companyId: string, personId: string, data: Uint8Array) {
|
||||
33 │ - ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success)
|
||||
34 │ - ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST"));
|
||||
33 │ + ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success)·{
|
||||
34 │ + ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST"));
|
||||
35 │ + ····}
|
||||
35 36 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes)
|
||||
36 37 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE"));
|
||||
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:35:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
33 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success)
|
||||
34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
> 35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 36 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE"));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
37 │ if (!(await this.repository.exists(companyId, personId)))
|
||||
38 │ return Result.fail(new PersonPhotoError("PERSON_NOT_FOUND"));
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
33 33 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success)
|
||||
34 34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
35 │ - ····if·(data.length·>·PERSON_PHOTO_LIMITS.inputBytes)
|
||||
36 │ - ······return·Result.fail(new·PersonPhotoError("PHOTO_TOO_LARGE"));
|
||||
35 │ + ····if·(data.length·>·PERSON_PHOTO_LIMITS.inputBytes)·{
|
||||
36 │ + ······return·Result.fail(new·PersonPhotoError("PHOTO_TOO_LARGE"));
|
||||
37 │ + ····}
|
||||
37 38 │ if (!(await this.repository.exists(companyId, personId)))
|
||||
38 39 │ return Result.fail(new PersonPhotoError("PERSON_NOT_FOUND"));
|
||||
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:37:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes)
|
||||
36 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE"));
|
||||
> 37 │ if (!(await this.repository.exists(companyId, personId)))
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 38 │ return Result.fail(new PersonPhotoError("PERSON_NOT_FOUND"));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
39 │ const processed = await this.processor.optimize(data);
|
||||
40 │
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
35 35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes)
|
||||
36 36 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE"));
|
||||
37 │ - ····if·(!(await·this.repository.exists(companyId,·personId)))
|
||||
38 │ - ······return·Result.fail(new·PersonPhotoError("PERSON_NOT_FOUND"));
|
||||
37 │ + ····if·(!(await·this.repository.exists(companyId,·personId)))·{
|
||||
38 │ + ······return·Result.fail(new·PersonPhotoError("PERSON_NOT_FOUND"));
|
||||
39 │ + ····}
|
||||
39 40 │ const processed = await this.processor.optimize(data);
|
||||
40 41 │
|
||||
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:41:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
39 │ const processed = await this.processor.optimize(data);
|
||||
40 │
|
||||
> 41 │ if (!processed.isSuccess) return Result.fail(processed.error);
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
42 │
|
||||
43 │ return (await this.repository.replace(companyId, personId, processed.data))
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
41 │ ····if·(!processed.isSuccess)·{·return·Result.fail(processed.error);·}
|
||||
│ ++ ++
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:49:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
48 │ async remove(companyId: string, personId: string) {
|
||||
> 49 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 50 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
51 │
|
||||
52 │ return (await this.repository.replace(companyId, personId, null))
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
47 47 │
|
||||
48 48 │ async remove(companyId: string, personId: string) {
|
||||
49 │ - ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success)
|
||||
50 │ - ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST"));
|
||||
49 │ + ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success)·{
|
||||
50 │ + ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST"));
|
||||
51 │ + ····}
|
||||
51 52 │
|
||||
52 53 │ return (await this.repository.replace(companyId, personId, null))
|
||||
|
||||
|
||||
modules/companies/src/api/application/process.use-cases.ts:127:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
125 │ const process = UniqueID.create(id);
|
||||
126 │
|
||||
> 127 │ if (!(company.isSuccess && process.isSuccess))
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 128 │ return Promise.resolve(Result.fail(new ProcessError("INVALID_REQUEST")));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
129 │
|
||||
130 │ return this.repository.remove(company.data, process.data);
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
125 125 │ const process = UniqueID.create(id);
|
||||
126 126 │
|
||||
127 │ - ····if·(!(company.isSuccess·&&·process.isSuccess))
|
||||
128 │ - ······return·Promise.resolve(Result.fail(new·ProcessError("INVALID_REQUEST")));
|
||||
127 │ + ····if·(!(company.isSuccess·&&·process.isSuccess))·{
|
||||
128 │ + ······return·Promise.resolve(Result.fail(new·ProcessError("INVALID_REQUEST")));
|
||||
129 │ + ····}
|
||||
129 130 │
|
||||
130 131 │ return this.repository.remove(company.data, process.data);
|
||||
|
||||
|
||||
modules/companies/src/api/infrastructure/persistence/migrate-people.ts:11:3 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
9 │ const columns = await query.describeTable("company_contacts");
|
||||
10 │
|
||||
> 11 │ if (!columns.photoVersion)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 12 │ await query.addColumn("company_contacts", "photoVersion", {
|
||||
> 13 │ type: DataTypes.STRING(64),
|
||||
> 14 │ allowNull: true,
|
||||
> 15 │ });
|
||||
│ ^^^
|
||||
16 │ for (const [name, length] of [
|
||||
17 │ ["position", 100],
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
9 9 │ const columns = await query.describeTable("company_contacts");
|
||||
10 10 │
|
||||
11 │ - ··if·(!columns.photoVersion)
|
||||
11 │ + ··if·(!columns.photoVersion)·{
|
||||
12 12 │ await query.addColumn("company_contacts", "photoVersion", {
|
||||
13 13 │ type: DataTypes.STRING(64),
|
||||
14 14 │ allowNull: true,
|
||||
15 │ - ····});
|
||||
15 │ + ····});
|
||||
16 │ + ··}
|
||||
16 17 │ for (const [name, length] of [
|
||||
17 18 │ ["position", 100],
|
||||
|
||||
|
||||
modules/companies/src/api/infrastructure/persistence/person-photo-migration.ts:10:3 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
8 │ );
|
||||
9 │
|
||||
> 10 │ if (rows.some((row) => row.name === "person_photos")) return;
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
11 │ await database
|
||||
12 │ .getQueryInterface()
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
10 │ ··if·(rows.some((row)·=>·row.name·===·"person_photos"))·{·return;·}
|
||||
│ ++ ++
|
||||
|
||||
modules/companies/src/api/infrastructure/persistence/sequelize-person-photo.repository.ts:49:7 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
47 │ });
|
||||
48 │
|
||||
> 49 │ if (!person) return false;
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
50 │ if (photo)
|
||||
51 │ await PersonPhotoModel.upsert(
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
49 │ ······if·(!person)·{·return·false;·}
|
||||
│ ++ ++
|
||||
|
||||
modules/companies/src/api/infrastructure/persistence/sequelize-person-photo.repository.ts:50:7 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
49 │ if (!person) return false;
|
||||
> 50 │ if (photo)
|
||||
│ ^^^^^^^^^^
|
||||
> 51 │ await PersonPhotoModel.upsert(
|
||||
> 52 │ { personId, companyId, data: Buffer.from(photo.data), version: photo.version },
|
||||
> 53 │ { transaction }
|
||||
> 54 │ );
|
||||
> 55 │ else await PersonPhotoModel.destroy({ where: { personId }, transaction });
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
56 │ await person.update({ photoVersion: photo?.version ?? null }, { transaction });
|
||||
57 │
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
48 48 │
|
||||
49 49 │ if (!person) return false;
|
||||
50 │ - ······if·(photo)
|
||||
50 │ + ······if·(photo)·{
|
||||
51 51 │ await PersonPhotoModel.upsert(
|
||||
52 52 │ { personId, companyId, data: Buffer.from(photo.data), version: photo.version },
|
||||
53 53 │ { transaction }
|
||||
54 │ - ········);
|
||||
54 │ + ········);
|
||||
55 │ + ······}
|
||||
55 56 │ else await PersonPhotoModel.destroy({ where: { personId }, transaction });
|
||||
56 57 │ await person.update({ photoVersion: photo?.version ?? null }, { transaction });
|
||||
|
||||
|
||||
modules/companies/src/api/infrastructure/persistence/sequelize-person-photo.repository.ts:55:7 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
53 │ { transaction }
|
||||
54 │ );
|
||||
> 55 │ else await PersonPhotoModel.destroy({ where: { personId }, transaction });
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
56 │ await person.update({ photoVersion: photo?.version ?? null }, { transaction });
|
||||
57 │
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
55 │ ······else·{·await·PersonPhotoModel.destroy({·where:·{·personId·},·transaction·});·}
|
||||
│ ++ ++
|
||||
|
||||
modules/companies/src/api/infrastructure/person-photo-processor.ts:17:7 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
15 │ }).metadata();
|
||||
16 │
|
||||
> 17 │ if (
|
||||
│ ^^^^
|
||||
> 18 │ !metadata.width ||
|
||||
...
|
||||
> 23 │ )
|
||||
> 24 │ return Result.fail(new PersonPhotoError("INVALID_PHOTO"));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
25 │ const output = await sharp(input)
|
||||
26 │ .rotate()
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
21 21 │ metadata.height > PERSON_PHOTO_LIMITS.inputDimension ||
|
||||
22 22 │ !["jpeg", "png", "webp"].includes(metadata.format ?? "")
|
||||
23 │ - ······)
|
||||
24 │ - ········return·Result.fail(new·PersonPhotoError("INVALID_PHOTO"));
|
||||
23 │ + ······)·{
|
||||
24 │ + ········return·Result.fail(new·PersonPhotoError("INVALID_PHOTO"));
|
||||
25 │ + ······}
|
||||
25 26 │ const output = await sharp(input)
|
||||
26 27 │ .rotate()
|
||||
|
||||
|
||||
modules/companies/src/api/infrastructure/person-photo-processor.ts:34:7 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
32 │ .toBuffer();
|
||||
33 │
|
||||
> 34 │ if (output.length > PERSON_PHOTO_LIMITS.outputBytes)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 35 │ return Result.fail(new PersonPhotoError("INVALID_PHOTO"));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
36 │
|
||||
37 │ return Result.ok({
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
32 32 │ .toBuffer();
|
||||
33 33 │
|
||||
34 │ - ······if·(output.length·>·PERSON_PHOTO_LIMITS.outputBytes)
|
||||
35 │ - ········return·Result.fail(new·PersonPhotoError("INVALID_PHOTO"));
|
||||
34 │ + ······if·(output.length·>·PERSON_PHOTO_LIMITS.outputBytes)·{
|
||||
35 │ + ········return·Result.fail(new·PersonPhotoError("INVALID_PHOTO"));
|
||||
36 │ + ······}
|
||||
36 37 │
|
||||
37 38 │ return Result.ok({
|
||||
|
||||
|
||||
The number of diagnostics exceeds the limit allowed. Use --max-diagnostics to increase it.
|
||||
Diagnostics not shown: 4.
|
||||
Checked 2201 files in 1241ms. No fixes applied.
|
||||
Found 15 errors.
|
||||
Found 4 warnings.
|
||||
Found 5 infos.
|
||||
lint ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
× Some errors were emitted while running checks.
|
||||
|
||||
|
||||
[ELIFECYCLE] Command failed with exit code 1.
|
||||
@ -0,0 +1,2 @@
|
||||
Evidencias: .artifacts/resources-global-operating-systems
|
||||
MariaDB desechable retirada.
|
||||
@ -0,0 +1 @@
|
||||
Checked 3 files in 71ms. No fixes applied.
|
||||
@ -0,0 +1,2 @@
|
||||
Evidencias: .artifacts/resources-global-scope/r2-5
|
||||
MariaDB desechable retirada.
|
||||
@ -0,0 +1,125 @@
|
||||
$ TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/api/application/application-coincidence.test.ts src/api/domain/resource-catalog.test.ts src/api/domain/resource.test.ts src/api/domain/resource-template-propagation.test.ts src/api/application/resource-lifecycle.test.ts src/web/catalog/shared/catalog.test.tsx src/web/resources/shared/resources.test.tsx src/web/resources/shared/resource-values.test.ts src/api/domain/template-sections.test.ts src/web/catalog-fields/select/catalog-field-selection.test.tsx src/api/domain/directory-domain.test.ts src/api/domain/network-share.test.ts src/api/domain/resource-scope.test.ts src/api/infrastructure/persistence/resource-scope-reader.test.ts src/api/application/resource-scope.test.ts src/api/application/resource-reference-contracts.test.ts src/api/domain/global-resource.test.ts src/web/global-applications/shared/global-applications.test.tsx src/api/domain/operating-system-identity.test.ts src/api/application/global-operating-system-contracts.test.ts src/api/application/global-operating-system-policy.test.ts src/web/resources/shared/ui/resource-characteristic-control.test.tsx
|
||||
✔ R2.6: nombre y proveedor son señales, nunca equivalencia confirmada (1.699913ms)
|
||||
✔ R2.6: preserva tildes, puntuación, abreviaturas, ediciones, versiones y números (0.580805ms)
|
||||
✔ R2.6: homónimos genéricos se mantienen débiles y los UUID nunca se sustituyen (46.548773ms)
|
||||
✔ F2: SO global público tipado, sin contaminación de aplicaciones ni perfiles (23.178785ms)
|
||||
✔ F2: elegibilidad de SO exige stock real y campos globales (0.321003ms)
|
||||
✔ F2: contrato 3 y gates de SO independientes; aplicaciones no abren SO (0.307002ms)
|
||||
✔ F3: cualquier escritor valida identidad publicada, corrección documental e historial (43.431848ms)
|
||||
✔ recurso: activar/desactivar conserva datos e historial y repetir estado no añade revisiones (14.141413ms)
|
||||
✔ recurso: valida identidades y rechaza actuar sobre recursos ajenos (3.098925ms)
|
||||
✔ recurso: propaga el bloqueo por asociaciones y permite desactivar (1.761114ms)
|
||||
✔ recurso: elimina y la repetición devuelve ausencia sin efectos adicionales (1.309911ms)
|
||||
✔ elegibilidad global exige serie exacta y campos globales; las copias no elevan ámbito (1.830514ms)
|
||||
✔ schemas discriminan owner, propósito, OS local y proyecciones privadas (57.498361ms)
|
||||
✔ requests acotan lotes, consulta, paginación y rechazan privilegios o integración (9.851179ms)
|
||||
✔ búsqueda literal conserva ñ, puntuación y espacios; pagina tras filtrar con desempate UUID (16.752234ms)
|
||||
✔ R2.5 admite gates configurables; los valores predeterminados siguen cerrados (0.481304ms)
|
||||
✔ R2.5: software y perfil se habilitan por separado y requieren catálogo (0.361603ms)
|
||||
✔ R2.5: perfil no depende de software ni abre asociaciones con catálogo cerrado (1.539512ms)
|
||||
✔ lectores locales: excluyen global y otra compañía incluso si el repositorio los entrega; stockKey no depende del nombre (21.125569ms)
|
||||
✔ HTTP actual sin MariaDB: aislamiento con 15 compañías, 50 recursos locales, alta, edición, estado e historial (441.397533ms)
|
||||
✔ DNS: normalización explícita, etiqueta única heredada, punto raíz y política ASCII IDN (9.070873ms)
|
||||
✔ capacidad estable: la plantilla renombrada sigue siendo dominio y una copia arbitraria no (7.771562ms)
|
||||
✔ alta, edición, DNS y archivo usan Resource y conservan su identidad e historial (17.795442ms)
|
||||
✔ catálogo: DNS obligatorio protegido, NetBIOS opcional e inicialización idempotente (20.136661ms)
|
||||
✔ identificadores de campo: mayúsculas no cambian identidad ni permiten duplicados (5.468044ms)
|
||||
✔ global: crear exige UUID v7 y conserva identidad y propietario en edición e idempotencia (37.623302ms)
|
||||
✔ global: captura por stockKey, sin depender del nombre traducido de la plantilla (3.901332ms)
|
||||
✔ SMB acepta \\NAS-01\Finanzas (4.606937ms)
|
||||
✔ SMB acepta \\files.example.local\Docs (0.399103ms)
|
||||
✔ SMB acepta \\192.168.5.10\C$ (2.366018ms)
|
||||
✔ SMB acepta \\samba\Diseño\Año 2026 (0.447604ms)
|
||||
✔ SMB acepta \\NAS\Docs\ (0.590605ms)
|
||||
✔ SMB rechaza "" (0.686905ms)
|
||||
✔ SMB rechaza "\\\\" (0.582205ms)
|
||||
✔ SMB rechaza "\\\\host" (0.369603ms)
|
||||
✔ SMB rechaza "\\\\\\share" (2.023717ms)
|
||||
✔ SMB rechaza "\\\\host\\\\" (2.093316ms)
|
||||
✔ SMB rechaza "C:\\Datos" (0.295903ms)
|
||||
✔ SMB rechaza "https://host/share" (0.215702ms)
|
||||
✔ SMB rechaza "\\\\host\\share\\.." (0.441004ms)
|
||||
✔ SMB rechaza "\\\\host\\share\\." (0.151401ms)
|
||||
✔ SMB rechaza "\\\\?\\UNC\\host\\share" (0.145201ms)
|
||||
✔ SMB rechaza "\\\\host\\share\\\\child" (0.923908ms)
|
||||
✔ SMB rechaza "\\\\host\\share." (0.123801ms)
|
||||
✔ SMB rechaza "\\\\host\\ share" (0.097201ms)
|
||||
✔ SMB rechaza "\\\\ho st\\share" (0.082901ms)
|
||||
✔ SMB rechaza "\\\\host\\bad\u0000" (0.524505ms)
|
||||
✔ SMB rechaza "\\\\host\\bad\ud800" (0.299903ms)
|
||||
✔ SMB rechaza "\\\\host\\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" (0.212102ms)
|
||||
✔ SMB: comparación conservadora, alias y Unicode sin transformaciones destructivas (0.564105ms)
|
||||
✔ SMB: semántica por stockKey y protección del catálogo sin bloquear etiquetas u obligatoriedad (35.828588ms)
|
||||
✔ SMB: alta validada y diagnóstico histórico sin conversión ni revisión (33.387968ms)
|
||||
✔ SMB: nuevas altas fijan integración access y rechazan contexto incompatible (37.266499ms)
|
||||
✔ F1: identidad completa, edición conocida/no aplicable/desconocida e inactivos (20.083861ms)
|
||||
✔ F1: normalización conservadora no equipara ediciones, releases ni ausencia desconocida (0.495804ms)
|
||||
✔ F1: evolución de stock personalizada e idempotente; no elimina campos ni cambia obligatoriedad (57.930365ms)
|
||||
✔ F1: un catálogo anterior evoluciona sin sobrescribir bindings ni recursos particulares (50.349204ms)
|
||||
✔ catálogo de recursos: serie idempotente, UUID v7, características opcionales y protección (83.426968ms)
|
||||
✔ ámbitos, tipos, listas, campos externos y disponibilidad por compañía (19.875959ms)
|
||||
✔ licencias: ampliar un catálogo previo conserva identidades y disponibilidad (137.840603ms)
|
||||
✔ plantillas globales de serie editables: conserva identidad, asociaciones, disponibilidad y cambios al reiniciar (20.478764ms)
|
||||
✔ campos globales de serie editables: listas ampliables, tipo fijo y opciones existentes conservadas (31.988256ms)
|
||||
✔ sistema operativo: plantilla con uso explícito, copia y ampliación sin sobrescribir definiciones (20.02926ms)
|
||||
✔ iconos de recursos: todas las plantillas de serie tienen su icono y el arranque no repone los retirados (46.129369ms)
|
||||
✔ iconos de recursos: cambiar y retirar el icono conserva identidad y asociaciones, con guardado idempotente (21.712374ms)
|
||||
✔ iconos de recursos: claves desconocidas, cadenas vacías e iconos de campos se rechazan (9.329074ms)
|
||||
✔ ámbito: pares válidos y rechazo runtime de propietarios contradictorios o ausentes (17.687141ms)
|
||||
✔ ámbito: proyección preparada separada; HTTP local conserva exactamente su contrato (6.445151ms)
|
||||
✔ ámbito: edición y propagación locales conservan propietario, UUID e historia; globales son solo lectura (3.402127ms)
|
||||
✔ Resource: propaga altas, orden y retiradas conservando cero/falso, valores e historial; repetir no genera revisiones (77.254018ms)
|
||||
✔ Resource: los campos retirados no impiden añadir una plantilla completa y no se fusionan por nombre (13.70791ms)
|
||||
✔ Resource: retirar secciones conserva solo las necesarias y mover o reincorporar campos aplica el destino (1.053209ms)
|
||||
✔ recursos: tipos, valores opcionales y obligatorios, cero/falso y campos desconocidos (14.88912ms)
|
||||
✔ recurso: identidad estable, historial, desactivación e idempotencia (3.419128ms)
|
||||
✔ buzón como recurso: correo válido, cuenta opcional, cambios auditados y tipo fijo (4.757938ms)
|
||||
✔ secciones: nombres, identidades, referencias y un solo nivel (13.941711ms)
|
||||
✔ secciones: igualdad, orden, identidad y persistencia JSON (3.028324ms)
|
||||
✔ secciones: plantillas globales y locales conservan separación y UUID al editar (5.028041ms)
|
||||
✔ secciones de serie: el arranque conserva una plantilla sin grupos y su disponibilidad (25.837306ms)
|
||||
✔ especificación: secciones capturadas, edición posterior y obligatoriedad independiente (27.987024ms)
|
||||
✔ lector legacy: roundtrip conserva UUID, revisiones, valores, actor, fecha y DTO sin columna scope (60.487383ms)
|
||||
✔ lector: solo el adaptador legacy conocido interpreta ausencia; ningún ámbito inválido usa fallback (7.262458ms)
|
||||
✔ proyecciones operativas: global sintético se rechaza antes de SQL, el recurso local sin integración no crea proyección (160.026378ms)
|
||||
✔ escritor scoped: envía company explícito, preserva la salida legacy y rechaza global (2.60512ms)
|
||||
✔ selección múltiple añade un lote sin duplicados y conserva las reglas y el orden existentes (5.089634ms)
|
||||
✔ añadir desde una sección asigna solo los campos nuevos a su destino y conserva los existentes (1.894213ms)
|
||||
✔ la selección respeta el límite del schema, valida identificadores y rechaza el conjunto vacío (1.829113ms)
|
||||
✔ el listado reutiliza tabla, búsqueda y casillas traducidas y conserva las selecciones bloqueadas (139.883942ms)
|
||||
✔ L04.2: campos de recursos recuperan orden y página sin heredar otra pestaña (210.977417ms)
|
||||
✔ el catálogo muestra plantillas de serie y acción de alta sin formularios junto al listado (145.583478ms)
|
||||
✔ los formularios tienen ayuda inferior y selección de campos en diálogo con alta rápida (58.885096ms)
|
||||
✔ iconos de recursos: catálogo y selector traducido conservan la selección al editar y copiar (302.953133ms)
|
||||
✔ catálogo global: lectura mínima y navegación traducidas, sin administración para ordinarios (53.413359ms)
|
||||
✔ R2.4: mutación global invalida solo instalaciones cacheadas que usan su UUID (5.183435ms)
|
||||
✔ R2.5: cambio global invalida configuraciones afectadas y preserva otras compañías (2.038913ms)
|
||||
✔ SO global: lectura pública es/en conserva identidad estructurada y navegación propia (14.714699ms)
|
||||
✔ SO global: invalida software y su catálogo sin refrescar aplicaciones ni perfiles (2.332616ms)
|
||||
✔ la integración de buzón conserva su configuración explícita y no inventa referencias (1.387811ms)
|
||||
✔ los valores iniciales toleran catálogo pendiente y limitan el nombre sin cambiar la entrada (1.339411ms)
|
||||
✔ nombre propuesto: prioriza los identificadores de cada plantilla y limita su longitud (21.132869ms)
|
||||
✔ nombre propuesto: contempla campos personalizados y descarta valores no identificativos (0.393603ms)
|
||||
✔ paso de campos: exige valores obligatorios y acepta cero y respuestas negativas (0.693206ms)
|
||||
✔ paso de campos: requiere la dirección de buzón aunque la plantilla la marque opcional (10.10018ms)
|
||||
✔ recursos: listado con alta modal y sin formulario visible, en español e inglés (168.306127ms)
|
||||
✔ Recursos: las pestañas incluyen plantillas vacías e inactivas y combinan identidad y búsqueda (461.579092ms)
|
||||
✔ recurso: ayuda inferior, plantilla con alta rápida y sin asignaciones de recursos (31.277909ms)
|
||||
✔ licencia: formulario reutilizable con campos opcionales y ayuda antes de guardar (52.151549ms)
|
||||
✔ asistencia: alta de recurso con plantilla específica y características opcionales (17.362316ms)
|
||||
✔ alta por pasos: solo muestra la plantilla inicialmente y traduce su navegación (24.271862ms)
|
||||
✔ indicador de alta: conserva la plantilla elegida y explica el paso actual en ambos idiomas (22.589651ms)
|
||||
✔ recursos: resumen de plantilla con unidades, booleanos traducidos, cero y límite de cuatro (35.994041ms)
|
||||
✔ recursos: ficha lateral compacta traducida con cierre, acciones y contenido relacionado (32.164215ms)
|
||||
✔ recursos: inventario y panel usan el icono vigente de la plantilla sin cambiar la especificación (28.619992ms)
|
||||
✔ dominio: el formulario traduce el contexto pendiente y solo presenta un entorno confirmado (22.602363ms)
|
||||
✔ SMB: formulario explica acceso automático o histórico sin selectores incompatibles, es/en (13.390298ms)
|
||||
✔ campo declarativo: traduce opciones propias y conserva valores que coinciden con el prototipo (43.687047ms)
|
||||
ℹ tests 116
|
||||
ℹ suites 0
|
||||
ℹ pass 116
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 7616.147191
|
||||
@ -0,0 +1 @@
|
||||
$ tsc -p tsconfig.json
|
||||
@ -0,0 +1,29 @@
|
||||
$ turbo run typecheck
|
||||
• turbo 2.9.14
|
||||
|
||||
• Packages in scope: @metis/assets, @metis/companies, @metis/core, @metis/identity, @metis/relationship-contracts, @metis/resources, @metis/server, @metis/web, @repo/rdx-ddd, @repo/rdx-ui, @repo/rdx-utils, @repo/shadcn-ui, @repo/typescript-config
|
||||
• Running typecheck in 13 packages
|
||||
• Remote caching disabled
|
||||
|
||||
@repo/rdx-utils:typecheck: cache hit, replaying logs e660b2f14d16d88c
|
||||
@repo/rdx-utils:typecheck: $ tsc -p tsconfig.json
|
||||
@repo/shadcn-ui:typecheck: cache miss, executing 3a02880bf260fd89
|
||||
@repo/rdx-ddd:typecheck: cache hit, replaying logs 315b0dccfb6d76d3
|
||||
@repo/rdx-ddd:typecheck: $ tsc -p tsconfig.json
|
||||
@metis/relationship-contracts:typecheck: cache hit, replaying logs 6ecbe82d1a36ae07
|
||||
@metis/relationship-contracts:typecheck: $ tsc -p tsconfig.json
|
||||
@repo/shadcn-ui:typecheck: $ tsc -p tsconfig.json
|
||||
@repo/shadcn-ui:typecheck: src/components/calendar.tsx(165,12): error TS2375: Type '{ day: CalendarDay; modifiers: Modifiers; disabled?: boolean | undefined; form?: string | undefined; formAction?: string | ((formData: FormData) => void | Promise<...>) | undefined; ... 285 more ...; locale: Partial<...> | undefined; }' is not assignable to type '{ locale?: Partial<DayPickerLocale>; }' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties.
|
||||
@repo/shadcn-ui:typecheck: Types of property 'locale' are incompatible.
|
||||
@repo/shadcn-ui:typecheck: Type 'Partial<DayPickerLocale> | undefined' is not assignable to type 'Partial<DayPickerLocale>'.
|
||||
@repo/shadcn-ui:typecheck: Type 'undefined' is not assignable to type 'Partial<DayPickerLocale>'.
|
||||
@repo/shadcn-ui:typecheck: [ELIFECYCLE] Command failed with exit code 2.
|
||||
ERROR @repo/shadcn-ui#typecheck: command (/home/david/dev/metis-desk/packages/shadcn-ui) /home/david/.nvm/versions/node/v24.20.0/bin/pnpm run typecheck exited (2)
|
||||
|
||||
Tasks: 3 successful, 4 total
|
||||
Cached: 3 cached, 4 total
|
||||
Time: 8.191s
|
||||
Failed: @repo/shadcn-ui#typecheck
|
||||
|
||||
ERROR run failed: command exited (2)
|
||||
[ELIFECYCLE] Command failed with exit code 2.
|
||||
@ -0,0 +1 @@
|
||||
$ tsc -p tsconfig.json
|
||||
@ -0,0 +1,30 @@
|
||||
✖ software del puesto es/en: SO actual, versión, enlaces y separación por ordenador sin formularios incrustados (75.741516ms)
|
||||
✔ formulario software: recurso fijo en edición, estados permitidos, ayuda y ausencia de persona/perfil (19.082655ms)
|
||||
✔ R2.4: nombre, origen y enlace global se resuelven sin ResourceDTO local; licencia continúa particular (44.940666ms)
|
||||
ℹ tests 3
|
||||
ℹ suites 0
|
||||
ℹ pass 2
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 3445.589616
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at src/web/software-installations/shared/software.test.tsx:1:2755
|
||||
✖ software del puesto es/en: SO actual, versión, enlaces y separación por ordenador sin formularios incrustados (75.741516ms)
|
||||
AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
|
||||
|
||||
assert.ok(html.includes("Windows 11 Pro"))
|
||||
|
||||
at TestContext.<anonymous> (/home/david/dev/metis-desk/modules/companies/src/web/software-installations/shared/software.test.tsx:126:12)
|
||||
at async Test.run (node:internal/test_runner/test:1404:7)
|
||||
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: false,
|
||||
expected: true,
|
||||
operator: '==',
|
||||
diff: 'simple'
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
Evidencias: .artifacts/resources-global-scope/r2-4
|
||||
MariaDB desechable retirada.
|
||||
@ -0,0 +1,139 @@
|
||||
• turbo 2.9.14
|
||||
|
||||
• Packages in scope: @metis/assets, @metis/companies, @metis/resources, @metis/web
|
||||
• Running test in 4 packages
|
||||
• Remote caching disabled
|
||||
|
||||
@metis/core:test: cache bypass, force executing 2283a7af50b4c3f8
|
||||
@repo/rdx-ddd:test: cache bypass, force executing b722cdfdd985a9bd
|
||||
@metis/relationship-contracts:test: cache bypass, force executing 97138537b462262f
|
||||
@repo/rdx-ui:test: cache bypass, force executing 5086968a87d10983
|
||||
@repo/rdx-ui:test: $ TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/select-with-action.test.tsx src/selection-components.test.tsx src/entity-list.test.tsx src/compact-collections.test.tsx src/entity-column-visibility.test.tsx src/time-line.test.tsx src/count-badge.test.tsx src/scrollable-tabs.test.tsx src/field-sections.test.tsx src/phone-link.test.tsx src/lib/reorder-items.test.ts src/lib/text-search.test.ts src/remote-option-list.test.tsx src/dialog-help.test.tsx
|
||||
@metis/core:test: $ node --import tsx --test src/common/dto/response/get-health.response.dto.test.ts src/web/navigation/shared/browser-navigation.test.ts src/web/http/shared/api/csrf-fetch.test.ts
|
||||
@repo/rdx-ddd:test: $ node --import tsx --test src/domain-model.test.ts
|
||||
@metis/relationship-contracts:test: $ node --import tsx --test --test-isolation=none src/*.test.ts
|
||||
@metis/relationship-contracts:test: ✔ referencias UUID estables, normalizadas, inmutables y con proveedor coherente (14.493412ms)
|
||||
@metis/relationship-contracts:test: ✔ namespaces canónicos, sin identificadores de tabla, espacios ni segmentos vacíos (3.332125ms)
|
||||
@metis/relationship-contracts:test: ✔ el catálogo valida propietarios, namespaces, duplicados y definiciones (19.116348ms)
|
||||
@metis/relationship-contracts:test: ✔ el catálogo crea una copia profundamente inmutable sin congelar la entrada (0.736505ms)
|
||||
@metis/relationship-contracts:test: ✔ relaciones dirigidas, simétricas y derivadas respetan su semántica declarativa (1.24331ms)
|
||||
@metis/relationship-contracts:test: ✔ consulta estricta: límites, cursores y ausencia de privilegios del navegador (11.466789ms)
|
||||
@metis/relationship-contracts:test: ✔ validación de ámbito, tipo y sentido de consulta sin conceder autorización (6.281048ms)
|
||||
@metis/relationship-contracts:test: ✔ orígenes y páginas conservan referencias sin mezclar compañías (15.083516ms)
|
||||
@metis/relationship-contracts:test: ✔ servicios de prueba por lotes y errores compatibles con Result de Metis (8.460665ms)
|
||||
@metis/relationship-contracts:test: ✔ el grafo de dependencias del paquete es acíclico y ajeno a módulos funcionales (77.414498ms)
|
||||
@metis/relationship-contracts:test: ✔ las importaciones internas de producción no contienen ciclos ni imports privados (13.431604ms)
|
||||
@metis/relationship-contracts:test: ✔ capacidades semánticas explícitas sin registrar proveedores ficticios (1.442011ms)
|
||||
@metis/relationship-contracts:test: ✔ rol semántico opcional conserva la compatibilidad de vistas comunes sin metadatos libres (1.569913ms)
|
||||
@metis/relationship-contracts:test: ℹ tests 13
|
||||
@metis/relationship-contracts:test: ℹ suites 0
|
||||
@metis/relationship-contracts:test: ℹ pass 13
|
||||
@metis/relationship-contracts:test: ℹ fail 0
|
||||
@metis/relationship-contracts:test: ℹ cancelled 0
|
||||
@metis/relationship-contracts:test: ℹ skipped 0
|
||||
@metis/relationship-contracts:test: ℹ todo 0
|
||||
@metis/relationship-contracts:test: ℹ duration_ms 1075.093021
|
||||
@metis/core:test: ✔ src/common/dto/response/get-health.response.dto.test.ts (1142.559042ms)
|
||||
@metis/core:test: ✔ src/web/http/shared/api/csrf-fetch.test.ts (909.006438ms)
|
||||
@metis/core:test: ✔ src/web/navigation/shared/browser-navigation.test.ts (1081.180368ms)
|
||||
@metis/core:test: ℹ tests 3
|
||||
@metis/core:test: ℹ suites 0
|
||||
@metis/core:test: ℹ pass 3
|
||||
@metis/core:test: ℹ fail 0
|
||||
@metis/core:test: ℹ cancelled 0
|
||||
@metis/core:test: ℹ skipped 0
|
||||
@metis/core:test: ℹ todo 0
|
||||
@metis/core:test: ℹ duration_ms 1157.002755
|
||||
@repo/rdx-ddd:test: ✔ src/domain-model.test.ts (1226.690593ms)
|
||||
@repo/rdx-ddd:test: ℹ tests 1
|
||||
@repo/rdx-ddd:test: ℹ suites 0
|
||||
@repo/rdx-ddd:test: ℹ pass 1
|
||||
@repo/rdx-ddd:test: ℹ fail 0
|
||||
@repo/rdx-ddd:test: ℹ cancelled 0
|
||||
@repo/rdx-ddd:test: ℹ skipped 0
|
||||
@repo/rdx-ddd:test: ℹ todo 0
|
||||
@repo/rdx-ddd:test: ℹ duration_ms 1238.792387
|
||||
@repo/rdx-ui:test: ✔ src/compact-collections.test.tsx (3027.156168ms)
|
||||
@repo/rdx-ui:test: ✔ src/count-badge.test.tsx (720.217379ms)
|
||||
@repo/rdx-ui:test: ✔ src/dialog-help.test.tsx (2084.548513ms)
|
||||
@repo/rdx-ui:test: ✔ src/entity-column-visibility.test.tsx (2761.802429ms)
|
||||
@repo/rdx-ui:test: ✔ src/entity-list.test.tsx (3518.538044ms)
|
||||
@repo/rdx-ui:test: ✔ src/field-sections.test.tsx (2801.394032ms)
|
||||
@repo/rdx-ui:test: ✔ src/lib/reorder-items.test.ts (615.62897ms)
|
||||
@repo/rdx-ui:test: ✔ src/lib/text-search.test.ts (790.25402ms)
|
||||
@repo/rdx-ui:test: ✔ src/phone-link.test.tsx (1098.081898ms)
|
||||
@repo/rdx-ui:test: ✔ src/remote-option-list.test.tsx (1231.091227ms)
|
||||
@repo/rdx-ui:test: ✔ src/scrollable-tabs.test.tsx (1718.010786ms)
|
||||
@repo/rdx-ui:test: ✔ src/select-with-action.test.tsx (2005.550877ms)
|
||||
@repo/rdx-ui:test: ✔ src/selection-components.test.tsx (2647.551907ms)
|
||||
@repo/rdx-ui:test: ✔ src/time-line.test.tsx (773.247176ms)
|
||||
@repo/rdx-ui:test: ℹ tests 14
|
||||
@repo/rdx-ui:test: ℹ suites 0
|
||||
@repo/rdx-ui:test: ℹ pass 14
|
||||
@repo/rdx-ui:test: ℹ fail 0
|
||||
@repo/rdx-ui:test: ℹ cancelled 0
|
||||
@repo/rdx-ui:test: ℹ skipped 0
|
||||
@repo/rdx-ui:test: ℹ todo 0
|
||||
@repo/rdx-ui:test: ℹ duration_ms 3553.728217
|
||||
@metis/identity:test: cache bypass, force executing a743134752c9c6b1
|
||||
@metis/resources:test: cache bypass, force executing 20e414ea3b9e3c68
|
||||
@metis/identity:test: $ node --import tsx --test src/api/domain/user.aggregate.test.ts src/api/application/global-resource-authorization.test.ts src/api/infrastructure/persistence/user-persistence.mapper.test.ts src/api/infrastructure/security/scrypt-password-hasher.test.ts src/web/shared/api/identity-api.test.ts
|
||||
@metis/resources:test: $ TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/api/application/application-coincidence.test.ts src/api/domain/resource-catalog.test.ts src/api/domain/resource.test.ts src/api/domain/resource-template-propagation.test.ts src/api/application/resource-lifecycle.test.ts src/web/catalog/shared/catalog.test.tsx src/web/resources/shared/resources.test.tsx src/web/resources/shared/resource-values.test.ts src/api/domain/template-sections.test.ts src/web/catalog-fields/select/catalog-field-selection.test.tsx src/api/domain/directory-domain.test.ts src/api/domain/network-share.test.ts src/api/domain/resource-scope.test.ts src/api/infrastructure/persistence/resource-scope-reader.test.ts src/api/application/resource-scope.test.ts src/api/application/resource-reference-contracts.test.ts src/api/domain/global-resource.test.ts src/web/global-applications/shared/global-applications.test.tsx src/api/domain/operating-system-identity.test.ts src/api/application/global-operating-system-contracts.test.ts src/api/application/global-operating-system-policy.test.ts src/web/resources/shared/ui/resource-characteristic-control.test.tsx
|
||||
@metis/resources:test: ✔ src/api/application/application-coincidence.test.ts (904.101594ms)
|
||||
@metis/identity:test: ✔ src/api/application/global-resource-authorization.test.ts (1491.397701ms)
|
||||
@metis/identity:test: ✔ src/api/domain/user.aggregate.test.ts (1565.636589ms)
|
||||
@metis/identity:test: ✔ src/api/infrastructure/persistence/user-persistence.mapper.test.ts (1511.645128ms)
|
||||
@metis/resources:test: ✔ src/api/application/global-operating-system-contracts.test.ts (1467.720132ms)
|
||||
@metis/resources:test: ✔ src/api/application/global-operating-system-policy.test.ts (1726.102443ms)
|
||||
@metis/resources:test: ✔ src/api/application/resource-lifecycle.test.ts (2014.42605ms)
|
||||
@metis/resources:test: ✔ src/api/application/resource-reference-contracts.test.ts (1899.902285ms)
|
||||
@metis/resources:test: ✖ src/api/application/resource-scope.test.ts (2756.008062ms)
|
||||
@metis/resources:test: ✔ src/api/domain/directory-domain.test.ts (1041.202265ms)
|
||||
@metis/resources:test: ✔ src/api/domain/global-resource.test.ts (1020.347922ms)
|
||||
@metis/resources:test: ✔ src/api/domain/network-share.test.ts (2023.963875ms)
|
||||
@metis/resources:test: ✔ src/api/domain/operating-system-identity.test.ts (1722.600473ms)
|
||||
@metis/resources:test: ✔ src/api/domain/resource-catalog.test.ts (1264.096018ms)
|
||||
@metis/resources:test: ✔ src/api/domain/resource-scope.test.ts (1884.35092ms)
|
||||
@metis/resources:test: ✔ src/api/domain/resource-template-propagation.test.ts (1219.260595ms)
|
||||
@metis/resources:test: ✔ src/api/domain/resource.test.ts (1764.786512ms)
|
||||
@metis/resources:test: ✔ src/api/domain/template-sections.test.ts (1604.25218ms)
|
||||
@metis/resources:test: ✔ src/api/infrastructure/persistence/resource-scope-reader.test.ts (2009.935002ms)
|
||||
@metis/identity:test: ✔ src/api/infrastructure/security/scrypt-password-hasher.test.ts (3675.020889ms)
|
||||
@metis/identity:test: ✔ src/web/shared/api/identity-api.test.ts (1752.747028ms)
|
||||
@metis/identity:test: ℹ tests 5
|
||||
@metis/identity:test: ℹ suites 0
|
||||
@metis/identity:test: ℹ pass 5
|
||||
@metis/identity:test: ℹ fail 0
|
||||
@metis/identity:test: ℹ cancelled 0
|
||||
@metis/identity:test: ℹ skipped 0
|
||||
@metis/identity:test: ℹ todo 0
|
||||
@metis/identity:test: ℹ duration_ms 3695.152343
|
||||
@metis/resources:test: ✔ src/web/catalog-fields/select/catalog-field-selection.test.tsx (3164.484076ms)
|
||||
@metis/resources:test: ✔ src/web/catalog/shared/catalog.test.tsx (3602.181788ms)
|
||||
@metis/resources:test: ✔ src/web/global-applications/shared/global-applications.test.tsx (3052.221338ms)
|
||||
@metis/resources:test: ✔ src/web/resources/shared/resource-values.test.ts (1192.006278ms)
|
||||
@metis/resources:test: ✔ src/web/resources/shared/resources.test.tsx (3780.135665ms)
|
||||
@metis/resources:test: ✔ src/web/resources/shared/ui/resource-characteristic-control.test.tsx (1881.736669ms)
|
||||
@metis/resources:test: ℹ tests 22
|
||||
@metis/resources:test: ℹ suites 0
|
||||
@metis/resources:test: ℹ pass 21
|
||||
@metis/resources:test: ℹ fail 1
|
||||
@metis/resources:test: ℹ cancelled 0
|
||||
@metis/resources:test: ℹ skipped 0
|
||||
@metis/resources:test: ℹ todo 0
|
||||
@metis/resources:test: ℹ duration_ms 5886.51397
|
||||
@metis/resources:test:
|
||||
@metis/resources:test: ✖ failing tests:
|
||||
@metis/resources:test:
|
||||
@metis/resources:test: test at src/api/application/resource-scope.test.ts:1:1
|
||||
@metis/resources:test: ✖ src/api/application/resource-scope.test.ts (2756.008062ms)
|
||||
@metis/resources:test: 'test failed'
|
||||
@metis/resources:test: [ELIFECYCLE] Test failed. See above for more details.
|
||||
ERROR @metis/resources#test: command (/home/david/dev/metis-desk/modules/resources) /home/david/.nvm/versions/node/v24.20.0/bin/pnpm run test exited (1)
|
||||
|
||||
Tasks: 5 successful, 6 total
|
||||
Cached: 0 cached, 6 total
|
||||
Time: 11.545s
|
||||
Failed: @metis/resources#test
|
||||
|
||||
ERROR run failed: command exited (1)
|
||||
@ -0,0 +1,27 @@
|
||||
• turbo 2.9.14
|
||||
|
||||
• Packages in scope: @metis/assets, @metis/companies, @metis/resources, @metis/server, @metis/web
|
||||
• Running typecheck in 5 packages
|
||||
• Remote caching disabled
|
||||
|
||||
@repo/shadcn-ui:typecheck: cache miss, executing 3a02880bf260fd89
|
||||
@repo/rdx-utils:typecheck: cache hit, replaying logs e660b2f14d16d88c
|
||||
@repo/rdx-utils:typecheck: $ tsc -p tsconfig.json
|
||||
@repo/rdx-ddd:typecheck: cache hit, replaying logs 315b0dccfb6d76d3
|
||||
@repo/rdx-ddd:typecheck: $ tsc -p tsconfig.json
|
||||
@metis/relationship-contracts:typecheck: cache hit, replaying logs 6ecbe82d1a36ae07
|
||||
@metis/relationship-contracts:typecheck: $ tsc -p tsconfig.json
|
||||
@repo/shadcn-ui:typecheck: $ tsc -p tsconfig.json
|
||||
@repo/shadcn-ui:typecheck: src/components/calendar.tsx(165,12): error TS2375: Type '{ day: CalendarDay; modifiers: Modifiers; disabled?: boolean | undefined; form?: string | undefined; formAction?: string | ((formData: FormData) => void | Promise<...>) | undefined; ... 285 more ...; locale: Partial<...> | undefined; }' is not assignable to type '{ locale?: Partial<DayPickerLocale>; }' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties.
|
||||
@repo/shadcn-ui:typecheck: Types of property 'locale' are incompatible.
|
||||
@repo/shadcn-ui:typecheck: Type 'Partial<DayPickerLocale> | undefined' is not assignable to type 'Partial<DayPickerLocale>'.
|
||||
@repo/shadcn-ui:typecheck: Type 'undefined' is not assignable to type 'Partial<DayPickerLocale>'.
|
||||
@repo/shadcn-ui:typecheck: [ELIFECYCLE] Command failed with exit code 2.
|
||||
ERROR @repo/shadcn-ui#typecheck: command (/home/david/dev/metis-desk/packages/shadcn-ui) /home/david/.nvm/versions/node/v24.20.0/bin/pnpm run typecheck exited (2)
|
||||
|
||||
Tasks: 3 successful, 4 total
|
||||
Cached: 3 cached, 4 total
|
||||
Time: 9.231s
|
||||
Failed: @repo/shadcn-ui#typecheck
|
||||
|
||||
ERROR run failed: command exited (2)
|
||||
@ -0,0 +1,12 @@
|
||||
$ TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/app.test.tsx src/i18n.test.ts src/navigation/app-redirect.test.ts
|
||||
✔ src/app.test.tsx (17337.25563ms)
|
||||
✔ src/i18n.test.ts (19352.025239ms)
|
||||
✔ src/navigation/app-redirect.test.ts (2241.877487ms)
|
||||
ℹ tests 3
|
||||
ℹ suites 0
|
||||
ℹ pass 3
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 19433.794081
|
||||
@ -0,0 +1 @@
|
||||
$ tsc -p tsconfig.json
|
||||
@ -0,0 +1,34 @@
|
||||
M .artifacts/resources-global-operating-systems/integration.log
|
||||
M docs/architecture/implementacion-catalogo-global-sistemas-operativos.md
|
||||
M modules/assets/src/common/locales/en.json
|
||||
M modules/assets/src/common/locales/es.json
|
||||
M modules/assets/src/web/index.ts
|
||||
M modules/companies/package.json
|
||||
M modules/companies/src/web/software-installations/history/ui/software-history-dialog.tsx
|
||||
M modules/companies/src/web/software-installations/list/ui/software-installations-panel.tsx
|
||||
M modules/companies/src/web/software-installations/shared/software.test.tsx
|
||||
M modules/companies/src/web/software-installations/shared/ui/software-installation-editor-dialog.tsx
|
||||
M modules/companies/src/web/workstations/detail/helpers/workplace-map-model.ts
|
||||
M modules/companies/src/web/workstations/detail/ui/workplace-equipment-card.tsx
|
||||
M modules/companies/src/web/workstations/detail/ui/workplace-software-card.tsx
|
||||
M modules/companies/src/web/workstations/detail/ui/workplace-visual-map-card.tsx
|
||||
M modules/companies/src/web/workstations/detail/ui/workstation-software-dialog.tsx
|
||||
M package.json
|
||||
M scripts/resource-scope-test.py
|
||||
?? .artifacts/resources-global-operating-systems-closure/
|
||||
?? apps/server/src/global-operating-systems-closure.integration.test.ts
|
||||
?? apps/server/src/global-operating-systems-legacy.fixture.ts
|
||||
?? docs/architecture/cierre-tecnico-catalogo-global-sistemas-operativos.md
|
||||
?? docs/auditorias/workplace-node-actions/
|
||||
?? modules/assets/src/web/assets/detail/ui/asset-history-dialog.tsx
|
||||
?? modules/companies/src/web/software-installations/shared/controllers/
|
||||
?? modules/companies/src/web/software-installations/shared/helpers/software-installation-options.ts
|
||||
?? modules/companies/src/web/workstations/detail/controllers/use-workplace-node-actions.ts
|
||||
?? modules/companies/src/web/workstations/detail/helpers/workplace-node-actions.test.tsx
|
||||
?? modules/companies/src/web/workstations/detail/helpers/workplace-node-actions.ts
|
||||
?? modules/companies/src/web/workstations/detail/ui/workplace-asset-action-dialog.tsx
|
||||
?? modules/companies/src/web/workstations/detail/ui/workplace-installation-editor-dialog.tsx
|
||||
?? modules/companies/src/web/workstations/detail/ui/workplace-node-action-dialogs.tsx
|
||||
?? modules/companies/src/web/workstations/detail/ui/workplace-node-actions-menu.tsx
|
||||
?? modules/companies/src/web/workstations/detail/ui/workplace-node-unavailable-dialog.tsx
|
||||
?? modules/companies/src/web/workstations/detail/ui/workplace-software-action-dialog.tsx
|
||||
@ -0,0 +1,14 @@
|
||||
{
|
||||
"apps/server/dist/index.js": "391a1d3f4ae0d5f4231ac487931a93c81b0cc0eb221f33f04ce785983a925507",
|
||||
"apps/server/dist/index.js.map": "bddd81d81d134df7ef35ab4da1dca82d61f0a3bbd59bbc5751a08527affcf315",
|
||||
"apps/web/dist/assets/geist-mono-latin-ext-variable-Bwz-egvJ.woff2": "1a189eb997c3e2ece68373e387afaec9e8617424186c4b1ab3cff7c54ba6223b",
|
||||
"apps/web/dist/assets/geist-mono-latin-variable-XN7g48iV.woff2": "684ad5b531f81d43c1e8c7038262d5db7cdc1f68006e04d6c7769efa8d33c8cc",
|
||||
"apps/web/dist/assets/index-CTm4QPWs.js": "25cee5256f7459eed76cbb9aebe931dc24fe22b63018f9295cbe064b0fd2e406",
|
||||
"apps/web/dist/assets/index-ZFzBcHiV.css": "c8a8acc5a0ef0f1891efb7fcab2ca6fa100458ad27df938dd374aee081e7200b",
|
||||
"apps/web/dist/assets/inter-variable-DiVDrmQJ.woff2": "693b77d4f32ee9b8bfc995589b5fad5e99adf2832738661f5402f9978429a8e3",
|
||||
"apps/web/dist/assets/roboto-serif-latin-ext-variable-B9BEn9Tg.woff2": "90626de112742b75e72b27865650de397eccf6845b22b577b0283b9cbfda83fc",
|
||||
"apps/web/dist/assets/roboto-serif-latin-variable-CusprKnR.woff2": "a32deb82e55d4bcb083e09dbb4da3198011ce0e9f919877179e8c2bca23a9042",
|
||||
"apps/web/dist/assets/workplace-map-canvas-CxP6HcMX.js": "3703a6f2506edb7d13911540d25c29b80816861e7b3bc5a94a3763316a3ebac9",
|
||||
"apps/web/dist/assets/workplace-map-canvas-DLioOiRN.css": "b0cb7bd6fec5951c9c8f5808821438206604b1629a912c96009ac427f38e7d69",
|
||||
"apps/web/dist/index.html": "fb9590f3eb9010264079ff8fed0ae427410c16051b0a9cc13b32a02ab49bfcb1"
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
{
|
||||
"apps/server/dist/index.js": "391a1d3f4ae0d5f4231ac487931a93c81b0cc0eb221f33f04ce785983a925507",
|
||||
"apps/server/dist/index.js.map": "bddd81d81d134df7ef35ab4da1dca82d61f0a3bbd59bbc5751a08527affcf315",
|
||||
"apps/web/dist/assets/geist-mono-latin-ext-variable-Bwz-egvJ.woff2": "1a189eb997c3e2ece68373e387afaec9e8617424186c4b1ab3cff7c54ba6223b",
|
||||
"apps/web/dist/assets/geist-mono-latin-variable-XN7g48iV.woff2": "684ad5b531f81d43c1e8c7038262d5db7cdc1f68006e04d6c7769efa8d33c8cc",
|
||||
"apps/web/dist/assets/index-CTm4QPWs.js": "25cee5256f7459eed76cbb9aebe931dc24fe22b63018f9295cbe064b0fd2e406",
|
||||
"apps/web/dist/assets/index-ZFzBcHiV.css": "c8a8acc5a0ef0f1891efb7fcab2ca6fa100458ad27df938dd374aee081e7200b",
|
||||
"apps/web/dist/assets/inter-variable-DiVDrmQJ.woff2": "693b77d4f32ee9b8bfc995589b5fad5e99adf2832738661f5402f9978429a8e3",
|
||||
"apps/web/dist/assets/roboto-serif-latin-ext-variable-B9BEn9Tg.woff2": "90626de112742b75e72b27865650de397eccf6845b22b577b0283b9cbfda83fc",
|
||||
"apps/web/dist/assets/roboto-serif-latin-variable-CusprKnR.woff2": "a32deb82e55d4bcb083e09dbb4da3198011ce0e9f919877179e8c2bca23a9042",
|
||||
"apps/web/dist/assets/workplace-map-canvas-CxP6HcMX.js": "3703a6f2506edb7d13911540d25c29b80816861e7b3bc5a94a3763316a3ebac9",
|
||||
"apps/web/dist/assets/workplace-map-canvas-DLioOiRN.css": "b0cb7bd6fec5951c9c8f5808821438206604b1629a912c96009ac427f38e7d69",
|
||||
"apps/web/dist/index.html": "fb9590f3eb9010264079ff8fed0ae427410c16051b0a9cc13b32a02ab49bfcb1"
|
||||
}
|
||||
@ -0,0 +1,96 @@
|
||||
{
|
||||
"recordedAtUtc": "2026-10-25T23:08:05.854586+00:00",
|
||||
"reportDateEuropeMadrid": "2026-10-26",
|
||||
"head": "d2bf856c973419277f0b30f6437242cd82f7d720",
|
||||
"branch": "main",
|
||||
"node": "24.20.0",
|
||||
"pnpm": "11.25.0",
|
||||
"goSourceHashesMatched": 1884,
|
||||
"goWorkingFilesMatched": 40,
|
||||
"postGoFunctionalDifferences": [],
|
||||
"goManifestSha256": "86c305be57c034c6fcae02375f0e468e74aa068dd6d38d0486f16dd3e0fab807",
|
||||
"lockfileSha256": "bcd468ab1f127fffeb7f37ef3bdb5f2c5e85d40c192f3bc4a7cae5b2209b7c17",
|
||||
"sourceReconstructionVerified": true,
|
||||
"cleanInstallVerified": false,
|
||||
"buildsByteIdentical": true,
|
||||
"webMatchesMcpBuild": true,
|
||||
"verdict": "NO PREPARADO",
|
||||
"blockers": [
|
||||
"B-01: duplicated createRequire makes compiled server syntactically invalid",
|
||||
"B-02: no secure session cookie in TLS-to-HTTP topology without trusted proxy configuration"
|
||||
],
|
||||
"productionConnected": false,
|
||||
"databaseConnected": false,
|
||||
"migrationsExecuted": false,
|
||||
"businessWritesExecuted": false,
|
||||
"productionActivated": false,
|
||||
"commands": [
|
||||
{
|
||||
"command": "pnpm build",
|
||||
"exitCode": 0,
|
||||
"log": "technical/build.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm exec turbo run build --force (primero)",
|
||||
"exitCode": 0,
|
||||
"log": "technical/build-first.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm exec turbo run build --force (segundo)",
|
||||
"exitCode": 0,
|
||||
"log": "technical/build-second.log"
|
||||
},
|
||||
{
|
||||
"command": "node --check apps/server/dist/index.js",
|
||||
"exitCode": 1,
|
||||
"log": "technical/node-check.log"
|
||||
},
|
||||
{
|
||||
"command": "node --import tsx .artifacts/resources-global-operating-systems-preflight/proxy-session-diagnostic.mjs",
|
||||
"exitCode": 0,
|
||||
"log": "technical/proxy-portable.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm typecheck",
|
||||
"exitCode": 2,
|
||||
"log": "technical/root-types.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm lint",
|
||||
"exitCode": 1,
|
||||
"log": "technical/root-lint.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm check",
|
||||
"exitCode": 1,
|
||||
"log": "technical/root-check.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm exec biome check . --max-diagnostics=300",
|
||||
"exitCode": 1,
|
||||
"log": "technical/root-check-full.log"
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
"build-first.json": "17990eb229b1bc1ce99136c02883f801459fc040a78f6ab12df3b7e909b96218",
|
||||
"build-second.json": "17990eb229b1bc1ce99136c02883f801459fc040a78f6ab12df3b7e909b96218",
|
||||
"go-source-overlay.tar": "96c1e316c77ac603d910385534d72703d4e008b3447998cda6e85d81248377ed",
|
||||
"nondeployable-build.tar": "b4bec1774201ff545dd2970aa290b2f429bb952a250284812d1150c5d0b674b3",
|
||||
"proxy-session-diagnostic.mjs": "c9c9ad47f436550f1e976bddd7ee6294bbc6109e085c7aad405581909daaef68",
|
||||
"technical/build-first.log": "d0e2826bde66cb879030e6b95263017869883b5d5ede730414799113281661af",
|
||||
"technical/build-second.log": "917e3c9abaa9637347cdbd89688f1171d094e940f48dee0f144d3c737fccc531",
|
||||
"technical/build.log": "964cdb820873e566972937da130bfdc9f7b319b485c6f3b77580afbd47751ed6",
|
||||
"technical/node-check.log": "8257d56c85b4657dfaaedc60781e41646a526c3bfc5b7e9ecc351f321f6eae8e",
|
||||
"technical/proxy-portable.log": "b70d5360741b61f26b7f9a1366481b22acb55704f8a0d567b438686b614ccc69",
|
||||
"technical/proxy.log": "b70d5360741b61f26b7f9a1366481b22acb55704f8a0d567b438686b614ccc69",
|
||||
"technical/root-check-full.log": "21fb07c08a2c5c942c7320868e9bfc234925db7aa490e9b4c5cbcd89de49c85f",
|
||||
"technical/root-check.log": "c44da53b605e344d04651d38b4c78841f01b44d88087ec5c84e9e4a28ace5d45",
|
||||
"technical/root-lint.log": "f9a8fcc6c1f7306eff3f6b3458810df9a2875221b9e73b6d427d1c12132d498b",
|
||||
"technical/root-types.log": "88e6ac8dd7c2fc97725e1b81bcc1583eb0ae03b13c3c8e0f52adca0c1417bd4f",
|
||||
"traceability.json": "6e4e473284275d01d5233ad08d2199054d4b19bfdc39529cf812c1564f31460d"
|
||||
},
|
||||
"deliverables": {
|
||||
"docs/architecture/preflight-activacion-catalogo-global-sistemas-operativos.md": "7137fdc14a27dd5c4da0c51c8df2219461cae9f9c2371c9175035510b9ffb6c2",
|
||||
"docs/architecture/preflight-so/diagnostico-mariadb.sql": "32bc8955688941d4dbac2a3b089c91e425618ea77397f8a68bab4c3e85793fa4"
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
import { randomBytes } from "node:crypto";
|
||||
import { once } from "node:events";
|
||||
import { createRequire } from "node:module";
|
||||
import { resolve } from "node:path";
|
||||
import { pathToFileURL } from "node:url";
|
||||
|
||||
const { createApp } = await import(pathToFileURL(resolve("apps/server/src/app.ts")).href);
|
||||
const require = createRequire(resolve("apps/server/package.json"));
|
||||
const session = require("express-session");
|
||||
const app = createApp(() => {}, {
|
||||
middleware: session({
|
||||
secret: randomBytes(48).toString("hex"),
|
||||
resave: false,
|
||||
saveUninitialized: false,
|
||||
cookie: { secure: true, httpOnly: true, sameSite: "strict" },
|
||||
}),
|
||||
register: (instance) =>
|
||||
instance.get("/api/preflight-session", (request, response) => {
|
||||
request.session.preflightMarker = true;
|
||||
response.json({ secure: request.secure });
|
||||
}),
|
||||
});
|
||||
const server = app.listen(0, "127.0.0.1");
|
||||
try {
|
||||
await once(server, "listening");
|
||||
const response = await fetch(`http://127.0.0.1:${server.address().port}/api/preflight-session`, {
|
||||
headers: { "x-forwarded-proto": "https" },
|
||||
signal: AbortSignal.timeout(5000),
|
||||
});
|
||||
console.log(
|
||||
JSON.stringify({
|
||||
diagnostic: "TLS termination followed by HTTP to backend",
|
||||
trustProxy: app.get("trust proxy"),
|
||||
http: response.status,
|
||||
...(await response.json()),
|
||||
sessionCookieIssued: response.headers.has("set-cookie"),
|
||||
databaseUsed: false,
|
||||
})
|
||||
);
|
||||
} finally {
|
||||
await new Promise((resolve, reject) =>
|
||||
server.close((error) => (error ? reject(error) : resolve()))
|
||||
);
|
||||
}
|
||||
@ -0,0 +1,47 @@
|
||||
• turbo 2.9.14
|
||||
|
||||
• Packages in scope: @metis/assets, @metis/companies, @metis/core, @metis/identity, @metis/relationship-contracts, @metis/resources, @metis/server, @metis/web, @repo/rdx-ddd, @repo/rdx-ui, @repo/rdx-utils, @repo/shadcn-ui, @repo/typescript-config
|
||||
• Running build in 13 packages
|
||||
• Remote caching disabled
|
||||
|
||||
@metis/server:build: cache bypass, force executing 7e59d90e6c1cd6d9
|
||||
@metis/web:build: cache bypass, force executing d61f0bc598236e93
|
||||
@metis/server:build: $ tsup --config tsup.config.ts
|
||||
@metis/web:build: $ vite build
|
||||
@metis/web:build: vite v8.3.0 building client environment for production...
|
||||
@metis/web:build: transforming...
|
||||
@metis/server:build: CLI Building entry: src/index.ts
|
||||
@metis/server:build: CLI Using tsconfig: tsconfig.json
|
||||
@metis/server:build: CLI tsup v8.5.1
|
||||
@metis/server:build: CLI Using tsup config: /home/david/dev/metis-desk/apps/server/tsup.config.ts
|
||||
@metis/server:build: CLI Target: node24
|
||||
@metis/server:build: CLI Cleaning output folder
|
||||
@metis/server:build: ESM Build start
|
||||
@metis/server:build: ESM dist/index.js 1.70 MB
|
||||
@metis/server:build: ESM dist/index.js.map 3.22 MB
|
||||
@metis/server:build: ESM ⚡️ Build success in 475ms
|
||||
@metis/web:build: ✓ 10064 modules transformed.
|
||||
@metis/web:build: rendering chunks...
|
||||
@metis/web:build: computing gzip size...
|
||||
@metis/web:build: dist/index.html 0.54 kB │ gzip: 0.35 kB
|
||||
@metis/web:build: dist/assets/geist-mono-latin-ext-variable-Bwz-egvJ.woff2 14.69 kB
|
||||
@metis/web:build: dist/assets/geist-mono-latin-variable-XN7g48iV.woff2 23.12 kB
|
||||
@metis/web:build: dist/assets/roboto-serif-latin-ext-variable-B9BEn9Tg.woff2 49.84 kB
|
||||
@metis/web:build: dist/assets/roboto-serif-latin-variable-CusprKnR.woff2 66.10 kB
|
||||
@metis/web:build: dist/assets/inter-variable-DiVDrmQJ.woff2 352.24 kB
|
||||
@metis/web:build: dist/assets/workplace-map-canvas-DLioOiRN.css 15.41 kB │ gzip: 2.56 kB
|
||||
@metis/web:build: dist/assets/index-ZFzBcHiV.css 253.08 kB │ gzip: 38.86 kB
|
||||
@metis/web:build: dist/assets/workplace-map-canvas-CxP6HcMX.js 227.75 kB │ gzip: 74.26 kB
|
||||
@metis/web:build: dist/assets/index-CTm4QPWs.js 1,815.32 kB │ gzip: 509.13 kB
|
||||
@metis/web:build:
|
||||
@metis/web:build: [plugin builtin:vite-reporter]
|
||||
@metis/web:build: (!) Some chunks are larger than 500 kB after minification. Consider:
|
||||
@metis/web:build: - Using dynamic import() to code-split the application
|
||||
@metis/web:build: - Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting
|
||||
@metis/web:build: - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
|
||||
@metis/web:build: ✓ built in 1.11s
|
||||
|
||||
Tasks: 2 successful, 2 total
|
||||
Cached: 0 cached, 2 total
|
||||
Time: 1.953s
|
||||
|
||||
@ -0,0 +1,47 @@
|
||||
• turbo 2.9.14
|
||||
|
||||
• Packages in scope: @metis/assets, @metis/companies, @metis/core, @metis/identity, @metis/relationship-contracts, @metis/resources, @metis/server, @metis/web, @repo/rdx-ddd, @repo/rdx-ui, @repo/rdx-utils, @repo/shadcn-ui, @repo/typescript-config
|
||||
• Running build in 13 packages
|
||||
• Remote caching disabled
|
||||
|
||||
@metis/web:build: cache bypass, force executing d61f0bc598236e93
|
||||
@metis/server:build: cache bypass, force executing 7e59d90e6c1cd6d9
|
||||
@metis/web:build: $ vite build
|
||||
@metis/server:build: $ tsup --config tsup.config.ts
|
||||
@metis/web:build: vite v8.3.0 building client environment for production...
|
||||
@metis/web:build: transforming...
|
||||
@metis/server:build: CLI Building entry: src/index.ts
|
||||
@metis/server:build: CLI Using tsconfig: tsconfig.json
|
||||
@metis/server:build: CLI tsup v8.5.1
|
||||
@metis/server:build: CLI Using tsup config: /home/david/dev/metis-desk/apps/server/tsup.config.ts
|
||||
@metis/server:build: CLI Target: node24
|
||||
@metis/server:build: CLI Cleaning output folder
|
||||
@metis/server:build: ESM Build start
|
||||
@metis/server:build: ESM dist/index.js 1.70 MB
|
||||
@metis/server:build: ESM dist/index.js.map 3.22 MB
|
||||
@metis/server:build: ESM ⚡️ Build success in 423ms
|
||||
@metis/web:build: ✓ 10064 modules transformed.
|
||||
@metis/web:build: rendering chunks...
|
||||
@metis/web:build: computing gzip size...
|
||||
@metis/web:build: dist/index.html 0.54 kB │ gzip: 0.35 kB
|
||||
@metis/web:build: dist/assets/geist-mono-latin-ext-variable-Bwz-egvJ.woff2 14.69 kB
|
||||
@metis/web:build: dist/assets/geist-mono-latin-variable-XN7g48iV.woff2 23.12 kB
|
||||
@metis/web:build: dist/assets/roboto-serif-latin-ext-variable-B9BEn9Tg.woff2 49.84 kB
|
||||
@metis/web:build: dist/assets/roboto-serif-latin-variable-CusprKnR.woff2 66.10 kB
|
||||
@metis/web:build: dist/assets/inter-variable-DiVDrmQJ.woff2 352.24 kB
|
||||
@metis/web:build: dist/assets/workplace-map-canvas-DLioOiRN.css 15.41 kB │ gzip: 2.56 kB
|
||||
@metis/web:build: dist/assets/index-ZFzBcHiV.css 253.08 kB │ gzip: 38.86 kB
|
||||
@metis/web:build: dist/assets/workplace-map-canvas-CxP6HcMX.js 227.75 kB │ gzip: 74.26 kB
|
||||
@metis/web:build: dist/assets/index-CTm4QPWs.js 1,815.32 kB │ gzip: 509.13 kB
|
||||
@metis/web:build:
|
||||
@metis/web:build: [plugin builtin:vite-reporter]
|
||||
@metis/web:build: (!) Some chunks are larger than 500 kB after minification. Consider:
|
||||
@metis/web:build: - Using dynamic import() to code-split the application
|
||||
@metis/web:build: - Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting
|
||||
@metis/web:build: - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
|
||||
@metis/web:build: ✓ built in 1.05s
|
||||
|
||||
Tasks: 2 successful, 2 total
|
||||
Cached: 0 cached, 2 total
|
||||
Time: 1.828s
|
||||
|
||||
@ -0,0 +1,48 @@
|
||||
$ turbo run build
|
||||
• turbo 2.9.14
|
||||
|
||||
• Packages in scope: @metis/assets, @metis/companies, @metis/core, @metis/identity, @metis/relationship-contracts, @metis/resources, @metis/server, @metis/web, @repo/rdx-ddd, @repo/rdx-ui, @repo/rdx-utils, @repo/shadcn-ui, @repo/typescript-config
|
||||
• Running build in 13 packages
|
||||
• Remote caching disabled
|
||||
|
||||
@metis/server:build: cache hit, replaying logs 7e59d90e6c1cd6d9
|
||||
@metis/server:build: $ tsup --config tsup.config.ts
|
||||
@metis/server:build: CLI Building entry: src/index.ts
|
||||
@metis/server:build: CLI Using tsconfig: tsconfig.json
|
||||
@metis/server:build: CLI tsup v8.5.1
|
||||
@metis/server:build: CLI Using tsup config: /home/david/dev/metis-desk/apps/server/tsup.config.ts
|
||||
@metis/server:build: CLI Target: node24
|
||||
@metis/server:build: CLI Cleaning output folder
|
||||
@metis/server:build: ESM Build start
|
||||
@metis/server:build: ESM dist/index.js 1.70 MB
|
||||
@metis/server:build: ESM dist/index.js.map 3.22 MB
|
||||
@metis/server:build: ESM ⚡️ Build success in 768ms
|
||||
@metis/web:build: cache hit, replaying logs d61f0bc598236e93
|
||||
@metis/web:build: $ vite build
|
||||
@metis/web:build: vite v8.3.0 building client environment for production...
|
||||
@metis/web:build: transforming...
|
||||
@metis/web:build: ✓ 10064 modules transformed.
|
||||
@metis/web:build: rendering chunks...
|
||||
@metis/web:build: computing gzip size...
|
||||
@metis/web:build: dist/index.html 0.54 kB │ gzip: 0.35 kB
|
||||
@metis/web:build: dist/assets/geist-mono-latin-ext-variable-Bwz-egvJ.woff2 14.69 kB
|
||||
@metis/web:build: dist/assets/geist-mono-latin-variable-XN7g48iV.woff2 23.12 kB
|
||||
@metis/web:build: dist/assets/roboto-serif-latin-ext-variable-B9BEn9Tg.woff2 49.84 kB
|
||||
@metis/web:build: dist/assets/roboto-serif-latin-variable-CusprKnR.woff2 66.10 kB
|
||||
@metis/web:build: dist/assets/inter-variable-DiVDrmQJ.woff2 352.24 kB
|
||||
@metis/web:build: dist/assets/workplace-map-canvas-DLioOiRN.css 15.41 kB │ gzip: 2.56 kB
|
||||
@metis/web:build: dist/assets/index-ZFzBcHiV.css 253.08 kB │ gzip: 38.86 kB
|
||||
@metis/web:build: dist/assets/workplace-map-canvas-CxP6HcMX.js 227.75 kB │ gzip: 74.26 kB
|
||||
@metis/web:build: dist/assets/index-CTm4QPWs.js 1,815.32 kB │ gzip: 509.13 kB
|
||||
@metis/web:build:
|
||||
@metis/web:build: [plugin builtin:vite-reporter]
|
||||
@metis/web:build: (!) Some chunks are larger than 500 kB after minification. Consider:
|
||||
@metis/web:build: - Using dynamic import() to code-split the application
|
||||
@metis/web:build: - Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting
|
||||
@metis/web:build: - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
|
||||
@metis/web:build: ✓ built in 1.66s
|
||||
|
||||
Tasks: 2 successful, 2 total
|
||||
Cached: 2 cached, 2 total
|
||||
Time: 77ms >>> FULL TURBO
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
/home/david/dev/metis-desk/apps/server/dist/index.js:23345
|
||||
import { createRequire } from "module";
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
SyntaxError: Identifier 'createRequire' has already been declared
|
||||
at checkSyntax (node:internal/main/check_syntax:72:5)
|
||||
|
||||
Node.js v24.20.0
|
||||
@ -0,0 +1 @@
|
||||
{"diagnostic":"TLS termination followed by HTTP to backend","trustProxy":false,"http":200,"secure":false,"sessionCookieIssued":false,"databaseUsed":false}
|
||||
@ -0,0 +1 @@
|
||||
{"diagnostic":"TLS termination followed by HTTP to backend","trustProxy":false,"http":200,"secure":false,"sessionCookieIssued":false,"databaseUsed":false}
|
||||
@ -0,0 +1,471 @@
|
||||
$ biome lint .
|
||||
docs/auditorias/ficha-puesto-trabajo/implementacion-v3/mediciones.json lint ━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
i The size of the file is 2.5 MiB, which exceeds the configured maximum of 1.0 MiB for this project.
|
||||
Use the `files.maxSize` configuration to change the maximum size of files processed, or `files.includes` to ignore the file.
|
||||
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:33:9 lint/complexity/useSimplifiedLogicExpression FIXABLE ━━━━━━━━━━
|
||||
|
||||
i Logical expression contains unnecessary complexity.
|
||||
|
||||
32 │ async save(companyId: string, personId: string, data: Uint8Array) {
|
||||
> 33 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes)
|
||||
|
||||
i Safe fix: Reduce the complexity of the logical expression.
|
||||
|
||||
31 31 │
|
||||
32 32 │ async save(companyId: string, personId: string, data: Uint8Array) {
|
||||
33 │ - ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success)
|
||||
33 │ + ····if·(!(z.uuid().safeParse(companyId).success·&&·z.uuid().safeParse(personId).success))
|
||||
34 34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
35 35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes)
|
||||
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:49:9 lint/complexity/useSimplifiedLogicExpression FIXABLE ━━━━━━━━━━
|
||||
|
||||
i Logical expression contains unnecessary complexity.
|
||||
|
||||
48 │ async remove(companyId: string, personId: string) {
|
||||
> 49 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
50 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
51 │
|
||||
|
||||
i Safe fix: Reduce the complexity of the logical expression.
|
||||
|
||||
47 47 │
|
||||
48 48 │ async remove(companyId: string, personId: string) {
|
||||
49 │ - ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success)
|
||||
49 │ + ····if·(!(z.uuid().safeParse(companyId).success·&&·z.uuid().safeParse(personId).success))
|
||||
50 50 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
51 51 │
|
||||
|
||||
|
||||
modules/companies/src/api/infrastructure/person-photo-processor.ts:18:9 lint/complexity/useSimplifiedLogicExpression FIXABLE ━━━━━━━━━━
|
||||
|
||||
i Logical expression contains unnecessary complexity.
|
||||
|
||||
17 │ if (
|
||||
> 18 │ !metadata.width ||
|
||||
│ ^^^^^^^^^^^^^^^^^^
|
||||
> 19 │ !metadata.height ||
|
||||
│ ^^^^^^^^^^^^^^^^
|
||||
20 │ metadata.width > PERSON_PHOTO_LIMITS.inputDimension ||
|
||||
21 │ metadata.height > PERSON_PHOTO_LIMITS.inputDimension ||
|
||||
|
||||
i Safe fix: Reduce the complexity of the logical expression.
|
||||
|
||||
16 16 │
|
||||
17 17 │ if (
|
||||
18 │ - ········!metadata.width·||
|
||||
19 │ - ········!metadata.height·||
|
||||
18 │ + ········!(metadata.width·&&metadata.height·)·||
|
||||
20 19 │ metadata.width > PERSON_PHOTO_LIMITS.inputDimension ||
|
||||
21 20 │ metadata.height > PERSON_PHOTO_LIMITS.inputDimension ||
|
||||
|
||||
|
||||
.agents/skills/shadcn/assets/showcase/color-pair.tsx:81:17 lint/style/noNegationElse FIXABLE ━━━━━━━━━━
|
||||
|
||||
! Invert blocks when performing a negation test.
|
||||
|
||||
79 │ }, [])
|
||||
80 │
|
||||
> 81 │ const level = !info
|
||||
│ ^^^^^
|
||||
> 82 │ ? ""
|
||||
...
|
||||
> 88 │ ? "AA Large"
|
||||
> 89 │ : "Fail"
|
||||
│ ^^^^^^^^
|
||||
90 │
|
||||
91 │ return (
|
||||
|
||||
i Safe fix: Invert the condition and the blocks.
|
||||
|
||||
79 79 │ }, [])
|
||||
80 80 │
|
||||
81 │ - ··const·level·=·!info
|
||||
82 │ - ····?·""
|
||||
83 │ - ····:·info.ratio·>=·7
|
||||
81 │ + ··const·level·=·info
|
||||
82 │ + ····?·info.ratio·>=·7
|
||||
84 83 │ ? "AAA"
|
||||
85 84 │ : info.ratio >= 4.5
|
||||
······· │
|
||||
87 86 │ : info.ratio >= 3
|
||||
88 87 │ ? "AA Large"
|
||||
89 │ - ··········:·"Fail"
|
||||
88 │ + ··········:·"Fail"
|
||||
89 │ + ····:·""
|
||||
90 90 │
|
||||
91 91 │ return (
|
||||
|
||||
|
||||
.agents/skills/shadcn/assets/showcase/state-matrix.tsx:1:8 lint/style/useImportType FIXABLE ━━━━━━━━━━
|
||||
|
||||
× All these imports are only used as types.
|
||||
|
||||
> 1 │ import * as React from "react"
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
2 │
|
||||
3 │ import { cn } from "@/lib/utils"
|
||||
|
||||
i Importing the types with import type ensures that they are removed by the compilers and avoids loading unnecessary modules.
|
||||
|
||||
i Safe fix: Use import type.
|
||||
|
||||
1 │ import·type·*·as·React·from·"react"
|
||||
│ +++++
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:25:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
24 │ async get(personId: string) {
|
||||
> 25 │ if (!z.uuid().safeParse(personId).success)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 26 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
27 │ const photo = await this.repository.get(personId);
|
||||
28 │
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
23 23 │
|
||||
24 24 │ async get(personId: string) {
|
||||
25 │ - ····if·(!z.uuid().safeParse(personId).success)
|
||||
26 │ - ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST"));
|
||||
25 │ + ····if·(!z.uuid().safeParse(personId).success)·{
|
||||
26 │ + ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST"));
|
||||
27 │ + ····}
|
||||
27 28 │ const photo = await this.repository.get(personId);
|
||||
28 29 │
|
||||
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:33:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
32 │ async save(companyId: string, personId: string, data: Uint8Array) {
|
||||
> 33 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes)
|
||||
36 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE"));
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
31 31 │
|
||||
32 32 │ async save(companyId: string, personId: string, data: Uint8Array) {
|
||||
33 │ - ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success)
|
||||
34 │ - ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST"));
|
||||
33 │ + ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success)·{
|
||||
34 │ + ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST"));
|
||||
35 │ + ····}
|
||||
35 36 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes)
|
||||
36 37 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE"));
|
||||
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:35:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
33 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success)
|
||||
34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
> 35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 36 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE"));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
37 │ if (!(await this.repository.exists(companyId, personId)))
|
||||
38 │ return Result.fail(new PersonPhotoError("PERSON_NOT_FOUND"));
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
33 33 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success)
|
||||
34 34 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
35 │ - ····if·(data.length·>·PERSON_PHOTO_LIMITS.inputBytes)
|
||||
36 │ - ······return·Result.fail(new·PersonPhotoError("PHOTO_TOO_LARGE"));
|
||||
35 │ + ····if·(data.length·>·PERSON_PHOTO_LIMITS.inputBytes)·{
|
||||
36 │ + ······return·Result.fail(new·PersonPhotoError("PHOTO_TOO_LARGE"));
|
||||
37 │ + ····}
|
||||
37 38 │ if (!(await this.repository.exists(companyId, personId)))
|
||||
38 39 │ return Result.fail(new PersonPhotoError("PERSON_NOT_FOUND"));
|
||||
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:37:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes)
|
||||
36 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE"));
|
||||
> 37 │ if (!(await this.repository.exists(companyId, personId)))
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 38 │ return Result.fail(new PersonPhotoError("PERSON_NOT_FOUND"));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
39 │ const processed = await this.processor.optimize(data);
|
||||
40 │
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
35 35 │ if (data.length > PERSON_PHOTO_LIMITS.inputBytes)
|
||||
36 36 │ return Result.fail(new PersonPhotoError("PHOTO_TOO_LARGE"));
|
||||
37 │ - ····if·(!(await·this.repository.exists(companyId,·personId)))
|
||||
38 │ - ······return·Result.fail(new·PersonPhotoError("PERSON_NOT_FOUND"));
|
||||
37 │ + ····if·(!(await·this.repository.exists(companyId,·personId)))·{
|
||||
38 │ + ······return·Result.fail(new·PersonPhotoError("PERSON_NOT_FOUND"));
|
||||
39 │ + ····}
|
||||
39 40 │ const processed = await this.processor.optimize(data);
|
||||
40 41 │
|
||||
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:41:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
39 │ const processed = await this.processor.optimize(data);
|
||||
40 │
|
||||
> 41 │ if (!processed.isSuccess) return Result.fail(processed.error);
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
42 │
|
||||
43 │ return (await this.repository.replace(companyId, personId, processed.data))
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
41 │ ····if·(!processed.isSuccess)·{·return·Result.fail(processed.error);·}
|
||||
│ ++ ++
|
||||
|
||||
modules/companies/src/api/application/person-photo.use-cases.ts:49:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
48 │ async remove(companyId: string, personId: string) {
|
||||
> 49 │ if (!z.uuid().safeParse(companyId).success || !z.uuid().safeParse(personId).success)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 50 │ return Result.fail(new PersonPhotoError("INVALID_REQUEST"));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
51 │
|
||||
52 │ return (await this.repository.replace(companyId, personId, null))
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
47 47 │
|
||||
48 48 │ async remove(companyId: string, personId: string) {
|
||||
49 │ - ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success)
|
||||
50 │ - ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST"));
|
||||
49 │ + ····if·(!z.uuid().safeParse(companyId).success·||·!z.uuid().safeParse(personId).success)·{
|
||||
50 │ + ······return·Result.fail(new·PersonPhotoError("INVALID_REQUEST"));
|
||||
51 │ + ····}
|
||||
51 52 │
|
||||
52 53 │ return (await this.repository.replace(companyId, personId, null))
|
||||
|
||||
|
||||
modules/companies/src/api/application/process.use-cases.ts:127:5 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
125 │ const process = UniqueID.create(id);
|
||||
126 │
|
||||
> 127 │ if (!(company.isSuccess && process.isSuccess))
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 128 │ return Promise.resolve(Result.fail(new ProcessError("INVALID_REQUEST")));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
129 │
|
||||
130 │ return this.repository.remove(company.data, process.data);
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
125 125 │ const process = UniqueID.create(id);
|
||||
126 126 │
|
||||
127 │ - ····if·(!(company.isSuccess·&&·process.isSuccess))
|
||||
128 │ - ······return·Promise.resolve(Result.fail(new·ProcessError("INVALID_REQUEST")));
|
||||
127 │ + ····if·(!(company.isSuccess·&&·process.isSuccess))·{
|
||||
128 │ + ······return·Promise.resolve(Result.fail(new·ProcessError("INVALID_REQUEST")));
|
||||
129 │ + ····}
|
||||
129 130 │
|
||||
130 131 │ return this.repository.remove(company.data, process.data);
|
||||
|
||||
|
||||
modules/companies/src/api/infrastructure/persistence/migrate-people.ts:11:3 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
9 │ const columns = await query.describeTable("company_contacts");
|
||||
10 │
|
||||
> 11 │ if (!columns.photoVersion)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 12 │ await query.addColumn("company_contacts", "photoVersion", {
|
||||
> 13 │ type: DataTypes.STRING(64),
|
||||
> 14 │ allowNull: true,
|
||||
> 15 │ });
|
||||
│ ^^^
|
||||
16 │ for (const [name, length] of [
|
||||
17 │ ["position", 100],
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
9 9 │ const columns = await query.describeTable("company_contacts");
|
||||
10 10 │
|
||||
11 │ - ··if·(!columns.photoVersion)
|
||||
11 │ + ··if·(!columns.photoVersion)·{
|
||||
12 12 │ await query.addColumn("company_contacts", "photoVersion", {
|
||||
13 13 │ type: DataTypes.STRING(64),
|
||||
14 14 │ allowNull: true,
|
||||
15 │ - ····});
|
||||
15 │ + ····});
|
||||
16 │ + ··}
|
||||
16 17 │ for (const [name, length] of [
|
||||
17 18 │ ["position", 100],
|
||||
|
||||
|
||||
modules/companies/src/api/infrastructure/persistence/person-photo-migration.ts:10:3 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
8 │ );
|
||||
9 │
|
||||
> 10 │ if (rows.some((row) => row.name === "person_photos")) return;
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
11 │ await database
|
||||
12 │ .getQueryInterface()
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
10 │ ··if·(rows.some((row)·=>·row.name·===·"person_photos"))·{·return;·}
|
||||
│ ++ ++
|
||||
|
||||
modules/companies/src/api/infrastructure/persistence/sequelize-person-photo.repository.ts:49:7 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
47 │ });
|
||||
48 │
|
||||
> 49 │ if (!person) return false;
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
50 │ if (photo)
|
||||
51 │ await PersonPhotoModel.upsert(
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
49 │ ······if·(!person)·{·return·false;·}
|
||||
│ ++ ++
|
||||
|
||||
modules/companies/src/api/infrastructure/persistence/sequelize-person-photo.repository.ts:50:7 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
49 │ if (!person) return false;
|
||||
> 50 │ if (photo)
|
||||
│ ^^^^^^^^^^
|
||||
> 51 │ await PersonPhotoModel.upsert(
|
||||
> 52 │ { personId, companyId, data: Buffer.from(photo.data), version: photo.version },
|
||||
> 53 │ { transaction }
|
||||
> 54 │ );
|
||||
> 55 │ else await PersonPhotoModel.destroy({ where: { personId }, transaction });
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
56 │ await person.update({ photoVersion: photo?.version ?? null }, { transaction });
|
||||
57 │
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
48 48 │
|
||||
49 49 │ if (!person) return false;
|
||||
50 │ - ······if·(photo)
|
||||
50 │ + ······if·(photo)·{
|
||||
51 51 │ await PersonPhotoModel.upsert(
|
||||
52 52 │ { personId, companyId, data: Buffer.from(photo.data), version: photo.version },
|
||||
53 53 │ { transaction }
|
||||
54 │ - ········);
|
||||
54 │ + ········);
|
||||
55 │ + ······}
|
||||
55 56 │ else await PersonPhotoModel.destroy({ where: { personId }, transaction });
|
||||
56 57 │ await person.update({ photoVersion: photo?.version ?? null }, { transaction });
|
||||
|
||||
|
||||
modules/companies/src/api/infrastructure/persistence/sequelize-person-photo.repository.ts:55:7 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
53 │ { transaction }
|
||||
54 │ );
|
||||
> 55 │ else await PersonPhotoModel.destroy({ where: { personId }, transaction });
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
56 │ await person.update({ photoVersion: photo?.version ?? null }, { transaction });
|
||||
57 │
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
55 │ ······else·{·await·PersonPhotoModel.destroy({·where:·{·personId·},·transaction·});·}
|
||||
│ ++ ++
|
||||
|
||||
modules/companies/src/api/infrastructure/person-photo-processor.ts:17:7 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
15 │ }).metadata();
|
||||
16 │
|
||||
> 17 │ if (
|
||||
│ ^^^^
|
||||
> 18 │ !metadata.width ||
|
||||
...
|
||||
> 23 │ )
|
||||
> 24 │ return Result.fail(new PersonPhotoError("INVALID_PHOTO"));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
25 │ const output = await sharp(input)
|
||||
26 │ .rotate()
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
21 21 │ metadata.height > PERSON_PHOTO_LIMITS.inputDimension ||
|
||||
22 22 │ !["jpeg", "png", "webp"].includes(metadata.format ?? "")
|
||||
23 │ - ······)
|
||||
24 │ - ········return·Result.fail(new·PersonPhotoError("INVALID_PHOTO"));
|
||||
23 │ + ······)·{
|
||||
24 │ + ········return·Result.fail(new·PersonPhotoError("INVALID_PHOTO"));
|
||||
25 │ + ······}
|
||||
25 26 │ const output = await sharp(input)
|
||||
26 27 │ .rotate()
|
||||
|
||||
|
||||
modules/companies/src/api/infrastructure/person-photo-processor.ts:34:7 lint/style/useBlockStatements FIXABLE ━━━━━━━━━━
|
||||
|
||||
× Block statements are preferred in this position.
|
||||
|
||||
32 │ .toBuffer();
|
||||
33 │
|
||||
> 34 │ if (output.length > PERSON_PHOTO_LIMITS.outputBytes)
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> 35 │ return Result.fail(new PersonPhotoError("INVALID_PHOTO"));
|
||||
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
36 │
|
||||
37 │ return Result.ok({
|
||||
|
||||
i Unsafe fix: Wrap the statement with a `JsBlockStatement`
|
||||
|
||||
32 32 │ .toBuffer();
|
||||
33 33 │
|
||||
34 │ - ······if·(output.length·>·PERSON_PHOTO_LIMITS.outputBytes)
|
||||
35 │ - ········return·Result.fail(new·PersonPhotoError("INVALID_PHOTO"));
|
||||
34 │ + ······if·(output.length·>·PERSON_PHOTO_LIMITS.outputBytes)·{
|
||||
35 │ + ········return·Result.fail(new·PersonPhotoError("INVALID_PHOTO"));
|
||||
36 │ + ······}
|
||||
36 37 │
|
||||
37 38 │ return Result.ok({
|
||||
|
||||
|
||||
The number of diagnostics exceeds the limit allowed. Use --max-diagnostics to increase it.
|
||||
Diagnostics not shown: 1.
|
||||
Checked 2221 files in 857ms. No fixes applied.
|
||||
Found 15 errors.
|
||||
Found 1 warning.
|
||||
Found 5 infos.
|
||||
lint ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
× Some errors were emitted while running checks.
|
||||
|
||||
|
||||
[ELIFECYCLE] Command failed with exit code 1.
|
||||
@ -0,0 +1,29 @@
|
||||
$ turbo run typecheck
|
||||
• turbo 2.9.14
|
||||
|
||||
• Packages in scope: @metis/assets, @metis/companies, @metis/core, @metis/identity, @metis/relationship-contracts, @metis/resources, @metis/server, @metis/web, @repo/rdx-ddd, @repo/rdx-ui, @repo/rdx-utils, @repo/shadcn-ui, @repo/typescript-config
|
||||
• Running typecheck in 13 packages
|
||||
• Remote caching disabled
|
||||
|
||||
@repo/rdx-utils:typecheck: cache hit, replaying logs e660b2f14d16d88c
|
||||
@repo/shadcn-ui:typecheck: cache miss, executing 3a02880bf260fd89
|
||||
@repo/rdx-utils:typecheck: $ tsc -p tsconfig.json
|
||||
@repo/rdx-ddd:typecheck: cache hit, replaying logs 315b0dccfb6d76d3
|
||||
@repo/rdx-ddd:typecheck: $ tsc -p tsconfig.json
|
||||
@metis/relationship-contracts:typecheck: cache hit, replaying logs 6ecbe82d1a36ae07
|
||||
@metis/relationship-contracts:typecheck: $ tsc -p tsconfig.json
|
||||
@repo/shadcn-ui:typecheck: $ tsc -p tsconfig.json
|
||||
@repo/shadcn-ui:typecheck: src/components/calendar.tsx(165,12): error TS2375: Type '{ day: CalendarDay; modifiers: Modifiers; disabled?: boolean | undefined; form?: string | undefined; formAction?: string | ((formData: FormData) => void | Promise<...>) | undefined; ... 285 more ...; locale: Partial<...> | undefined; }' is not assignable to type '{ locale?: Partial<DayPickerLocale>; }' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties.
|
||||
@repo/shadcn-ui:typecheck: Types of property 'locale' are incompatible.
|
||||
@repo/shadcn-ui:typecheck: Type 'Partial<DayPickerLocale> | undefined' is not assignable to type 'Partial<DayPickerLocale>'.
|
||||
@repo/shadcn-ui:typecheck: Type 'undefined' is not assignable to type 'Partial<DayPickerLocale>'.
|
||||
@repo/shadcn-ui:typecheck: [ELIFECYCLE] Command failed with exit code 2.
|
||||
ERROR @repo/shadcn-ui#typecheck: command (/home/david/dev/metis-desk/packages/shadcn-ui) /home/david/.nvm/versions/node/v24.20.0/bin/pnpm run typecheck exited (2)
|
||||
|
||||
Tasks: 3 successful, 4 total
|
||||
Cached: 3 cached, 4 total
|
||||
Time: 4.871s
|
||||
Failed: @repo/shadcn-ui#typecheck
|
||||
|
||||
ERROR run failed: command exited (2)
|
||||
[ELIFECYCLE] Command failed with exit code 2.
|
||||
@ -0,0 +1,11 @@
|
||||
{
|
||||
"head": "d2bf856c973419277f0b30f6437242cd82f7d720",
|
||||
"branch": "main",
|
||||
"sourceMatches": 1884,
|
||||
"overlayMatches": 40,
|
||||
"differences": [],
|
||||
"restoration": "git archive HEAD de los archivos requeridos + overlay; todas las huellas verificadas en directorio temporal eliminado",
|
||||
"lockfileSha256": "bcd468ab1f127fffeb7f37ef3bdb5f2c5e85d40c192f3bc4a7cae5b2209b7c17",
|
||||
"overlaySha256": "96c1e316c77ac603d910385534d72703d4e008b3447998cda6e85d81248377ed",
|
||||
"note": "No equivale a instalar dependencias ni construir desde checkout limpio."
|
||||
}
|
||||
@ -0,0 +1,256 @@
|
||||
{
|
||||
"recordedAt": "2026-10-25T21:28:07.054832+00:00",
|
||||
"head": "d2bf856c973419277f0b30f6437242cd82f7d720",
|
||||
"node": "24.20.0",
|
||||
"pnpm": "11.25.0",
|
||||
"verdict": "GO técnico para el snapshot; no autorización ni activación de producción",
|
||||
"productionActivated": false,
|
||||
"sourceSnapshotUnchanged": true,
|
||||
"commands": [
|
||||
{
|
||||
"command": "cd modules/companies; TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test --test-isolation=none src/web/software-installations/shared/software.test.tsx",
|
||||
"exitCode": 0,
|
||||
"log": "technical/fixed-test.log"
|
||||
},
|
||||
{
|
||||
"command": "Copia temporal del test de HEAD contra el consumidor actual, con configuración TSX del paquete",
|
||||
"exitCode": 1,
|
||||
"log": "technical/before-fixture.log"
|
||||
},
|
||||
{
|
||||
"command": "Seis ficheros dirigidos de Companies, node --import tsx --test --test-isolation=none",
|
||||
"exitCode": 0,
|
||||
"log": "technical/directed.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm --filter @metis/resources test (loopback permitido)",
|
||||
"exitCode": 0,
|
||||
"log": "technical/resources.log"
|
||||
},
|
||||
{
|
||||
"command": "Suite Companies con --test-isolation=none: solo dos fallos preexistentes",
|
||||
"exitCode": 1,
|
||||
"log": "technical/companies.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm --filter @metis/assets test",
|
||||
"exitCode": 0,
|
||||
"log": "technical/assets.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm --filter @metis/web test",
|
||||
"exitCode": 0,
|
||||
"log": "technical/web.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm exec biome check sobre 26 archivos modificados",
|
||||
"exitCode": 0,
|
||||
"log": "technical/biome.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm exec eslint sobre los mismos archivos",
|
||||
"exitCode": 0,
|
||||
"log": "technical/eslint.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm build",
|
||||
"exitCode": 0,
|
||||
"log": "technical/build.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm typecheck",
|
||||
"exitCode": 2,
|
||||
"log": "technical/root-types.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm lint",
|
||||
"exitCode": 1,
|
||||
"log": "technical/root-lint.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm check",
|
||||
"exitCode": 1,
|
||||
"log": "technical/root-check.log"
|
||||
},
|
||||
{
|
||||
"command": "python3 scripts/resource-scope-test.py --operating-systems-closure --regressions",
|
||||
"exitCode": 0,
|
||||
"log": "technical/sql.log"
|
||||
},
|
||||
{
|
||||
"command": "python3 scripts/visual-audit.py --global-operating-systems --check",
|
||||
"exitCode": 0,
|
||||
"log": "technical/ui-final.log"
|
||||
},
|
||||
{
|
||||
"command": "bash scripts/setup-playwright-wsl.sh",
|
||||
"exitCode": 0,
|
||||
"log": "technical/playwright-setup.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm --filter @metis/companies typecheck",
|
||||
"exitCode": 0,
|
||||
"log": "technical/companies-types.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm --filter @metis/assets typecheck",
|
||||
"exitCode": 0,
|
||||
"log": "technical/assets-types.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm --filter @metis/resources typecheck",
|
||||
"exitCode": 0,
|
||||
"log": "technical/resources-types.log"
|
||||
},
|
||||
{
|
||||
"command": "pnpm --filter @metis/web typecheck",
|
||||
"exitCode": 0,
|
||||
"log": "technical/web-types.log"
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
"mariadb/closure-results.json": "cc1bf4d8d95066d2d26a3a311c2faa47ca1708e740a81b3f5add4885334d1ab0",
|
||||
"mariadb/commands.json": "3be89d419e1522940dca425372f8819cdccb2b105b51f52b47c3853f2b679797",
|
||||
"mariadb/integration.log": "e00585674ea26535c4036c702a4b07df1c7b47a054f8d5092b1629acadf16a2e",
|
||||
"mariadb/legacy-evolution.json": "2d7573f1fec50a999cdb6ddcc457ebc217ed3389b4682703205ef3fc1fbb8d5e",
|
||||
"mariadb/migration-cli.log": "00b8b6468d8f1f12accbd3bda2ffb89b19026a4b79c54e2368e2f3e4b29e1511",
|
||||
"mariadb/regressions.log": "db28a510adbde7d77f581afcc04d2a2af6656acc9c15462cdb1b5698d8a78c04",
|
||||
"mariadb/schema.json": "00a5a6e6bdd2fc21d4a59b8113785ee9c7d193a840667690343c5c5fcd647296",
|
||||
"playwright/global-os-asset-current-os.png": "04d91e8ac9d5c63e88825316722810c2c591590542217f7fa4634c2264b97f2d",
|
||||
"playwright/global-os-consumer-asset-dark-1280.png": "1e4f5a1ed065b971bfed04b56118698aeaecbc6e4165be9b9a51d768afbd9ed4",
|
||||
"playwright/global-os-consumer-asset-dark-1600.png": "738d52c39d9a2e6979092b41ab52f2546545d79ec3c77f646de3afe697ef129a",
|
||||
"playwright/global-os-consumer-asset-dark-320.png": "879c852042ff4725af15329d91c1370ab7169049e7090ae4fb26efd0bc45ce0c",
|
||||
"playwright/global-os-consumer-asset-dark-390.png": "bebadc5e239f012f9d3130e411084834046b635e17e0f18d5e4992328b09d634",
|
||||
"playwright/global-os-consumer-asset-dark-768.png": "9cc39d75301c3a90e5adb3271e057867f91840299dc374f8452c9fa4fbb8f806",
|
||||
"playwright/global-os-consumer-asset-light-1280.png": "7fe7c80e2577c2ef8677bb3af5aedf093f8c00baac699fea54262d018700cb35",
|
||||
"playwright/global-os-consumer-asset-light-1600.png": "b159572983b68cbae5716ce0f696542557bab1820b4c8dbe986a17ff76e3f71f",
|
||||
"playwright/global-os-consumer-asset-light-320.png": "2ed77dc6230c94ca58903113608c54b30ffd027a3d1c23b35eb0f554a00a9358",
|
||||
"playwright/global-os-consumer-asset-light-390.png": "7bd0ef9010677b3c2fcc1ed120fc2c826378cf5a5fbea2a7fed521d335f0509a",
|
||||
"playwright/global-os-consumer-asset-light-768.png": "0c304c20b205290eb292464778fed476be9d219433c5d3a323de3642a1381d99",
|
||||
"playwright/global-os-consumer-editor-dark-1280.png": "d7250e7951b4c93c1157223016f66aae9d17bdf48e79bfbf6d0cb4907e40289c",
|
||||
"playwright/global-os-consumer-editor-dark-1600.png": "31c7738bab9f2b4de1b27b681e2cc6b20e4be309e0cbf6b30e7100f8dedaa7eb",
|
||||
"playwright/global-os-consumer-editor-dark-320.png": "47ead965242ba39836270bafc8e7d8e93eeb3f408cdfddccac8218ebab59c68b",
|
||||
"playwright/global-os-consumer-editor-dark-390.png": "8df556a016285b8f94efb2f37187653567479699badaab0041283329fe14f691",
|
||||
"playwright/global-os-consumer-editor-dark-768.png": "e8a9ddabb99b989b7cf505ef620f742157f48abd2a69fe527abea76bfe2790e6",
|
||||
"playwright/global-os-consumer-editor-light-1280.png": "8f263e156a83a3a2c4156e6e503a2bd35c7b63ecda10d3ebfdf3d7cd3035956e",
|
||||
"playwright/global-os-consumer-editor-light-1600.png": "cbb8f70af2f6905029cce28b171b9361bf0bbd6de9aa55f2d1dc1e939b4be84e",
|
||||
"playwright/global-os-consumer-editor-light-320.png": "a38101e979acf6b4e068da330bf353aac3968825bfb0844c7fc4b3562b526384",
|
||||
"playwright/global-os-consumer-editor-light-390.png": "64d35e47d100f959d16e8a70d36bc5cd30ae6d2ed976d99440434715fbe2592d",
|
||||
"playwright/global-os-consumer-editor-light-768.png": "195dabae571e2c51463d7300186935c0616495430cb514702f8ff68e428d05a6",
|
||||
"playwright/global-os-consumer-english-editor.png": "63114ee4f460e4d10264844759b83bf4e64fdccb7cad9f3be3ee86d9f17fdf4e",
|
||||
"playwright/global-os-consumer-history-dark-1280.png": "2e247fcce762deac5251d0fcaf1b066c0f9e80a027cfaab2a763b0e3f21d8999",
|
||||
"playwright/global-os-consumer-history-dark-1600.png": "1f2b8d364c45e19b527175a329309dabf0ef3a771a715ce043ca877183b32ca5",
|
||||
"playwright/global-os-consumer-history-dark-320.png": "f128274530f6f6a74576891bdc0095f4f366171a5c55d50999b317f7b4844a49",
|
||||
"playwright/global-os-consumer-history-dark-390.png": "edebe2f879eca035d9d89742e98944ed9a9258f0291d324a72e65b5cd3794ae3",
|
||||
"playwright/global-os-consumer-history-dark-768.png": "b066d5d7729839fc7fe6b32d56c3d51d882a36cee745fc10cd92f6dfcee6a06e",
|
||||
"playwright/global-os-consumer-history-light-1280.png": "8a6e7801dd9ea68897d8c86a3234a65a1b00a00d7dc9b1adc5f321646069e127",
|
||||
"playwright/global-os-consumer-history-light-1600.png": "2500a71eac4002e3c70a3a604aa62c31f6636a7feae54e19854aaecbee2d9f79",
|
||||
"playwright/global-os-consumer-history-light-320.png": "913e736a486b61b2e70bb5926a7e1696034d90c867d12190254a55d78c387f4d",
|
||||
"playwright/global-os-consumer-history-light-390.png": "0da5b9088ccae931e93ad7d7b4d7c5b9444128413800a9ffb55c1f34a33a8d23",
|
||||
"playwright/global-os-consumer-history-light-768.png": "89a451ce8cc5cdf33a93a74eb35a21fd76c9db300958ae356869ea1273a22a84",
|
||||
"playwright/global-os-consumer-menu-dark-1280.png": "58f79b61f176004473206cd32afcb07a1a84ffd2b1acfe79637242cdeb64d5f4",
|
||||
"playwright/global-os-consumer-menu-dark-1600.png": "ce3fc1aa225a35b79679b031175d17ae55cbe178ffea0dbcead00605f85cde5e",
|
||||
"playwright/global-os-consumer-menu-dark-320.png": "cc80c1fbc0500dde23ec2922c22abf729a42f26546e1d78acfe920437f26f7c2",
|
||||
"playwright/global-os-consumer-menu-dark-390.png": "f1bb3e0217c25b98d122413b9184b0ab33dac89a00f547f8d853fbbbec046c4a",
|
||||
"playwright/global-os-consumer-menu-dark-768.png": "f5dec8d1b02aba58ffed0a8da3e33a24a247654724932da7f504f40c30ba9615",
|
||||
"playwright/global-os-consumer-menu-light-1280.png": "8416692a0ba13b42305f63be9ba4b741461e9a80204ad73372246c92320859ec",
|
||||
"playwright/global-os-consumer-menu-light-1600.png": "2d7be3a26da1aae3b6860d44fb0c1736cfce2590fae5770615445171bfad09fc",
|
||||
"playwright/global-os-consumer-menu-light-320.png": "c63aa18fcde5542d75d579f3566b069ac9a0b1e5bcfdf10dc9b198b707936a9a",
|
||||
"playwright/global-os-consumer-menu-light-390.png": "a7251e892c57027e0850ae4c762447d6134735eb2083246d0404db7955991d77",
|
||||
"playwright/global-os-consumer-menu-light-768.png": "211e3067f05d6bbd1b87bc376c042134f94edd04ea6ee90d719bae759e999c72",
|
||||
"playwright/global-os-consumer-version-updated.png": "a549e26ed8eb7764f15d9f40ea9835d8ec642a6261af7dd4e4562f4f6fc297a5",
|
||||
"playwright/global-os-create-review.png": "8fa14c0b22d9929687b8c0dec5fb2d92d2b781a363ca38334a701e16be71b790",
|
||||
"playwright/global-os-created-detail.png": "d6f649bfd68ae62137afffa75fe1cf62ebf192f64affe3901911dc82faa618ef",
|
||||
"playwright/global-os-empty.png": "945bc2240b0a97430856bc635f0db4c84217d4264c57e9fddbb1cfff9e5d803e",
|
||||
"playwright/global-os-english-form.png": "227d5f682315b8c256589fb9e5bdc93d3dfca4cb5508ed78b6e43c4d886289c6",
|
||||
"playwright/global-os-identity-error.png": "d4d5b049b34acc9a13a3eced5e2572798852e3fbae266c59771bd82945fd33b1",
|
||||
"playwright/global-os-installation-history-global-link.png": "f92554b2058618e06afe57bc2c2088d40dfb9e25230d26c3c0a8872867f75df5",
|
||||
"playwright/global-os-list-dark-1024.png": "5246d3cde105d8922dd4e0bb8b677f7f24704864dffd6c0fa07bbcc0bd68dc62",
|
||||
"playwright/global-os-list-dark-1280.png": "011defd978d3525a93664f795c9d3ececd0809eea62038d4e47e7435a372e1c9",
|
||||
"playwright/global-os-list-dark-1600.png": "f67e198bb5af48beaaebd43f63c6daa9210befd69506b2be496e1a1d455fbb98",
|
||||
"playwright/global-os-list-dark-320.png": "fc6c5f6f89914a863200082079e2af563ab9537fdf87201082d5ef4e5d14c101",
|
||||
"playwright/global-os-list-dark-390.png": "3090626d0526ccaaa4b8b80ea0868dfe2451ee8644d498922e6ca11562609f38",
|
||||
"playwright/global-os-list-dark-768.png": "02ce9944bdd51afd79aa8c98f82d4e718fd3ea488e41fc2d376cb219d2d5e0fa",
|
||||
"playwright/global-os-list-error.png": "d9cf753aa3b8860682a384ce49cef16447df2e2e9201fe34e596e9d90a3e0c8f",
|
||||
"playwright/global-os-list-light-1024.png": "73a89add6661dd90c360dce567cb23d088e132c4fce396648f272435903d60c6",
|
||||
"playwright/global-os-list-light-1280.png": "7727d4a0339da4b2122a35f1fff5ac4814e16fcafc4485ddbca1a98a76ac2f40",
|
||||
"playwright/global-os-list-light-1600.png": "36f901f92df98cb4c9b612c29c3a773a7144c439d79e7975294507f3d81ee153",
|
||||
"playwright/global-os-list-light-320.png": "891cdc1875a12ed6275a2b4e69cdcd2a2a4aaf92a5922df9b17aa2ae6895412a",
|
||||
"playwright/global-os-list-light-390.png": "42a0a2f27df0f17b2d117ef5709344bc0cba2cfc40fc6a04652673bac0d175d3",
|
||||
"playwright/global-os-list-light-768.png": "54cee20c8cac78ef32e20ada33552829e3ea738b7f7791900ca013afeb97bf49",
|
||||
"playwright/global-os-list-loading.png": "36a4f535a36e594587470d50b6c06a9eccf2bb937f49ff0ea329cd98f519f55a",
|
||||
"playwright/global-os-mixed-picker.png": "1c4ac0eca0418d66934e44f21e383ddbdac26905857dbb666eb2bbe02cfdbd55",
|
||||
"playwright/global-os-mobile-form.png": "a031175d5e23ecf7dffa3972a13f4b0341df633d481889d52a9ca3c0f6e1f130",
|
||||
"playwright/global-os-no-results.png": "958c0e1eff95f0eabc5b283a8c4dd033ccbb408d0fe94dc79897073bf39615b7",
|
||||
"playwright/global-os-ordinary-detail.png": "8c0aaed14ee140cc92d60163f93c7a8eb470209db3c016b44ebf8e8312008583",
|
||||
"playwright/global-os-workplace-map-global-os.png": "2955406b5c9788d9ffa731e2a027dc859b57548d7f595e934777f81da5573479",
|
||||
"playwright/global-os-workstation-current-os.png": "800d98c9df1bf717f301c04c205968610bc9518afdc1fb6bc5f8bfb1ccde9099",
|
||||
"playwright/report.json": "a38ee16a8ee485ea6d4c86ee24807b445761c5b45d12206a1b59a5c8dd8ab021",
|
||||
"source-snapshot.json": "920f525ca209709cc2b7c7dae72543b7a6caca88ff1dc2a762dc124f8da2a764",
|
||||
"technical/assets-types.log": "29c5ee0f6b0b20dbb259b99d01276198c3d28190090706394608d4deda6d2c0b",
|
||||
"technical/assets.log": "c6a6f00c76b95873c8388f30b2d774d4602b17f2e650ed65c1e00cdc14ffe2ea",
|
||||
"technical/before-fixture.log": "207e8874c0c570fe933f4df33b8a35e4d43737b2f94a4a6ada8dcc335c3028e2",
|
||||
"technical/biome.log": "c496253de0796337b5b000a511393b2df95d357ad33d2b58463adf2d10ca021b",
|
||||
"technical/build.log": "798d761887f0c907bf788c8745ff339ed9b8e88656c9dcf452281c993d3cf1d1",
|
||||
"technical/companies-types.log": "29c5ee0f6b0b20dbb259b99d01276198c3d28190090706394608d4deda6d2c0b",
|
||||
"technical/companies.log": "8ff55b6400189e0839ac6417851d69ef776c2eadd63c2ba27b39acec5da06c9a",
|
||||
"technical/directed.log": "01e490e8a96edafdfc53603896176fcddd5cd8e47070e368e937ec50df83c424",
|
||||
"technical/eslint.log": "5ed6a4f57ac7a5a545c51b8a7f7dea5962a279a44e0db5e3c6ceebc995cd8626",
|
||||
"technical/fixed-test.log": "0c2834971f9a0dbc81ade36935c995e69def9404c2fdc952da38048d27e99ab9",
|
||||
"technical/original-test.log": "5955606b21e43d7371d2eebdd65bc19e09ebbc4b86de4540f85bc71365ebd7f0",
|
||||
"technical/playwright-setup.log": "2565becd5de35225e582e0a8d5711f943995eacdd2fbd40636b7e6343d0feec6",
|
||||
"technical/resources-types.log": "29c5ee0f6b0b20dbb259b99d01276198c3d28190090706394608d4deda6d2c0b",
|
||||
"technical/resources.log": "327609f1b30f5190063114e0338ef5ff4b38f52af5e67017a0bf98474c872334",
|
||||
"technical/root-check.log": "98cf029b9c142508e72ab64334583ff8780488444037f5bb234e7114f12ec485",
|
||||
"technical/root-lint.log": "fc961500ea6e3b89bf9a64cef55767946063bc0700416eea087e6a0a4ef84434",
|
||||
"technical/root-types.log": "d8628051881132d802ffc8e49e87b4d820ec119b81ee76dab800efcb4055742a",
|
||||
"technical/sql.log": "f9cf09b1fcc7504596980256bb2212f868cc280ccaa32ecd3c992d5a2dfed978",
|
||||
"technical/ui-extended.log": "4852f17572f9a7c5354013e3ec092d129de29ca4a6003046ae29ec1151d67c08",
|
||||
"technical/ui-final.log": "98f59a442168847cc8eef69e29009424898b3151c1a3e2dc4f99cac0f5cc1466",
|
||||
"technical/ui.log": "1723367d86da3f3b15166f05aed42ded21c0aadfca5f9a734ffbfb70172c19d6",
|
||||
"technical/web-types.log": "29c5ee0f6b0b20dbb259b99d01276198c3d28190090706394608d4deda6d2c0b",
|
||||
"technical/web.log": "8f18dca363602c6102560fd668aa44f2ac3d0ec67c27de4417ec5490528a210e"
|
||||
},
|
||||
"workingSources": {
|
||||
"apps/server/src/global-operating-systems-closure.integration.test.ts": "771ccf735641dbd257569b4366f0ac70eb81d63cc729db2d5f4ed5e30358669a",
|
||||
"apps/server/src/global-operating-systems-legacy.fixture.ts": "45f10913233b328f157bd1d0d098f04dc8176aa263f368f9d3a80de98f537a19",
|
||||
"docs/architecture/cierre-tecnico-catalogo-global-sistemas-operativos.md": "6f13d080cacda801606b8edf0d4f6ee70715c0f1b56e4b792567b550f89582f8",
|
||||
"docs/auditorias/workplace-node-actions/01-inventario-entidades-acciones.md": "b2b2334e9180860f135e36c7a7f2f05c2c8f48d9d393173d98c419ed3bdf1eb3",
|
||||
"docs/auditorias/workplace-node-actions/02-matriz-acciones.md": "5bfaf864392130853424363d1c8f8544ddfa06bc8ee7c8bef7fc67a1c1a6edbb",
|
||||
"docs/auditorias/workplace-node-actions/03-contrato-ui.md": "69a9f98bcc4ca4bd41ea1f35c02446e2ec25ceeffcdcee38ba92c0d34c66973f",
|
||||
"docs/auditorias/workplace-node-actions/04-trazabilidad.md": "89bfc1cad84bb7fb38d9504d1cf5524b648ba5f44a390c5c14f0fefd65ce83a9",
|
||||
"modules/assets/src/web/assets/detail/ui/asset-history-dialog.tsx": "757b575359249cb6ee3191449430e8087fbaeb118f46e3456486e530e691b65e",
|
||||
"modules/companies/src/web/software-installations/shared/controllers/use-software-installation-editor-data.ts": "71fef135cf5b273d38ae23372d4d81e06ea0586f11d75148af195d9eeef5732d",
|
||||
"modules/companies/src/web/software-installations/shared/helpers/software-installation-options.ts": "76ec297ee00a6b45f3b6a6f18df6d4497d86e7acaf05a763884451f9174f468f",
|
||||
"modules/companies/src/web/workstations/detail/controllers/use-workplace-node-actions.ts": "c3d0c108c20010daef39f2088ffc6416a753bb4e00c6e784c906cf7c53b397ff",
|
||||
"modules/companies/src/web/workstations/detail/helpers/workplace-node-actions.test.tsx": "295a95f4b80fc7a2c1254dce75df6dd4b62e198853db351681031870723d370e",
|
||||
"modules/companies/src/web/workstations/detail/helpers/workplace-node-actions.ts": "360617bc875971ddee5928405627866a0f37b2f8672555a8448a943d55961cc7",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-asset-action-dialog.tsx": "76548ae75d060bf0556eb37cec8aa6984b8e976a93457311bb34e901a06c1b61",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-installation-editor-dialog.tsx": "6dcd900dad363eb354811c94b1b2851cfb11bc7014e05bb12912c8899535b0fd",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-node-action-dialogs.tsx": "5212e4b69914b655219740feeae1ddbf2bb557a75211cf087c09142886df65a6",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-node-actions-menu.tsx": "6009e0a8ec172ba288919af684bf8eb0467d644b3783a036e5f76008d919998b",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-node-unavailable-dialog.tsx": "d1653c1ea696c8ee371de56b11d96b087d0600f678098731cfd4d6a1cecf73a8",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-software-action-dialog.tsx": "13bc0cf7919a384f9cd463a2aca40542fc56932cbef7dcbd3fd3dc4050b6d11f",
|
||||
"docs/architecture/implementacion-catalogo-global-sistemas-operativos.md": "2dd63c3a5ce7112fd19fd03ffb1a7d0e466ed24e249f9657d9becc4bcb934ad5",
|
||||
"docs/componentes-de-interfaz.md": "31c6daca423c90658fa297429ec8911849ade9145c5126d60352242ea55028ef",
|
||||
"docs/mapa-visual-del-puesto.md": "c4bd910596642520bdaa967996ba4bf44a87864db28ababb506a2d5fb1cef570",
|
||||
"modules/assets/src/common/locales/en.json": "ea4529d517d5e64202a572eb812c68ac8f2a88816630793d6bc7bf1e9b0c27f6",
|
||||
"modules/assets/src/common/locales/es.json": "0a36b2693a5cc69d7f5ae12d8b814b34d3d59e921678522f87b98317185b5aac",
|
||||
"modules/assets/src/web/index.ts": "30a8c78828a2bad2707b129bb8c96c059915680a3e075618250fd0a2dcaf2332",
|
||||
"modules/companies/package.json": "4ec1fae0055094934c42e4e72c21488094e7da124e2bcc73729eebaba88dc146",
|
||||
"modules/companies/src/web/software-installations/history/ui/software-history-dialog.tsx": "2fed9ead7fceaddc4c4a17252ac43b3623b6a79af4ade3c9ca3c45aa1cc991df",
|
||||
"modules/companies/src/web/software-installations/list/ui/software-installations-panel.tsx": "bf345d28c796deeec3ed9486325b8e36142ab5667d881c2460dd236585dce048",
|
||||
"modules/companies/src/web/software-installations/shared/current-operating-systems.test.tsx": "81105f06893f3016b808611e571dc0cbb0d61dc590ab7ec972150acb029b2ccf",
|
||||
"modules/companies/src/web/software-installations/shared/software.test.tsx": "54b06b4342de3a6376c340f34b8fa630a693cbd72704f905d0f3511b4b7dbfb5",
|
||||
"modules/companies/src/web/software-installations/shared/ui/software-installation-editor-dialog.tsx": "d89d4a6f793b4d615538e8d0bf3db7a23a63bafaaf52b7514414f8184d381620",
|
||||
"modules/companies/src/web/workstations/detail/helpers/workplace-map-model.ts": "bf25c7e88b8c8bf318c398986dbc08f3ec2f77eb739588555e711fe1e123cb4c",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-equipment-card.tsx": "e0eda9c6a7c39d731a172d776bafdbb47f33cdcdfc86e9eba01271742b146194",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-software-card.tsx": "28bb03f91e3a86ac5fe18920862b9653956b9e1199997a2846bf7e6942ff29ba",
|
||||
"modules/companies/src/web/workstations/detail/ui/workplace-visual-map-card.tsx": "aee738391e04ff12444fc0f02fdc0307cd9d34b8357a96628368951c911de1c6",
|
||||
"modules/companies/src/web/workstations/detail/ui/workstation-software-dialog.tsx": "9ec3268fd9b7ffbc4e092a131e37f6a7a3f6948a437f97b77e677c3b97daeea9",
|
||||
"package.json": "c86cf84959bf2c01e6cda2e7c85c03db48b535ab0b2f47432fb28e173ad5b30a",
|
||||
"scripts/global-operating-systems-ui-audit.py": "f1cf327720de201823b2a7997c8640ba36b343d308ee59d1a1615678cbceab99",
|
||||
"scripts/resource-scope-test.py": "b4c06cf30ee7b8d6695119e32d2c3460af9b92a915aa366ea5ad22bdde36f0c7",
|
||||
"scripts/workplace-visual-map.test.py": "d745a0f12dd8a39c958d6ab0947f805c794c511ac944a447c43cf590253a0ad1"
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,225 @@
|
||||
{
|
||||
"results": [
|
||||
{
|
||||
"id": "B3",
|
||||
"result": "pass: two persisted evolutions; legacy root and two revisions unchanged"
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-01",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
201
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-02",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
201
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-03",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
409
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-04",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
201
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-05",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
201
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-06",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
201
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-07",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
201,
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-08",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-09",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
404
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-10",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
404
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-11",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-12",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
409
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-13",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200,
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-14",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200,
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-15",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
409
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-16",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200,
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-17",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-18",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200,
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-19",
|
||||
"result": "pass: stock accepted; copied/support/SMB/access/certificate/license rejected",
|
||||
"http": [
|
||||
201,
|
||||
409
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "DB-SO-20",
|
||||
"result": "pass",
|
||||
"http": [
|
||||
200
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "C1",
|
||||
"result": "pass: observed InnoDB catalog wait; one equivalent persisted",
|
||||
"http": [
|
||||
201,
|
||||
409
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "C2",
|
||||
"result": "pass: deactivation first, waiting installation rejected",
|
||||
"http": [
|
||||
200,
|
||||
409
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "C3",
|
||||
"result": "pass: commercial identity fixed; exactly one optimistic admin update",
|
||||
"http": [
|
||||
409,
|
||||
201,
|
||||
200,
|
||||
409
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "C4a",
|
||||
"result": "pass: rollback of root/values/revisions, same creation UUID retry succeeds",
|
||||
"http": [
|
||||
500,
|
||||
201
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "C4b",
|
||||
"result": "pass: no partial installation or orphan revision; Resource unchanged",
|
||||
"http": [
|
||||
500
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "D",
|
||||
"result": "pass: exact capabilities v2, v3 OS, incompatible reads and unauthorized writes rejected",
|
||||
"http": [
|
||||
200,
|
||||
409,
|
||||
400,
|
||||
403
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "F",
|
||||
"result": "pass: all six gates closed; read/history/removal preserved",
|
||||
"http": [
|
||||
200,
|
||||
409
|
||||
]
|
||||
}
|
||||
],
|
||||
"databaseCases": 20,
|
||||
"companies": 15,
|
||||
"principal": {
|
||||
"people": 50,
|
||||
"assets": 50,
|
||||
"workstations": 50,
|
||||
"profiles": 50,
|
||||
"resourcesAtLeast": 53
|
||||
},
|
||||
"orphanRevisions": 0,
|
||||
"semanticSqlUnique": false,
|
||||
"productionActivated": false
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
{
|
||||
"integration": 0,
|
||||
"regressions": 0
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
▶ Cierre SO: matriz DB-SO, evolución, integridad y concurrencia real
|
||||
✔ B3 — evolución SQL doble conserva campos, valores, personalizaciones y revisiones (0.701606ms)
|
||||
✔ DB-SO-01 crear SO global (42.871762ms)
|
||||
✔ DB-SO-02 crear aplicación global mantiene su tipo (42.436359ms)
|
||||
✔ DB-SO-03 licencia global rechazada sin raíz persistida (21.908985ms)
|
||||
✔ DB-SO-04 instalación válida desde A (121.539228ms)
|
||||
✔ DB-SO-05 mismo producto desde B, instalación y licencia independientes (162.366074ms)
|
||||
✔ DB-SO-06 dos activos de A usan el mismo SO global (315.915072ms)
|
||||
✔ DB-SO-07 particulares y globales equivalentes conservan UUID e instalaciones (137.643465ms)
|
||||
✔ DB-SO-08 licencia de A válida y particular (117.865997ms)
|
||||
✔ DB-SO-09 licencia de A no puede vincularse desde B (157.376231ms)
|
||||
✔ DB-SO-10 SO excluido de ApplicationConfiguration (126.53987ms)
|
||||
✔ DB-SO-11 desactivar conserva instalaciones usadas (50.935631ms)
|
||||
✔ DB-SO-12 inactivo bloquea nueva instalación (108.274915ms)
|
||||
✔ DB-SO-13 historial y resolver conservan SO inactivo (29.59105ms)
|
||||
✔ DB-SO-14 versión instalada genera revisión sin cambiar producto (365.216789ms)
|
||||
✔ DB-SO-15 destino de instalación inmutable (223.936693ms)
|
||||
✔ DB-SO-16 retirada de instalación de producto inactivo (570.283255ms)
|
||||
✔ DB-SO-17 replay de creación no duplica ni reactiva (33.73864ms)
|
||||
✔ DB-SO-18 activar/desactivar preserva UUID, historial y referencias (177.183762ms)
|
||||
✔ DB-SO-19 solo stock: copia y otros tipos no adquieren globalidad (315.072142ms)
|
||||
✔ DB-SO-20 particular anterior incompleto sigue siendo editable y local (145.260533ms)
|
||||
✔ C1 — equivalentes concurrentes esperan el lock de catálogo y solo uno persiste (230.848842ms)
|
||||
✔ C2 — desactivación confirma primero y asociación revalida después de esperar (468.860536ms)
|
||||
✔ C3 — identidad, instalación, metadatos y desactivación concurrentes (288.411751ms)
|
||||
✔ C4a — fallo tras escribir raíz global revierte raíz, características y revisiones (76.707246ms)
|
||||
✔ C4b — fallo en revisión de instalación revierte instalación completa (146.788844ms)
|
||||
✔ D — contratos v2/v3, propósito, capabilities y autorización (248.643069ms)
|
||||
✔ F — cerrar gates conserva lectura, historial y retirada legítima (1726.083172ms)
|
||||
✔ Cierre SO: matriz DB-SO, evolución, integridad y concurrencia real (47759.450137ms)
|
||||
ℹ tests 29
|
||||
ℹ suites 0
|
||||
ℹ pass 29
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 49098.971929
|
||||
@ -0,0 +1,101 @@
|
||||
{
|
||||
"resourceId": "01a174ef-6735-710e-91a9-8bca64fef0dc",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"originalBindings": [
|
||||
{
|
||||
"id": "01a174ee-f269-72eb-9e8e-de87e373415b",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ee-f266-714f-ab98-ef87f8982b5f",
|
||||
"required": 0,
|
||||
"position": 0,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
},
|
||||
{
|
||||
"id": "01a174ee-f269-72eb-9e8e-ee01d44d287d",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ee-f267-762b-ae6a-91610b309fd2",
|
||||
"required": 0,
|
||||
"position": 1,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
},
|
||||
{
|
||||
"id": "01a174ee-f269-72eb-9e8e-f37d9579e79c",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ee-f267-762b-ae6a-6fbf417e65f2",
|
||||
"required": 0,
|
||||
"position": 2,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
},
|
||||
{
|
||||
"id": "01a174ef-66ee-7763-8065-815a5c68b2cf",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ef-66ae-77ec-8d19-1ef89cb4745c",
|
||||
"required": 0,
|
||||
"position": 3,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
}
|
||||
],
|
||||
"evolvedBindings": [
|
||||
{
|
||||
"id": "01a174ee-f269-72eb-9e8e-de87e373415b",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ee-f266-714f-ab98-ef87f8982b5f",
|
||||
"required": 0,
|
||||
"position": 0,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
},
|
||||
{
|
||||
"id": "01a174ee-f269-72eb-9e8e-ee01d44d287d",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ee-f267-762b-ae6a-91610b309fd2",
|
||||
"required": 0,
|
||||
"position": 1,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
},
|
||||
{
|
||||
"id": "01a174ee-f269-72eb-9e8e-f37d9579e79c",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ee-f267-762b-ae6a-6fbf417e65f2",
|
||||
"required": 0,
|
||||
"position": 2,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
},
|
||||
{
|
||||
"id": "01a174ef-66ee-7763-8065-815a5c68b2cf",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ef-66ae-77ec-8d19-1ef89cb4745c",
|
||||
"required": 0,
|
||||
"position": 3,
|
||||
"sectionId": "01a174ef-66e7-77fa-b64c-2667d71f05a9"
|
||||
},
|
||||
{
|
||||
"id": "01a174ef-6805-739a-8977-95d3221286d2",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ef-6804-747b-b42c-b10560610789",
|
||||
"required": 0,
|
||||
"position": 4,
|
||||
"sectionId": null
|
||||
},
|
||||
{
|
||||
"id": "01a174ef-6805-739a-8977-99e426769780",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ef-6804-747b-b42c-b4deee355760",
|
||||
"required": 0,
|
||||
"position": 5,
|
||||
"sectionId": null
|
||||
},
|
||||
{
|
||||
"id": "01a174ef-6805-739a-8977-9d7c602e1672",
|
||||
"templateId": "01a174ee-f269-72eb-9e8e-fb11658300fc",
|
||||
"fieldId": "01a174ef-6804-747b-b42c-bb5123934ce6",
|
||||
"required": 0,
|
||||
"position": 6,
|
||||
"sectionId": null
|
||||
}
|
||||
],
|
||||
"originalResourcesUnchanged": true,
|
||||
"revisionsPreserved": 2,
|
||||
"evolutionRuns": 2,
|
||||
"customizationPreserved": true,
|
||||
"availabilityPreserved": true
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
Resource scope: scoped; pasos aplicados: ninguno.
|
||||
@ -0,0 +1,70 @@
|
||||
✔ HTTP real: estado, contrato, errores y trazas sin datos sensibles (64.878761ms)
|
||||
✔ HTTP real: entrada JSON inválida y errores internos conservan un contrato seguro (27.548096ms)
|
||||
✔ MariaDB y HTTP: pertenencias, controladores, transiciones, aislamiento e integridad (2213.707827ms)
|
||||
✔ el puerto usa un valor local por defecto y acepta los límites válidos (0.364602ms)
|
||||
✔ el arranque rechaza puertos inválidos sin revelar el valor recibido (0.816006ms)
|
||||
✔ MariaDB: dominios, contexto atómico, concurrencia, integridad y ciclo de vida (792.630633ms)
|
||||
✔ HTTP infraestructura: sesión, pertenencia, validación, identidad e idempotencia (30.063319ms)
|
||||
✔ diagnóstico: causas de Sequelize, ciclos y valores lanzados que no son Error (0.571405ms)
|
||||
✔ diagnóstico: mensajes multilínea, propiedades y cadenas largas no se vuelcan (0.524903ms)
|
||||
✔ contextos de servidor: sesión vigente, ámbito existente, copias y revocación (0.955607ms)
|
||||
▶ MariaDB: publicaciones SMB, historial, proveedor y HTTP autenticado
|
||||
✔ registro y cardinalidad; publicador desconocido y distintos tipos sin AD (356.392903ms)
|
||||
✔ traslado atómico, replay estable y finalización identificada sin tocar accesos (111.981018ms)
|
||||
✔ concurrencia: altas iguales, publicadores distintos, traslados y finalización (148.241983ms)
|
||||
✔ restricciones SQL y protección de borrado también después de finalizar (119.178071ms)
|
||||
✔ fallo al insertar sucesor revierte el cierre anterior (118.745467ms)
|
||||
✔ proveedor: SQL keyset, orientación, historial y cursores ligados a consulta (28.355508ms)
|
||||
✔ resolución SMB por lotes: no confunde dominios, recursos ordinarios o compañías (165.029105ms)
|
||||
✔ estados y desactivación concurrente conservan publicaciones documentadas (514.990061ms)
|
||||
✔ UI 3.5: selector remoto filtra en SQL y pagina sin hidratar el inventario (1436.471586ms)
|
||||
✔ HTTP: sesión, CSRF, validación, idempotencia y consultas paginadas (123.198399ms)
|
||||
✔ MariaDB: publicaciones SMB, historial, proveedor y HTTP autenticado (4756.605138ms)
|
||||
▶ MariaDB: SMB, unicidad vigente, historial, diagnóstico e integridad
|
||||
✔ alta, presentación, lector público y aislamiento (38.900183ms)
|
||||
✔ conflicto funcional, rollback, alias e inactivos (142.198937ms)
|
||||
✔ edición atómica, UUID estable, idempotencia y revisión de UNC (95.592397ms)
|
||||
✔ desactivación libera dirección y reactivación conflictiva conserva estado (163.774395ms)
|
||||
✔ concurrencia: una sola alta y ninguna raíz huérfana (82.283001ms)
|
||||
✔ restricciones SQL: compañía, 1:1, protocolo y unicidad (47.664648ms)
|
||||
✔ legado: ausente, inválido, válido, duplicado y candidato access; diagnóstico sin escritura (439.420705ms)
|
||||
✔ integración access existente y cambio de UNC conservan contexto y referencias (175.55068ms)
|
||||
✔ FolderMapping conserva UNC, letra e historial y detecta dirección desactualizada (409.768588ms)
|
||||
✔ HTTP autenticado: contrato SMB y diagnóstico acotado sin aceptar parámetros (65.420477ms)
|
||||
✔ borrado sin referencias limpia proyección; una FK externa impide borrado (261.540007ms)
|
||||
✔ MariaDB: SMB, unicidad vigente, historial, diagnóstico e integridad (2639.933755ms)
|
||||
▶ MariaDB: nuevas carpetas SMB integradas con accesos sin adoptar históricos
|
||||
✔ alta automática: misma identidad, ninguna dependencia de dominio o publicador (12.60939ms)
|
||||
✔ renombrar el tipo de acceso conserva su UUID para las siguientes altas (55.298894ms)
|
||||
✔ el cliente no puede imponer buzón, otro tipo ni contexto; se revierte el tipo preparado (74.970834ms)
|
||||
✔ renombrado, UNC y estados sincronizan valores y UUID de todas las revisiones (133.734351ms)
|
||||
✔ necesidad y concesiones AD y NAS local: cobertura documental y borrado protegido (1191.363179ms)
|
||||
✔ fallo después de escribir acceso revierte Resource, SMB, AccessItem y tipo (38.852577ms)
|
||||
✔ carpeta anterior sin integración: lectura, edición y estado no la adoptan (158.133526ms)
|
||||
✔ MariaDB: nuevas carpetas SMB integradas con accesos sin adoptar históricos (2343.789395ms)
|
||||
✔ MariaDB: las plantillas propagan estructura en todas las compañías de forma atómica e idempotente (1585.94158ms)
|
||||
▶ MariaDB: proveedor real, lotes, seguridad, SQL paginado y transiciones de pertenencias
|
||||
✔ registro estático y consultas vacías desde ambos extremos (6.754748ms)
|
||||
✔ directa, inversa, either, roles y UUID canónicos sin duplicados (40.533589ms)
|
||||
✔ keyset SQL: páginas de uno, fin y cursores ligados a consulta (26.276387ms)
|
||||
✔ lotes reales sin N+1, orden, repetidos, estados y referencias inaccesibles (19.499839ms)
|
||||
✔ traslado y fin conservan identidad, estado y rol histórico (38.136271ms)
|
||||
✔ ámbito, contextos falsificados, sesión revocada y acceso inverso (18.632432ms)
|
||||
✔ EXPLAIN real e índices disponibles para ambos extremos (6.075043ms)
|
||||
✔ MariaDB: proveedor real, lotes, seguridad, SQL paginado y transiciones de pertenencias (1486.420567ms)
|
||||
ℹ {"column":"assetId","includeEnded":false,"plan":[{"id":1,"select_type":"SIMPLE","table":"asset_directory_memberships","type":"range","possible_keys":"PRIMARY,directory_membership_identity_scope,directory_membership_asset,directory_membership_domain,directory_membership_domain_page","key":"PRIMARY","key_len":"144","ref":null,"rows":"4","Extra":"Using where"}]}
|
||||
ℹ {"column":"assetId","includeEnded":false,"forcedIndexPlan":[{"key":"directory_membership_asset","Extra":"Using index condition; Using where"}]}
|
||||
ℹ {"column":"assetId","includeEnded":true,"plan":[{"id":1,"select_type":"SIMPLE","table":"asset_directory_memberships","type":"range","possible_keys":"PRIMARY,directory_membership_identity_scope,directory_membership_asset,directory_membership_domain,directory_membership_domain_page","key":"PRIMARY","key_len":"144","ref":null,"rows":"4","Extra":"Using where"}]}
|
||||
ℹ {"column":"assetId","includeEnded":true,"forcedIndexPlan":[{"key":"directory_membership_asset","Extra":"Using index condition"}]}
|
||||
ℹ {"column":"domainResourceId","includeEnded":false,"plan":[{"id":1,"select_type":"SIMPLE","table":"asset_directory_memberships","type":"range","possible_keys":"PRIMARY,directory_membership_identity_scope,directory_membership_asset,directory_membership_domain,directory_membership_domain_fk,directory_membership_domain_page","key":"PRIMARY","key_len":"144","ref":null,"rows":"4","Extra":"Using where"}]}
|
||||
ℹ {"column":"domainResourceId","includeEnded":false,"forcedIndexPlan":[{"key":"directory_membership_domain_page","Extra":"Using index condition; Using where"}]}
|
||||
ℹ {"column":"domainResourceId","includeEnded":true,"plan":[{"id":1,"select_type":"SIMPLE","table":"asset_directory_memberships","type":"range","possible_keys":"PRIMARY,directory_membership_identity_scope,directory_membership_asset,directory_membership_domain,directory_membership_domain_fk,directory_membership_domain_page","key":"PRIMARY","key_len":"144","ref":null,"rows":"4","Extra":"Using where"}]}
|
||||
ℹ {"column":"domainResourceId","includeEnded":true,"forcedIndexPlan":[{"key":"directory_membership_domain_page","Extra":"Using index condition"}]}
|
||||
ℹ tests 50
|
||||
ℹ suites 0
|
||||
ℹ pass 50
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 17252.621293
|
||||
|
After Width: | Height: | Size: 138 KiB |