{
  "version": "2.1",
  "timestamp": "2026-02-24T09:17:15.529Z",
  "snapshot": {
    "stage": "PRE_COMMIT",
    "audit_mode": "engine",
    "outcome": "BLOCK",
    "files_scanned": 987,
    "files_affected": 99,
    "evaluation_metrics": {
      "facts_total": 2116,
      "rules_total": 417,
      "baseline_rules": 6,
      "heuristic_rules": 172,
      "skills_rules": 239,
      "project_rules": 0,
      "matched_rules": 15,
      "unmatched_rules": 402,
      "evaluated_rule_ids": [
        "backend.avoid-explicit-any",
        "backend.no-console-log",
        "backend.no-empty-catch",
        "common.error.empty_catch",
        "common.network.missing_error_handling",
        "common.types.record_unknown_requires_type",
        "common.types.undefined_in_base_type",
        "common.types.unknown_without_guard",
        "frontend.avoid-single-letter-variables",
        "frontend.no-console-log",
        "frontend.no-debugger",
        "heuristics.android.globalscope.ast",
        "heuristics.android.run-blocking.ast",
        "heuristics.android.thread-sleep.ast",
        "heuristics.ios.anyview.ast",
        "heuristics.ios.callback-style.ast",
        "heuristics.ios.dispatchgroup.ast",
        "heuristics.ios.dispatchqueue.ast",
        "heuristics.ios.dispatchsemaphore.ast",
        "heuristics.ios.force-cast.ast",
        "heuristics.ios.force-try.ast",
        "heuristics.ios.force-unwrap.ast",
        "heuristics.ios.navigation-view.ast",
        "heuristics.ios.observable-object.ast",
        "heuristics.ios.on-tap-gesture.ast",
        "heuristics.ios.operation-queue.ast",
        "heuristics.ios.string-format.ast",
        "heuristics.ios.task-detached.ast",
        "heuristics.ios.uiscreen-main-bounds.ast",
        "heuristics.ios.unchecked-sendable.ast",
        "heuristics.ts.buffer-alloc-unsafe-slow.ast",
        "heuristics.ts.buffer-alloc-unsafe.ast",
        "heuristics.ts.child-process-exec-file-sync.ast",
        "heuristics.ts.child-process-exec-file-untrusted-args.ast",
        "heuristics.ts.child-process-exec-file.ast",
        "heuristics.ts.child-process-exec-sync.ast",
        "heuristics.ts.child-process-exec.ast",
        "heuristics.ts.child-process-fork.ast",
        "heuristics.ts.child-process-import.ast",
        "heuristics.ts.child-process-shell-true.ast",
        "heuristics.ts.child-process-spawn-sync.ast",
        "heuristics.ts.child-process-spawn.ast",
        "heuristics.ts.console-error.ast",
        "heuristics.ts.debugger.ast",
        "heuristics.ts.delete-operator.ast",
        "heuristics.ts.document-write.ast",
        "heuristics.ts.dynamic-shell-invocation.ast",
        "heuristics.ts.eval.ast",
        "heuristics.ts.fs-access-callback.ast",
        "heuristics.ts.fs-access-sync.ast",
        "heuristics.ts.fs-append-file-callback.ast",
        "heuristics.ts.fs-append-file-sync.ast",
        "heuristics.ts.fs-chmod-callback.ast",
        "heuristics.ts.fs-chmod-sync.ast",
        "heuristics.ts.fs-chown-callback.ast",
        "heuristics.ts.fs-chown-sync.ast",
        "heuristics.ts.fs-close-callback.ast",
        "heuristics.ts.fs-close-sync.ast",
        "heuristics.ts.fs-copy-file-callback.ast",
        "heuristics.ts.fs-copy-file-sync.ast",
        "heuristics.ts.fs-cp-callback.ast",
        "heuristics.ts.fs-cp-sync.ast",
        "heuristics.ts.fs-exists-callback.ast",
        "heuristics.ts.fs-exists-sync.ast",
        "heuristics.ts.fs-fchmod-callback.ast",
        "heuristics.ts.fs-fchmod-sync.ast",
        "heuristics.ts.fs-fchown-callback.ast",
        "heuristics.ts.fs-fchown-sync.ast",
        "heuristics.ts.fs-fdatasync-callback.ast",
        "heuristics.ts.fs-fdatasync-sync.ast",
        "heuristics.ts.fs-fstat-callback.ast",
        "heuristics.ts.fs-fstat-sync.ast",
        "heuristics.ts.fs-fsync-callback.ast",
        "heuristics.ts.fs-fsync-sync.ast",
        "heuristics.ts.fs-ftruncate-callback.ast",
        "heuristics.ts.fs-ftruncate-sync.ast",
        "heuristics.ts.fs-futimes-callback.ast",
        "heuristics.ts.fs-futimes-sync.ast",
        "heuristics.ts.fs-lchmod-callback.ast",
        "heuristics.ts.fs-lchown-callback.ast",
        "heuristics.ts.fs-link-callback.ast",
        "heuristics.ts.fs-link-sync.ast",
        "heuristics.ts.fs-lstat-callback.ast",
        "heuristics.ts.fs-lstat-sync.ast",
        "heuristics.ts.fs-lutimes-callback.ast",
        "heuristics.ts.fs-lutimes-sync.ast",
        "heuristics.ts.fs-mkdir-callback.ast",
        "heuristics.ts.fs-mkdir-sync.ast",
        "heuristics.ts.fs-mkdtemp-callback.ast",
        "heuristics.ts.fs-mkdtemp-sync.ast",
        "heuristics.ts.fs-open-callback.ast",
        "heuristics.ts.fs-open-sync.ast",
        "heuristics.ts.fs-opendir-callback.ast",
        "heuristics.ts.fs-opendir-sync.ast",
        "heuristics.ts.fs-promises-access.ast",
        "heuristics.ts.fs-promises-append-file.ast",
        "heuristics.ts.fs-promises-chmod.ast",
        "heuristics.ts.fs-promises-chown.ast",
        "heuristics.ts.fs-promises-copy-file.ast",
        "heuristics.ts.fs-promises-cp.ast",
        "heuristics.ts.fs-promises-link.ast",
        "heuristics.ts.fs-promises-lstat.ast",
        "heuristics.ts.fs-promises-mkdir.ast",
        "heuristics.ts.fs-promises-mkdtemp.ast",
        "heuristics.ts.fs-promises-open.ast",
        "heuristics.ts.fs-promises-opendir.ast",
        "heuristics.ts.fs-promises-read-file.ast",
        "heuristics.ts.fs-promises-readdir.ast",
        "heuristics.ts.fs-promises-readlink.ast",
        "heuristics.ts.fs-promises-realpath.ast",
        "heuristics.ts.fs-promises-rename.ast",
        "heuristics.ts.fs-promises-rm.ast",
        "heuristics.ts.fs-promises-stat.ast",
        "heuristics.ts.fs-promises-symlink.ast",
        "heuristics.ts.fs-promises-unlink.ast",
        "heuristics.ts.fs-promises-utimes.ast",
        "heuristics.ts.fs-promises-write-file.ast",
        "heuristics.ts.fs-read-callback.ast",
        "heuristics.ts.fs-read-file-callback.ast",
        "heuristics.ts.fs-read-file-sync.ast",
        "heuristics.ts.fs-read-sync.ast",
        "heuristics.ts.fs-readdir-callback.ast",
        "heuristics.ts.fs-readdir-sync.ast",
        "heuristics.ts.fs-readlink-callback.ast",
        "heuristics.ts.fs-readlink-sync.ast",
        "heuristics.ts.fs-readv-callback.ast",
        "heuristics.ts.fs-readv-sync.ast",
        "heuristics.ts.fs-realpath-callback.ast",
        "heuristics.ts.fs-realpath-sync.ast",
        "heuristics.ts.fs-rename-callback.ast",
        "heuristics.ts.fs-rename-sync.ast",
        "heuristics.ts.fs-rm-callback.ast",
        "heuristics.ts.fs-rm-sync.ast",
        "heuristics.ts.fs-rmdir-callback.ast",
        "heuristics.ts.fs-rmdir-sync.ast",
        "heuristics.ts.fs-stat-callback.ast",
        "heuristics.ts.fs-stat-sync.ast",
        "heuristics.ts.fs-statfs-callback.ast",
        "heuristics.ts.fs-statfs-sync.ast",
        "heuristics.ts.fs-symlink-callback.ast",
        "heuristics.ts.fs-symlink-sync.ast",
        "heuristics.ts.fs-truncate-callback.ast",
        "heuristics.ts.fs-truncate-sync.ast",
        "heuristics.ts.fs-unlink-callback.ast",
        "heuristics.ts.fs-unlink-sync.ast",
        "heuristics.ts.fs-unwatch-file-callback.ast",
        "heuristics.ts.fs-utimes-callback.ast",
        "heuristics.ts.fs-utimes-sync.ast",
        "heuristics.ts.fs-watch-callback.ast",
        "heuristics.ts.fs-watch-file-callback.ast",
        "heuristics.ts.fs-write-callback.ast",
        "heuristics.ts.fs-write-file-callback.ast",
        "heuristics.ts.fs-write-file-sync.ast",
        "heuristics.ts.fs-write-sync.ast",
        "heuristics.ts.fs-writev-callback.ast",
        "heuristics.ts.fs-writev-sync.ast",
        "heuristics.ts.function-constructor.ast",
        "heuristics.ts.hardcoded-secret-token.ast",
        "heuristics.ts.inner-html.ast",
        "heuristics.ts.insecure-token-date-now.ast",
        "heuristics.ts.insecure-token-math-random.ast",
        "heuristics.ts.insert-adjacent-html.ast",
        "heuristics.ts.jwt-decode-without-verify.ast",
        "heuristics.ts.jwt-sign-no-expiration.ast",
        "heuristics.ts.jwt-verify-ignore-expiration.ast",
        "heuristics.ts.new-promise-async.ast",
        "heuristics.ts.process-env-mutation.ast",
        "heuristics.ts.process-exit.ast",
        "heuristics.ts.set-interval-string.ast",
        "heuristics.ts.set-timeout-string.ast",
        "heuristics.ts.tls-env-override.ast",
        "heuristics.ts.tls-reject-unauthorized-false.ast",
        "heuristics.ts.vm-dynamic-code-execution.ast",
        "heuristics.ts.weak-crypto-hash.ast",
        "heuristics.ts.weak-token-randomuuid.ast",
        "heuristics.ts.with-statement.ast",
        "skills.backend.avoid-explicit-any",
        "skills.backend.enforce-clean-architecture",
        "skills.backend.guideline.backend.aaa-pattern-arrange-act-assert",
        "skills.backend.guideline.backend.actu-a-como-un-arquitecto-de-soluciones-y-software-designer",
        "skills.backend.guideline.backend.analizar-estructura-existente-mo-dulos-servicios-repositorios-dtos",
        "skills.backend.guideline.backend.anemic-domain-models-entidades-solo-con-getters-setters",
        "skills.backend.guideline.backend.async-processing-no-bloquear-request-principal",
        "skills.backend.guideline.backend.audit-logging-registrar-cambios-cri-ticos",
        "skills.backend.guideline.backend.cache-aside-pattern-leer-de-cache-si-no-existe-leer-de-bd-y-cachear",
        "skills.backend.guideline.backend.cache-manager-nestjs-cache-manager",
        "skills.backend.guideline.backend.caching-redis-para-datos-frecuentes",
        "skills.backend.guideline.backend.callback-hell-usar-async-await",
        "skills.backend.guideline.backend.class-transformer-transform-exclude-expose",
        "skills.backend.guideline.backend.class-validator-decorators-isstring-isemail-min-max",
        "skills.backend.guideline.backend.clean-por-feature-presentation-application-domain-infrastructure-domai",
        "skills.backend.guideline.backend.compression-gzip-para-responses-grandes",
        "skills.backend.guideline.backend.comprobar-que-compile-antes-de-sugerir-npm-run-build-sin-errores",
        "skills.backend.guideline.backend.config-por-entorno-env-development-env-production",
        "skills.backend.guideline.backend.connection-pooling-configurar-maxconnections",
        "skills.backend.guideline.backend.connection-pooling-reutilizar-conexiones-de-bd",
        "skills.backend.guideline.backend.contexto-en-logs-userid-requestid-traceid",
        "skills.backend.guideline.backend.controllers-delgados-solo-routing-y-validacio-n-lo-gica-en-servicios",
        "skills.backend.guideline.backend.correlation-ids-para-tracing-distribuido",
        "skills.backend.guideline.backend.cors-configurado-solo-ori-genes-permitidos",
        "skills.backend.guideline.backend.cors-configurar-ori-genes-permitidos",
        "skills.backend.guideline.backend.coverage-95-en-lo-gica-cri-tica",
        "skills.backend.guideline.backend.custom-exceptions-validationexception-notfoundexception-unauthorizedex",
        "skills.backend.guideline.backend.database-indexing-i-ndices-en-columnas-frecuentes-en-where-join",
        "skills.backend.guideline.backend.ddd-entidades-value-objects-repositorios-eventos-de-dominio",
        "skills.backend.guideline.backend.dependency-injection-injectable-inject-providers-array",
        "skills.backend.guideline.backend.diagramas-c4-context-container-component-para-arquitectura",
        "skills.backend.guideline.backend.domain-events-ordercreatedevent-userregisteredevent",
        "skills.backend.guideline.backend.dtos-en-boundaries-validacio-n-en-entrada-salida",
        "skills.backend.guideline.backend.dtos-para-validacio-n-class-validator-class-transformer",
        "skills.backend.guideline.backend.dtos-separados-createorderdto-updateorderdto-orderresponsedto",
        "skills.backend.guideline.backend.e2e-tests-supertest-para-flujos-completos",
        "skills.backend.guideline.backend.emitir-eventos-de-dominio-ordercreatedevent-ordercancelledevent",
        "skills.backend.guideline.backend.en-produccio-n-ni-un-mocks-ni-un-spies-todo-real-de-bbdd-supabase-post",
        "skills.backend.guideline.backend.enums-para-valores-fijos-orderstatus-paymentmethod-incidenttype",
        "skills.backend.guideline.backend.error-responses-consistentes-statuscode-message-timestamp-path",
        "skills.backend.guideline.backend.estrategia-de-invalidacio-n-ttl-invalidacio-n-expli-cita",
        "skills.backend.guideline.backend.event-bus-nestjs-event-emitter-o-custom",
        "skills.backend.guideline.backend.event-driven-comunicacio-n-entre-features-por-eventos",
        "skills.backend.guideline.backend.event-handlers-onevent-order-created",
        "skills.backend.guideline.backend.event-sourcing-para-auditori-a-auditlogs-table",
        "skills.backend.guideline.backend.event-store-log-de-eventos-para-auditori-a",
        "skills.backend.guideline.backend.exception-filters-catch-para-manejo-global",
        "skills.backend.guideline.backend.fast-tests-100ms-integracio-n-10ms-unitarios",
        "skills.backend.guideline.backend.feature-first-cada-feature-es-un-bounded-context-aislado",
        "skills.backend.guideline.backend.guards-en-todas-las-rutas-protegidas-useguards-jwtauthguard",
        "skills.backend.guideline.backend.guards-para-autenticacio-n-autorizacio-n-useguards-jwtauthguard",
        "skills.backend.guideline.backend.hardcoded-values-config-en-variables-de-entorno",
        "skills.backend.guideline.backend.hateoas-opcional-links-en-responses-para-navegacio-n",
        "skills.backend.guideline.backend.health-checks-health-endpoint-liveness-readiness",
        "skills.backend.guideline.backend.helmet-security-headers",
        "skills.backend.guideline.backend.http-status-codes-apropiados-200-201-400-401-403-404-500",
        "skills.backend.guideline.backend.http-status-codes-sema-ntica-correcta",
        "skills.backend.guideline.backend.https-redirect-en-produccio-n",
        "skills.backend.guideline.backend.i-ndices-apropiados-para-queries-frecuentes",
        "skills.backend.guideline.backend.i18n-en-error-messages-mensajes-traducibles",
        "skills.backend.guideline.backend.idempotencia-eventos-procesables-mu-ltiples-veces-sin-efectos-secundar",
        "skills.backend.guideline.backend.idempotencia-put-y-delete-idempotentes",
        "skills.backend.guideline.backend.implementaciones-en-infrastructure-inyectar-dependencia-de-bd",
        "skills.backend.guideline.backend.input-validation-siempre-validar-con-dtos",
        "skills.backend.guideline.backend.integration-tests-controllers-services-repositorios-reales",
        "skills.backend.guideline.backend.interceptors-para-logging-transformacio-n-no-en-cada-endpoint",
        "skills.backend.guideline.backend.interfaces-en-domain-iordersrepository-iusersrepository",
        "skills.backend.guideline.backend.inyectar-repositorios-necesarios-di-en-constructor",
        "skills.backend.guideline.backend.jest-framework-de-testing",
        "skills.backend.guideline.backend.jsdoc-mi-nimo-solo-para-apis-pu-blicas-o-lo-gica-compleja",
        "skills.backend.guideline.backend.jwt-strategy-nestjs-jwt-nestjs-passport",
        "skills.backend.guideline.backend.key-naming-convention-module-entity-id-orders-order-123",
        "skills.backend.guideline.backend.lo-gica-en-controllers-mover-a-servicios-use-cases",
        "skills.backend.guideline.backend.log-levels-error-warn-info-debug",
        "skills.backend.guideline.backend.loggear-errores-con-contexto-completo",
        "skills.backend.guideline.backend.magic-numbers-usar-constantes-con-nombres-descriptivos",
        "skills.backend.guideline.backend.makesut-pattern-system-under-test-factory",
        "skills.backend.guideline.backend.manejo-de-errores-lanzar-excepciones-especi-ficas",
        "skills.backend.guideline.backend.me-todos-expresivos-findactiveordersbyuserid-mejor-que-find",
        "skills.backend.guideline.backend.me-tricas-de-negocio-kpis-analytics",
        "skills.backend.guideline.backend.me-tricas-prometheus-prom-client-para-me-tricas",
        "skills.backend.guideline.backend.measure-twice-cut-once-planificar-arquitectura-dependencias-y-flujo-de",
        "skills.backend.guideline.backend.middleware-para-cross-cutting-concerns-logging-cors-etc",
        "skills.backend.guideline.backend.migrations-versionadas-nunca-modificar-migraciones-pasadas",
        "skills.backend.guideline.backend.mo-dulos-cohesivos-un-mo-dulo-por-feature-ordersmodule-usersmodule-etc",
        "skills.backend.guideline.backend.mocks-en-produccio-n-solo-datos-reales",
        "skills.backend.guideline.backend.n-1-query-prevention-eager-loading-cuando-sea-apropiado",
        "skills.backend.guideline.backend.naming-conventions-plurales-para-colecciones-orders-users",
        "skills.backend.guideline.backend.nested-validation-validatenested-type",
        "skills.backend.guideline.backend.nestjs-config-configmodule-para-variables-de-entorno",
        "skills.backend.guideline.backend.no-cachear-datos-sensibles-o-cifrar-antes-de-cachear",
        "skills.backend.guideline.backend.no-defaults-en-produccio-n-fallar-si-falta-config-cri-tica",
        "skills.backend.guideline.backend.no-exponer-stack-traces-solo-en-desarrollo",
        "skills.backend.guideline.backend.no-lo-gica-de-negocio-en-repositorios-solo-crud-y-queries",
        "skills.backend.guideline.backend.no-loggear-datos-sensibles-passwords-tokens-pii",
        "skills.backend.guideline.backend.no-poner-comentarios-en-el-co-digo-nombres-autodescriptivos",
        "skills.backend.guideline.backend.no-singleton-en-su-lugar-inyeccio-n-de-dependencias-nestjs-di-containe",
        "skills.backend.guideline.backend.pagination-siempre-para-listas-offset-limit-o-cursor-based",
        "skills.backend.guideline.backend.password-hashing-bcrypt-con-salt-rounds-10",
        "skills.backend.guideline.backend.pipes-para-validacio-n-global-validationpipe-en-main-ts",
        "skills.backend.guideline.backend.preferir-early-returns-guard-clauses-evitar-if-else-anidados",
        "skills.backend.guideline.backend.queries-parametrizadas-prevenir-sql-injection",
        "skills.backend.guideline.backend.query-optimization-explain-analyze",
        "skills.backend.guideline.backend.query-optimization-explain-analyze-para-queries-lentas",
        "skills.backend.guideline.backend.rate-limiting-nestjs-throttler-para-prevenir-brute-force",
        "skills.backend.guideline.backend.rate-limiting-throttler-para-prevenir-abuse",
        "skills.backend.guideline.backend.readme-por-mo-dulo-explicar-responsabilidad-del-mo-dulo",
        "skills.backend.guideline.backend.redis-para-cache-distribuido",
        "skills.backend.guideline.backend.refresh-tokens-no-solo-access-tokens",
        "skills.backend.guideline.backend.repositories-para-datos-abstraer-acceso-a-bd-con-interfaces",
        "skills.backend.guideline.backend.repository-pattern-siempre-iordersrepository-ordersrepository",
        "skills.backend.guideline.backend.restful-get-post-put-patch-delete-apropiados",
        "skills.backend.guideline.backend.retornar-dtos-no-exponer-entidades-directamente",
        "skills.backend.guideline.backend.role-based-access-control-roles-admin-user",
        "skills.backend.guideline.backend.secrets-management-variables-de-entorno-nunca-en-co-digo",
        "skills.backend.guideline.backend.secrets-separados-aws-secrets-manager-hashicorp-vault",
        "skills.backend.guideline.backend.seguir-siempre-flujo-bdd-tdd-feature-files-specs-implementacio-n",
        "skills.backend.guideline.backend.services-para-lo-gica-de-negocio-orquestar-use-cases-y-repositorios",
        "skills.backend.guideline.backend.shared-kernel-tipos-mi-nimos-compartidos",
        "skills.backend.guideline.backend.siempre-responder-en-espan-ol",
        "skills.backend.guideline.backend.soft-deletes-deletedat-en-lugar-de-delete-fi-sico",
        "skills.backend.guideline.backend.soft-deletes-por-defecto-deletedat-column",
        "skills.backend.guideline.backend.sql-injection-prevention-queries-parametrizadas",
        "skills.backend.guideline.backend.supabase-client-supabase-supabase-js",
        "skills.backend.guideline.backend.swagger-nestjs-swagger-decoradores-apiproperty",
        "skills.backend.guideline.backend.swagger-openapi-nestjs-swagger-para-documentacio-n",
        "skills.backend.guideline.backend.test-db-base-de-datos-separada-para-tests",
        "skills.backend.guideline.backend.transacciones-para-operaciones-cri-ticas",
        "skills.backend.guideline.backend.transacciones-para-operaciones-multi-tabla",
        "skills.backend.guideline.backend.try-catch-silenciosos-siempre-loggear-o-propagar-ast-common-error-empt",
        "skills.backend.guideline.backend.un-archivo-por-use-case-createorderusecase-updateorderstatususecase",
        "skills.backend.guideline.backend.unit-tests-servicios-use-cases-con-mocks",
        "skills.backend.guideline.backend.use-cases-expli-citos-createorderusecase-updateorderstatususecase",
        "skills.backend.guideline.backend.validar-precondiciones-fail-fast",
        "skills.backend.guideline.backend.validation-de-config-joi-o-class-validator-para-env",
        "skills.backend.guideline.backend.validationpipe-global-en-main-ts-con-whitelist-true",
        "skills.backend.guideline.backend.versionado-api-v1-api-v2",
        "skills.backend.guideline.backend.winston-logger-estructurado-json-logs",
        "skills.backend.guideline.backend.xss-prevention-sanitizar-inputs",
        "skills.backend.no-console-log",
        "skills.backend.no-empty-catch",
        "skills.backend.no-god-classes",
        "skills.backend.no-solid-violations",
        "skills.frontend.avoid-explicit-any",
        "skills.frontend.enforce-clean-architecture",
        "skills.frontend.guideline.frontend.accesibilidad-aria-semantic-html-primero-aria-cuando-sea-necesario",
        "skills.frontend.guideline.frontend.actu-a-como-un-arquitecto-de-soluciones-y-software-designer",
        "skills.frontend.guideline.frontend.analizar-archivos-existentes-revisar-componentes-servicios-tipos-actua",
        "skills.frontend.guideline.frontend.analizar-estructura-existente-archivos-componentes-servicios-dependenc",
        "skills.frontend.guideline.frontend.api-client-abstrai-do-axios-fetch-en-capa-de-infraestructura",
        "skills.frontend.guideline.frontend.aplicar-reglas-de-testing-makesut-system-under-test-helpers-separados-",
        "skills.frontend.guideline.frontend.app-router-usar-app-directory-no-pages-excepto-legacy",
        "skills.frontend.guideline.frontend.aria-labels-aria-label-aria-describedby-cuando-sea-necesario",
        "skills.frontend.guideline.frontend.clean-por-feature-presentation-application-domain-infrastructure-domai",
        "skills.frontend.guideline.frontend.cn-helper-combinar-clases-con-clsx-o-tailwind-merge",
        "skills.frontend.guideline.frontend.code-splitting-react-lazy-suspense-dynamic-imports",
        "skills.frontend.guideline.frontend.compatibilidad-con-componentes-actuales-mantener-consistencia-en-patro",
        "skills.frontend.guideline.frontend.comprobar-que-compile-y-pase-tests-antes-de-sugerir-typescript-strict-",
        "skills.frontend.guideline.frontend.contrast-ratio-wcag-aa-mi-nimo-4-5-1-texto-normal-3-1-texto-grande",
        "skills.frontend.guideline.frontend.csp-headers-content-security-policy-en-next-js-config",
        "skills.frontend.guideline.frontend.css-modules-para-estilos-especi-ficos-de-componente-si-es-necesario",
        "skills.frontend.guideline.frontend.custom-hooks-para-lo-gica-reutilizable-extraer-lo-gica-compleja-a-hook",
        "skills.frontend.guideline.frontend.data-fetching-en-server-components-fetch-con-cache-revalidate-async-co",
        "skills.frontend.guideline.frontend.ddd-entidades-value-objects-repositorios-eventos",
        "skills.frontend.guideline.frontend.debounce-throttle-para-inputs-de-bu-squeda-scroll-handlers",
        "skills.frontend.guideline.frontend.dynamic-imports-next-dynamic-para-code-splitting",
        "skills.frontend.guideline.frontend.e2e-con-playwright-user-flows-cri-ticos",
        "skills.frontend.guideline.frontend.en-produccio-n-ni-un-mocks-ni-un-spies-todo-real-de-apis-o-almacenamie",
        "skills.frontend.guideline.frontend.error-handling-global-interceptors-para-401-500-etc",
        "skills.frontend.guideline.frontend.error-messages-claros-accionables-traducidos-i18n",
        "skills.frontend.guideline.frontend.estado-local-global-eficiente-usestate-para-local-zustand-context-para",
        "skills.frontend.guideline.frontend.event-driven-navegacio-n-y-coordinacio-n-por-eventos-cuando-crezca-el-",
        "skills.frontend.guideline.frontend.evitar-prop-drilling-context-api-o-zustand-para-estado-compartido-prof",
        "skills.frontend.guideline.frontend.fallback-locale-ingle-s-como-fallback",
        "skills.frontend.guideline.frontend.feature-first-cada-feature-es-un-bounded-context-aislado",
        "skills.frontend.guideline.frontend.focus-management-focus-visible-trap-focus-en-modales",
        "skills.frontend.guideline.frontend.formateo-de-fechas-nu-meros-usar-intl-api-o-i18n-helpers",
        "skills.frontend.guideline.frontend.generics-cuando-sea-apropiado-componentes-y-hooks-reutilizables-type-s",
        "skills.frontend.guideline.frontend.hooks-primero-usestate-useeffect-usecallback-usememo-custom-hooks",
        "skills.frontend.guideline.frontend.https-siempre-redirect-automa-tico-en-produccio-n",
        "skills.frontend.guideline.frontend.i18n-desde-di-a-1-archivos-de-traduccio-n-separados-locales",
        "skills.frontend.guideline.frontend.interfaces-para-props-definir-tipos-expli-citos-para-todos-los-compone",
        "skills.frontend.guideline.frontend.invalidacio-n-inteligente-invalidar-cache-despue-s-de-mutaciones",
        "skills.frontend.guideline.frontend.key-props-en-listas-nunca-usar-i-ndice-como-key-si-el-orden-puede-camb",
        "skills.frontend.guideline.frontend.keyboard-navigation-todos-los-interactivos-accesibles-por-teclado",
        "skills.frontend.guideline.frontend.loading-error-states-loading-tsx-error-tsx-en-cada-ruta",
        "skills.frontend.guideline.frontend.loading-states-skeleton-screens-spinners-optimistic-updates",
        "skills.frontend.guideline.frontend.measure-twice-cut-once-planificar-arquitectura-dependencias-y-flujo-de",
        "skills.frontend.guideline.frontend.memoizacio-n-estrate-gica-no-todo-necesita-memo-perfilar-primero",
        "skills.frontend.guideline.frontend.metadata-api-generatemetadata-para-seo",
        "skills.frontend.guideline.frontend.msw-mock-service-worker-mock-apis-en-tests-no-axios-fetch-directamente",
        "skills.frontend.guideline.frontend.namespaces-separar-traducciones-por-feature-mo-dulo",
        "skills.frontend.guideline.frontend.next-image-siempre-para-ima-genes-optimizacio-n-automa-tica",
        "skills.frontend.guideline.frontend.no-any-usar-unknown-si-el-tipo-es-desconocido-luego-type-guard",
        "skills.frontend.guideline.frontend.no-catch-vaci-os-prohibido-silenciar-errores-ast-common-error-emptycat",
        "skills.frontend.guideline.frontend.no-class-components-solo-functional-components",
        "skills.frontend.guideline.frontend.no-poner-comentarios-en-el-co-digo-nombres-autodescriptivos-lo-hacen-i",
        "skills.frontend.guideline.frontend.no-singleton-en-su-lugar-inyeccio-n-de-dependencias-usar-providers-con",
        "skills.frontend.guideline.frontend.nombres-autodescriptivos-todo-en-ingle-s-usar-i18n-para-ui",
        "skills.frontend.guideline.frontend.optimizar-renders-react-memo-usememo-usecallback-para-prevenir-re-rend",
        "skills.frontend.guideline.frontend.preferir-early-returns-y-destructuring-evitar-if-else-anidados-callbac",
        "skills.frontend.guideline.frontend.preferir-spies-frente-a-stubs-o-mocks-si-es-posible-usar-jest-spyon-pa",
        "skills.frontend.guideline.frontend.queries-apropiadas-getbyrole-getbylabeltext-getbytext-getbytestid",
        "skills.frontend.guideline.frontend.rate-limiting-proteger-endpoints-pu-blicos",
        "skills.frontend.guideline.frontend.react-hook-form-performance-menos-re-renders",
        "skills.frontend.guideline.frontend.react-query-para-server-state-cache-automa-tico-refetch-invalidacio-n",
        "skills.frontend.guideline.frontend.react-testing-library-testear-como-usuario-no-implementation-details",
        "skills.frontend.guideline.frontend.respetar-patrones-establecidos-repository-pattern-use-cases-dtos",
        "skills.frontend.guideline.frontend.responsive-design-mobile-first-breakpoints-de-tailwind",
        "skills.frontend.guideline.frontend.retry-logic-reintentar-requests-fallidos-react-query-retry",
        "skills.frontend.guideline.frontend.reutilizar-componentes-ui-no-duplicar-button-card-dialog-etc",
        "skills.frontend.guideline.frontend.route-handlers-app-api-para-endpoints-backend",
        "skills.frontend.guideline.frontend.sanitizar-html-dompurify-si-se-renderiza-html-de-usuario",
        "skills.frontend.guideline.frontend.screen-reader-testing-probar-con-voiceover-nvda",
        "skills.frontend.guideline.frontend.seguir-siempre-flujo-bdd-tdd-escribir-historias-de-usuario-primero-lue",
        "skills.frontend.guideline.frontend.semantic-html-button-para-botones-nav-para-navegacio-n-etc",
        "skills.frontend.guideline.frontend.server-components-por-defecto-use-client-solo-cuando-sea-necesario-int",
        "skills.frontend.guideline.frontend.shared-kernel-tipos-mi-nimos-compartidos-entre-features",
        "skills.frontend.guideline.frontend.siempre-responder-en-espan-ol",
        "skills.frontend.guideline.frontend.snapshot-testing-con-moderacio-n-solo-para-componentes-estables",
        "skills.frontend.guideline.frontend.tailwind-css-utility-first-disen-o-consistente",
        "skills.frontend.guideline.frontend.theme-provider-next-themes-para-dark-light-mode",
        "skills.frontend.guideline.frontend.tipos-compartidos-sincronizar-con-backend-trpc-o-zod",
        "skills.frontend.guideline.frontend.tokens-en-headers-authorization-bearer-token-nunca-en-urls",
        "skills.frontend.guideline.frontend.type-inference-dejar-que-typescript-infiera-cuando-sea-obvio-no-sobre-",
        "skills.frontend.guideline.frontend.usereducer-para-lo-gica-compleja-estado-con-mu-ltiples-sub-valores-o-l",
        "skills.frontend.guideline.frontend.userevent-sobre-fireevent-simula-interaccio-n-real-de-usuario",
        "skills.frontend.guideline.frontend.usestate-para-estado-local-no-elevar-estado-prematuramente",
        "skills.frontend.guideline.frontend.usetranslation-hook-no-hardcodear-strings",
        "skills.frontend.guideline.frontend.utility-types-partial-pick-omit-required-record-cuando-simplifique-co-",
        "skills.frontend.guideline.frontend.validacio-n-en-tiempo-real-feedback-inmediato-al-usuario",
        "skills.frontend.guideline.frontend.virtual-scrolling-para-listas-largas-react-window-react-virtualized",
        "skills.frontend.guideline.frontend.web-vitals-monitorear-lcp-fid-cls-medir-con-lighthouse",
        "skills.frontend.guideline.frontend.zod-para-schemas-type-safe-validation-inferir-tipos",
        "skills.frontend.guideline.frontend.zustand-para-estado-global-simple-sin-boilerplate-devtools",
        "skills.frontend.no-console-log",
        "skills.frontend.no-empty-catch",
        "skills.frontend.no-god-classes",
        "skills.frontend.no-solid-violations",
        "workflow.bdd.insufficient_features",
        "workflow.bdd.missing_feature_files"
      ],
      "matched_rule_ids": [
        "common.error.empty_catch",
        "common.network.missing_error_handling",
        "common.types.record_unknown_requires_type",
        "common.types.undefined_in_base_type",
        "common.types.unknown_without_guard",
        "heuristics.ts.child-process-exec-file-sync.ast",
        "heuristics.ts.child-process-exec-file-untrusted-args.ast",
        "heuristics.ts.child-process-exec.ast",
        "heuristics.ts.child-process-spawn-sync.ast",
        "heuristics.ts.dynamic-shell-invocation.ast",
        "heuristics.ts.process-exit.ast",
        "skills.backend.no-empty-catch",
        "skills.frontend.no-empty-catch",
        "workflow.bdd.insufficient_features",
        "workflow.bdd.missing_feature_files"
      ],
      "unmatched_rule_ids": [
        "backend.avoid-explicit-any",
        "backend.no-console-log",
        "backend.no-empty-catch",
        "frontend.avoid-single-letter-variables",
        "frontend.no-console-log",
        "frontend.no-debugger",
        "heuristics.android.globalscope.ast",
        "heuristics.android.run-blocking.ast",
        "heuristics.android.thread-sleep.ast",
        "heuristics.ios.anyview.ast",
        "heuristics.ios.callback-style.ast",
        "heuristics.ios.dispatchgroup.ast",
        "heuristics.ios.dispatchqueue.ast",
        "heuristics.ios.dispatchsemaphore.ast",
        "heuristics.ios.force-cast.ast",
        "heuristics.ios.force-try.ast",
        "heuristics.ios.force-unwrap.ast",
        "heuristics.ios.navigation-view.ast",
        "heuristics.ios.observable-object.ast",
        "heuristics.ios.on-tap-gesture.ast",
        "heuristics.ios.operation-queue.ast",
        "heuristics.ios.string-format.ast",
        "heuristics.ios.task-detached.ast",
        "heuristics.ios.uiscreen-main-bounds.ast",
        "heuristics.ios.unchecked-sendable.ast",
        "heuristics.ts.buffer-alloc-unsafe-slow.ast",
        "heuristics.ts.buffer-alloc-unsafe.ast",
        "heuristics.ts.child-process-exec-file.ast",
        "heuristics.ts.child-process-exec-sync.ast",
        "heuristics.ts.child-process-fork.ast",
        "heuristics.ts.child-process-import.ast",
        "heuristics.ts.child-process-shell-true.ast",
        "heuristics.ts.child-process-spawn.ast",
        "heuristics.ts.console-error.ast",
        "heuristics.ts.debugger.ast",
        "heuristics.ts.delete-operator.ast",
        "heuristics.ts.document-write.ast",
        "heuristics.ts.eval.ast",
        "heuristics.ts.fs-access-callback.ast",
        "heuristics.ts.fs-access-sync.ast",
        "heuristics.ts.fs-append-file-callback.ast",
        "heuristics.ts.fs-append-file-sync.ast",
        "heuristics.ts.fs-chmod-callback.ast",
        "heuristics.ts.fs-chmod-sync.ast",
        "heuristics.ts.fs-chown-callback.ast",
        "heuristics.ts.fs-chown-sync.ast",
        "heuristics.ts.fs-close-callback.ast",
        "heuristics.ts.fs-close-sync.ast",
        "heuristics.ts.fs-copy-file-callback.ast",
        "heuristics.ts.fs-copy-file-sync.ast",
        "heuristics.ts.fs-cp-callback.ast",
        "heuristics.ts.fs-cp-sync.ast",
        "heuristics.ts.fs-exists-callback.ast",
        "heuristics.ts.fs-exists-sync.ast",
        "heuristics.ts.fs-fchmod-callback.ast",
        "heuristics.ts.fs-fchmod-sync.ast",
        "heuristics.ts.fs-fchown-callback.ast",
        "heuristics.ts.fs-fchown-sync.ast",
        "heuristics.ts.fs-fdatasync-callback.ast",
        "heuristics.ts.fs-fdatasync-sync.ast",
        "heuristics.ts.fs-fstat-callback.ast",
        "heuristics.ts.fs-fstat-sync.ast",
        "heuristics.ts.fs-fsync-callback.ast",
        "heuristics.ts.fs-fsync-sync.ast",
        "heuristics.ts.fs-ftruncate-callback.ast",
        "heuristics.ts.fs-ftruncate-sync.ast",
        "heuristics.ts.fs-futimes-callback.ast",
        "heuristics.ts.fs-futimes-sync.ast",
        "heuristics.ts.fs-lchmod-callback.ast",
        "heuristics.ts.fs-lchown-callback.ast",
        "heuristics.ts.fs-link-callback.ast",
        "heuristics.ts.fs-link-sync.ast",
        "heuristics.ts.fs-lstat-callback.ast",
        "heuristics.ts.fs-lstat-sync.ast",
        "heuristics.ts.fs-lutimes-callback.ast",
        "heuristics.ts.fs-lutimes-sync.ast",
        "heuristics.ts.fs-mkdir-callback.ast",
        "heuristics.ts.fs-mkdir-sync.ast",
        "heuristics.ts.fs-mkdtemp-callback.ast",
        "heuristics.ts.fs-mkdtemp-sync.ast",
        "heuristics.ts.fs-open-callback.ast",
        "heuristics.ts.fs-open-sync.ast",
        "heuristics.ts.fs-opendir-callback.ast",
        "heuristics.ts.fs-opendir-sync.ast",
        "heuristics.ts.fs-promises-access.ast",
        "heuristics.ts.fs-promises-append-file.ast",
        "heuristics.ts.fs-promises-chmod.ast",
        "heuristics.ts.fs-promises-chown.ast",
        "heuristics.ts.fs-promises-copy-file.ast",
        "heuristics.ts.fs-promises-cp.ast",
        "heuristics.ts.fs-promises-link.ast",
        "heuristics.ts.fs-promises-lstat.ast",
        "heuristics.ts.fs-promises-mkdir.ast",
        "heuristics.ts.fs-promises-mkdtemp.ast",
        "heuristics.ts.fs-promises-open.ast",
        "heuristics.ts.fs-promises-opendir.ast",
        "heuristics.ts.fs-promises-read-file.ast",
        "heuristics.ts.fs-promises-readdir.ast",
        "heuristics.ts.fs-promises-readlink.ast",
        "heuristics.ts.fs-promises-realpath.ast",
        "heuristics.ts.fs-promises-rename.ast",
        "heuristics.ts.fs-promises-rm.ast",
        "heuristics.ts.fs-promises-stat.ast",
        "heuristics.ts.fs-promises-symlink.ast",
        "heuristics.ts.fs-promises-unlink.ast",
        "heuristics.ts.fs-promises-utimes.ast",
        "heuristics.ts.fs-promises-write-file.ast",
        "heuristics.ts.fs-read-callback.ast",
        "heuristics.ts.fs-read-file-callback.ast",
        "heuristics.ts.fs-read-file-sync.ast",
        "heuristics.ts.fs-read-sync.ast",
        "heuristics.ts.fs-readdir-callback.ast",
        "heuristics.ts.fs-readdir-sync.ast",
        "heuristics.ts.fs-readlink-callback.ast",
        "heuristics.ts.fs-readlink-sync.ast",
        "heuristics.ts.fs-readv-callback.ast",
        "heuristics.ts.fs-readv-sync.ast",
        "heuristics.ts.fs-realpath-callback.ast",
        "heuristics.ts.fs-realpath-sync.ast",
        "heuristics.ts.fs-rename-callback.ast",
        "heuristics.ts.fs-rename-sync.ast",
        "heuristics.ts.fs-rm-callback.ast",
        "heuristics.ts.fs-rm-sync.ast",
        "heuristics.ts.fs-rmdir-callback.ast",
        "heuristics.ts.fs-rmdir-sync.ast",
        "heuristics.ts.fs-stat-callback.ast",
        "heuristics.ts.fs-stat-sync.ast",
        "heuristics.ts.fs-statfs-callback.ast",
        "heuristics.ts.fs-statfs-sync.ast",
        "heuristics.ts.fs-symlink-callback.ast",
        "heuristics.ts.fs-symlink-sync.ast",
        "heuristics.ts.fs-truncate-callback.ast",
        "heuristics.ts.fs-truncate-sync.ast",
        "heuristics.ts.fs-unlink-callback.ast",
        "heuristics.ts.fs-unlink-sync.ast",
        "heuristics.ts.fs-unwatch-file-callback.ast",
        "heuristics.ts.fs-utimes-callback.ast",
        "heuristics.ts.fs-utimes-sync.ast",
        "heuristics.ts.fs-watch-callback.ast",
        "heuristics.ts.fs-watch-file-callback.ast",
        "heuristics.ts.fs-write-callback.ast",
        "heuristics.ts.fs-write-file-callback.ast",
        "heuristics.ts.fs-write-file-sync.ast",
        "heuristics.ts.fs-write-sync.ast",
        "heuristics.ts.fs-writev-callback.ast",
        "heuristics.ts.fs-writev-sync.ast",
        "heuristics.ts.function-constructor.ast",
        "heuristics.ts.hardcoded-secret-token.ast",
        "heuristics.ts.inner-html.ast",
        "heuristics.ts.insecure-token-date-now.ast",
        "heuristics.ts.insecure-token-math-random.ast",
        "heuristics.ts.insert-adjacent-html.ast",
        "heuristics.ts.jwt-decode-without-verify.ast",
        "heuristics.ts.jwt-sign-no-expiration.ast",
        "heuristics.ts.jwt-verify-ignore-expiration.ast",
        "heuristics.ts.new-promise-async.ast",
        "heuristics.ts.process-env-mutation.ast",
        "heuristics.ts.set-interval-string.ast",
        "heuristics.ts.set-timeout-string.ast",
        "heuristics.ts.tls-env-override.ast",
        "heuristics.ts.tls-reject-unauthorized-false.ast",
        "heuristics.ts.vm-dynamic-code-execution.ast",
        "heuristics.ts.weak-crypto-hash.ast",
        "heuristics.ts.weak-token-randomuuid.ast",
        "heuristics.ts.with-statement.ast",
        "skills.backend.avoid-explicit-any",
        "skills.backend.enforce-clean-architecture",
        "skills.backend.guideline.backend.aaa-pattern-arrange-act-assert",
        "skills.backend.guideline.backend.actu-a-como-un-arquitecto-de-soluciones-y-software-designer",
        "skills.backend.guideline.backend.analizar-estructura-existente-mo-dulos-servicios-repositorios-dtos",
        "skills.backend.guideline.backend.anemic-domain-models-entidades-solo-con-getters-setters",
        "skills.backend.guideline.backend.async-processing-no-bloquear-request-principal",
        "skills.backend.guideline.backend.audit-logging-registrar-cambios-cri-ticos",
        "skills.backend.guideline.backend.cache-aside-pattern-leer-de-cache-si-no-existe-leer-de-bd-y-cachear",
        "skills.backend.guideline.backend.cache-manager-nestjs-cache-manager",
        "skills.backend.guideline.backend.caching-redis-para-datos-frecuentes",
        "skills.backend.guideline.backend.callback-hell-usar-async-await",
        "skills.backend.guideline.backend.class-transformer-transform-exclude-expose",
        "skills.backend.guideline.backend.class-validator-decorators-isstring-isemail-min-max",
        "skills.backend.guideline.backend.clean-por-feature-presentation-application-domain-infrastructure-domai",
        "skills.backend.guideline.backend.compression-gzip-para-responses-grandes",
        "skills.backend.guideline.backend.comprobar-que-compile-antes-de-sugerir-npm-run-build-sin-errores",
        "skills.backend.guideline.backend.config-por-entorno-env-development-env-production",
        "skills.backend.guideline.backend.connection-pooling-configurar-maxconnections",
        "skills.backend.guideline.backend.connection-pooling-reutilizar-conexiones-de-bd",
        "skills.backend.guideline.backend.contexto-en-logs-userid-requestid-traceid",
        "skills.backend.guideline.backend.controllers-delgados-solo-routing-y-validacio-n-lo-gica-en-servicios",
        "skills.backend.guideline.backend.correlation-ids-para-tracing-distribuido",
        "skills.backend.guideline.backend.cors-configurado-solo-ori-genes-permitidos",
        "skills.backend.guideline.backend.cors-configurar-ori-genes-permitidos",
        "skills.backend.guideline.backend.coverage-95-en-lo-gica-cri-tica",
        "skills.backend.guideline.backend.custom-exceptions-validationexception-notfoundexception-unauthorizedex",
        "skills.backend.guideline.backend.database-indexing-i-ndices-en-columnas-frecuentes-en-where-join",
        "skills.backend.guideline.backend.ddd-entidades-value-objects-repositorios-eventos-de-dominio",
        "skills.backend.guideline.backend.dependency-injection-injectable-inject-providers-array",
        "skills.backend.guideline.backend.diagramas-c4-context-container-component-para-arquitectura",
        "skills.backend.guideline.backend.domain-events-ordercreatedevent-userregisteredevent",
        "skills.backend.guideline.backend.dtos-en-boundaries-validacio-n-en-entrada-salida",
        "skills.backend.guideline.backend.dtos-para-validacio-n-class-validator-class-transformer",
        "skills.backend.guideline.backend.dtos-separados-createorderdto-updateorderdto-orderresponsedto",
        "skills.backend.guideline.backend.e2e-tests-supertest-para-flujos-completos",
        "skills.backend.guideline.backend.emitir-eventos-de-dominio-ordercreatedevent-ordercancelledevent",
        "skills.backend.guideline.backend.en-produccio-n-ni-un-mocks-ni-un-spies-todo-real-de-bbdd-supabase-post",
        "skills.backend.guideline.backend.enums-para-valores-fijos-orderstatus-paymentmethod-incidenttype",
        "skills.backend.guideline.backend.error-responses-consistentes-statuscode-message-timestamp-path",
        "skills.backend.guideline.backend.estrategia-de-invalidacio-n-ttl-invalidacio-n-expli-cita",
        "skills.backend.guideline.backend.event-bus-nestjs-event-emitter-o-custom",
        "skills.backend.guideline.backend.event-driven-comunicacio-n-entre-features-por-eventos",
        "skills.backend.guideline.backend.event-handlers-onevent-order-created",
        "skills.backend.guideline.backend.event-sourcing-para-auditori-a-auditlogs-table",
        "skills.backend.guideline.backend.event-store-log-de-eventos-para-auditori-a",
        "skills.backend.guideline.backend.exception-filters-catch-para-manejo-global",
        "skills.backend.guideline.backend.fast-tests-100ms-integracio-n-10ms-unitarios",
        "skills.backend.guideline.backend.feature-first-cada-feature-es-un-bounded-context-aislado",
        "skills.backend.guideline.backend.guards-en-todas-las-rutas-protegidas-useguards-jwtauthguard",
        "skills.backend.guideline.backend.guards-para-autenticacio-n-autorizacio-n-useguards-jwtauthguard",
        "skills.backend.guideline.backend.hardcoded-values-config-en-variables-de-entorno",
        "skills.backend.guideline.backend.hateoas-opcional-links-en-responses-para-navegacio-n",
        "skills.backend.guideline.backend.health-checks-health-endpoint-liveness-readiness",
        "skills.backend.guideline.backend.helmet-security-headers",
        "skills.backend.guideline.backend.http-status-codes-apropiados-200-201-400-401-403-404-500",
        "skills.backend.guideline.backend.http-status-codes-sema-ntica-correcta",
        "skills.backend.guideline.backend.https-redirect-en-produccio-n",
        "skills.backend.guideline.backend.i-ndices-apropiados-para-queries-frecuentes",
        "skills.backend.guideline.backend.i18n-en-error-messages-mensajes-traducibles",
        "skills.backend.guideline.backend.idempotencia-eventos-procesables-mu-ltiples-veces-sin-efectos-secundar",
        "skills.backend.guideline.backend.idempotencia-put-y-delete-idempotentes",
        "skills.backend.guideline.backend.implementaciones-en-infrastructure-inyectar-dependencia-de-bd",
        "skills.backend.guideline.backend.input-validation-siempre-validar-con-dtos",
        "skills.backend.guideline.backend.integration-tests-controllers-services-repositorios-reales",
        "skills.backend.guideline.backend.interceptors-para-logging-transformacio-n-no-en-cada-endpoint",
        "skills.backend.guideline.backend.interfaces-en-domain-iordersrepository-iusersrepository",
        "skills.backend.guideline.backend.inyectar-repositorios-necesarios-di-en-constructor",
        "skills.backend.guideline.backend.jest-framework-de-testing",
        "skills.backend.guideline.backend.jsdoc-mi-nimo-solo-para-apis-pu-blicas-o-lo-gica-compleja",
        "skills.backend.guideline.backend.jwt-strategy-nestjs-jwt-nestjs-passport",
        "skills.backend.guideline.backend.key-naming-convention-module-entity-id-orders-order-123",
        "skills.backend.guideline.backend.lo-gica-en-controllers-mover-a-servicios-use-cases",
        "skills.backend.guideline.backend.log-levels-error-warn-info-debug",
        "skills.backend.guideline.backend.loggear-errores-con-contexto-completo",
        "skills.backend.guideline.backend.magic-numbers-usar-constantes-con-nombres-descriptivos",
        "skills.backend.guideline.backend.makesut-pattern-system-under-test-factory",
        "skills.backend.guideline.backend.manejo-de-errores-lanzar-excepciones-especi-ficas",
        "skills.backend.guideline.backend.me-todos-expresivos-findactiveordersbyuserid-mejor-que-find",
        "skills.backend.guideline.backend.me-tricas-de-negocio-kpis-analytics",
        "skills.backend.guideline.backend.me-tricas-prometheus-prom-client-para-me-tricas",
        "skills.backend.guideline.backend.measure-twice-cut-once-planificar-arquitectura-dependencias-y-flujo-de",
        "skills.backend.guideline.backend.middleware-para-cross-cutting-concerns-logging-cors-etc",
        "skills.backend.guideline.backend.migrations-versionadas-nunca-modificar-migraciones-pasadas",
        "skills.backend.guideline.backend.mo-dulos-cohesivos-un-mo-dulo-por-feature-ordersmodule-usersmodule-etc",
        "skills.backend.guideline.backend.mocks-en-produccio-n-solo-datos-reales",
        "skills.backend.guideline.backend.n-1-query-prevention-eager-loading-cuando-sea-apropiado",
        "skills.backend.guideline.backend.naming-conventions-plurales-para-colecciones-orders-users",
        "skills.backend.guideline.backend.nested-validation-validatenested-type",
        "skills.backend.guideline.backend.nestjs-config-configmodule-para-variables-de-entorno",
        "skills.backend.guideline.backend.no-cachear-datos-sensibles-o-cifrar-antes-de-cachear",
        "skills.backend.guideline.backend.no-defaults-en-produccio-n-fallar-si-falta-config-cri-tica",
        "skills.backend.guideline.backend.no-exponer-stack-traces-solo-en-desarrollo",
        "skills.backend.guideline.backend.no-lo-gica-de-negocio-en-repositorios-solo-crud-y-queries",
        "skills.backend.guideline.backend.no-loggear-datos-sensibles-passwords-tokens-pii",
        "skills.backend.guideline.backend.no-poner-comentarios-en-el-co-digo-nombres-autodescriptivos",
        "skills.backend.guideline.backend.no-singleton-en-su-lugar-inyeccio-n-de-dependencias-nestjs-di-containe",
        "skills.backend.guideline.backend.pagination-siempre-para-listas-offset-limit-o-cursor-based",
        "skills.backend.guideline.backend.password-hashing-bcrypt-con-salt-rounds-10",
        "skills.backend.guideline.backend.pipes-para-validacio-n-global-validationpipe-en-main-ts",
        "skills.backend.guideline.backend.preferir-early-returns-guard-clauses-evitar-if-else-anidados",
        "skills.backend.guideline.backend.queries-parametrizadas-prevenir-sql-injection",
        "skills.backend.guideline.backend.query-optimization-explain-analyze",
        "skills.backend.guideline.backend.query-optimization-explain-analyze-para-queries-lentas",
        "skills.backend.guideline.backend.rate-limiting-nestjs-throttler-para-prevenir-brute-force",
        "skills.backend.guideline.backend.rate-limiting-throttler-para-prevenir-abuse",
        "skills.backend.guideline.backend.readme-por-mo-dulo-explicar-responsabilidad-del-mo-dulo",
        "skills.backend.guideline.backend.redis-para-cache-distribuido",
        "skills.backend.guideline.backend.refresh-tokens-no-solo-access-tokens",
        "skills.backend.guideline.backend.repositories-para-datos-abstraer-acceso-a-bd-con-interfaces",
        "skills.backend.guideline.backend.repository-pattern-siempre-iordersrepository-ordersrepository",
        "skills.backend.guideline.backend.restful-get-post-put-patch-delete-apropiados",
        "skills.backend.guideline.backend.retornar-dtos-no-exponer-entidades-directamente",
        "skills.backend.guideline.backend.role-based-access-control-roles-admin-user",
        "skills.backend.guideline.backend.secrets-management-variables-de-entorno-nunca-en-co-digo",
        "skills.backend.guideline.backend.secrets-separados-aws-secrets-manager-hashicorp-vault",
        "skills.backend.guideline.backend.seguir-siempre-flujo-bdd-tdd-feature-files-specs-implementacio-n",
        "skills.backend.guideline.backend.services-para-lo-gica-de-negocio-orquestar-use-cases-y-repositorios",
        "skills.backend.guideline.backend.shared-kernel-tipos-mi-nimos-compartidos",
        "skills.backend.guideline.backend.siempre-responder-en-espan-ol",
        "skills.backend.guideline.backend.soft-deletes-deletedat-en-lugar-de-delete-fi-sico",
        "skills.backend.guideline.backend.soft-deletes-por-defecto-deletedat-column",
        "skills.backend.guideline.backend.sql-injection-prevention-queries-parametrizadas",
        "skills.backend.guideline.backend.supabase-client-supabase-supabase-js",
        "skills.backend.guideline.backend.swagger-nestjs-swagger-decoradores-apiproperty",
        "skills.backend.guideline.backend.swagger-openapi-nestjs-swagger-para-documentacio-n",
        "skills.backend.guideline.backend.test-db-base-de-datos-separada-para-tests",
        "skills.backend.guideline.backend.transacciones-para-operaciones-cri-ticas",
        "skills.backend.guideline.backend.transacciones-para-operaciones-multi-tabla",
        "skills.backend.guideline.backend.try-catch-silenciosos-siempre-loggear-o-propagar-ast-common-error-empt",
        "skills.backend.guideline.backend.un-archivo-por-use-case-createorderusecase-updateorderstatususecase",
        "skills.backend.guideline.backend.unit-tests-servicios-use-cases-con-mocks",
        "skills.backend.guideline.backend.use-cases-expli-citos-createorderusecase-updateorderstatususecase",
        "skills.backend.guideline.backend.validar-precondiciones-fail-fast",
        "skills.backend.guideline.backend.validation-de-config-joi-o-class-validator-para-env",
        "skills.backend.guideline.backend.validationpipe-global-en-main-ts-con-whitelist-true",
        "skills.backend.guideline.backend.versionado-api-v1-api-v2",
        "skills.backend.guideline.backend.winston-logger-estructurado-json-logs",
        "skills.backend.guideline.backend.xss-prevention-sanitizar-inputs",
        "skills.backend.no-console-log",
        "skills.backend.no-god-classes",
        "skills.backend.no-solid-violations",
        "skills.frontend.avoid-explicit-any",
        "skills.frontend.enforce-clean-architecture",
        "skills.frontend.guideline.frontend.accesibilidad-aria-semantic-html-primero-aria-cuando-sea-necesario",
        "skills.frontend.guideline.frontend.actu-a-como-un-arquitecto-de-soluciones-y-software-designer",
        "skills.frontend.guideline.frontend.analizar-archivos-existentes-revisar-componentes-servicios-tipos-actua",
        "skills.frontend.guideline.frontend.analizar-estructura-existente-archivos-componentes-servicios-dependenc",
        "skills.frontend.guideline.frontend.api-client-abstrai-do-axios-fetch-en-capa-de-infraestructura",
        "skills.frontend.guideline.frontend.aplicar-reglas-de-testing-makesut-system-under-test-helpers-separados-",
        "skills.frontend.guideline.frontend.app-router-usar-app-directory-no-pages-excepto-legacy",
        "skills.frontend.guideline.frontend.aria-labels-aria-label-aria-describedby-cuando-sea-necesario",
        "skills.frontend.guideline.frontend.clean-por-feature-presentation-application-domain-infrastructure-domai",
        "skills.frontend.guideline.frontend.cn-helper-combinar-clases-con-clsx-o-tailwind-merge",
        "skills.frontend.guideline.frontend.code-splitting-react-lazy-suspense-dynamic-imports",
        "skills.frontend.guideline.frontend.compatibilidad-con-componentes-actuales-mantener-consistencia-en-patro",
        "skills.frontend.guideline.frontend.comprobar-que-compile-y-pase-tests-antes-de-sugerir-typescript-strict-",
        "skills.frontend.guideline.frontend.contrast-ratio-wcag-aa-mi-nimo-4-5-1-texto-normal-3-1-texto-grande",
        "skills.frontend.guideline.frontend.csp-headers-content-security-policy-en-next-js-config",
        "skills.frontend.guideline.frontend.css-modules-para-estilos-especi-ficos-de-componente-si-es-necesario",
        "skills.frontend.guideline.frontend.custom-hooks-para-lo-gica-reutilizable-extraer-lo-gica-compleja-a-hook",
        "skills.frontend.guideline.frontend.data-fetching-en-server-components-fetch-con-cache-revalidate-async-co",
        "skills.frontend.guideline.frontend.ddd-entidades-value-objects-repositorios-eventos",
        "skills.frontend.guideline.frontend.debounce-throttle-para-inputs-de-bu-squeda-scroll-handlers",
        "skills.frontend.guideline.frontend.dynamic-imports-next-dynamic-para-code-splitting",
        "skills.frontend.guideline.frontend.e2e-con-playwright-user-flows-cri-ticos",
        "skills.frontend.guideline.frontend.en-produccio-n-ni-un-mocks-ni-un-spies-todo-real-de-apis-o-almacenamie",
        "skills.frontend.guideline.frontend.error-handling-global-interceptors-para-401-500-etc",
        "skills.frontend.guideline.frontend.error-messages-claros-accionables-traducidos-i18n",
        "skills.frontend.guideline.frontend.estado-local-global-eficiente-usestate-para-local-zustand-context-para",
        "skills.frontend.guideline.frontend.event-driven-navegacio-n-y-coordinacio-n-por-eventos-cuando-crezca-el-",
        "skills.frontend.guideline.frontend.evitar-prop-drilling-context-api-o-zustand-para-estado-compartido-prof",
        "skills.frontend.guideline.frontend.fallback-locale-ingle-s-como-fallback",
        "skills.frontend.guideline.frontend.feature-first-cada-feature-es-un-bounded-context-aislado",
        "skills.frontend.guideline.frontend.focus-management-focus-visible-trap-focus-en-modales",
        "skills.frontend.guideline.frontend.formateo-de-fechas-nu-meros-usar-intl-api-o-i18n-helpers",
        "skills.frontend.guideline.frontend.generics-cuando-sea-apropiado-componentes-y-hooks-reutilizables-type-s",
        "skills.frontend.guideline.frontend.hooks-primero-usestate-useeffect-usecallback-usememo-custom-hooks",
        "skills.frontend.guideline.frontend.https-siempre-redirect-automa-tico-en-produccio-n",
        "skills.frontend.guideline.frontend.i18n-desde-di-a-1-archivos-de-traduccio-n-separados-locales",
        "skills.frontend.guideline.frontend.interfaces-para-props-definir-tipos-expli-citos-para-todos-los-compone",
        "skills.frontend.guideline.frontend.invalidacio-n-inteligente-invalidar-cache-despue-s-de-mutaciones",
        "skills.frontend.guideline.frontend.key-props-en-listas-nunca-usar-i-ndice-como-key-si-el-orden-puede-camb",
        "skills.frontend.guideline.frontend.keyboard-navigation-todos-los-interactivos-accesibles-por-teclado",
        "skills.frontend.guideline.frontend.loading-error-states-loading-tsx-error-tsx-en-cada-ruta",
        "skills.frontend.guideline.frontend.loading-states-skeleton-screens-spinners-optimistic-updates",
        "skills.frontend.guideline.frontend.measure-twice-cut-once-planificar-arquitectura-dependencias-y-flujo-de",
        "skills.frontend.guideline.frontend.memoizacio-n-estrate-gica-no-todo-necesita-memo-perfilar-primero",
        "skills.frontend.guideline.frontend.metadata-api-generatemetadata-para-seo",
        "skills.frontend.guideline.frontend.msw-mock-service-worker-mock-apis-en-tests-no-axios-fetch-directamente",
        "skills.frontend.guideline.frontend.namespaces-separar-traducciones-por-feature-mo-dulo",
        "skills.frontend.guideline.frontend.next-image-siempre-para-ima-genes-optimizacio-n-automa-tica",
        "skills.frontend.guideline.frontend.no-any-usar-unknown-si-el-tipo-es-desconocido-luego-type-guard",
        "skills.frontend.guideline.frontend.no-catch-vaci-os-prohibido-silenciar-errores-ast-common-error-emptycat",
        "skills.frontend.guideline.frontend.no-class-components-solo-functional-components",
        "skills.frontend.guideline.frontend.no-poner-comentarios-en-el-co-digo-nombres-autodescriptivos-lo-hacen-i",
        "skills.frontend.guideline.frontend.no-singleton-en-su-lugar-inyeccio-n-de-dependencias-usar-providers-con",
        "skills.frontend.guideline.frontend.nombres-autodescriptivos-todo-en-ingle-s-usar-i18n-para-ui",
        "skills.frontend.guideline.frontend.optimizar-renders-react-memo-usememo-usecallback-para-prevenir-re-rend",
        "skills.frontend.guideline.frontend.preferir-early-returns-y-destructuring-evitar-if-else-anidados-callbac",
        "skills.frontend.guideline.frontend.preferir-spies-frente-a-stubs-o-mocks-si-es-posible-usar-jest-spyon-pa",
        "skills.frontend.guideline.frontend.queries-apropiadas-getbyrole-getbylabeltext-getbytext-getbytestid",
        "skills.frontend.guideline.frontend.rate-limiting-proteger-endpoints-pu-blicos",
        "skills.frontend.guideline.frontend.react-hook-form-performance-menos-re-renders",
        "skills.frontend.guideline.frontend.react-query-para-server-state-cache-automa-tico-refetch-invalidacio-n",
        "skills.frontend.guideline.frontend.react-testing-library-testear-como-usuario-no-implementation-details",
        "skills.frontend.guideline.frontend.respetar-patrones-establecidos-repository-pattern-use-cases-dtos",
        "skills.frontend.guideline.frontend.responsive-design-mobile-first-breakpoints-de-tailwind",
        "skills.frontend.guideline.frontend.retry-logic-reintentar-requests-fallidos-react-query-retry",
        "skills.frontend.guideline.frontend.reutilizar-componentes-ui-no-duplicar-button-card-dialog-etc",
        "skills.frontend.guideline.frontend.route-handlers-app-api-para-endpoints-backend",
        "skills.frontend.guideline.frontend.sanitizar-html-dompurify-si-se-renderiza-html-de-usuario",
        "skills.frontend.guideline.frontend.screen-reader-testing-probar-con-voiceover-nvda",
        "skills.frontend.guideline.frontend.seguir-siempre-flujo-bdd-tdd-escribir-historias-de-usuario-primero-lue",
        "skills.frontend.guideline.frontend.semantic-html-button-para-botones-nav-para-navegacio-n-etc",
        "skills.frontend.guideline.frontend.server-components-por-defecto-use-client-solo-cuando-sea-necesario-int",
        "skills.frontend.guideline.frontend.shared-kernel-tipos-mi-nimos-compartidos-entre-features",
        "skills.frontend.guideline.frontend.siempre-responder-en-espan-ol",
        "skills.frontend.guideline.frontend.snapshot-testing-con-moderacio-n-solo-para-componentes-estables",
        "skills.frontend.guideline.frontend.tailwind-css-utility-first-disen-o-consistente",
        "skills.frontend.guideline.frontend.theme-provider-next-themes-para-dark-light-mode",
        "skills.frontend.guideline.frontend.tipos-compartidos-sincronizar-con-backend-trpc-o-zod",
        "skills.frontend.guideline.frontend.tokens-en-headers-authorization-bearer-token-nunca-en-urls",
        "skills.frontend.guideline.frontend.type-inference-dejar-que-typescript-infiera-cuando-sea-obvio-no-sobre-",
        "skills.frontend.guideline.frontend.usereducer-para-lo-gica-compleja-estado-con-mu-ltiples-sub-valores-o-l",
        "skills.frontend.guideline.frontend.userevent-sobre-fireevent-simula-interaccio-n-real-de-usuario",
        "skills.frontend.guideline.frontend.usestate-para-estado-local-no-elevar-estado-prematuramente",
        "skills.frontend.guideline.frontend.usetranslation-hook-no-hardcodear-strings",
        "skills.frontend.guideline.frontend.utility-types-partial-pick-omit-required-record-cuando-simplifique-co-",
        "skills.frontend.guideline.frontend.validacio-n-en-tiempo-real-feedback-inmediato-al-usuario",
        "skills.frontend.guideline.frontend.virtual-scrolling-para-listas-largas-react-window-react-virtualized",
        "skills.frontend.guideline.frontend.web-vitals-monitorear-lcp-fid-cls-medir-con-lighthouse",
        "skills.frontend.guideline.frontend.zod-para-schemas-type-safe-validation-inferir-tipos",
        "skills.frontend.guideline.frontend.zustand-para-estado-global-simple-sin-boilerplate-devtools",
        "skills.frontend.no-console-log",
        "skills.frontend.no-god-classes",
        "skills.frontend.no-solid-violations"
      ]
    },
    "rules_coverage": {
      "stage": "PRE_COMMIT",
      "active_rule_ids": [
        "backend.avoid-explicit-any",
        "backend.no-console-log",
        "backend.no-empty-catch",
        "common.error.empty_catch",
        "common.network.missing_error_handling",
        "common.types.record_unknown_requires_type",
        "common.types.undefined_in_base_type",
        "common.types.unknown_without_guard",
        "frontend.avoid-single-letter-variables",
        "frontend.no-console-log",
        "frontend.no-debugger",
        "heuristics.android.globalscope.ast",
        "heuristics.android.run-blocking.ast",
        "heuristics.android.thread-sleep.ast",
        "heuristics.ios.anyview.ast",
        "heuristics.ios.callback-style.ast",
        "heuristics.ios.dispatchgroup.ast",
        "heuristics.ios.dispatchqueue.ast",
        "heuristics.ios.dispatchsemaphore.ast",
        "heuristics.ios.force-cast.ast",
        "heuristics.ios.force-try.ast",
        "heuristics.ios.force-unwrap.ast",
        "heuristics.ios.navigation-view.ast",
        "heuristics.ios.observable-object.ast",
        "heuristics.ios.on-tap-gesture.ast",
        "heuristics.ios.operation-queue.ast",
        "heuristics.ios.string-format.ast",
        "heuristics.ios.task-detached.ast",
        "heuristics.ios.uiscreen-main-bounds.ast",
        "heuristics.ios.unchecked-sendable.ast",
        "heuristics.ts.buffer-alloc-unsafe-slow.ast",
        "heuristics.ts.buffer-alloc-unsafe.ast",
        "heuristics.ts.child-process-exec-file-sync.ast",
        "heuristics.ts.child-process-exec-file-untrusted-args.ast",
        "heuristics.ts.child-process-exec-file.ast",
        "heuristics.ts.child-process-exec-sync.ast",
        "heuristics.ts.child-process-exec.ast",
        "heuristics.ts.child-process-fork.ast",
        "heuristics.ts.child-process-import.ast",
        "heuristics.ts.child-process-shell-true.ast",
        "heuristics.ts.child-process-spawn-sync.ast",
        "heuristics.ts.child-process-spawn.ast",
        "heuristics.ts.console-error.ast",
        "heuristics.ts.debugger.ast",
        "heuristics.ts.delete-operator.ast",
        "heuristics.ts.document-write.ast",
        "heuristics.ts.dynamic-shell-invocation.ast",
        "heuristics.ts.eval.ast",
        "heuristics.ts.fs-access-callback.ast",
        "heuristics.ts.fs-access-sync.ast",
        "heuristics.ts.fs-append-file-callback.ast",
        "heuristics.ts.fs-append-file-sync.ast",
        "heuristics.ts.fs-chmod-callback.ast",
        "heuristics.ts.fs-chmod-sync.ast",
        "heuristics.ts.fs-chown-callback.ast",
        "heuristics.ts.fs-chown-sync.ast",
        "heuristics.ts.fs-close-callback.ast",
        "heuristics.ts.fs-close-sync.ast",
        "heuristics.ts.fs-copy-file-callback.ast",
        "heuristics.ts.fs-copy-file-sync.ast",
        "heuristics.ts.fs-cp-callback.ast",
        "heuristics.ts.fs-cp-sync.ast",
        "heuristics.ts.fs-exists-callback.ast",
        "heuristics.ts.fs-exists-sync.ast",
        "heuristics.ts.fs-fchmod-callback.ast",
        "heuristics.ts.fs-fchmod-sync.ast",
        "heuristics.ts.fs-fchown-callback.ast",
        "heuristics.ts.fs-fchown-sync.ast",
        "heuristics.ts.fs-fdatasync-callback.ast",
        "heuristics.ts.fs-fdatasync-sync.ast",
        "heuristics.ts.fs-fstat-callback.ast",
        "heuristics.ts.fs-fstat-sync.ast",
        "heuristics.ts.fs-fsync-callback.ast",
        "heuristics.ts.fs-fsync-sync.ast",
        "heuristics.ts.fs-ftruncate-callback.ast",
        "heuristics.ts.fs-ftruncate-sync.ast",
        "heuristics.ts.fs-futimes-callback.ast",
        "heuristics.ts.fs-futimes-sync.ast",
        "heuristics.ts.fs-lchmod-callback.ast",
        "heuristics.ts.fs-lchown-callback.ast",
        "heuristics.ts.fs-link-callback.ast",
        "heuristics.ts.fs-link-sync.ast",
        "heuristics.ts.fs-lstat-callback.ast",
        "heuristics.ts.fs-lstat-sync.ast",
        "heuristics.ts.fs-lutimes-callback.ast",
        "heuristics.ts.fs-lutimes-sync.ast",
        "heuristics.ts.fs-mkdir-callback.ast",
        "heuristics.ts.fs-mkdir-sync.ast",
        "heuristics.ts.fs-mkdtemp-callback.ast",
        "heuristics.ts.fs-mkdtemp-sync.ast",
        "heuristics.ts.fs-open-callback.ast",
        "heuristics.ts.fs-open-sync.ast",
        "heuristics.ts.fs-opendir-callback.ast",
        "heuristics.ts.fs-opendir-sync.ast",
        "heuristics.ts.fs-promises-access.ast",
        "heuristics.ts.fs-promises-append-file.ast",
        "heuristics.ts.fs-promises-chmod.ast",
        "heuristics.ts.fs-promises-chown.ast",
        "heuristics.ts.fs-promises-copy-file.ast",
        "heuristics.ts.fs-promises-cp.ast",
        "heuristics.ts.fs-promises-link.ast",
        "heuristics.ts.fs-promises-lstat.ast",
        "heuristics.ts.fs-promises-mkdir.ast",
        "heuristics.ts.fs-promises-mkdtemp.ast",
        "heuristics.ts.fs-promises-open.ast",
        "heuristics.ts.fs-promises-opendir.ast",
        "heuristics.ts.fs-promises-read-file.ast",
        "heuristics.ts.fs-promises-readdir.ast",
        "heuristics.ts.fs-promises-readlink.ast",
        "heuristics.ts.fs-promises-realpath.ast",
        "heuristics.ts.fs-promises-rename.ast",
        "heuristics.ts.fs-promises-rm.ast",
        "heuristics.ts.fs-promises-stat.ast",
        "heuristics.ts.fs-promises-symlink.ast",
        "heuristics.ts.fs-promises-unlink.ast",
        "heuristics.ts.fs-promises-utimes.ast",
        "heuristics.ts.fs-promises-write-file.ast",
        "heuristics.ts.fs-read-callback.ast",
        "heuristics.ts.fs-read-file-callback.ast",
        "heuristics.ts.fs-read-file-sync.ast",
        "heuristics.ts.fs-read-sync.ast",
        "heuristics.ts.fs-readdir-callback.ast",
        "heuristics.ts.fs-readdir-sync.ast",
        "heuristics.ts.fs-readlink-callback.ast",
        "heuristics.ts.fs-readlink-sync.ast",
        "heuristics.ts.fs-readv-callback.ast",
        "heuristics.ts.fs-readv-sync.ast",
        "heuristics.ts.fs-realpath-callback.ast",
        "heuristics.ts.fs-realpath-sync.ast",
        "heuristics.ts.fs-rename-callback.ast",
        "heuristics.ts.fs-rename-sync.ast",
        "heuristics.ts.fs-rm-callback.ast",
        "heuristics.ts.fs-rm-sync.ast",
        "heuristics.ts.fs-rmdir-callback.ast",
        "heuristics.ts.fs-rmdir-sync.ast",
        "heuristics.ts.fs-stat-callback.ast",
        "heuristics.ts.fs-stat-sync.ast",
        "heuristics.ts.fs-statfs-callback.ast",
        "heuristics.ts.fs-statfs-sync.ast",
        "heuristics.ts.fs-symlink-callback.ast",
        "heuristics.ts.fs-symlink-sync.ast",
        "heuristics.ts.fs-truncate-callback.ast",
        "heuristics.ts.fs-truncate-sync.ast",
        "heuristics.ts.fs-unlink-callback.ast",
        "heuristics.ts.fs-unlink-sync.ast",
        "heuristics.ts.fs-unwatch-file-callback.ast",
        "heuristics.ts.fs-utimes-callback.ast",
        "heuristics.ts.fs-utimes-sync.ast",
        "heuristics.ts.fs-watch-callback.ast",
        "heuristics.ts.fs-watch-file-callback.ast",
        "heuristics.ts.fs-write-callback.ast",
        "heuristics.ts.fs-write-file-callback.ast",
        "heuristics.ts.fs-write-file-sync.ast",
        "heuristics.ts.fs-write-sync.ast",
        "heuristics.ts.fs-writev-callback.ast",
        "heuristics.ts.fs-writev-sync.ast",
        "heuristics.ts.function-constructor.ast",
        "heuristics.ts.hardcoded-secret-token.ast",
        "heuristics.ts.inner-html.ast",
        "heuristics.ts.insecure-token-date-now.ast",
        "heuristics.ts.insecure-token-math-random.ast",
        "heuristics.ts.insert-adjacent-html.ast",
        "heuristics.ts.jwt-decode-without-verify.ast",
        "heuristics.ts.jwt-sign-no-expiration.ast",
        "heuristics.ts.jwt-verify-ignore-expiration.ast",
        "heuristics.ts.new-promise-async.ast",
        "heuristics.ts.process-env-mutation.ast",
        "heuristics.ts.process-exit.ast",
        "heuristics.ts.set-interval-string.ast",
        "heuristics.ts.set-timeout-string.ast",
        "heuristics.ts.tls-env-override.ast",
        "heuristics.ts.tls-reject-unauthorized-false.ast",
        "heuristics.ts.vm-dynamic-code-execution.ast",
        "heuristics.ts.weak-crypto-hash.ast",
        "heuristics.ts.weak-token-randomuuid.ast",
        "heuristics.ts.with-statement.ast",
        "skills.backend.avoid-explicit-any",
        "skills.backend.enforce-clean-architecture",
        "skills.backend.guideline.backend.aaa-pattern-arrange-act-assert",
        "skills.backend.guideline.backend.actu-a-como-un-arquitecto-de-soluciones-y-software-designer",
        "skills.backend.guideline.backend.analizar-estructura-existente-mo-dulos-servicios-repositorios-dtos",
        "skills.backend.guideline.backend.anemic-domain-models-entidades-solo-con-getters-setters",
        "skills.backend.guideline.backend.async-processing-no-bloquear-request-principal",
        "skills.backend.guideline.backend.audit-logging-registrar-cambios-cri-ticos",
        "skills.backend.guideline.backend.cache-aside-pattern-leer-de-cache-si-no-existe-leer-de-bd-y-cachear",
        "skills.backend.guideline.backend.cache-manager-nestjs-cache-manager",
        "skills.backend.guideline.backend.caching-redis-para-datos-frecuentes",
        "skills.backend.guideline.backend.callback-hell-usar-async-await",
        "skills.backend.guideline.backend.class-transformer-transform-exclude-expose",
        "skills.backend.guideline.backend.class-validator-decorators-isstring-isemail-min-max",
        "skills.backend.guideline.backend.clean-por-feature-presentation-application-domain-infrastructure-domai",
        "skills.backend.guideline.backend.compression-gzip-para-responses-grandes",
        "skills.backend.guideline.backend.comprobar-que-compile-antes-de-sugerir-npm-run-build-sin-errores",
        "skills.backend.guideline.backend.config-por-entorno-env-development-env-production",
        "skills.backend.guideline.backend.connection-pooling-configurar-maxconnections",
        "skills.backend.guideline.backend.connection-pooling-reutilizar-conexiones-de-bd",
        "skills.backend.guideline.backend.contexto-en-logs-userid-requestid-traceid",
        "skills.backend.guideline.backend.controllers-delgados-solo-routing-y-validacio-n-lo-gica-en-servicios",
        "skills.backend.guideline.backend.correlation-ids-para-tracing-distribuido",
        "skills.backend.guideline.backend.cors-configurado-solo-ori-genes-permitidos",
        "skills.backend.guideline.backend.cors-configurar-ori-genes-permitidos",
        "skills.backend.guideline.backend.coverage-95-en-lo-gica-cri-tica",
        "skills.backend.guideline.backend.custom-exceptions-validationexception-notfoundexception-unauthorizedex",
        "skills.backend.guideline.backend.database-indexing-i-ndices-en-columnas-frecuentes-en-where-join",
        "skills.backend.guideline.backend.ddd-entidades-value-objects-repositorios-eventos-de-dominio",
        "skills.backend.guideline.backend.dependency-injection-injectable-inject-providers-array",
        "skills.backend.guideline.backend.diagramas-c4-context-container-component-para-arquitectura",
        "skills.backend.guideline.backend.domain-events-ordercreatedevent-userregisteredevent",
        "skills.backend.guideline.backend.dtos-en-boundaries-validacio-n-en-entrada-salida",
        "skills.backend.guideline.backend.dtos-para-validacio-n-class-validator-class-transformer",
        "skills.backend.guideline.backend.dtos-separados-createorderdto-updateorderdto-orderresponsedto",
        "skills.backend.guideline.backend.e2e-tests-supertest-para-flujos-completos",
        "skills.backend.guideline.backend.emitir-eventos-de-dominio-ordercreatedevent-ordercancelledevent",
        "skills.backend.guideline.backend.en-produccio-n-ni-un-mocks-ni-un-spies-todo-real-de-bbdd-supabase-post",
        "skills.backend.guideline.backend.enums-para-valores-fijos-orderstatus-paymentmethod-incidenttype",
        "skills.backend.guideline.backend.error-responses-consistentes-statuscode-message-timestamp-path",
        "skills.backend.guideline.backend.estrategia-de-invalidacio-n-ttl-invalidacio-n-expli-cita",
        "skills.backend.guideline.backend.event-bus-nestjs-event-emitter-o-custom",
        "skills.backend.guideline.backend.event-driven-comunicacio-n-entre-features-por-eventos",
        "skills.backend.guideline.backend.event-handlers-onevent-order-created",
        "skills.backend.guideline.backend.event-sourcing-para-auditori-a-auditlogs-table",
        "skills.backend.guideline.backend.event-store-log-de-eventos-para-auditori-a",
        "skills.backend.guideline.backend.exception-filters-catch-para-manejo-global",
        "skills.backend.guideline.backend.fast-tests-100ms-integracio-n-10ms-unitarios",
        "skills.backend.guideline.backend.feature-first-cada-feature-es-un-bounded-context-aislado",
        "skills.backend.guideline.backend.guards-en-todas-las-rutas-protegidas-useguards-jwtauthguard",
        "skills.backend.guideline.backend.guards-para-autenticacio-n-autorizacio-n-useguards-jwtauthguard",
        "skills.backend.guideline.backend.hardcoded-values-config-en-variables-de-entorno",
        "skills.backend.guideline.backend.hateoas-opcional-links-en-responses-para-navegacio-n",
        "skills.backend.guideline.backend.health-checks-health-endpoint-liveness-readiness",
        "skills.backend.guideline.backend.helmet-security-headers",
        "skills.backend.guideline.backend.http-status-codes-apropiados-200-201-400-401-403-404-500",
        "skills.backend.guideline.backend.http-status-codes-sema-ntica-correcta",
        "skills.backend.guideline.backend.https-redirect-en-produccio-n",
        "skills.backend.guideline.backend.i-ndices-apropiados-para-queries-frecuentes",
        "skills.backend.guideline.backend.i18n-en-error-messages-mensajes-traducibles",
        "skills.backend.guideline.backend.idempotencia-eventos-procesables-mu-ltiples-veces-sin-efectos-secundar",
        "skills.backend.guideline.backend.idempotencia-put-y-delete-idempotentes",
        "skills.backend.guideline.backend.implementaciones-en-infrastructure-inyectar-dependencia-de-bd",
        "skills.backend.guideline.backend.input-validation-siempre-validar-con-dtos",
        "skills.backend.guideline.backend.integration-tests-controllers-services-repositorios-reales",
        "skills.backend.guideline.backend.interceptors-para-logging-transformacio-n-no-en-cada-endpoint",
        "skills.backend.guideline.backend.interfaces-en-domain-iordersrepository-iusersrepository",
        "skills.backend.guideline.backend.inyectar-repositorios-necesarios-di-en-constructor",
        "skills.backend.guideline.backend.jest-framework-de-testing",
        "skills.backend.guideline.backend.jsdoc-mi-nimo-solo-para-apis-pu-blicas-o-lo-gica-compleja",
        "skills.backend.guideline.backend.jwt-strategy-nestjs-jwt-nestjs-passport",
        "skills.backend.guideline.backend.key-naming-convention-module-entity-id-orders-order-123",
        "skills.backend.guideline.backend.lo-gica-en-controllers-mover-a-servicios-use-cases",
        "skills.backend.guideline.backend.log-levels-error-warn-info-debug",
        "skills.backend.guideline.backend.loggear-errores-con-contexto-completo",
        "skills.backend.guideline.backend.magic-numbers-usar-constantes-con-nombres-descriptivos",
        "skills.backend.guideline.backend.makesut-pattern-system-under-test-factory",
        "skills.backend.guideline.backend.manejo-de-errores-lanzar-excepciones-especi-ficas",
        "skills.backend.guideline.backend.me-todos-expresivos-findactiveordersbyuserid-mejor-que-find",
        "skills.backend.guideline.backend.me-tricas-de-negocio-kpis-analytics",
        "skills.backend.guideline.backend.me-tricas-prometheus-prom-client-para-me-tricas",
        "skills.backend.guideline.backend.measure-twice-cut-once-planificar-arquitectura-dependencias-y-flujo-de",
        "skills.backend.guideline.backend.middleware-para-cross-cutting-concerns-logging-cors-etc",
        "skills.backend.guideline.backend.migrations-versionadas-nunca-modificar-migraciones-pasadas",
        "skills.backend.guideline.backend.mo-dulos-cohesivos-un-mo-dulo-por-feature-ordersmodule-usersmodule-etc",
        "skills.backend.guideline.backend.mocks-en-produccio-n-solo-datos-reales",
        "skills.backend.guideline.backend.n-1-query-prevention-eager-loading-cuando-sea-apropiado",
        "skills.backend.guideline.backend.naming-conventions-plurales-para-colecciones-orders-users",
        "skills.backend.guideline.backend.nested-validation-validatenested-type",
        "skills.backend.guideline.backend.nestjs-config-configmodule-para-variables-de-entorno",
        "skills.backend.guideline.backend.no-cachear-datos-sensibles-o-cifrar-antes-de-cachear",
        "skills.backend.guideline.backend.no-defaults-en-produccio-n-fallar-si-falta-config-cri-tica",
        "skills.backend.guideline.backend.no-exponer-stack-traces-solo-en-desarrollo",
        "skills.backend.guideline.backend.no-lo-gica-de-negocio-en-repositorios-solo-crud-y-queries",
        "skills.backend.guideline.backend.no-loggear-datos-sensibles-passwords-tokens-pii",
        "skills.backend.guideline.backend.no-poner-comentarios-en-el-co-digo-nombres-autodescriptivos",
        "skills.backend.guideline.backend.no-singleton-en-su-lugar-inyeccio-n-de-dependencias-nestjs-di-containe",
        "skills.backend.guideline.backend.pagination-siempre-para-listas-offset-limit-o-cursor-based",
        "skills.backend.guideline.backend.password-hashing-bcrypt-con-salt-rounds-10",
        "skills.backend.guideline.backend.pipes-para-validacio-n-global-validationpipe-en-main-ts",
        "skills.backend.guideline.backend.preferir-early-returns-guard-clauses-evitar-if-else-anidados",
        "skills.backend.guideline.backend.queries-parametrizadas-prevenir-sql-injection",
        "skills.backend.guideline.backend.query-optimization-explain-analyze",
        "skills.backend.guideline.backend.query-optimization-explain-analyze-para-queries-lentas",
        "skills.backend.guideline.backend.rate-limiting-nestjs-throttler-para-prevenir-brute-force",
        "skills.backend.guideline.backend.rate-limiting-throttler-para-prevenir-abuse",
        "skills.backend.guideline.backend.readme-por-mo-dulo-explicar-responsabilidad-del-mo-dulo",
        "skills.backend.guideline.backend.redis-para-cache-distribuido",
        "skills.backend.guideline.backend.refresh-tokens-no-solo-access-tokens",
        "skills.backend.guideline.backend.repositories-para-datos-abstraer-acceso-a-bd-con-interfaces",
        "skills.backend.guideline.backend.repository-pattern-siempre-iordersrepository-ordersrepository",
        "skills.backend.guideline.backend.restful-get-post-put-patch-delete-apropiados",
        "skills.backend.guideline.backend.retornar-dtos-no-exponer-entidades-directamente",
        "skills.backend.guideline.backend.role-based-access-control-roles-admin-user",
        "skills.backend.guideline.backend.secrets-management-variables-de-entorno-nunca-en-co-digo",
        "skills.backend.guideline.backend.secrets-separados-aws-secrets-manager-hashicorp-vault",
        "skills.backend.guideline.backend.seguir-siempre-flujo-bdd-tdd-feature-files-specs-implementacio-n",
        "skills.backend.guideline.backend.services-para-lo-gica-de-negocio-orquestar-use-cases-y-repositorios",
        "skills.backend.guideline.backend.shared-kernel-tipos-mi-nimos-compartidos",
        "skills.backend.guideline.backend.siempre-responder-en-espan-ol",
        "skills.backend.guideline.backend.soft-deletes-deletedat-en-lugar-de-delete-fi-sico",
        "skills.backend.guideline.backend.soft-deletes-por-defecto-deletedat-column",
        "skills.backend.guideline.backend.sql-injection-prevention-queries-parametrizadas",
        "skills.backend.guideline.backend.supabase-client-supabase-supabase-js",
        "skills.backend.guideline.backend.swagger-nestjs-swagger-decoradores-apiproperty",
        "skills.backend.guideline.backend.swagger-openapi-nestjs-swagger-para-documentacio-n",
        "skills.backend.guideline.backend.test-db-base-de-datos-separada-para-tests",
        "skills.backend.guideline.backend.transacciones-para-operaciones-cri-ticas",
        "skills.backend.guideline.backend.transacciones-para-operaciones-multi-tabla",
        "skills.backend.guideline.backend.try-catch-silenciosos-siempre-loggear-o-propagar-ast-common-error-empt",
        "skills.backend.guideline.backend.un-archivo-por-use-case-createorderusecase-updateorderstatususecase",
        "skills.backend.guideline.backend.unit-tests-servicios-use-cases-con-mocks",
        "skills.backend.guideline.backend.use-cases-expli-citos-createorderusecase-updateorderstatususecase",
        "skills.backend.guideline.backend.validar-precondiciones-fail-fast",
        "skills.backend.guideline.backend.validation-de-config-joi-o-class-validator-para-env",
        "skills.backend.guideline.backend.validationpipe-global-en-main-ts-con-whitelist-true",
        "skills.backend.guideline.backend.versionado-api-v1-api-v2",
        "skills.backend.guideline.backend.winston-logger-estructurado-json-logs",
        "skills.backend.guideline.backend.xss-prevention-sanitizar-inputs",
        "skills.backend.no-console-log",
        "skills.backend.no-empty-catch",
        "skills.backend.no-god-classes",
        "skills.backend.no-solid-violations",
        "skills.frontend.avoid-explicit-any",
        "skills.frontend.enforce-clean-architecture",
        "skills.frontend.guideline.frontend.accesibilidad-aria-semantic-html-primero-aria-cuando-sea-necesario",
        "skills.frontend.guideline.frontend.actu-a-como-un-arquitecto-de-soluciones-y-software-designer",
        "skills.frontend.guideline.frontend.analizar-archivos-existentes-revisar-componentes-servicios-tipos-actua",
        "skills.frontend.guideline.frontend.analizar-estructura-existente-archivos-componentes-servicios-dependenc",
        "skills.frontend.guideline.frontend.api-client-abstrai-do-axios-fetch-en-capa-de-infraestructura",
        "skills.frontend.guideline.frontend.aplicar-reglas-de-testing-makesut-system-under-test-helpers-separados-",
        "skills.frontend.guideline.frontend.app-router-usar-app-directory-no-pages-excepto-legacy",
        "skills.frontend.guideline.frontend.aria-labels-aria-label-aria-describedby-cuando-sea-necesario",
        "skills.frontend.guideline.frontend.clean-por-feature-presentation-application-domain-infrastructure-domai",
        "skills.frontend.guideline.frontend.cn-helper-combinar-clases-con-clsx-o-tailwind-merge",
        "skills.frontend.guideline.frontend.code-splitting-react-lazy-suspense-dynamic-imports",
        "skills.frontend.guideline.frontend.compatibilidad-con-componentes-actuales-mantener-consistencia-en-patro",
        "skills.frontend.guideline.frontend.comprobar-que-compile-y-pase-tests-antes-de-sugerir-typescript-strict-",
        "skills.frontend.guideline.frontend.contrast-ratio-wcag-aa-mi-nimo-4-5-1-texto-normal-3-1-texto-grande",
        "skills.frontend.guideline.frontend.csp-headers-content-security-policy-en-next-js-config",
        "skills.frontend.guideline.frontend.css-modules-para-estilos-especi-ficos-de-componente-si-es-necesario",
        "skills.frontend.guideline.frontend.custom-hooks-para-lo-gica-reutilizable-extraer-lo-gica-compleja-a-hook",
        "skills.frontend.guideline.frontend.data-fetching-en-server-components-fetch-con-cache-revalidate-async-co",
        "skills.frontend.guideline.frontend.ddd-entidades-value-objects-repositorios-eventos",
        "skills.frontend.guideline.frontend.debounce-throttle-para-inputs-de-bu-squeda-scroll-handlers",
        "skills.frontend.guideline.frontend.dynamic-imports-next-dynamic-para-code-splitting",
        "skills.frontend.guideline.frontend.e2e-con-playwright-user-flows-cri-ticos",
        "skills.frontend.guideline.frontend.en-produccio-n-ni-un-mocks-ni-un-spies-todo-real-de-apis-o-almacenamie",
        "skills.frontend.guideline.frontend.error-handling-global-interceptors-para-401-500-etc",
        "skills.frontend.guideline.frontend.error-messages-claros-accionables-traducidos-i18n",
        "skills.frontend.guideline.frontend.estado-local-global-eficiente-usestate-para-local-zustand-context-para",
        "skills.frontend.guideline.frontend.event-driven-navegacio-n-y-coordinacio-n-por-eventos-cuando-crezca-el-",
        "skills.frontend.guideline.frontend.evitar-prop-drilling-context-api-o-zustand-para-estado-compartido-prof",
        "skills.frontend.guideline.frontend.fallback-locale-ingle-s-como-fallback",
        "skills.frontend.guideline.frontend.feature-first-cada-feature-es-un-bounded-context-aislado",
        "skills.frontend.guideline.frontend.focus-management-focus-visible-trap-focus-en-modales",
        "skills.frontend.guideline.frontend.formateo-de-fechas-nu-meros-usar-intl-api-o-i18n-helpers",
        "skills.frontend.guideline.frontend.generics-cuando-sea-apropiado-componentes-y-hooks-reutilizables-type-s",
        "skills.frontend.guideline.frontend.hooks-primero-usestate-useeffect-usecallback-usememo-custom-hooks",
        "skills.frontend.guideline.frontend.https-siempre-redirect-automa-tico-en-produccio-n",
        "skills.frontend.guideline.frontend.i18n-desde-di-a-1-archivos-de-traduccio-n-separados-locales",
        "skills.frontend.guideline.frontend.interfaces-para-props-definir-tipos-expli-citos-para-todos-los-compone",
        "skills.frontend.guideline.frontend.invalidacio-n-inteligente-invalidar-cache-despue-s-de-mutaciones",
        "skills.frontend.guideline.frontend.key-props-en-listas-nunca-usar-i-ndice-como-key-si-el-orden-puede-camb",
        "skills.frontend.guideline.frontend.keyboard-navigation-todos-los-interactivos-accesibles-por-teclado",
        "skills.frontend.guideline.frontend.loading-error-states-loading-tsx-error-tsx-en-cada-ruta",
        "skills.frontend.guideline.frontend.loading-states-skeleton-screens-spinners-optimistic-updates",
        "skills.frontend.guideline.frontend.measure-twice-cut-once-planificar-arquitectura-dependencias-y-flujo-de",
        "skills.frontend.guideline.frontend.memoizacio-n-estrate-gica-no-todo-necesita-memo-perfilar-primero",
        "skills.frontend.guideline.frontend.metadata-api-generatemetadata-para-seo",
        "skills.frontend.guideline.frontend.msw-mock-service-worker-mock-apis-en-tests-no-axios-fetch-directamente",
        "skills.frontend.guideline.frontend.namespaces-separar-traducciones-por-feature-mo-dulo",
        "skills.frontend.guideline.frontend.next-image-siempre-para-ima-genes-optimizacio-n-automa-tica",
        "skills.frontend.guideline.frontend.no-any-usar-unknown-si-el-tipo-es-desconocido-luego-type-guard",
        "skills.frontend.guideline.frontend.no-catch-vaci-os-prohibido-silenciar-errores-ast-common-error-emptycat",
        "skills.frontend.guideline.frontend.no-class-components-solo-functional-components",
        "skills.frontend.guideline.frontend.no-poner-comentarios-en-el-co-digo-nombres-autodescriptivos-lo-hacen-i",
        "skills.frontend.guideline.frontend.no-singleton-en-su-lugar-inyeccio-n-de-dependencias-usar-providers-con",
        "skills.frontend.guideline.frontend.nombres-autodescriptivos-todo-en-ingle-s-usar-i18n-para-ui",
        "skills.frontend.guideline.frontend.optimizar-renders-react-memo-usememo-usecallback-para-prevenir-re-rend",
        "skills.frontend.guideline.frontend.preferir-early-returns-y-destructuring-evitar-if-else-anidados-callbac",
        "skills.frontend.guideline.frontend.preferir-spies-frente-a-stubs-o-mocks-si-es-posible-usar-jest-spyon-pa",
        "skills.frontend.guideline.frontend.queries-apropiadas-getbyrole-getbylabeltext-getbytext-getbytestid",
        "skills.frontend.guideline.frontend.rate-limiting-proteger-endpoints-pu-blicos",
        "skills.frontend.guideline.frontend.react-hook-form-performance-menos-re-renders",
        "skills.frontend.guideline.frontend.react-query-para-server-state-cache-automa-tico-refetch-invalidacio-n",
        "skills.frontend.guideline.frontend.react-testing-library-testear-como-usuario-no-implementation-details",
        "skills.frontend.guideline.frontend.respetar-patrones-establecidos-repository-pattern-use-cases-dtos",
        "skills.frontend.guideline.frontend.responsive-design-mobile-first-breakpoints-de-tailwind",
        "skills.frontend.guideline.frontend.retry-logic-reintentar-requests-fallidos-react-query-retry",
        "skills.frontend.guideline.frontend.reutilizar-componentes-ui-no-duplicar-button-card-dialog-etc",
        "skills.frontend.guideline.frontend.route-handlers-app-api-para-endpoints-backend",
        "skills.frontend.guideline.frontend.sanitizar-html-dompurify-si-se-renderiza-html-de-usuario",
        "skills.frontend.guideline.frontend.screen-reader-testing-probar-con-voiceover-nvda",
        "skills.frontend.guideline.frontend.seguir-siempre-flujo-bdd-tdd-escribir-historias-de-usuario-primero-lue",
        "skills.frontend.guideline.frontend.semantic-html-button-para-botones-nav-para-navegacio-n-etc",
        "skills.frontend.guideline.frontend.server-components-por-defecto-use-client-solo-cuando-sea-necesario-int",
        "skills.frontend.guideline.frontend.shared-kernel-tipos-mi-nimos-compartidos-entre-features",
        "skills.frontend.guideline.frontend.siempre-responder-en-espan-ol",
        "skills.frontend.guideline.frontend.snapshot-testing-con-moderacio-n-solo-para-componentes-estables",
        "skills.frontend.guideline.frontend.tailwind-css-utility-first-disen-o-consistente",
        "skills.frontend.guideline.frontend.theme-provider-next-themes-para-dark-light-mode",
        "skills.frontend.guideline.frontend.tipos-compartidos-sincronizar-con-backend-trpc-o-zod",
        "skills.frontend.guideline.frontend.tokens-en-headers-authorization-bearer-token-nunca-en-urls",
        "skills.frontend.guideline.frontend.type-inference-dejar-que-typescript-infiera-cuando-sea-obvio-no-sobre-",
        "skills.frontend.guideline.frontend.usereducer-para-lo-gica-compleja-estado-con-mu-ltiples-sub-valores-o-l",
        "skills.frontend.guideline.frontend.userevent-sobre-fireevent-simula-interaccio-n-real-de-usuario",
        "skills.frontend.guideline.frontend.usestate-para-estado-local-no-elevar-estado-prematuramente",
        "skills.frontend.guideline.frontend.usetranslation-hook-no-hardcodear-strings",
        "skills.frontend.guideline.frontend.utility-types-partial-pick-omit-required-record-cuando-simplifique-co-",
        "skills.frontend.guideline.frontend.validacio-n-en-tiempo-real-feedback-inmediato-al-usuario",
        "skills.frontend.guideline.frontend.virtual-scrolling-para-listas-largas-react-window-react-virtualized",
        "skills.frontend.guideline.frontend.web-vitals-monitorear-lcp-fid-cls-medir-con-lighthouse",
        "skills.frontend.guideline.frontend.zod-para-schemas-type-safe-validation-inferir-tipos",
        "skills.frontend.guideline.frontend.zustand-para-estado-global-simple-sin-boilerplate-devtools",
        "skills.frontend.no-console-log",
        "skills.frontend.no-empty-catch",
        "skills.frontend.no-god-classes",
        "skills.frontend.no-solid-violations",
        "workflow.bdd.insufficient_features",
        "workflow.bdd.missing_feature_files"
      ],
      "evaluated_rule_ids": [
        "backend.avoid-explicit-any",
        "backend.no-console-log",
        "backend.no-empty-catch",
        "common.error.empty_catch",
        "common.network.missing_error_handling",
        "common.types.record_unknown_requires_type",
        "common.types.undefined_in_base_type",
        "common.types.unknown_without_guard",
        "frontend.avoid-single-letter-variables",
        "frontend.no-console-log",
        "frontend.no-debugger",
        "heuristics.android.globalscope.ast",
        "heuristics.android.run-blocking.ast",
        "heuristics.android.thread-sleep.ast",
        "heuristics.ios.anyview.ast",
        "heuristics.ios.callback-style.ast",
        "heuristics.ios.dispatchgroup.ast",
        "heuristics.ios.dispatchqueue.ast",
        "heuristics.ios.dispatchsemaphore.ast",
        "heuristics.ios.force-cast.ast",
        "heuristics.ios.force-try.ast",
        "heuristics.ios.force-unwrap.ast",
        "heuristics.ios.navigation-view.ast",
        "heuristics.ios.observable-object.ast",
        "heuristics.ios.on-tap-gesture.ast",
        "heuristics.ios.operation-queue.ast",
        "heuristics.ios.string-format.ast",
        "heuristics.ios.task-detached.ast",
        "heuristics.ios.uiscreen-main-bounds.ast",
        "heuristics.ios.unchecked-sendable.ast",
        "heuristics.ts.buffer-alloc-unsafe-slow.ast",
        "heuristics.ts.buffer-alloc-unsafe.ast",
        "heuristics.ts.child-process-exec-file-sync.ast",
        "heuristics.ts.child-process-exec-file-untrusted-args.ast",
        "heuristics.ts.child-process-exec-file.ast",
        "heuristics.ts.child-process-exec-sync.ast",
        "heuristics.ts.child-process-exec.ast",
        "heuristics.ts.child-process-fork.ast",
        "heuristics.ts.child-process-import.ast",
        "heuristics.ts.child-process-shell-true.ast",
        "heuristics.ts.child-process-spawn-sync.ast",
        "heuristics.ts.child-process-spawn.ast",
        "heuristics.ts.console-error.ast",
        "heuristics.ts.debugger.ast",
        "heuristics.ts.delete-operator.ast",
        "heuristics.ts.document-write.ast",
        "heuristics.ts.dynamic-shell-invocation.ast",
        "heuristics.ts.eval.ast",
        "heuristics.ts.fs-access-callback.ast",
        "heuristics.ts.fs-access-sync.ast",
        "heuristics.ts.fs-append-file-callback.ast",
        "heuristics.ts.fs-append-file-sync.ast",
        "heuristics.ts.fs-chmod-callback.ast",
        "heuristics.ts.fs-chmod-sync.ast",
        "heuristics.ts.fs-chown-callback.ast",
        "heuristics.ts.fs-chown-sync.ast",
        "heuristics.ts.fs-close-callback.ast",
        "heuristics.ts.fs-close-sync.ast",
        "heuristics.ts.fs-copy-file-callback.ast",
        "heuristics.ts.fs-copy-file-sync.ast",
        "heuristics.ts.fs-cp-callback.ast",
        "heuristics.ts.fs-cp-sync.ast",
        "heuristics.ts.fs-exists-callback.ast",
        "heuristics.ts.fs-exists-sync.ast",
        "heuristics.ts.fs-fchmod-callback.ast",
        "heuristics.ts.fs-fchmod-sync.ast",
        "heuristics.ts.fs-fchown-callback.ast",
        "heuristics.ts.fs-fchown-sync.ast",
        "heuristics.ts.fs-fdatasync-callback.ast",
        "heuristics.ts.fs-fdatasync-sync.ast",
        "heuristics.ts.fs-fstat-callback.ast",
        "heuristics.ts.fs-fstat-sync.ast",
        "heuristics.ts.fs-fsync-callback.ast",
        "heuristics.ts.fs-fsync-sync.ast",
        "heuristics.ts.fs-ftruncate-callback.ast",
        "heuristics.ts.fs-ftruncate-sync.ast",
        "heuristics.ts.fs-futimes-callback.ast",
        "heuristics.ts.fs-futimes-sync.ast",
        "heuristics.ts.fs-lchmod-callback.ast",
        "heuristics.ts.fs-lchown-callback.ast",
        "heuristics.ts.fs-link-callback.ast",
        "heuristics.ts.fs-link-sync.ast",
        "heuristics.ts.fs-lstat-callback.ast",
        "heuristics.ts.fs-lstat-sync.ast",
        "heuristics.ts.fs-lutimes-callback.ast",
        "heuristics.ts.fs-lutimes-sync.ast",
        "heuristics.ts.fs-mkdir-callback.ast",
        "heuristics.ts.fs-mkdir-sync.ast",
        "heuristics.ts.fs-mkdtemp-callback.ast",
        "heuristics.ts.fs-mkdtemp-sync.ast",
        "heuristics.ts.fs-open-callback.ast",
        "heuristics.ts.fs-open-sync.ast",
        "heuristics.ts.fs-opendir-callback.ast",
        "heuristics.ts.fs-opendir-sync.ast",
        "heuristics.ts.fs-promises-access.ast",
        "heuristics.ts.fs-promises-append-file.ast",
        "heuristics.ts.fs-promises-chmod.ast",
        "heuristics.ts.fs-promises-chown.ast",
        "heuristics.ts.fs-promises-copy-file.ast",
        "heuristics.ts.fs-promises-cp.ast",
        "heuristics.ts.fs-promises-link.ast",
        "heuristics.ts.fs-promises-lstat.ast",
        "heuristics.ts.fs-promises-mkdir.ast",
        "heuristics.ts.fs-promises-mkdtemp.ast",
        "heuristics.ts.fs-promises-open.ast",
        "heuristics.ts.fs-promises-opendir.ast",
        "heuristics.ts.fs-promises-read-file.ast",
        "heuristics.ts.fs-promises-readdir.ast",
        "heuristics.ts.fs-promises-readlink.ast",
        "heuristics.ts.fs-promises-realpath.ast",
        "heuristics.ts.fs-promises-rename.ast",
        "heuristics.ts.fs-promises-rm.ast",
        "heuristics.ts.fs-promises-stat.ast",
        "heuristics.ts.fs-promises-symlink.ast",
        "heuristics.ts.fs-promises-unlink.ast",
        "heuristics.ts.fs-promises-utimes.ast",
        "heuristics.ts.fs-promises-write-file.ast",
        "heuristics.ts.fs-read-callback.ast",
        "heuristics.ts.fs-read-file-callback.ast",
        "heuristics.ts.fs-read-file-sync.ast",
        "heuristics.ts.fs-read-sync.ast",
        "heuristics.ts.fs-readdir-callback.ast",
        "heuristics.ts.fs-readdir-sync.ast",
        "heuristics.ts.fs-readlink-callback.ast",
        "heuristics.ts.fs-readlink-sync.ast",
        "heuristics.ts.fs-readv-callback.ast",
        "heuristics.ts.fs-readv-sync.ast",
        "heuristics.ts.fs-realpath-callback.ast",
        "heuristics.ts.fs-realpath-sync.ast",
        "heuristics.ts.fs-rename-callback.ast",
        "heuristics.ts.fs-rename-sync.ast",
        "heuristics.ts.fs-rm-callback.ast",
        "heuristics.ts.fs-rm-sync.ast",
        "heuristics.ts.fs-rmdir-callback.ast",
        "heuristics.ts.fs-rmdir-sync.ast",
        "heuristics.ts.fs-stat-callback.ast",
        "heuristics.ts.fs-stat-sync.ast",
        "heuristics.ts.fs-statfs-callback.ast",
        "heuristics.ts.fs-statfs-sync.ast",
        "heuristics.ts.fs-symlink-callback.ast",
        "heuristics.ts.fs-symlink-sync.ast",
        "heuristics.ts.fs-truncate-callback.ast",
        "heuristics.ts.fs-truncate-sync.ast",
        "heuristics.ts.fs-unlink-callback.ast",
        "heuristics.ts.fs-unlink-sync.ast",
        "heuristics.ts.fs-unwatch-file-callback.ast",
        "heuristics.ts.fs-utimes-callback.ast",
        "heuristics.ts.fs-utimes-sync.ast",
        "heuristics.ts.fs-watch-callback.ast",
        "heuristics.ts.fs-watch-file-callback.ast",
        "heuristics.ts.fs-write-callback.ast",
        "heuristics.ts.fs-write-file-callback.ast",
        "heuristics.ts.fs-write-file-sync.ast",
        "heuristics.ts.fs-write-sync.ast",
        "heuristics.ts.fs-writev-callback.ast",
        "heuristics.ts.fs-writev-sync.ast",
        "heuristics.ts.function-constructor.ast",
        "heuristics.ts.hardcoded-secret-token.ast",
        "heuristics.ts.inner-html.ast",
        "heuristics.ts.insecure-token-date-now.ast",
        "heuristics.ts.insecure-token-math-random.ast",
        "heuristics.ts.insert-adjacent-html.ast",
        "heuristics.ts.jwt-decode-without-verify.ast",
        "heuristics.ts.jwt-sign-no-expiration.ast",
        "heuristics.ts.jwt-verify-ignore-expiration.ast",
        "heuristics.ts.new-promise-async.ast",
        "heuristics.ts.process-env-mutation.ast",
        "heuristics.ts.process-exit.ast",
        "heuristics.ts.set-interval-string.ast",
        "heuristics.ts.set-timeout-string.ast",
        "heuristics.ts.tls-env-override.ast",
        "heuristics.ts.tls-reject-unauthorized-false.ast",
        "heuristics.ts.vm-dynamic-code-execution.ast",
        "heuristics.ts.weak-crypto-hash.ast",
        "heuristics.ts.weak-token-randomuuid.ast",
        "heuristics.ts.with-statement.ast",
        "skills.backend.avoid-explicit-any",
        "skills.backend.enforce-clean-architecture",
        "skills.backend.guideline.backend.aaa-pattern-arrange-act-assert",
        "skills.backend.guideline.backend.actu-a-como-un-arquitecto-de-soluciones-y-software-designer",
        "skills.backend.guideline.backend.analizar-estructura-existente-mo-dulos-servicios-repositorios-dtos",
        "skills.backend.guideline.backend.anemic-domain-models-entidades-solo-con-getters-setters",
        "skills.backend.guideline.backend.async-processing-no-bloquear-request-principal",
        "skills.backend.guideline.backend.audit-logging-registrar-cambios-cri-ticos",
        "skills.backend.guideline.backend.cache-aside-pattern-leer-de-cache-si-no-existe-leer-de-bd-y-cachear",
        "skills.backend.guideline.backend.cache-manager-nestjs-cache-manager",
        "skills.backend.guideline.backend.caching-redis-para-datos-frecuentes",
        "skills.backend.guideline.backend.callback-hell-usar-async-await",
        "skills.backend.guideline.backend.class-transformer-transform-exclude-expose",
        "skills.backend.guideline.backend.class-validator-decorators-isstring-isemail-min-max",
        "skills.backend.guideline.backend.clean-por-feature-presentation-application-domain-infrastructure-domai",
        "skills.backend.guideline.backend.compression-gzip-para-responses-grandes",
        "skills.backend.guideline.backend.comprobar-que-compile-antes-de-sugerir-npm-run-build-sin-errores",
        "skills.backend.guideline.backend.config-por-entorno-env-development-env-production",
        "skills.backend.guideline.backend.connection-pooling-configurar-maxconnections",
        "skills.backend.guideline.backend.connection-pooling-reutilizar-conexiones-de-bd",
        "skills.backend.guideline.backend.contexto-en-logs-userid-requestid-traceid",
        "skills.backend.guideline.backend.controllers-delgados-solo-routing-y-validacio-n-lo-gica-en-servicios",
        "skills.backend.guideline.backend.correlation-ids-para-tracing-distribuido",
        "skills.backend.guideline.backend.cors-configurado-solo-ori-genes-permitidos",
        "skills.backend.guideline.backend.cors-configurar-ori-genes-permitidos",
        "skills.backend.guideline.backend.coverage-95-en-lo-gica-cri-tica",
        "skills.backend.guideline.backend.custom-exceptions-validationexception-notfoundexception-unauthorizedex",
        "skills.backend.guideline.backend.database-indexing-i-ndices-en-columnas-frecuentes-en-where-join",
        "skills.backend.guideline.backend.ddd-entidades-value-objects-repositorios-eventos-de-dominio",
        "skills.backend.guideline.backend.dependency-injection-injectable-inject-providers-array",
        "skills.backend.guideline.backend.diagramas-c4-context-container-component-para-arquitectura",
        "skills.backend.guideline.backend.domain-events-ordercreatedevent-userregisteredevent",
        "skills.backend.guideline.backend.dtos-en-boundaries-validacio-n-en-entrada-salida",
        "skills.backend.guideline.backend.dtos-para-validacio-n-class-validator-class-transformer",
        "skills.backend.guideline.backend.dtos-separados-createorderdto-updateorderdto-orderresponsedto",
        "skills.backend.guideline.backend.e2e-tests-supertest-para-flujos-completos",
        "skills.backend.guideline.backend.emitir-eventos-de-dominio-ordercreatedevent-ordercancelledevent",
        "skills.backend.guideline.backend.en-produccio-n-ni-un-mocks-ni-un-spies-todo-real-de-bbdd-supabase-post",
        "skills.backend.guideline.backend.enums-para-valores-fijos-orderstatus-paymentmethod-incidenttype",
        "skills.backend.guideline.backend.error-responses-consistentes-statuscode-message-timestamp-path",
        "skills.backend.guideline.backend.estrategia-de-invalidacio-n-ttl-invalidacio-n-expli-cita",
        "skills.backend.guideline.backend.event-bus-nestjs-event-emitter-o-custom",
        "skills.backend.guideline.backend.event-driven-comunicacio-n-entre-features-por-eventos",
        "skills.backend.guideline.backend.event-handlers-onevent-order-created",
        "skills.backend.guideline.backend.event-sourcing-para-auditori-a-auditlogs-table",
        "skills.backend.guideline.backend.event-store-log-de-eventos-para-auditori-a",
        "skills.backend.guideline.backend.exception-filters-catch-para-manejo-global",
        "skills.backend.guideline.backend.fast-tests-100ms-integracio-n-10ms-unitarios",
        "skills.backend.guideline.backend.feature-first-cada-feature-es-un-bounded-context-aislado",
        "skills.backend.guideline.backend.guards-en-todas-las-rutas-protegidas-useguards-jwtauthguard",
        "skills.backend.guideline.backend.guards-para-autenticacio-n-autorizacio-n-useguards-jwtauthguard",
        "skills.backend.guideline.backend.hardcoded-values-config-en-variables-de-entorno",
        "skills.backend.guideline.backend.hateoas-opcional-links-en-responses-para-navegacio-n",
        "skills.backend.guideline.backend.health-checks-health-endpoint-liveness-readiness",
        "skills.backend.guideline.backend.helmet-security-headers",
        "skills.backend.guideline.backend.http-status-codes-apropiados-200-201-400-401-403-404-500",
        "skills.backend.guideline.backend.http-status-codes-sema-ntica-correcta",
        "skills.backend.guideline.backend.https-redirect-en-produccio-n",
        "skills.backend.guideline.backend.i-ndices-apropiados-para-queries-frecuentes",
        "skills.backend.guideline.backend.i18n-en-error-messages-mensajes-traducibles",
        "skills.backend.guideline.backend.idempotencia-eventos-procesables-mu-ltiples-veces-sin-efectos-secundar",
        "skills.backend.guideline.backend.idempotencia-put-y-delete-idempotentes",
        "skills.backend.guideline.backend.implementaciones-en-infrastructure-inyectar-dependencia-de-bd",
        "skills.backend.guideline.backend.input-validation-siempre-validar-con-dtos",
        "skills.backend.guideline.backend.integration-tests-controllers-services-repositorios-reales",
        "skills.backend.guideline.backend.interceptors-para-logging-transformacio-n-no-en-cada-endpoint",
        "skills.backend.guideline.backend.interfaces-en-domain-iordersrepository-iusersrepository",
        "skills.backend.guideline.backend.inyectar-repositorios-necesarios-di-en-constructor",
        "skills.backend.guideline.backend.jest-framework-de-testing",
        "skills.backend.guideline.backend.jsdoc-mi-nimo-solo-para-apis-pu-blicas-o-lo-gica-compleja",
        "skills.backend.guideline.backend.jwt-strategy-nestjs-jwt-nestjs-passport",
        "skills.backend.guideline.backend.key-naming-convention-module-entity-id-orders-order-123",
        "skills.backend.guideline.backend.lo-gica-en-controllers-mover-a-servicios-use-cases",
        "skills.backend.guideline.backend.log-levels-error-warn-info-debug",
        "skills.backend.guideline.backend.loggear-errores-con-contexto-completo",
        "skills.backend.guideline.backend.magic-numbers-usar-constantes-con-nombres-descriptivos",
        "skills.backend.guideline.backend.makesut-pattern-system-under-test-factory",
        "skills.backend.guideline.backend.manejo-de-errores-lanzar-excepciones-especi-ficas",
        "skills.backend.guideline.backend.me-todos-expresivos-findactiveordersbyuserid-mejor-que-find",
        "skills.backend.guideline.backend.me-tricas-de-negocio-kpis-analytics",
        "skills.backend.guideline.backend.me-tricas-prometheus-prom-client-para-me-tricas",
        "skills.backend.guideline.backend.measure-twice-cut-once-planificar-arquitectura-dependencias-y-flujo-de",
        "skills.backend.guideline.backend.middleware-para-cross-cutting-concerns-logging-cors-etc",
        "skills.backend.guideline.backend.migrations-versionadas-nunca-modificar-migraciones-pasadas",
        "skills.backend.guideline.backend.mo-dulos-cohesivos-un-mo-dulo-por-feature-ordersmodule-usersmodule-etc",
        "skills.backend.guideline.backend.mocks-en-produccio-n-solo-datos-reales",
        "skills.backend.guideline.backend.n-1-query-prevention-eager-loading-cuando-sea-apropiado",
        "skills.backend.guideline.backend.naming-conventions-plurales-para-colecciones-orders-users",
        "skills.backend.guideline.backend.nested-validation-validatenested-type",
        "skills.backend.guideline.backend.nestjs-config-configmodule-para-variables-de-entorno",
        "skills.backend.guideline.backend.no-cachear-datos-sensibles-o-cifrar-antes-de-cachear",
        "skills.backend.guideline.backend.no-defaults-en-produccio-n-fallar-si-falta-config-cri-tica",
        "skills.backend.guideline.backend.no-exponer-stack-traces-solo-en-desarrollo",
        "skills.backend.guideline.backend.no-lo-gica-de-negocio-en-repositorios-solo-crud-y-queries",
        "skills.backend.guideline.backend.no-loggear-datos-sensibles-passwords-tokens-pii",
        "skills.backend.guideline.backend.no-poner-comentarios-en-el-co-digo-nombres-autodescriptivos",
        "skills.backend.guideline.backend.no-singleton-en-su-lugar-inyeccio-n-de-dependencias-nestjs-di-containe",
        "skills.backend.guideline.backend.pagination-siempre-para-listas-offset-limit-o-cursor-based",
        "skills.backend.guideline.backend.password-hashing-bcrypt-con-salt-rounds-10",
        "skills.backend.guideline.backend.pipes-para-validacio-n-global-validationpipe-en-main-ts",
        "skills.backend.guideline.backend.preferir-early-returns-guard-clauses-evitar-if-else-anidados",
        "skills.backend.guideline.backend.queries-parametrizadas-prevenir-sql-injection",
        "skills.backend.guideline.backend.query-optimization-explain-analyze",
        "skills.backend.guideline.backend.query-optimization-explain-analyze-para-queries-lentas",
        "skills.backend.guideline.backend.rate-limiting-nestjs-throttler-para-prevenir-brute-force",
        "skills.backend.guideline.backend.rate-limiting-throttler-para-prevenir-abuse",
        "skills.backend.guideline.backend.readme-por-mo-dulo-explicar-responsabilidad-del-mo-dulo",
        "skills.backend.guideline.backend.redis-para-cache-distribuido",
        "skills.backend.guideline.backend.refresh-tokens-no-solo-access-tokens",
        "skills.backend.guideline.backend.repositories-para-datos-abstraer-acceso-a-bd-con-interfaces",
        "skills.backend.guideline.backend.repository-pattern-siempre-iordersrepository-ordersrepository",
        "skills.backend.guideline.backend.restful-get-post-put-patch-delete-apropiados",
        "skills.backend.guideline.backend.retornar-dtos-no-exponer-entidades-directamente",
        "skills.backend.guideline.backend.role-based-access-control-roles-admin-user",
        "skills.backend.guideline.backend.secrets-management-variables-de-entorno-nunca-en-co-digo",
        "skills.backend.guideline.backend.secrets-separados-aws-secrets-manager-hashicorp-vault",
        "skills.backend.guideline.backend.seguir-siempre-flujo-bdd-tdd-feature-files-specs-implementacio-n",
        "skills.backend.guideline.backend.services-para-lo-gica-de-negocio-orquestar-use-cases-y-repositorios",
        "skills.backend.guideline.backend.shared-kernel-tipos-mi-nimos-compartidos",
        "skills.backend.guideline.backend.siempre-responder-en-espan-ol",
        "skills.backend.guideline.backend.soft-deletes-deletedat-en-lugar-de-delete-fi-sico",
        "skills.backend.guideline.backend.soft-deletes-por-defecto-deletedat-column",
        "skills.backend.guideline.backend.sql-injection-prevention-queries-parametrizadas",
        "skills.backend.guideline.backend.supabase-client-supabase-supabase-js",
        "skills.backend.guideline.backend.swagger-nestjs-swagger-decoradores-apiproperty",
        "skills.backend.guideline.backend.swagger-openapi-nestjs-swagger-para-documentacio-n",
        "skills.backend.guideline.backend.test-db-base-de-datos-separada-para-tests",
        "skills.backend.guideline.backend.transacciones-para-operaciones-cri-ticas",
        "skills.backend.guideline.backend.transacciones-para-operaciones-multi-tabla",
        "skills.backend.guideline.backend.try-catch-silenciosos-siempre-loggear-o-propagar-ast-common-error-empt",
        "skills.backend.guideline.backend.un-archivo-por-use-case-createorderusecase-updateorderstatususecase",
        "skills.backend.guideline.backend.unit-tests-servicios-use-cases-con-mocks",
        "skills.backend.guideline.backend.use-cases-expli-citos-createorderusecase-updateorderstatususecase",
        "skills.backend.guideline.backend.validar-precondiciones-fail-fast",
        "skills.backend.guideline.backend.validation-de-config-joi-o-class-validator-para-env",
        "skills.backend.guideline.backend.validationpipe-global-en-main-ts-con-whitelist-true",
        "skills.backend.guideline.backend.versionado-api-v1-api-v2",
        "skills.backend.guideline.backend.winston-logger-estructurado-json-logs",
        "skills.backend.guideline.backend.xss-prevention-sanitizar-inputs",
        "skills.backend.no-console-log",
        "skills.backend.no-empty-catch",
        "skills.backend.no-god-classes",
        "skills.backend.no-solid-violations",
        "skills.frontend.avoid-explicit-any",
        "skills.frontend.enforce-clean-architecture",
        "skills.frontend.guideline.frontend.accesibilidad-aria-semantic-html-primero-aria-cuando-sea-necesario",
        "skills.frontend.guideline.frontend.actu-a-como-un-arquitecto-de-soluciones-y-software-designer",
        "skills.frontend.guideline.frontend.analizar-archivos-existentes-revisar-componentes-servicios-tipos-actua",
        "skills.frontend.guideline.frontend.analizar-estructura-existente-archivos-componentes-servicios-dependenc",
        "skills.frontend.guideline.frontend.api-client-abstrai-do-axios-fetch-en-capa-de-infraestructura",
        "skills.frontend.guideline.frontend.aplicar-reglas-de-testing-makesut-system-under-test-helpers-separados-",
        "skills.frontend.guideline.frontend.app-router-usar-app-directory-no-pages-excepto-legacy",
        "skills.frontend.guideline.frontend.aria-labels-aria-label-aria-describedby-cuando-sea-necesario",
        "skills.frontend.guideline.frontend.clean-por-feature-presentation-application-domain-infrastructure-domai",
        "skills.frontend.guideline.frontend.cn-helper-combinar-clases-con-clsx-o-tailwind-merge",
        "skills.frontend.guideline.frontend.code-splitting-react-lazy-suspense-dynamic-imports",
        "skills.frontend.guideline.frontend.compatibilidad-con-componentes-actuales-mantener-consistencia-en-patro",
        "skills.frontend.guideline.frontend.comprobar-que-compile-y-pase-tests-antes-de-sugerir-typescript-strict-",
        "skills.frontend.guideline.frontend.contrast-ratio-wcag-aa-mi-nimo-4-5-1-texto-normal-3-1-texto-grande",
        "skills.frontend.guideline.frontend.csp-headers-content-security-policy-en-next-js-config",
        "skills.frontend.guideline.frontend.css-modules-para-estilos-especi-ficos-de-componente-si-es-necesario",
        "skills.frontend.guideline.frontend.custom-hooks-para-lo-gica-reutilizable-extraer-lo-gica-compleja-a-hook",
        "skills.frontend.guideline.frontend.data-fetching-en-server-components-fetch-con-cache-revalidate-async-co",
        "skills.frontend.guideline.frontend.ddd-entidades-value-objects-repositorios-eventos",
        "skills.frontend.guideline.frontend.debounce-throttle-para-inputs-de-bu-squeda-scroll-handlers",
        "skills.frontend.guideline.frontend.dynamic-imports-next-dynamic-para-code-splitting",
        "skills.frontend.guideline.frontend.e2e-con-playwright-user-flows-cri-ticos",
        "skills.frontend.guideline.frontend.en-produccio-n-ni-un-mocks-ni-un-spies-todo-real-de-apis-o-almacenamie",
        "skills.frontend.guideline.frontend.error-handling-global-interceptors-para-401-500-etc",
        "skills.frontend.guideline.frontend.error-messages-claros-accionables-traducidos-i18n",
        "skills.frontend.guideline.frontend.estado-local-global-eficiente-usestate-para-local-zustand-context-para",
        "skills.frontend.guideline.frontend.event-driven-navegacio-n-y-coordinacio-n-por-eventos-cuando-crezca-el-",
        "skills.frontend.guideline.frontend.evitar-prop-drilling-context-api-o-zustand-para-estado-compartido-prof",
        "skills.frontend.guideline.frontend.fallback-locale-ingle-s-como-fallback",
        "skills.frontend.guideline.frontend.feature-first-cada-feature-es-un-bounded-context-aislado",
        "skills.frontend.guideline.frontend.focus-management-focus-visible-trap-focus-en-modales",
        "skills.frontend.guideline.frontend.formateo-de-fechas-nu-meros-usar-intl-api-o-i18n-helpers",
        "skills.frontend.guideline.frontend.generics-cuando-sea-apropiado-componentes-y-hooks-reutilizables-type-s",
        "skills.frontend.guideline.frontend.hooks-primero-usestate-useeffect-usecallback-usememo-custom-hooks",
        "skills.frontend.guideline.frontend.https-siempre-redirect-automa-tico-en-produccio-n",
        "skills.frontend.guideline.frontend.i18n-desde-di-a-1-archivos-de-traduccio-n-separados-locales",
        "skills.frontend.guideline.frontend.interfaces-para-props-definir-tipos-expli-citos-para-todos-los-compone",
        "skills.frontend.guideline.frontend.invalidacio-n-inteligente-invalidar-cache-despue-s-de-mutaciones",
        "skills.frontend.guideline.frontend.key-props-en-listas-nunca-usar-i-ndice-como-key-si-el-orden-puede-camb",
        "skills.frontend.guideline.frontend.keyboard-navigation-todos-los-interactivos-accesibles-por-teclado",
        "skills.frontend.guideline.frontend.loading-error-states-loading-tsx-error-tsx-en-cada-ruta",
        "skills.frontend.guideline.frontend.loading-states-skeleton-screens-spinners-optimistic-updates",
        "skills.frontend.guideline.frontend.measure-twice-cut-once-planificar-arquitectura-dependencias-y-flujo-de",
        "skills.frontend.guideline.frontend.memoizacio-n-estrate-gica-no-todo-necesita-memo-perfilar-primero",
        "skills.frontend.guideline.frontend.metadata-api-generatemetadata-para-seo",
        "skills.frontend.guideline.frontend.msw-mock-service-worker-mock-apis-en-tests-no-axios-fetch-directamente",
        "skills.frontend.guideline.frontend.namespaces-separar-traducciones-por-feature-mo-dulo",
        "skills.frontend.guideline.frontend.next-image-siempre-para-ima-genes-optimizacio-n-automa-tica",
        "skills.frontend.guideline.frontend.no-any-usar-unknown-si-el-tipo-es-desconocido-luego-type-guard",
        "skills.frontend.guideline.frontend.no-catch-vaci-os-prohibido-silenciar-errores-ast-common-error-emptycat",
        "skills.frontend.guideline.frontend.no-class-components-solo-functional-components",
        "skills.frontend.guideline.frontend.no-poner-comentarios-en-el-co-digo-nombres-autodescriptivos-lo-hacen-i",
        "skills.frontend.guideline.frontend.no-singleton-en-su-lugar-inyeccio-n-de-dependencias-usar-providers-con",
        "skills.frontend.guideline.frontend.nombres-autodescriptivos-todo-en-ingle-s-usar-i18n-para-ui",
        "skills.frontend.guideline.frontend.optimizar-renders-react-memo-usememo-usecallback-para-prevenir-re-rend",
        "skills.frontend.guideline.frontend.preferir-early-returns-y-destructuring-evitar-if-else-anidados-callbac",
        "skills.frontend.guideline.frontend.preferir-spies-frente-a-stubs-o-mocks-si-es-posible-usar-jest-spyon-pa",
        "skills.frontend.guideline.frontend.queries-apropiadas-getbyrole-getbylabeltext-getbytext-getbytestid",
        "skills.frontend.guideline.frontend.rate-limiting-proteger-endpoints-pu-blicos",
        "skills.frontend.guideline.frontend.react-hook-form-performance-menos-re-renders",
        "skills.frontend.guideline.frontend.react-query-para-server-state-cache-automa-tico-refetch-invalidacio-n",
        "skills.frontend.guideline.frontend.react-testing-library-testear-como-usuario-no-implementation-details",
        "skills.frontend.guideline.frontend.respetar-patrones-establecidos-repository-pattern-use-cases-dtos",
        "skills.frontend.guideline.frontend.responsive-design-mobile-first-breakpoints-de-tailwind",
        "skills.frontend.guideline.frontend.retry-logic-reintentar-requests-fallidos-react-query-retry",
        "skills.frontend.guideline.frontend.reutilizar-componentes-ui-no-duplicar-button-card-dialog-etc",
        "skills.frontend.guideline.frontend.route-handlers-app-api-para-endpoints-backend",
        "skills.frontend.guideline.frontend.sanitizar-html-dompurify-si-se-renderiza-html-de-usuario",
        "skills.frontend.guideline.frontend.screen-reader-testing-probar-con-voiceover-nvda",
        "skills.frontend.guideline.frontend.seguir-siempre-flujo-bdd-tdd-escribir-historias-de-usuario-primero-lue",
        "skills.frontend.guideline.frontend.semantic-html-button-para-botones-nav-para-navegacio-n-etc",
        "skills.frontend.guideline.frontend.server-components-por-defecto-use-client-solo-cuando-sea-necesario-int",
        "skills.frontend.guideline.frontend.shared-kernel-tipos-mi-nimos-compartidos-entre-features",
        "skills.frontend.guideline.frontend.siempre-responder-en-espan-ol",
        "skills.frontend.guideline.frontend.snapshot-testing-con-moderacio-n-solo-para-componentes-estables",
        "skills.frontend.guideline.frontend.tailwind-css-utility-first-disen-o-consistente",
        "skills.frontend.guideline.frontend.theme-provider-next-themes-para-dark-light-mode",
        "skills.frontend.guideline.frontend.tipos-compartidos-sincronizar-con-backend-trpc-o-zod",
        "skills.frontend.guideline.frontend.tokens-en-headers-authorization-bearer-token-nunca-en-urls",
        "skills.frontend.guideline.frontend.type-inference-dejar-que-typescript-infiera-cuando-sea-obvio-no-sobre-",
        "skills.frontend.guideline.frontend.usereducer-para-lo-gica-compleja-estado-con-mu-ltiples-sub-valores-o-l",
        "skills.frontend.guideline.frontend.userevent-sobre-fireevent-simula-interaccio-n-real-de-usuario",
        "skills.frontend.guideline.frontend.usestate-para-estado-local-no-elevar-estado-prematuramente",
        "skills.frontend.guideline.frontend.usetranslation-hook-no-hardcodear-strings",
        "skills.frontend.guideline.frontend.utility-types-partial-pick-omit-required-record-cuando-simplifique-co-",
        "skills.frontend.guideline.frontend.validacio-n-en-tiempo-real-feedback-inmediato-al-usuario",
        "skills.frontend.guideline.frontend.virtual-scrolling-para-listas-largas-react-window-react-virtualized",
        "skills.frontend.guideline.frontend.web-vitals-monitorear-lcp-fid-cls-medir-con-lighthouse",
        "skills.frontend.guideline.frontend.zod-para-schemas-type-safe-validation-inferir-tipos",
        "skills.frontend.guideline.frontend.zustand-para-estado-global-simple-sin-boilerplate-devtools",
        "skills.frontend.no-console-log",
        "skills.frontend.no-empty-catch",
        "skills.frontend.no-god-classes",
        "skills.frontend.no-solid-violations",
        "workflow.bdd.insufficient_features",
        "workflow.bdd.missing_feature_files"
      ],
      "matched_rule_ids": [
        "common.error.empty_catch",
        "common.network.missing_error_handling",
        "common.types.record_unknown_requires_type",
        "common.types.undefined_in_base_type",
        "common.types.unknown_without_guard",
        "heuristics.ts.child-process-exec-file-sync.ast",
        "heuristics.ts.child-process-exec-file-untrusted-args.ast",
        "heuristics.ts.child-process-exec.ast",
        "heuristics.ts.child-process-spawn-sync.ast",
        "heuristics.ts.dynamic-shell-invocation.ast",
        "heuristics.ts.process-exit.ast",
        "skills.backend.no-empty-catch",
        "skills.frontend.no-empty-catch",
        "workflow.bdd.insufficient_features",
        "workflow.bdd.missing_feature_files"
      ],
      "unevaluated_rule_ids": [],
      "counts": {
        "active": 417,
        "evaluated": 417,
        "matched": 15,
        "unevaluated": 0
      },
      "coverage_ratio": 1
    },
    "findings": [
      {
        "ruleId": "common.error.empty_catch",
        "severity": "CRITICAL",
        "code": "COMMON_ERROR_EMPTY_CATCH",
        "message": "Empty catch block detected - always handle errors (log, rethrow, wrap, or return Result).",
        "file": "integrations/lifecycle/gitService.ts",
        "lines": [
          54
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.error.empty_catch",
        "severity": "CRITICAL",
        "code": "COMMON_ERROR_EMPTY_CATCH",
        "message": "Empty catch block detected - always handle errors (log, rethrow, wrap, or return Result).",
        "file": "integrations/lifecycle/update.ts",
        "lines": [
          84
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.error.empty_catch",
        "severity": "CRITICAL",
        "code": "COMMON_ERROR_EMPTY_CATCH",
        "message": "Empty catch block detected - always handle errors (log, rethrow, wrap, or return Result).",
        "file": "scripts/adapter-session-status-writes-log-filter-lib.ts",
        "lines": [
          21
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.error.empty_catch",
        "severity": "CRITICAL",
        "code": "COMMON_ERROR_EMPTY_CATCH",
        "message": "Empty catch block detected - always handle errors (log, rethrow, wrap, or return Result).",
        "file": "scripts/framework-menu-matrix-canary-lib.ts",
        "lines": [
          167,
          177,
          250,
          255
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.network.missing_error_handling",
        "severity": "ERROR",
        "code": "COMMON_NETWORK_MISSING_ERROR_HANDLING",
        "message": "Network calls without error handling - wrap requests in try/catch or add .catch() with typed recovery.",
        "file": "integrations/mcp/__tests__/enterpriseServer.test.ts",
        "lines": [
          55,
          75,
          87,
          123,
          143,
          169,
          190,
          217
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.network.missing_error_handling",
        "severity": "ERROR",
        "code": "COMMON_NETWORK_MISSING_ERROR_HANDLING",
        "message": "Network calls without error handling - wrap requests in try/catch or add .catch() with typed recovery.",
        "file": "integrations/mcp/__tests__/evidenceContextServer-collections.test.ts",
        "lines": [
          17,
          46,
          71,
          93,
          125,
          151,
          178,
          203
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.network.missing_error_handling",
        "severity": "ERROR",
        "code": "COMMON_NETWORK_MISSING_ERROR_HANDLING",
        "message": "Network calls without error handling - wrap requests in try/catch or add .catch() with typed recovery.",
        "file": "integrations/mcp/__tests__/evidenceContextServer-findings.test.ts",
        "lines": [
          36,
          82,
          93,
          112,
          123,
          155,
          189,
          206
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.network.missing_error_handling",
        "severity": "ERROR",
        "code": "COMMON_NETWORK_MISSING_ERROR_HANDLING",
        "message": "Network calls without error handling - wrap requests in try/catch or add .catch() with typed recovery.",
        "file": "integrations/mcp/__tests__/evidenceContextServer-health.test.ts",
        "lines": [
          9,
          20,
          29,
          87
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.network.missing_error_handling",
        "severity": "ERROR",
        "code": "COMMON_NETWORK_MISSING_ERROR_HANDLING",
        "message": "Network calls without error handling - wrap requests in try/catch or add .catch() with typed recovery.",
        "file": "integrations/mcp/__tests__/evidenceContextServer-payload.test.ts",
        "lines": [
          15,
          64
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.network.missing_error_handling",
        "severity": "ERROR",
        "code": "COMMON_NETWORK_MISSING_ERROR_HANDLING",
        "message": "Network calls without error handling - wrap requests in try/catch or add .catch() with typed recovery.",
        "file": "integrations/mcp/__tests__/evidenceContextServer.test.ts",
        "lines": [
          52,
          65,
          82
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/browser/index.ts",
        "lines": [
          3,
          21,
          43
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/process/core.ts",
        "lines": [
          3,
          25,
          51,
          75,
          92
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/process/shell.ts",
        "lines": [
          111,
          127,
          141
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/process/spawn.ts",
        "lines": [
          3,
          25,
          29,
          33,
          37,
          41
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/security/securityCredentials.ts",
        "lines": [
          101,
          115,
          138,
          161
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/security/securityCrypto.ts",
        "lines": [
          3,
          40,
          62
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/security/securityJwt.ts",
        "lines": [
          44,
          66,
          97
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/security/securityTls.ts",
        "lines": [
          66,
          79
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/typescript/index.ts",
        "lines": [
          24,
          228,
          627,
          659,
          674,
          735,
          750
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/utils/astHelpers.ts",
        "lines": [
          1,
          7,
          35,
          50
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/extractHeuristicFacts.ts",
        "lines": [
          328,
          538,
          539,
          540,
          541,
          542,
          543,
          544
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/utils/stableStringify.ts",
        "lines": [
          1
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/config/compileSkillsLock.ts",
        "lines": [
          39
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/config/loadProjectRules.ts",
        "lines": [
          6
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/config/skillsCustomRules.ts",
        "lines": [
          59
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/config/skillsEffectiveLock.ts",
        "lines": [
          16
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/config/skillsLock.ts",
        "lines": [
          61,
          211,
          227,
          238
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/config/skillsPolicy.ts",
        "lines": [
          27,
          128,
          135
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/config/skillsSources.ts",
        "lines": [
          21
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/mcp/enterpriseServer.ts",
        "lines": [
          303,
          310,
          350,
          676
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/sdd/policy.ts",
        "lines": [
          36,
          46
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/sdd/types.ts",
        "lines": [
          19
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "scripts/consumer-ci-auth-check-contract.ts",
        "lines": [
          12
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "scripts/consumer-support-bundle-contract.ts",
        "lines": [
          49
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "scripts/framework-menu-evidence-summary-lib.ts",
        "lines": [
          112
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "severity": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "scripts/framework-menu-legacy-audit-lib.ts",
        "lines": [
          245,
          513,
          516
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "core/facts/detectors/typescript/index.ts",
        "lines": [
          150,
          173,
          180
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/config/heuristics.ts",
        "lines": [
          9
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/config/skillsCustomRules.ts",
        "lines": [
          175
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/evidence/buildEvidence.ts",
        "lines": [
          90,
          98
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/evidence/repoState.ts",
        "lines": [
          23,
          55
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/lifecycle/cli.ts",
        "lines": [
          90,
          98,
          121,
          126,
          127,
          330,
          355
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/lifecycle/gitService.ts",
        "lines": [
          11,
          57
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/lifecycle/remove.ts",
        "lines": [
          50
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/lifecycle/state.ts",
        "lines": [
          12,
          22
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/mcp/enterpriseServer.ts",
        "lines": [
          166
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/mcp/evidencePayloadCollectionsPaging.ts",
        "lines": [
          2,
          4,
          14,
          23,
          25
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/mcp/evidencePayloadConfig.ts",
        "lines": [
          36,
          50,
          73
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/notifications/emitAuditSummaryNotification.ts",
        "lines": [
          29
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/platform/detectPlatforms.ts",
        "lines": [
          14
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/sdd/openSpecCli.ts",
        "lines": [
          43
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/sdd/sessionStore.ts",
        "lines": [
          27
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/adapter-real-session-fs-lib.ts",
        "lines": [
          7,
          21
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/adapter-real-session-markdown-snippets-lib.ts",
        "lines": [
          10
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/adapter-real-session-status-parser-lib.ts",
        "lines": [
          6
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/adapter-session-status-audit-latest-lib.ts",
        "lines": [
          8
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/adapter-session-status-hook-log-filter-lib.ts",
        "lines": [
          3
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/build-phase5-execution-closure-status-runner-lib.ts",
        "lines": [
          15
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/build-phase5-external-handoff-inputs-lib.ts",
        "lines": [
          52,
          56
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/consumer-startup-failure-support-bundle-lib.ts",
        "lines": [
          55
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/consumer-startup-unblock-contract.ts",
        "lines": [
          36
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/consumer-support-bundle-gh-diagnostics-collector-lib.ts",
        "lines": [
          15
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/consumer-support-bundle-markdown-context-lib.ts",
        "lines": [
          12,
          14
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/consumer-support-ticket-parser-lib.ts",
        "lines": [
          19
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/framework-menu-prompts-phase5-closure-live-lib.ts",
        "lines": [
          24,
          25
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/framework-menu-runner-path-lib.ts",
        "lines": [
          4
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/gitflow-cli-lib.ts",
        "lines": [
          30,
          37,
          66
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/phase5-blockers-parser-adapter-lib.ts",
        "lines": [
          14
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "severity": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/phase5-execution-closure-status-parser-lib.ts",
        "lines": [
          1
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/browser/index.ts",
        "lines": [
          63,
          67,
          71,
          75,
          79,
          83
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/callbacks.ts",
        "lines": [
          4,
          35,
          36
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/promises.ts",
        "lines": [
          4
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart1DirTimes.ts",
        "lines": [
          3,
          26,
          49,
          72
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart1FileOps.ts",
        "lines": [
          3,
          26,
          49,
          72
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart1Metadata.ts",
        "lines": [
          3,
          26,
          49,
          72,
          95,
          118
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart2Core.ts",
        "lines": [
          3,
          26,
          49
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart2Io.ts",
        "lines": [
          3,
          26,
          49
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart2Permissions.ts",
        "lines": [
          3,
          26,
          49,
          72
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart2Times.ts",
        "lines": [
          3,
          26,
          49,
          72
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart3DescriptorIo.ts",
        "lines": [
          3,
          26,
          49,
          72
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart3Links.ts",
        "lines": [
          3,
          26,
          49
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart3PathOps.ts",
        "lines": [
          3,
          26,
          49,
          72,
          95
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/process/core.ts",
        "lines": [
          42,
          109,
          113,
          117,
          121,
          125,
          129,
          133
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/process/shell.ts",
        "lines": [
          5,
          22,
          39,
          53,
          70,
          87,
          104,
          162
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/process/spawn.ts",
        "lines": [
          45,
          49,
          53,
          57,
          61,
          65,
          69,
          73
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/security/securityCredentials.ts",
        "lines": [
          5,
          25,
          47,
          69,
          184,
          188,
          192,
          196
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/security/securityCrypto.ts",
        "lines": [
          84,
          88,
          92,
          96,
          100,
          104
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/security/securityJwt.ts",
        "lines": [
          3,
          18,
          31,
          130,
          134,
          138,
          142,
          146
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/security/securityTls.ts",
        "lines": [
          3,
          25,
          86,
          90,
          94,
          98
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/typescript/index.ts",
        "lines": [
          47,
          71,
          78,
          113,
          118,
          150,
          173,
          180
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/utils/astHelpers.ts",
        "lines": [
          1,
          6,
          49,
          56
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/vm/index.ts",
        "lines": [
          3
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/extractHeuristicFacts.ts",
        "lines": [
          209,
          210,
          219,
          223,
          228,
          243,
          277,
          294
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/utils/stableStringify.ts",
        "lines": [
          1,
          5
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/config/compileSkillsLock.ts",
        "lines": [
          39,
          43,
          201
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/config/loadProjectRules.ts",
        "lines": [
          6,
          10,
          33
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/config/skillsCustomRules.ts",
        "lines": [
          59,
          63,
          67,
          82,
          122,
          210,
          212
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/config/skillsEffectiveLock.ts",
        "lines": [
          11
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/config/skillsLock.ts",
        "lines": [
          61,
          65,
          69,
          77,
          81,
          85,
          89,
          93
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/config/skillsPolicy.ts",
        "lines": [
          27,
          31,
          35,
          39,
          47,
          51,
          71,
          86
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/config/skillsSources.ts",
        "lines": [
          21,
          25,
          29,
          33,
          57,
          69,
          83
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/evidence/buildEvidence.ts",
        "lines": [
          90,
          98
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/evidence/humanIntent.ts",
        "lines": [
          3,
          11,
          28,
          40
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/evidence/readEvidence.ts",
        "lines": [
          17,
          22,
          31
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/evidence/repoState.ts",
        "lines": [
          38,
          89,
          104,
          105
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/gate/stagePolicies.ts",
        "lines": [
          185,
          229,
          230
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/git/runCliCommand.ts",
        "lines": [
          6
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/lifecycle/adapter.ts",
        "lines": [
          17,
          29,
          46
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/mcp/enterpriseServer.ts",
        "lines": [
          140,
          147,
          160,
          254,
          291,
          573,
          662
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/mcp/evidenceContextServer.ts",
        "lines": [
          46
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/mcp/evidencePayloadCollections.ts",
        "lines": [
          31
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/mcp/evidencePayloadStatus.ts",
        "lines": [
          25
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/sdd/openSpecCli.ts",
        "lines": [
          108,
          109,
          110,
          111,
          113,
          114
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/build-consumer-startup-triage-runner-lib.ts",
        "lines": [
          20,
          28
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/check-package-manifest.ts",
        "lines": [
          39,
          146
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/collect-consumer-ci-artifacts-contract.ts",
        "lines": [
          29
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/collect-consumer-ci-artifacts-gh-run-fetch-lib.ts",
        "lines": [
          30
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/consumer-support-bundle-contract.ts",
        "lines": [
          26
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/consumer-support-bundle-gh-command-lib.ts",
        "lines": [
          16
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/consumer-workflow-lint-command-lib.ts",
        "lines": [
          8
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/framework-menu-evidence-summary-lib.ts",
        "lines": [
          8,
          9,
          13,
          14,
          15,
          19,
          48,
          52
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/framework-menu-legacy-audit-lib.ts",
        "lines": [
          9,
          13,
          14,
          15,
          16,
          17,
          114,
          118
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/framework-menu-matrix-canary-lib.ts",
        "lines": [
          125,
          126,
          127
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/framework-menu-runner-process-lib.ts",
        "lines": [
          20
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/framework-menu-system-notifications-lib.ts",
        "lines": [
          99,
          100
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/gitflow-cli-lib.ts",
        "lines": [
          59
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/legacy-parity-report-lib.ts",
        "lines": [
          5,
          6,
          7,
          8,
          74,
          78,
          88,
          125
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/phase5-execution-closure-runner-exec-error-lib.ts",
        "lines": [
          5
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "severity": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/run-c020-benchmark.ts",
        "lines": [
          12,
          13,
          14,
          15,
          17,
          19,
          20,
          21
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "heuristics.ts.child-process-exec-file-sync.ast",
        "severity": "ERROR",
        "code": "HEURISTICS_CHILD_PROCESS_EXEC_FILE_SYNC_AST",
        "message": "AST heuristic detected execFileSync usage.",
        "file": "scripts/framework-menu-matrix-canary-lib.ts",
        "lines": [
          153,
          161,
          172
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "heuristics.ts.child-process-exec-file-untrusted-args.ast",
        "severity": "ERROR",
        "code": "HEURISTICS_CHILD_PROCESS_EXEC_FILE_UNTRUSTED_ARGS_AST",
        "message": "AST heuristic detected execFile/execFileSync with non-literal args array.",
        "file": "scripts/framework-menu-matrix-canary-lib.ts",
        "lines": [
          153,
          161,
          172
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "heuristics.ts.child-process-exec.ast",
        "severity": "ERROR",
        "code": "HEURISTICS_CHILD_PROCESS_EXEC_AST",
        "message": "AST heuristic detected exec usage.",
        "file": "core/facts/extractHeuristicFacts.ts",
        "lines": [
          308,
          313,
          318
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "heuristics.ts.child-process-spawn-sync.ast",
        "severity": "ERROR",
        "code": "HEURISTICS_CHILD_PROCESS_SPAWN_SYNC_AST",
        "message": "AST heuristic detected spawnSync usage.",
        "file": "scripts/check-package-manifest.ts",
        "lines": [
          61
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "heuristics.ts.child-process-spawn-sync.ast",
        "severity": "ERROR",
        "code": "HEURISTICS_CHILD_PROCESS_SPAWN_SYNC_AST",
        "message": "AST heuristic detected spawnSync usage.",
        "file": "scripts/run-c020-benchmark.ts",
        "lines": [
          62,
          106
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "heuristics.ts.dynamic-shell-invocation.ast",
        "severity": "ERROR",
        "code": "HEURISTICS_DYNAMIC_SHELL_INVOCATION_AST",
        "message": "AST heuristic detected dynamic shell command invocation.",
        "file": "core/facts/extractHeuristicFacts.ts",
        "lines": [
          308,
          313,
          318
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "heuristics.ts.process-exit.ast",
        "severity": "ERROR",
        "code": "HEURISTICS_PROCESS_EXIT_AST",
        "message": "AST heuristic detected process.exit usage.",
        "file": "scripts/import-custom-skills.ts",
        "lines": [
          45
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.backend.no-empty-catch",
        "severity": "CRITICAL",
        "code": "SKILLS_SKILLS_BACKEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in backend runtime code.",
        "file": "integrations/lifecycle/gitService.ts",
        "lines": [
          54
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.backend.no-empty-catch",
        "severity": "CRITICAL",
        "code": "SKILLS_SKILLS_BACKEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in backend runtime code.",
        "file": "integrations/lifecycle/update.ts",
        "lines": [
          84
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.backend.no-empty-catch",
        "severity": "CRITICAL",
        "code": "SKILLS_SKILLS_BACKEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in backend runtime code.",
        "file": "scripts/adapter-session-status-writes-log-filter-lib.ts",
        "lines": [
          21
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.backend.no-empty-catch",
        "severity": "CRITICAL",
        "code": "SKILLS_SKILLS_BACKEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in backend runtime code.",
        "file": "scripts/framework-menu-matrix-canary-lib.ts",
        "lines": [
          167,
          177,
          250,
          255
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.frontend.no-empty-catch",
        "severity": "ERROR",
        "code": "SKILLS_SKILLS_FRONTEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in frontend runtime code.",
        "file": "integrations/lifecycle/gitService.ts",
        "lines": [
          54
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.frontend.no-empty-catch",
        "severity": "ERROR",
        "code": "SKILLS_SKILLS_FRONTEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in frontend runtime code.",
        "file": "integrations/lifecycle/update.ts",
        "lines": [
          84
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.frontend.no-empty-catch",
        "severity": "ERROR",
        "code": "SKILLS_SKILLS_FRONTEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in frontend runtime code.",
        "file": "scripts/adapter-session-status-writes-log-filter-lib.ts",
        "lines": [
          21
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.frontend.no-empty-catch",
        "severity": "ERROR",
        "code": "SKILLS_SKILLS_FRONTEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in frontend runtime code.",
        "file": "scripts/framework-menu-matrix-canary-lib.ts",
        "lines": [
          167,
          177,
          250,
          255
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "workflow.bdd.insufficient_features",
        "severity": "ERROR",
        "code": "WORKFLOW_BDD_INSUFFICIENT_FEATURES",
        "message": "Insufficient feature files for implementation volume. Increase feature coverage before adding more code.",
        "file": "PROJECT_ROOT",
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "workflow.bdd.missing_feature_files",
        "severity": "CRITICAL",
        "code": "WORKFLOW_BDD_MISSING_FEATURE_FILES",
        "message": "Project has implementation files but no .feature files. Enforce BDD -> TDD -> Implementation flow.",
        "file": "PROJECT_ROOT",
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      }
    ],
    "platforms": [
      {
        "platform": "iOS",
        "files_affected": 0,
        "by_severity": {
          "CRITICAL": 0,
          "HIGH": 0,
          "MEDIUM": 0,
          "LOW": 0
        },
        "top_violations": []
      },
      {
        "platform": "Android",
        "files_affected": 0,
        "by_severity": {
          "CRITICAL": 0,
          "HIGH": 0,
          "MEDIUM": 0,
          "LOW": 0
        },
        "top_violations": []
      },
      {
        "platform": "Backend",
        "files_affected": 8,
        "by_severity": {
          "CRITICAL": 4,
          "HIGH": 7,
          "MEDIUM": 0,
          "LOW": 0
        },
        "top_violations": [
          {
            "rule_id": "skills.backend.no-empty-catch",
            "count": 4
          },
          {
            "rule_id": "heuristics.ts.child-process-spawn-sync.ast",
            "count": 2
          },
          {
            "rule_id": "heuristics.ts.child-process-exec-file-sync.ast",
            "count": 1
          },
          {
            "rule_id": "heuristics.ts.child-process-exec-file-untrusted-args.ast",
            "count": 1
          },
          {
            "rule_id": "heuristics.ts.child-process-exec.ast",
            "count": 1
          },
          {
            "rule_id": "heuristics.ts.dynamic-shell-invocation.ast",
            "count": 1
          },
          {
            "rule_id": "heuristics.ts.process-exit.ast",
            "count": 1
          }
        ]
      },
      {
        "platform": "Frontend",
        "files_affected": 4,
        "by_severity": {
          "CRITICAL": 0,
          "HIGH": 4,
          "MEDIUM": 0,
          "LOW": 0
        },
        "top_violations": [
          {
            "rule_id": "skills.frontend.no-empty-catch",
            "count": 4
          }
        ]
      },
      {
        "platform": "Other",
        "files_affected": 98,
        "by_severity": {
          "CRITICAL": 38,
          "HIGH": 33,
          "MEDIUM": 60,
          "LOW": 0
        },
        "top_violations": [
          {
            "rule_id": "common.types.unknown_without_guard",
            "count": 60
          },
          {
            "rule_id": "common.types.undefined_in_base_type",
            "count": 33
          },
          {
            "rule_id": "common.types.record_unknown_requires_type",
            "count": 26
          },
          {
            "rule_id": "common.network.missing_error_handling",
            "count": 6
          },
          {
            "rule_id": "common.error.empty_catch",
            "count": 4
          },
          {
            "rule_id": "workflow.bdd.insufficient_features",
            "count": 1
          },
          {
            "rule_id": "workflow.bdd.missing_feature_files",
            "count": 1
          }
        ]
      }
    ]
  },
  "ledger": [
    {
      "ruleId": "common.error.empty_catch",
      "file": "integrations/lifecycle/gitService.ts",
      "lines": [
        54
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.error.empty_catch",
      "file": "integrations/lifecycle/update.ts",
      "lines": [
        84
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.error.empty_catch",
      "file": "scripts/adapter-session-status-writes-log-filter-lib.ts",
      "lines": [
        21
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.error.empty_catch",
      "file": "scripts/framework-menu-matrix-canary-lib.ts",
      "lines": [
        167,
        177,
        250,
        255
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.network.missing_error_handling",
      "file": "integrations/mcp/__tests__/enterpriseServer.test.ts",
      "lines": [
        55,
        75,
        87,
        123,
        143,
        169,
        190,
        217
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.network.missing_error_handling",
      "file": "integrations/mcp/__tests__/evidenceContextServer-collections.test.ts",
      "lines": [
        17,
        46,
        71,
        93,
        125,
        151,
        178,
        203
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.network.missing_error_handling",
      "file": "integrations/mcp/__tests__/evidenceContextServer-findings.test.ts",
      "lines": [
        36,
        82,
        93,
        112,
        123,
        155,
        189,
        206
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.network.missing_error_handling",
      "file": "integrations/mcp/__tests__/evidenceContextServer-health.test.ts",
      "lines": [
        9,
        20,
        29,
        87
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.network.missing_error_handling",
      "file": "integrations/mcp/__tests__/evidenceContextServer-payload.test.ts",
      "lines": [
        15,
        64
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.network.missing_error_handling",
      "file": "integrations/mcp/__tests__/evidenceContextServer.test.ts",
      "lines": [
        52,
        65,
        82
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "core/facts/detectors/browser/index.ts",
      "lines": [
        3,
        21,
        43
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "core/facts/detectors/process/core.ts",
      "lines": [
        3,
        25,
        51,
        75,
        92
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "core/facts/detectors/process/shell.ts",
      "lines": [
        111,
        127,
        141
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "core/facts/detectors/process/spawn.ts",
      "lines": [
        3,
        25,
        29,
        33,
        37,
        41
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "core/facts/detectors/security/securityCredentials.ts",
      "lines": [
        101,
        115,
        138,
        161
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "core/facts/detectors/security/securityCrypto.ts",
      "lines": [
        3,
        40,
        62
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "core/facts/detectors/security/securityJwt.ts",
      "lines": [
        44,
        66,
        97
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "core/facts/detectors/security/securityTls.ts",
      "lines": [
        66,
        79
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "core/facts/detectors/typescript/index.ts",
      "lines": [
        24,
        228,
        627,
        659,
        674,
        735,
        750
      ],
      "firstSeen": "2026-02-24T08:19:56.080Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "core/facts/detectors/utils/astHelpers.ts",
      "lines": [
        1,
        7,
        35,
        50
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "core/facts/extractHeuristicFacts.ts",
      "lines": [
        328,
        538,
        539,
        540,
        541,
        542,
        543,
        544
      ],
      "firstSeen": "2026-02-24T08:19:56.080Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "core/utils/stableStringify.ts",
      "lines": [
        1
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "integrations/config/compileSkillsLock.ts",
      "lines": [
        39
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "integrations/config/loadProjectRules.ts",
      "lines": [
        6
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "integrations/config/skillsCustomRules.ts",
      "lines": [
        59
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "integrations/config/skillsEffectiveLock.ts",
      "lines": [
        16
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "integrations/config/skillsLock.ts",
      "lines": [
        61,
        211,
        227,
        238
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "integrations/config/skillsPolicy.ts",
      "lines": [
        27,
        128,
        135
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "integrations/config/skillsSources.ts",
      "lines": [
        21
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "integrations/mcp/enterpriseServer.ts",
      "lines": [
        303,
        310,
        350,
        676
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "integrations/sdd/policy.ts",
      "lines": [
        36,
        46
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "integrations/sdd/types.ts",
      "lines": [
        19
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "scripts/consumer-ci-auth-check-contract.ts",
      "lines": [
        12
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "scripts/consumer-support-bundle-contract.ts",
      "lines": [
        49
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "scripts/framework-menu-evidence-summary-lib.ts",
      "lines": [
        112
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.record_unknown_requires_type",
      "file": "scripts/framework-menu-legacy-audit-lib.ts",
      "lines": [
        245,
        513,
        516
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "core/facts/detectors/typescript/index.ts",
      "lines": [
        150,
        173,
        180
      ],
      "firstSeen": "2026-02-24T08:19:56.080Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/config/heuristics.ts",
      "lines": [
        9
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/config/skillsCustomRules.ts",
      "lines": [
        175
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/evidence/buildEvidence.ts",
      "lines": [
        90,
        98
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/evidence/repoState.ts",
      "lines": [
        23,
        55
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/lifecycle/cli.ts",
      "lines": [
        90,
        98,
        121,
        126,
        127,
        330,
        355
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/lifecycle/gitService.ts",
      "lines": [
        11,
        57
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/lifecycle/remove.ts",
      "lines": [
        50
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/lifecycle/state.ts",
      "lines": [
        12,
        22
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/mcp/enterpriseServer.ts",
      "lines": [
        166
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/mcp/evidencePayloadCollectionsPaging.ts",
      "lines": [
        2,
        4,
        14,
        23,
        25
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/mcp/evidencePayloadConfig.ts",
      "lines": [
        36,
        50,
        73
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/notifications/emitAuditSummaryNotification.ts",
      "lines": [
        29
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/platform/detectPlatforms.ts",
      "lines": [
        14
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/sdd/openSpecCli.ts",
      "lines": [
        43
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "integrations/sdd/sessionStore.ts",
      "lines": [
        27
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/adapter-real-session-fs-lib.ts",
      "lines": [
        7,
        21
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/adapter-real-session-markdown-snippets-lib.ts",
      "lines": [
        10
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/adapter-real-session-status-parser-lib.ts",
      "lines": [
        6
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/adapter-session-status-audit-latest-lib.ts",
      "lines": [
        8
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/adapter-session-status-hook-log-filter-lib.ts",
      "lines": [
        3
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/build-phase5-execution-closure-status-runner-lib.ts",
      "lines": [
        15
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/build-phase5-external-handoff-inputs-lib.ts",
      "lines": [
        52,
        56
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/consumer-startup-failure-support-bundle-lib.ts",
      "lines": [
        55
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/consumer-startup-unblock-contract.ts",
      "lines": [
        36
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/consumer-support-bundle-gh-diagnostics-collector-lib.ts",
      "lines": [
        15
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/consumer-support-bundle-markdown-context-lib.ts",
      "lines": [
        12,
        14
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/consumer-support-ticket-parser-lib.ts",
      "lines": [
        19
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/framework-menu-prompts-phase5-closure-live-lib.ts",
      "lines": [
        24,
        25
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/framework-menu-runner-path-lib.ts",
      "lines": [
        4
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/gitflow-cli-lib.ts",
      "lines": [
        30,
        37,
        66
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/phase5-blockers-parser-adapter-lib.ts",
      "lines": [
        14
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.undefined_in_base_type",
      "file": "scripts/phase5-execution-closure-status-parser-lib.ts",
      "lines": [
        1
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/browser/index.ts",
      "lines": [
        63,
        67,
        71,
        75,
        79,
        83
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/fs/callbacks.ts",
      "lines": [
        4,
        35,
        36
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/fs/promises.ts",
      "lines": [
        4
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/fs/syncPart1DirTimes.ts",
      "lines": [
        3,
        26,
        49,
        72
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/fs/syncPart1FileOps.ts",
      "lines": [
        3,
        26,
        49,
        72
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/fs/syncPart1Metadata.ts",
      "lines": [
        3,
        26,
        49,
        72,
        95,
        118
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/fs/syncPart2Core.ts",
      "lines": [
        3,
        26,
        49
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/fs/syncPart2Io.ts",
      "lines": [
        3,
        26,
        49
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/fs/syncPart2Permissions.ts",
      "lines": [
        3,
        26,
        49,
        72
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/fs/syncPart2Times.ts",
      "lines": [
        3,
        26,
        49,
        72
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/fs/syncPart3DescriptorIo.ts",
      "lines": [
        3,
        26,
        49,
        72
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/fs/syncPart3Links.ts",
      "lines": [
        3,
        26,
        49
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/fs/syncPart3PathOps.ts",
      "lines": [
        3,
        26,
        49,
        72,
        95
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/process/core.ts",
      "lines": [
        42,
        109,
        113,
        117,
        121,
        125,
        129,
        133
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/process/shell.ts",
      "lines": [
        5,
        22,
        39,
        53,
        70,
        87,
        104,
        162
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/process/spawn.ts",
      "lines": [
        45,
        49,
        53,
        57,
        61,
        65,
        69,
        73
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/security/securityCredentials.ts",
      "lines": [
        5,
        25,
        47,
        69,
        184,
        188,
        192,
        196
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/security/securityCrypto.ts",
      "lines": [
        84,
        88,
        92,
        96,
        100,
        104
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/security/securityJwt.ts",
      "lines": [
        3,
        18,
        31,
        130,
        134,
        138,
        142,
        146
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/security/securityTls.ts",
      "lines": [
        3,
        25,
        86,
        90,
        94,
        98
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/typescript/index.ts",
      "lines": [
        47,
        71,
        78,
        113,
        118,
        150,
        173,
        180
      ],
      "firstSeen": "2026-02-24T08:19:56.080Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/utils/astHelpers.ts",
      "lines": [
        1,
        6,
        49,
        56
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/detectors/vm/index.ts",
      "lines": [
        3
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/facts/extractHeuristicFacts.ts",
      "lines": [
        209,
        210,
        219,
        223,
        228,
        243,
        277,
        294
      ],
      "firstSeen": "2026-02-24T08:19:56.080Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "core/utils/stableStringify.ts",
      "lines": [
        1,
        5
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/config/compileSkillsLock.ts",
      "lines": [
        39,
        43,
        201
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/config/loadProjectRules.ts",
      "lines": [
        6,
        10,
        33
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/config/skillsCustomRules.ts",
      "lines": [
        59,
        63,
        67,
        82,
        122,
        210,
        212
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/config/skillsEffectiveLock.ts",
      "lines": [
        11
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/config/skillsLock.ts",
      "lines": [
        61,
        65,
        69,
        77,
        81,
        85,
        89,
        93
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/config/skillsPolicy.ts",
      "lines": [
        27,
        31,
        35,
        39,
        47,
        51,
        71,
        86
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/config/skillsSources.ts",
      "lines": [
        21,
        25,
        29,
        33,
        57,
        69,
        83
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/evidence/buildEvidence.ts",
      "lines": [
        90,
        98
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/evidence/humanIntent.ts",
      "lines": [
        3,
        11,
        28,
        40
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/evidence/readEvidence.ts",
      "lines": [
        17,
        22,
        31
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/evidence/repoState.ts",
      "lines": [
        38,
        89,
        104,
        105
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/gate/stagePolicies.ts",
      "lines": [
        185,
        229,
        230
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/git/runCliCommand.ts",
      "lines": [
        6
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/lifecycle/adapter.ts",
      "lines": [
        17,
        29,
        46
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/mcp/enterpriseServer.ts",
      "lines": [
        140,
        147,
        160,
        254,
        291,
        573,
        662
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/mcp/evidenceContextServer.ts",
      "lines": [
        46
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/mcp/evidencePayloadCollections.ts",
      "lines": [
        31
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/mcp/evidencePayloadStatus.ts",
      "lines": [
        25
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "integrations/sdd/openSpecCli.ts",
      "lines": [
        108,
        109,
        110,
        111,
        113,
        114
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/build-consumer-startup-triage-runner-lib.ts",
      "lines": [
        20,
        28
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/check-package-manifest.ts",
      "lines": [
        39,
        146
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/collect-consumer-ci-artifacts-contract.ts",
      "lines": [
        29
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/collect-consumer-ci-artifacts-gh-run-fetch-lib.ts",
      "lines": [
        30
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/consumer-support-bundle-contract.ts",
      "lines": [
        26
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/consumer-support-bundle-gh-command-lib.ts",
      "lines": [
        16
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/consumer-workflow-lint-command-lib.ts",
      "lines": [
        8
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/framework-menu-evidence-summary-lib.ts",
      "lines": [
        8,
        9,
        13,
        14,
        15,
        19,
        48,
        52
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/framework-menu-legacy-audit-lib.ts",
      "lines": [
        9,
        13,
        14,
        15,
        16,
        17,
        114,
        118
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/framework-menu-matrix-canary-lib.ts",
      "lines": [
        125,
        126,
        127
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/framework-menu-runner-process-lib.ts",
      "lines": [
        20
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/framework-menu-system-notifications-lib.ts",
      "lines": [
        99,
        100
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/gitflow-cli-lib.ts",
      "lines": [
        59
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/legacy-parity-report-lib.ts",
      "lines": [
        5,
        6,
        7,
        8,
        74,
        78,
        88,
        125
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/phase5-execution-closure-runner-exec-error-lib.ts",
      "lines": [
        5
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "common.types.unknown_without_guard",
      "file": "scripts/run-c020-benchmark.ts",
      "lines": [
        12,
        13,
        14,
        15,
        17,
        19,
        20,
        21
      ],
      "firstSeen": "2026-02-24T09:17:15.529Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "heuristics.ts.child-process-exec-file-sync.ast",
      "file": "scripts/framework-menu-matrix-canary-lib.ts",
      "lines": [
        153,
        161,
        172
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "heuristics.ts.child-process-exec-file-untrusted-args.ast",
      "file": "scripts/framework-menu-matrix-canary-lib.ts",
      "lines": [
        153,
        161,
        172
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "heuristics.ts.child-process-exec.ast",
      "file": "core/facts/extractHeuristicFacts.ts",
      "lines": [
        308,
        313,
        318
      ],
      "firstSeen": "2026-02-24T08:19:56.080Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "heuristics.ts.child-process-spawn-sync.ast",
      "file": "scripts/check-package-manifest.ts",
      "lines": [
        61
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "heuristics.ts.child-process-spawn-sync.ast",
      "file": "scripts/run-c020-benchmark.ts",
      "lines": [
        62,
        106
      ],
      "firstSeen": "2026-02-24T09:17:15.529Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "heuristics.ts.dynamic-shell-invocation.ast",
      "file": "core/facts/extractHeuristicFacts.ts",
      "lines": [
        308,
        313,
        318
      ],
      "firstSeen": "2026-02-24T08:19:56.080Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "heuristics.ts.process-exit.ast",
      "file": "scripts/import-custom-skills.ts",
      "lines": [
        45
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "skills.backend.no-empty-catch",
      "file": "integrations/lifecycle/gitService.ts",
      "lines": [
        54
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "skills.backend.no-empty-catch",
      "file": "integrations/lifecycle/update.ts",
      "lines": [
        84
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "skills.backend.no-empty-catch",
      "file": "scripts/adapter-session-status-writes-log-filter-lib.ts",
      "lines": [
        21
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "skills.backend.no-empty-catch",
      "file": "scripts/framework-menu-matrix-canary-lib.ts",
      "lines": [
        167,
        177,
        250,
        255
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "skills.frontend.no-empty-catch",
      "file": "integrations/lifecycle/gitService.ts",
      "lines": [
        54
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "skills.frontend.no-empty-catch",
      "file": "integrations/lifecycle/update.ts",
      "lines": [
        84
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "skills.frontend.no-empty-catch",
      "file": "scripts/adapter-session-status-writes-log-filter-lib.ts",
      "lines": [
        21
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "skills.frontend.no-empty-catch",
      "file": "scripts/framework-menu-matrix-canary-lib.ts",
      "lines": [
        167,
        177,
        250,
        255
      ],
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "workflow.bdd.insufficient_features",
      "file": "PROJECT_ROOT",
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    },
    {
      "ruleId": "workflow.bdd.missing_feature_files",
      "file": "PROJECT_ROOT",
      "firstSeen": "2026-02-24T08:20:12.313Z",
      "lastSeen": "2026-02-24T09:17:15.529Z"
    }
  ],
  "platforms": {
    "backend": {
      "detected": true,
      "confidence": "MEDIUM"
    },
    "frontend": {
      "detected": true,
      "confidence": "MEDIUM"
    }
  },
  "rulesets": [
    {
      "platform": "backend",
      "bundle": "backendRuleSet@1.0.0",
      "hash": "112b9c426486fa3589422114b029858338664fdfd10917a082168db77662e5b5"
    },
    {
      "platform": "frontend",
      "bundle": "frontendRuleSet@1.0.0",
      "hash": "b76bab51e9be37c11b135745281f5613ee19ca7c72735fd6de37e23bbf8b49ea"
    },
    {
      "platform": "heuristics",
      "bundle": "astHeuristicsRuleSet@0.5.0",
      "hash": "9d1c1d5d111c3ee2e2fdb4878ad3b92e13b120beb671ebc50b01822a2e88a9b1"
    },
    {
      "platform": "policy",
      "bundle": "gate-policy.default.PRE_COMMIT",
      "hash": "d631d917a245c3a1db60dddcefded0dcc6e043e89c3eec29a878c3a216eea41a"
    },
    {
      "platform": "skills",
      "bundle": "android-guidelines@1.0.0",
      "hash": "155510eab7b87a700aa84ac483cb0530179f40f34a2ede975a7a107316a9a072"
    },
    {
      "platform": "skills",
      "bundle": "backend-guidelines@1.0.0",
      "hash": "5cdd5f87609e780373a6a9638c208dbe20733a4565c17074c00e6c2fbd7d4dae"
    },
    {
      "platform": "skills",
      "bundle": "frontend-guidelines@1.0.0",
      "hash": "30b744fcecaab747db61279c85868549b5bd328214ca0ee9f8ca90a56299054b"
    },
    {
      "platform": "skills",
      "bundle": "ios-concurrency-guidelines@1.0.0",
      "hash": "97322ee5fcdac808f007a6a7be7029be8a655c434f9194e0122a1b7e331bdf43"
    },
    {
      "platform": "skills",
      "bundle": "ios-guidelines@1.0.0",
      "hash": "2aaca10defb11b52d717befdc9b088788456aae40494e3403c1acb2a47e2fad6"
    },
    {
      "platform": "skills",
      "bundle": "ios-swiftui-expert-guidelines@1.0.0",
      "hash": "1a095c72878061231bb0451627ea99df6e2e5eba8b16d2d612985b0dd61ba7f9"
    }
  ],
  "human_intent": null,
  "ai_gate": {
    "status": "BLOCKED",
    "violations": [
      {
        "ruleId": "common.error.empty_catch",
        "level": "CRITICAL",
        "code": "COMMON_ERROR_EMPTY_CATCH",
        "message": "Empty catch block detected - always handle errors (log, rethrow, wrap, or return Result).",
        "file": "integrations/lifecycle/gitService.ts",
        "lines": [
          54
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.error.empty_catch",
        "level": "CRITICAL",
        "code": "COMMON_ERROR_EMPTY_CATCH",
        "message": "Empty catch block detected - always handle errors (log, rethrow, wrap, or return Result).",
        "file": "integrations/lifecycle/update.ts",
        "lines": [
          84
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.error.empty_catch",
        "level": "CRITICAL",
        "code": "COMMON_ERROR_EMPTY_CATCH",
        "message": "Empty catch block detected - always handle errors (log, rethrow, wrap, or return Result).",
        "file": "scripts/adapter-session-status-writes-log-filter-lib.ts",
        "lines": [
          21
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.error.empty_catch",
        "level": "CRITICAL",
        "code": "COMMON_ERROR_EMPTY_CATCH",
        "message": "Empty catch block detected - always handle errors (log, rethrow, wrap, or return Result).",
        "file": "scripts/framework-menu-matrix-canary-lib.ts",
        "lines": [
          167,
          177,
          250,
          255
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.network.missing_error_handling",
        "level": "ERROR",
        "code": "COMMON_NETWORK_MISSING_ERROR_HANDLING",
        "message": "Network calls without error handling - wrap requests in try/catch or add .catch() with typed recovery.",
        "file": "integrations/mcp/__tests__/enterpriseServer.test.ts",
        "lines": [
          55,
          75,
          87,
          123,
          143,
          169,
          190,
          217
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.network.missing_error_handling",
        "level": "ERROR",
        "code": "COMMON_NETWORK_MISSING_ERROR_HANDLING",
        "message": "Network calls without error handling - wrap requests in try/catch or add .catch() with typed recovery.",
        "file": "integrations/mcp/__tests__/evidenceContextServer-collections.test.ts",
        "lines": [
          17,
          46,
          71,
          93,
          125,
          151,
          178,
          203
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.network.missing_error_handling",
        "level": "ERROR",
        "code": "COMMON_NETWORK_MISSING_ERROR_HANDLING",
        "message": "Network calls without error handling - wrap requests in try/catch or add .catch() with typed recovery.",
        "file": "integrations/mcp/__tests__/evidenceContextServer-findings.test.ts",
        "lines": [
          36,
          82,
          93,
          112,
          123,
          155,
          189,
          206
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.network.missing_error_handling",
        "level": "ERROR",
        "code": "COMMON_NETWORK_MISSING_ERROR_HANDLING",
        "message": "Network calls without error handling - wrap requests in try/catch or add .catch() with typed recovery.",
        "file": "integrations/mcp/__tests__/evidenceContextServer-health.test.ts",
        "lines": [
          9,
          20,
          29,
          87
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.network.missing_error_handling",
        "level": "ERROR",
        "code": "COMMON_NETWORK_MISSING_ERROR_HANDLING",
        "message": "Network calls without error handling - wrap requests in try/catch or add .catch() with typed recovery.",
        "file": "integrations/mcp/__tests__/evidenceContextServer-payload.test.ts",
        "lines": [
          15,
          64
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.network.missing_error_handling",
        "level": "ERROR",
        "code": "COMMON_NETWORK_MISSING_ERROR_HANDLING",
        "message": "Network calls without error handling - wrap requests in try/catch or add .catch() with typed recovery.",
        "file": "integrations/mcp/__tests__/evidenceContextServer.test.ts",
        "lines": [
          52,
          65,
          82
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/browser/index.ts",
        "lines": [
          3,
          21,
          43
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/process/core.ts",
        "lines": [
          3,
          25,
          51,
          75,
          92
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/process/shell.ts",
        "lines": [
          111,
          127,
          141
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/process/spawn.ts",
        "lines": [
          3,
          25,
          29,
          33,
          37,
          41
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/security/securityCredentials.ts",
        "lines": [
          101,
          115,
          138,
          161
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/security/securityCrypto.ts",
        "lines": [
          3,
          40,
          62
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/security/securityJwt.ts",
        "lines": [
          44,
          66,
          97
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/security/securityTls.ts",
        "lines": [
          66,
          79
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/typescript/index.ts",
        "lines": [
          24,
          228,
          627,
          659,
          674,
          735,
          750
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/detectors/utils/astHelpers.ts",
        "lines": [
          1,
          7,
          35,
          50
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/facts/extractHeuristicFacts.ts",
        "lines": [
          328,
          538,
          539,
          540,
          541,
          542,
          543,
          544
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "core/utils/stableStringify.ts",
        "lines": [
          1
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/config/compileSkillsLock.ts",
        "lines": [
          39
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/config/loadProjectRules.ts",
        "lines": [
          6
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/config/skillsCustomRules.ts",
        "lines": [
          59
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/config/skillsEffectiveLock.ts",
        "lines": [
          16
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/config/skillsLock.ts",
        "lines": [
          61,
          211,
          227,
          238
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/config/skillsPolicy.ts",
        "lines": [
          27,
          128,
          135
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/config/skillsSources.ts",
        "lines": [
          21
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/mcp/enterpriseServer.ts",
        "lines": [
          303,
          310,
          350,
          676
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/sdd/policy.ts",
        "lines": [
          36,
          46
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "integrations/sdd/types.ts",
        "lines": [
          19
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "scripts/consumer-ci-auth-check-contract.ts",
        "lines": [
          12
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "scripts/consumer-support-bundle-contract.ts",
        "lines": [
          49
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "scripts/framework-menu-evidence-summary-lib.ts",
        "lines": [
          112
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.record_unknown_requires_type",
        "level": "ERROR",
        "code": "COMMON_TYPES_RECORD_UNKNOWN_REQUIRES_TYPE",
        "message": "Record<string, unknown> detected - define value type union (string | number | boolean | null | Date).",
        "file": "scripts/framework-menu-legacy-audit-lib.ts",
        "lines": [
          245,
          513,
          516
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "core/facts/detectors/typescript/index.ts",
        "lines": [
          150,
          173,
          180
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/config/heuristics.ts",
        "lines": [
          9
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/config/skillsCustomRules.ts",
        "lines": [
          175
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/evidence/buildEvidence.ts",
        "lines": [
          90,
          98
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/evidence/repoState.ts",
        "lines": [
          23,
          55
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/lifecycle/cli.ts",
        "lines": [
          90,
          98,
          121,
          126,
          127,
          330,
          355
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/lifecycle/gitService.ts",
        "lines": [
          11,
          57
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/lifecycle/remove.ts",
        "lines": [
          50
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/lifecycle/state.ts",
        "lines": [
          12,
          22
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/mcp/enterpriseServer.ts",
        "lines": [
          166
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/mcp/evidencePayloadCollectionsPaging.ts",
        "lines": [
          2,
          4,
          14,
          23,
          25
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/mcp/evidencePayloadConfig.ts",
        "lines": [
          36,
          50,
          73
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/notifications/emitAuditSummaryNotification.ts",
        "lines": [
          29
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/platform/detectPlatforms.ts",
        "lines": [
          14
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/sdd/openSpecCli.ts",
        "lines": [
          43
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "integrations/sdd/sessionStore.ts",
        "lines": [
          27
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/adapter-real-session-fs-lib.ts",
        "lines": [
          7,
          21
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/adapter-real-session-markdown-snippets-lib.ts",
        "lines": [
          10
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/adapter-real-session-status-parser-lib.ts",
        "lines": [
          6
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/adapter-session-status-audit-latest-lib.ts",
        "lines": [
          8
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/adapter-session-status-hook-log-filter-lib.ts",
        "lines": [
          3
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/build-phase5-execution-closure-status-runner-lib.ts",
        "lines": [
          15
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/build-phase5-external-handoff-inputs-lib.ts",
        "lines": [
          52,
          56
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/consumer-startup-failure-support-bundle-lib.ts",
        "lines": [
          55
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/consumer-startup-unblock-contract.ts",
        "lines": [
          36
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/consumer-support-bundle-gh-diagnostics-collector-lib.ts",
        "lines": [
          15
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/consumer-support-bundle-markdown-context-lib.ts",
        "lines": [
          12,
          14
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/consumer-support-ticket-parser-lib.ts",
        "lines": [
          19
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/framework-menu-prompts-phase5-closure-live-lib.ts",
        "lines": [
          24,
          25
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/framework-menu-runner-path-lib.ts",
        "lines": [
          4
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/gitflow-cli-lib.ts",
        "lines": [
          30,
          37,
          66
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/phase5-blockers-parser-adapter-lib.ts",
        "lines": [
          14
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.undefined_in_base_type",
        "level": "CRITICAL",
        "code": "COMMON_TYPES_UNDEFINED_IN_BASE_TYPE",
        "message": "undefined in base type - normalize at boundary with mapper/type guard, base type must be non-nullable.",
        "file": "scripts/phase5-execution-closure-status-parser-lib.ts",
        "lines": [
          1
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/browser/index.ts",
        "lines": [
          63,
          67,
          71,
          75,
          79,
          83
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/callbacks.ts",
        "lines": [
          4,
          35,
          36
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/promises.ts",
        "lines": [
          4
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart1DirTimes.ts",
        "lines": [
          3,
          26,
          49,
          72
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart1FileOps.ts",
        "lines": [
          3,
          26,
          49,
          72
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart1Metadata.ts",
        "lines": [
          3,
          26,
          49,
          72,
          95,
          118
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart2Core.ts",
        "lines": [
          3,
          26,
          49
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart2Io.ts",
        "lines": [
          3,
          26,
          49
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart2Permissions.ts",
        "lines": [
          3,
          26,
          49,
          72
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart2Times.ts",
        "lines": [
          3,
          26,
          49,
          72
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart3DescriptorIo.ts",
        "lines": [
          3,
          26,
          49,
          72
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart3Links.ts",
        "lines": [
          3,
          26,
          49
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/fs/syncPart3PathOps.ts",
        "lines": [
          3,
          26,
          49,
          72,
          95
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/process/core.ts",
        "lines": [
          42,
          109,
          113,
          117,
          121,
          125,
          129,
          133
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/process/shell.ts",
        "lines": [
          5,
          22,
          39,
          53,
          70,
          87,
          104,
          162
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/process/spawn.ts",
        "lines": [
          45,
          49,
          53,
          57,
          61,
          65,
          69,
          73
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/security/securityCredentials.ts",
        "lines": [
          5,
          25,
          47,
          69,
          184,
          188,
          192,
          196
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/security/securityCrypto.ts",
        "lines": [
          84,
          88,
          92,
          96,
          100,
          104
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/security/securityJwt.ts",
        "lines": [
          3,
          18,
          31,
          130,
          134,
          138,
          142,
          146
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/security/securityTls.ts",
        "lines": [
          3,
          25,
          86,
          90,
          94,
          98
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/typescript/index.ts",
        "lines": [
          47,
          71,
          78,
          113,
          118,
          150,
          173,
          180
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/utils/astHelpers.ts",
        "lines": [
          1,
          6,
          49,
          56
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/detectors/vm/index.ts",
        "lines": [
          3
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/facts/extractHeuristicFacts.ts",
        "lines": [
          209,
          210,
          219,
          223,
          228,
          243,
          277,
          294
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "core/utils/stableStringify.ts",
        "lines": [
          1,
          5
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/config/compileSkillsLock.ts",
        "lines": [
          39,
          43,
          201
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/config/loadProjectRules.ts",
        "lines": [
          6,
          10,
          33
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/config/skillsCustomRules.ts",
        "lines": [
          59,
          63,
          67,
          82,
          122,
          210,
          212
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/config/skillsEffectiveLock.ts",
        "lines": [
          11
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/config/skillsLock.ts",
        "lines": [
          61,
          65,
          69,
          77,
          81,
          85,
          89,
          93
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/config/skillsPolicy.ts",
        "lines": [
          27,
          31,
          35,
          39,
          47,
          51,
          71,
          86
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/config/skillsSources.ts",
        "lines": [
          21,
          25,
          29,
          33,
          57,
          69,
          83
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/evidence/buildEvidence.ts",
        "lines": [
          90,
          98
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/evidence/humanIntent.ts",
        "lines": [
          3,
          11,
          28,
          40
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/evidence/readEvidence.ts",
        "lines": [
          17,
          22,
          31
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/evidence/repoState.ts",
        "lines": [
          38,
          89,
          104,
          105
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/gate/stagePolicies.ts",
        "lines": [
          185,
          229,
          230
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/git/runCliCommand.ts",
        "lines": [
          6
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/lifecycle/adapter.ts",
        "lines": [
          17,
          29,
          46
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/mcp/enterpriseServer.ts",
        "lines": [
          140,
          147,
          160,
          254,
          291,
          573,
          662
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/mcp/evidenceContextServer.ts",
        "lines": [
          46
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/mcp/evidencePayloadCollections.ts",
        "lines": [
          31
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/mcp/evidencePayloadStatus.ts",
        "lines": [
          25
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "integrations/sdd/openSpecCli.ts",
        "lines": [
          108,
          109,
          110,
          111,
          113,
          114
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/build-consumer-startup-triage-runner-lib.ts",
        "lines": [
          20,
          28
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/check-package-manifest.ts",
        "lines": [
          39,
          146
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/collect-consumer-ci-artifacts-contract.ts",
        "lines": [
          29
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/collect-consumer-ci-artifacts-gh-run-fetch-lib.ts",
        "lines": [
          30
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/consumer-support-bundle-contract.ts",
        "lines": [
          26
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/consumer-support-bundle-gh-command-lib.ts",
        "lines": [
          16
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/consumer-workflow-lint-command-lib.ts",
        "lines": [
          8
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/framework-menu-evidence-summary-lib.ts",
        "lines": [
          8,
          9,
          13,
          14,
          15,
          19,
          48,
          52
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/framework-menu-legacy-audit-lib.ts",
        "lines": [
          9,
          13,
          14,
          15,
          16,
          17,
          114,
          118
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/framework-menu-matrix-canary-lib.ts",
        "lines": [
          125,
          126,
          127
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/framework-menu-runner-process-lib.ts",
        "lines": [
          20
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/framework-menu-system-notifications-lib.ts",
        "lines": [
          99,
          100
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/gitflow-cli-lib.ts",
        "lines": [
          59
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/legacy-parity-report-lib.ts",
        "lines": [
          5,
          6,
          7,
          8,
          74,
          78,
          88,
          125
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/phase5-execution-closure-runner-exec-error-lib.ts",
        "lines": [
          5
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "common.types.unknown_without_guard",
        "level": "WARN",
        "code": "COMMON_TYPES_UNKNOWN_WITHOUT_GUARD",
        "message": "Type assertion to unknown without type guard - add proper type narrowing (typeof/instanceof/custom guard).",
        "file": "scripts/run-c020-benchmark.ts",
        "lines": [
          12,
          13,
          14,
          15,
          17,
          19,
          20,
          21
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "heuristics.ts.child-process-exec-file-sync.ast",
        "level": "ERROR",
        "code": "HEURISTICS_CHILD_PROCESS_EXEC_FILE_SYNC_AST",
        "message": "AST heuristic detected execFileSync usage.",
        "file": "scripts/framework-menu-matrix-canary-lib.ts",
        "lines": [
          153,
          161,
          172
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "heuristics.ts.child-process-exec-file-untrusted-args.ast",
        "level": "ERROR",
        "code": "HEURISTICS_CHILD_PROCESS_EXEC_FILE_UNTRUSTED_ARGS_AST",
        "message": "AST heuristic detected execFile/execFileSync with non-literal args array.",
        "file": "scripts/framework-menu-matrix-canary-lib.ts",
        "lines": [
          153,
          161,
          172
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "heuristics.ts.child-process-exec.ast",
        "level": "ERROR",
        "code": "HEURISTICS_CHILD_PROCESS_EXEC_AST",
        "message": "AST heuristic detected exec usage.",
        "file": "core/facts/extractHeuristicFacts.ts",
        "lines": [
          308,
          313,
          318
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "heuristics.ts.child-process-spawn-sync.ast",
        "level": "ERROR",
        "code": "HEURISTICS_CHILD_PROCESS_SPAWN_SYNC_AST",
        "message": "AST heuristic detected spawnSync usage.",
        "file": "scripts/check-package-manifest.ts",
        "lines": [
          61
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "heuristics.ts.child-process-spawn-sync.ast",
        "level": "ERROR",
        "code": "HEURISTICS_CHILD_PROCESS_SPAWN_SYNC_AST",
        "message": "AST heuristic detected spawnSync usage.",
        "file": "scripts/run-c020-benchmark.ts",
        "lines": [
          62,
          106
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "heuristics.ts.dynamic-shell-invocation.ast",
        "level": "ERROR",
        "code": "HEURISTICS_DYNAMIC_SHELL_INVOCATION_AST",
        "message": "AST heuristic detected dynamic shell command invocation.",
        "file": "core/facts/extractHeuristicFacts.ts",
        "lines": [
          308,
          313,
          318
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "heuristics.ts.process-exit.ast",
        "level": "ERROR",
        "code": "HEURISTICS_PROCESS_EXIT_AST",
        "message": "AST heuristic detected process.exit usage.",
        "file": "scripts/import-custom-skills.ts",
        "lines": [
          45
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.backend.no-empty-catch",
        "level": "CRITICAL",
        "code": "SKILLS_SKILLS_BACKEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in backend runtime code.",
        "file": "integrations/lifecycle/gitService.ts",
        "lines": [
          54
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.backend.no-empty-catch",
        "level": "CRITICAL",
        "code": "SKILLS_SKILLS_BACKEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in backend runtime code.",
        "file": "integrations/lifecycle/update.ts",
        "lines": [
          84
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.backend.no-empty-catch",
        "level": "CRITICAL",
        "code": "SKILLS_SKILLS_BACKEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in backend runtime code.",
        "file": "scripts/adapter-session-status-writes-log-filter-lib.ts",
        "lines": [
          21
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.backend.no-empty-catch",
        "level": "CRITICAL",
        "code": "SKILLS_SKILLS_BACKEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in backend runtime code.",
        "file": "scripts/framework-menu-matrix-canary-lib.ts",
        "lines": [
          167,
          177,
          250,
          255
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.frontend.no-empty-catch",
        "level": "ERROR",
        "code": "SKILLS_SKILLS_FRONTEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in frontend runtime code.",
        "file": "integrations/lifecycle/gitService.ts",
        "lines": [
          54
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.frontend.no-empty-catch",
        "level": "ERROR",
        "code": "SKILLS_SKILLS_FRONTEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in frontend runtime code.",
        "file": "integrations/lifecycle/update.ts",
        "lines": [
          84
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.frontend.no-empty-catch",
        "level": "ERROR",
        "code": "SKILLS_SKILLS_FRONTEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in frontend runtime code.",
        "file": "scripts/adapter-session-status-writes-log-filter-lib.ts",
        "lines": [
          21
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "skills.frontend.no-empty-catch",
        "level": "ERROR",
        "code": "SKILLS_SKILLS_FRONTEND_NO_EMPTY_CATCH",
        "message": "Disallow empty catch blocks in frontend runtime code.",
        "file": "scripts/framework-menu-matrix-canary-lib.ts",
        "lines": [
          167,
          177,
          250,
          255
        ],
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "workflow.bdd.insufficient_features",
        "level": "ERROR",
        "code": "WORKFLOW_BDD_INSUFFICIENT_FEATURES",
        "message": "Insufficient feature files for implementation volume. Increase feature coverage before adding more code.",
        "file": "PROJECT_ROOT",
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      },
      {
        "ruleId": "workflow.bdd.missing_feature_files",
        "level": "CRITICAL",
        "code": "WORKFLOW_BDD_MISSING_FEATURE_FILES",
        "message": "Project has implementation files but no .feature files. Enforce BDD -> TDD -> Implementation flow.",
        "file": "PROJECT_ROOT",
        "matchedBy": "Heuristic",
        "source": "heuristics:ast"
      }
    ],
    "human_intent": null
  },
  "severity_metrics": {
    "gate_status": "BLOCKED",
    "total_violations": 146,
    "by_severity": {
      "CRITICAL": 42,
      "ERROR": 44,
      "WARN": 60,
      "INFO": 0
    },
    "by_enterprise_severity": {
      "CRITICAL": 42,
      "HIGH": 44,
      "MEDIUM": 60,
      "LOW": 0
    }
  },
  "sdd_metrics": {
    "enforced": true,
    "stage": "PRE_COMMIT",
    "decision": {
      "allowed": true,
      "code": "ALLOWED",
      "message": "SDD bypass is active via PUMUKI_SDD_BYPASS=1. Enforcement skipped by emergency override."
    }
  },
  "repo_state": {
    "repo_root": "/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks",
    "git": {
      "available": true,
      "branch": "develop",
      "upstream": "origin/develop",
      "ahead": 0,
      "behind": 0,
      "dirty": true,
      "staged": 1,
      "unstaged": 2
    },
    "lifecycle": {
      "installed": false,
      "package_version": "6.3.17",
      "lifecycle_version": null,
      "hooks": {
        "pre_commit": "missing",
        "pre_push": "missing"
      }
    }
  }
}
