pumuki 6.3.129 → 6.3.130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/AGENTS.md +16 -1
  2. package/CHANGELOG.md +9 -0
  3. package/README.md +14 -10
  4. package/VERSION +1 -1
  5. package/core/facts/detectors/text/android.test.ts +2583 -24
  6. package/core/facts/detectors/text/android.ts +4633 -34
  7. package/core/facts/detectors/typescript/index.test.ts +3639 -73
  8. package/core/facts/detectors/typescript/index.ts +4819 -270
  9. package/core/facts/extractHeuristicFacts.ts +271 -6
  10. package/core/rules/presets/heuristics/android.test.ts +314 -1
  11. package/core/rules/presets/heuristics/android.ts +1220 -50
  12. package/core/rules/presets/heuristics/typescript.test.ts +158 -2
  13. package/core/rules/presets/heuristics/typescript.ts +508 -0
  14. package/docs/README.md +3 -3
  15. package/docs/operations/RELEASE_NOTES.md +7 -1
  16. package/docs/operations/framework-menu-consumer-walkthrough.md +18 -15
  17. package/docs/product/API_REFERENCE.md +1 -1
  18. package/docs/product/USAGE.md +1 -1
  19. package/docs/validation/README.md +3 -1
  20. package/integrations/config/skillsCompilerTemplates.test.ts +131 -0
  21. package/integrations/config/skillsCompilerTemplates.ts +953 -7
  22. package/integrations/config/skillsDetectorRegistry.ts +451 -8
  23. package/integrations/config/skillsMarkdownRules.ts +884 -2
  24. package/integrations/evidence/buildEvidence.ts +29 -1
  25. package/integrations/evidence/platformSummary.test.ts +73 -9
  26. package/integrations/evidence/platformSummary.ts +165 -7
  27. package/integrations/evidence/repoState.ts +3 -0
  28. package/integrations/evidence/schema.ts +18 -0
  29. package/integrations/evidence/trackingContract.ts +17 -0
  30. package/integrations/evidence/writeEvidence.test.ts +3 -0
  31. package/integrations/evidence/writeEvidence.ts +29 -1
  32. package/integrations/gate/evaluateAiGate.ts +251 -8
  33. package/integrations/gate/governanceActionCatalog.ts +275 -0
  34. package/integrations/gate/remediationCatalog.ts +8 -0
  35. package/integrations/git/runPlatformGate.ts +9 -1
  36. package/integrations/lifecycle/adapter.ts +24 -0
  37. package/integrations/lifecycle/bootstrapManifest.ts +248 -0
  38. package/integrations/lifecycle/cliGovernanceConsole.ts +69 -0
  39. package/integrations/lifecycle/governanceNextAction.ts +171 -0
  40. package/integrations/lifecycle/governanceObservationSnapshot.ts +369 -0
  41. package/integrations/lifecycle/packageInfo.ts +118 -1
  42. package/integrations/lifecycle/state.ts +8 -1
  43. package/integrations/lifecycle/trackingState.ts +403 -0
  44. package/integrations/lifecycle/watch.ts +1 -1
  45. package/integrations/mcp/aiGateCheck.ts +194 -10
  46. package/integrations/mcp/alignedPlatformGate.ts +232 -0
  47. package/integrations/mcp/enterpriseServer.ts +19 -3
  48. package/integrations/mcp/preFlightCheck.ts +66 -3
  49. package/integrations/mcp/readMcpPrePushStdin.ts +7 -0
  50. package/package.json +1 -1
  51. package/scripts/build-ruralgo-s1-evidence-pack.ts +85 -0
  52. package/scripts/check-tracking-single-active.sh +1 -1
  53. package/scripts/framework-menu-advanced-view-lib.ts +49 -0
  54. package/scripts/framework-menu-consumer-actions-lib.ts +32 -32
  55. package/scripts/framework-menu-consumer-preflight-render.ts +10 -0
  56. package/scripts/framework-menu-consumer-preflight-run.ts +23 -0
  57. package/scripts/framework-menu-consumer-preflight-types.ts +12 -0
  58. package/scripts/framework-menu-consumer-runtime-actions.ts +11 -5
  59. package/scripts/framework-menu-consumer-runtime-audit.ts +0 -28
  60. package/scripts/framework-menu-consumer-runtime-evidence-classic.ts +118 -42
  61. package/scripts/framework-menu-consumer-runtime-lib.ts +38 -0
  62. package/scripts/framework-menu-consumer-runtime-menu.ts +55 -15
  63. package/scripts/framework-menu-consumer-runtime-types.ts +4 -0
  64. package/scripts/framework-menu-evidence-summary-read.ts +17 -1
  65. package/scripts/framework-menu-evidence-summary-types.ts +3 -0
  66. package/scripts/framework-menu-layout-data.ts +3 -23
  67. package/scripts/framework-menu-system-notifications-macos-applescript-dialog.ts +1 -1
  68. package/scripts/framework-menu-system-notifications-macos-dialog-payload.ts +14 -2
  69. package/scripts/framework-menu-system-notifications-macos-swift-source.ts +1 -1
  70. package/scripts/framework-menu-system-notifications-payloads-blocked.ts +128 -4
  71. package/scripts/framework-menu-system-notifications-payloads.ts +8 -1
  72. package/scripts/framework-menu-system-notifications-text.ts +7 -1
  73. package/scripts/framework-menu.ts +37 -2
  74. package/scripts/package-install-smoke-consumer-git-repo-lib.ts +10 -1
  75. package/scripts/package-install-smoke-consumer-npm-lib.ts +46 -9
  76. package/scripts/ruralgo-s1-evidence-pack-lib.ts +200 -0
  77. package/skills.lock.json +613 -698
@@ -163,6 +163,476 @@ export const typescriptRules: RuleSet = [
163
163
  code: 'HEURISTICS_NEW_PROMISE_ASYNC_AST',
164
164
  },
165
165
  },
166
+ {
167
+ id: 'heuristics.ts.callback-hell.ast',
168
+ description: 'Detects callback hell patterns in TypeScript/TSX production files.',
169
+ severity: 'WARN',
170
+ platform: 'generic',
171
+ locked: true,
172
+ when: {
173
+ kind: 'Heuristic',
174
+ where: {
175
+ ruleId: 'heuristics.ts.callback-hell.ast',
176
+ },
177
+ },
178
+ then: {
179
+ kind: 'Finding',
180
+ message: 'AST heuristic detected callback hell / nested promise callback usage.',
181
+ code: 'HEURISTICS_CALLBACK_HELL_AST',
182
+ },
183
+ },
184
+ {
185
+ id: 'heuristics.ts.magic-numbers.ast',
186
+ description: 'Detects magic number literals in TypeScript/TSX production files.',
187
+ severity: 'ERROR',
188
+ platform: 'generic',
189
+ locked: true,
190
+ when: {
191
+ kind: 'Heuristic',
192
+ where: {
193
+ ruleId: 'heuristics.ts.magic-numbers.ast',
194
+ },
195
+ },
196
+ then: {
197
+ kind: 'Finding',
198
+ message: 'AST heuristic detected magic number literal usage.',
199
+ code: 'HEURISTICS_MAGIC_NUMBERS_AST',
200
+ },
201
+ },
202
+ {
203
+ id: 'heuristics.ts.hardcoded-values.ast',
204
+ description: 'Detects hardcoded config values in TypeScript/TSX production files.',
205
+ severity: 'ERROR',
206
+ platform: 'generic',
207
+ locked: true,
208
+ when: {
209
+ kind: 'Heuristic',
210
+ where: {
211
+ ruleId: 'heuristics.ts.hardcoded-values.ast',
212
+ },
213
+ },
214
+ then: {
215
+ kind: 'Finding',
216
+ message: 'AST heuristic detected hardcoded config value usage.',
217
+ code: 'HEURISTICS_HARDCODED_VALUES_AST',
218
+ },
219
+ },
220
+ {
221
+ id: 'heuristics.ts.env-default-fallback.ast',
222
+ description: 'Detects environment default fallbacks in TypeScript/TSX production files.',
223
+ severity: 'ERROR',
224
+ platform: 'generic',
225
+ locked: true,
226
+ when: {
227
+ kind: 'Heuristic',
228
+ where: {
229
+ ruleId: 'heuristics.ts.env-default-fallback.ast',
230
+ },
231
+ },
232
+ then: {
233
+ kind: 'Finding',
234
+ message: 'AST heuristic detected environment default fallback usage.',
235
+ code: 'HEURISTICS_ENV_DEFAULT_FALLBACK_AST',
236
+ },
237
+ },
238
+ {
239
+ id: 'heuristics.ts.guards-useguards-jwtauthguard.ast',
240
+ description: 'Detects UseGuards(JwtAuthGuard) usage in TypeScript production files.',
241
+ severity: 'ERROR',
242
+ platform: 'generic',
243
+ locked: true,
244
+ when: {
245
+ kind: 'Heuristic',
246
+ where: {
247
+ ruleId: 'heuristics.ts.guards-useguards-jwtauthguard.ast',
248
+ },
249
+ },
250
+ then: {
251
+ kind: 'Finding',
252
+ message: 'AST heuristic detected @UseGuards(JwtAuthGuard) usage.',
253
+ code: 'HEURISTICS_GUARDS_USEGUARDS_JWTAUTHGUARD_AST',
254
+ },
255
+ },
256
+ {
257
+ id: 'heuristics.ts.interceptors-useinterceptors-logging-transform.ast',
258
+ description: 'Detects UseInterceptors logging/transform usage in TypeScript production files.',
259
+ severity: 'WARN',
260
+ platform: 'generic',
261
+ locked: true,
262
+ when: {
263
+ kind: 'Heuristic',
264
+ where: {
265
+ ruleId: 'heuristics.ts.interceptors-useinterceptors-logging-transform.ast',
266
+ },
267
+ },
268
+ then: {
269
+ kind: 'Finding',
270
+ message: 'AST heuristic detected @UseInterceptors logging/transform usage.',
271
+ code: 'HEURISTICS_INTERCEPTORS_USEINTERCEPTORS_LOGGING_TRANSFORM_AST',
272
+ },
273
+ },
274
+ {
275
+ id: 'heuristics.ts.no-sensitive-log.ast',
276
+ description: 'Detects sensitive data emitted to logs in TypeScript production files.',
277
+ severity: 'ERROR',
278
+ platform: 'generic',
279
+ locked: true,
280
+ when: {
281
+ kind: 'Heuristic',
282
+ where: {
283
+ ruleId: 'heuristics.ts.no-sensitive-log.ast',
284
+ },
285
+ },
286
+ then: {
287
+ kind: 'Finding',
288
+ message: 'AST heuristic detected sensitive data emitted to logs.',
289
+ code: 'HEURISTICS_NO_SENSITIVE_LOG_AST',
290
+ },
291
+ },
292
+ {
293
+ id: 'heuristics.ts.rate-limiting-throttler.ast',
294
+ description:
295
+ 'Detects NestJS throttler rate limiting configured for backend production files.',
296
+ severity: 'ERROR',
297
+ platform: 'generic',
298
+ locked: true,
299
+ when: {
300
+ kind: 'Heuristic',
301
+ where: {
302
+ ruleId: 'heuristics.ts.rate-limiting-throttler.ast',
303
+ },
304
+ },
305
+ then: {
306
+ kind: 'Finding',
307
+ message: 'AST heuristic detected NestJS throttler rate limiting.',
308
+ code: 'HEURISTICS_RATE_LIMITING_THROTTLER_AST',
309
+ },
310
+ },
311
+ {
312
+ id: 'heuristics.ts.winston-structured-json-logger.ast',
313
+ description: 'Detects Winston structured JSON logger usage in TypeScript production files.',
314
+ severity: 'WARN',
315
+ platform: 'generic',
316
+ locked: true,
317
+ when: {
318
+ kind: 'Heuristic',
319
+ where: {
320
+ ruleId: 'heuristics.ts.winston-structured-json-logger.ast',
321
+ },
322
+ },
323
+ then: {
324
+ kind: 'Finding',
325
+ message: 'AST heuristic detected Winston structured JSON logger usage.',
326
+ code: 'HEURISTICS_WINSTON_STRUCTURED_JSON_LOGGER_AST',
327
+ },
328
+ },
329
+ {
330
+ id: 'heuristics.ts.error-logging-full-context.ast',
331
+ description: 'Detects backend error logging without full context in TypeScript production files.',
332
+ severity: 'WARN',
333
+ platform: 'generic',
334
+ locked: true,
335
+ when: {
336
+ kind: 'Heuristic',
337
+ where: {
338
+ ruleId: 'heuristics.ts.error-logging-full-context.ast',
339
+ },
340
+ },
341
+ then: {
342
+ kind: 'Finding',
343
+ message: 'AST heuristic detected backend error logging without full context.',
344
+ code: 'HEURISTICS_ERROR_LOGGING_FULL_CONTEXT_AST',
345
+ },
346
+ },
347
+ {
348
+ id: 'heuristics.ts.correlation-ids.ast',
349
+ description: 'Detects correlation IDs propagation in backend TypeScript production files.',
350
+ severity: 'WARN',
351
+ platform: 'generic',
352
+ locked: true,
353
+ when: {
354
+ kind: 'Heuristic',
355
+ where: {
356
+ ruleId: 'heuristics.ts.correlation-ids.ast',
357
+ },
358
+ },
359
+ then: {
360
+ kind: 'Finding',
361
+ message: 'AST heuristic detected correlation IDs propagation in backend logs.',
362
+ code: 'HEURISTICS_CORRELATION_IDS_AST',
363
+ },
364
+ },
365
+ {
366
+ id: 'heuristics.ts.cors-configured.ast',
367
+ description: 'Detects backend CORS configuration with allowed origins.',
368
+ severity: 'WARN',
369
+ platform: 'generic',
370
+ locked: true,
371
+ when: {
372
+ kind: 'Heuristic',
373
+ where: {
374
+ ruleId: 'heuristics.ts.cors-configured.ast',
375
+ },
376
+ },
377
+ then: {
378
+ kind: 'Finding',
379
+ message: 'AST heuristic detected backend CORS configuration with allowed origins.',
380
+ code: 'HEURISTICS_CORS_CONFIGURED_AST',
381
+ },
382
+ },
383
+ {
384
+ id: 'heuristics.ts.validationpipe-global.ast',
385
+ description: 'Detects global ValidationPipe usage with whitelist enabled in backend TypeScript production files.',
386
+ severity: 'WARN',
387
+ platform: 'generic',
388
+ locked: true,
389
+ when: {
390
+ kind: 'Heuristic',
391
+ where: {
392
+ ruleId: 'heuristics.ts.validationpipe-global.ast',
393
+ },
394
+ },
395
+ then: {
396
+ kind: 'Finding',
397
+ message: 'AST heuristic detected global ValidationPipe configuration with whitelist enabled.',
398
+ code: 'HEURISTICS_VALIDATIONPIPE_GLOBAL_AST',
399
+ },
400
+ },
401
+ {
402
+ id: 'heuristics.ts.versionado-api-v1-api-v2.ast',
403
+ description: 'Detects API versioned NestJS controllers.',
404
+ severity: 'WARN',
405
+ platform: 'generic',
406
+ locked: true,
407
+ when: {
408
+ kind: 'Heuristic',
409
+ where: {
410
+ ruleId: 'heuristics.ts.versionado-api-v1-api-v2.ast',
411
+ },
412
+ },
413
+ then: {
414
+ kind: 'Finding',
415
+ message: 'AST heuristic detected backend API versioning.',
416
+ code: 'HEURISTICS_VERSIONADO_API_V1_API_V2_AST',
417
+ },
418
+ },
419
+ {
420
+ id: 'heuristics.ts.validation-config.ast',
421
+ description: 'Detects backend config validation in ConfigModule for .env files.',
422
+ severity: 'WARN',
423
+ platform: 'generic',
424
+ locked: true,
425
+ when: {
426
+ kind: 'Heuristic',
427
+ where: {
428
+ ruleId: 'heuristics.ts.validation-config.ast',
429
+ },
430
+ },
431
+ then: {
432
+ kind: 'Finding',
433
+ message: 'AST heuristic detected backend config validation in ConfigModule.',
434
+ code: 'HEURISTICS_VALIDATION_CONFIG_AST',
435
+ },
436
+ },
437
+ {
438
+ id: 'heuristics.ts.class-validator-decorators.ast',
439
+ description: 'Detects class-validator decorators in backend DTOs.',
440
+ severity: 'WARN',
441
+ platform: 'generic',
442
+ locked: true,
443
+ when: {
444
+ kind: 'Heuristic',
445
+ where: {
446
+ ruleId: 'heuristics.ts.class-validator-decorators.ast',
447
+ },
448
+ },
449
+ then: {
450
+ kind: 'Finding',
451
+ message: 'AST heuristic detected class-validator decorator usage.',
452
+ code: 'HEURISTICS_CLASS_VALIDATOR_DECORATORS_AST',
453
+ },
454
+ },
455
+ {
456
+ id: 'heuristics.ts.class-transformer-decorators.ast',
457
+ description: 'Detects class-transformer decorators in backend DTOs.',
458
+ severity: 'WARN',
459
+ platform: 'generic',
460
+ locked: true,
461
+ when: {
462
+ kind: 'Heuristic',
463
+ where: {
464
+ ruleId: 'heuristics.ts.class-transformer-decorators.ast',
465
+ },
466
+ },
467
+ then: {
468
+ kind: 'Finding',
469
+ message: 'AST heuristic detected class-transformer decorator usage.',
470
+ code: 'HEURISTICS_CLASS_TRANSFORMER_DECORATORS_AST',
471
+ },
472
+ },
473
+ {
474
+ id: 'heuristics.ts.input-validation-siempre-validar-con-dtos.ast',
475
+ description: 'Detects backend controller input validated through DTOs.',
476
+ severity: 'WARN',
477
+ platform: 'generic',
478
+ locked: true,
479
+ when: {
480
+ kind: 'Heuristic',
481
+ where: {
482
+ ruleId: 'heuristics.ts.input-validation-siempre-validar-con-dtos.ast',
483
+ },
484
+ },
485
+ then: {
486
+ kind: 'Finding',
487
+ message: 'AST heuristic detected backend controller input DTO validation.',
488
+ code: 'HEURISTICS_INPUT_VALIDATION_SIEMPRE_VALIDAR_CON_DTOS_AST',
489
+ },
490
+ },
491
+ {
492
+ id: 'heuristics.ts.nested-validation-validatenested-type.ast',
493
+ description: 'Detects nested validation through ValidateNested and Type decorators.',
494
+ severity: 'WARN',
495
+ platform: 'generic',
496
+ locked: true,
497
+ when: {
498
+ kind: 'Heuristic',
499
+ where: {
500
+ ruleId: 'heuristics.ts.nested-validation-validatenested-type.ast',
501
+ },
502
+ },
503
+ then: {
504
+ kind: 'Finding',
505
+ message: 'AST heuristic detected nested DTO validation.',
506
+ code: 'HEURISTICS_NESTED_VALIDATION_VALIDATENESTED_TYPE_AST',
507
+ },
508
+ },
509
+ {
510
+ id: 'heuristics.ts.dtos-en-boundaries-validacio-n-en-entrada-salida.ast',
511
+ description: 'Detects backend DTO classes that preserve explicit input/output boundaries.',
512
+ severity: 'WARN',
513
+ platform: 'generic',
514
+ locked: true,
515
+ when: {
516
+ kind: 'Heuristic',
517
+ where: {
518
+ ruleId: 'heuristics.ts.dtos-en-boundaries-validacio-n-en-entrada-salida.ast',
519
+ },
520
+ },
521
+ then: {
522
+ kind: 'Finding',
523
+ message: 'AST heuristic detected backend DTO boundary classes.',
524
+ code: 'HEURISTICS_DTOS_EN_BOUNDARIES_VALIDACIO_N_EN_ENTRADA_SALIDA_AST',
525
+ },
526
+ },
527
+ {
528
+ id: 'heuristics.ts.dtos-separados-createorderdto-updateorderdto-orderresponsedto.ast',
529
+ description: 'Detects separated create, update and response DTO contracts in backend code.',
530
+ severity: 'WARN',
531
+ platform: 'generic',
532
+ locked: true,
533
+ when: {
534
+ kind: 'Heuristic',
535
+ where: {
536
+ ruleId: 'heuristics.ts.dtos-separados-createorderdto-updateorderdto-orderresponsedto.ast',
537
+ },
538
+ },
539
+ then: {
540
+ kind: 'Finding',
541
+ message: 'AST heuristic detected separated backend DTO contracts.',
542
+ code: 'HEURISTICS_DTOS_SEPARADOS_CREATEORDERDTO_UPDATEORDERDTO_ORDERRESPONSEDTO_AST',
543
+ },
544
+ },
545
+ {
546
+ id: 'heuristics.ts.return-dtos-no-exponer-entidades-directamente.ast',
547
+ description: 'Detects backend code returning entities directly instead of DTOs.',
548
+ severity: 'WARN',
549
+ platform: 'generic',
550
+ locked: true,
551
+ when: {
552
+ kind: 'Heuristic',
553
+ where: {
554
+ ruleId: 'heuristics.ts.return-dtos-no-exponer-entidades-directamente.ast',
555
+ },
556
+ },
557
+ then: {
558
+ kind: 'Finding',
559
+ message: 'AST heuristic detected backend code returning entities directly instead of DTOs.',
560
+ code: 'HEURISTICS_TS_RETURN_DTOS_NO_EXPONER_ENTIDADES_DIRECTAMENTE_AST',
561
+ },
562
+ },
563
+ {
564
+ id: 'heuristics.ts.transacciones-para-operaciones-cri-ticas.ast',
565
+ description: 'Detects backend critical transaction usage in TypeScript production files.',
566
+ severity: 'WARN',
567
+ platform: 'generic',
568
+ locked: true,
569
+ when: {
570
+ kind: 'Heuristic',
571
+ where: {
572
+ ruleId: 'heuristics.ts.transacciones-para-operaciones-cri-ticas.ast',
573
+ },
574
+ },
575
+ then: {
576
+ kind: 'Finding',
577
+ message: 'AST heuristic detected backend transaction usage for critical operations.',
578
+ code: 'HEURISTICS_TS_TRANSACCIONES_PARA_OPERACIONES_CRI_TICAS_AST',
579
+ },
580
+ },
581
+ {
582
+ id: 'heuristics.ts.transacciones-para-operaciones-multi-tabla.ast',
583
+ description: 'Detects backend multi-table transaction usage in TypeScript production files.',
584
+ severity: 'WARN',
585
+ platform: 'generic',
586
+ locked: true,
587
+ when: {
588
+ kind: 'Heuristic',
589
+ where: {
590
+ ruleId: 'heuristics.ts.transacciones-para-operaciones-multi-tabla.ast',
591
+ },
592
+ },
593
+ then: {
594
+ kind: 'Finding',
595
+ message: 'AST heuristic detected backend transaction usage for multi-table operations.',
596
+ code: 'HEURISTICS_TS_TRANSACCIONES_PARA_OPERACIONES_MULTI_TABLA_AST',
597
+ },
598
+ },
599
+ {
600
+ id: 'heuristics.ts.prometheus-prom-client.ast',
601
+ description: 'Detects Prometheus metrics instrumentation via prom-client in backend TypeScript production files.',
602
+ severity: 'WARN',
603
+ platform: 'generic',
604
+ locked: true,
605
+ when: {
606
+ kind: 'Heuristic',
607
+ where: {
608
+ ruleId: 'heuristics.ts.prometheus-prom-client.ast',
609
+ },
610
+ },
611
+ then: {
612
+ kind: 'Finding',
613
+ message: 'AST heuristic detected Prometheus metrics instrumentation via prom-client.',
614
+ code: 'HEURISTICS_PROMETHEUS_PROM_CLIENT_AST',
615
+ },
616
+ },
617
+ {
618
+ id: 'heuristics.ts.password-hashing-bcrypt-salt-rounds-10.ast',
619
+ description:
620
+ 'Detects bcrypt password hashing configured with salt rounds below the recommended minimum in TypeScript production files.',
621
+ severity: 'ERROR',
622
+ platform: 'generic',
623
+ locked: true,
624
+ when: {
625
+ kind: 'Heuristic',
626
+ where: {
627
+ ruleId: 'heuristics.ts.password-hashing-bcrypt-salt-rounds-10.ast',
628
+ },
629
+ },
630
+ then: {
631
+ kind: 'Finding',
632
+ message: 'AST heuristic detected bcrypt salt rounds below the recommended minimum.',
633
+ code: 'HEURISTICS_PASSWORD_HASHING_BCRYPT_SALT_ROUNDS_10_AST',
634
+ },
635
+ },
166
636
  {
167
637
  id: 'heuristics.ts.with-statement.ast',
168
638
  description: 'Detects with-statement usage in TypeScript/TSX production files.',
@@ -330,6 +800,44 @@ export const typescriptRules: RuleSet = [
330
800
  code: 'HEURISTICS_SOLID_DIP_CONCRETE_INSTANTIATION_AST',
331
801
  },
332
802
  },
803
+ {
804
+ id: 'heuristics.ts.clean-architecture.ast',
805
+ description:
806
+ 'Detects clean architecture dependency direction risks in domain/application TypeScript code.',
807
+ severity: 'ERROR',
808
+ platform: 'generic',
809
+ locked: true,
810
+ when: {
811
+ kind: 'Heuristic',
812
+ where: {
813
+ ruleId: 'heuristics.ts.clean-architecture.ast',
814
+ },
815
+ },
816
+ then: {
817
+ kind: 'Finding',
818
+ message:
819
+ 'AST heuristic detected clean architecture dependency direction risk in domain/application code.',
820
+ code: 'HEURISTICS_CLEAN_ARCHITECTURE_AST',
821
+ },
822
+ },
823
+ {
824
+ id: 'heuristics.ts.react-class-component.ast',
825
+ description: 'Detects React class components in frontend TypeScript/TSX code.',
826
+ severity: 'ERROR',
827
+ platform: 'generic',
828
+ locked: true,
829
+ when: {
830
+ kind: 'Heuristic',
831
+ where: {
832
+ ruleId: 'heuristics.ts.react-class-component.ast',
833
+ },
834
+ },
835
+ then: {
836
+ kind: 'Finding',
837
+ message: 'AST heuristic detected React class component usage.',
838
+ code: 'HEURISTICS_TS_REACT_CLASS_COMPONENT_AST',
839
+ },
840
+ },
333
841
  {
334
842
  id: 'heuristics.ts.god-class-large-class.ast',
335
843
  description: 'Detects God Class candidates when one class mixes multiple responsibility nodes.',
package/docs/README.md CHANGED
@@ -42,7 +42,7 @@ Mapa corto y humano de la documentación oficial de Pumuki.
42
42
  - Barra local sin Actions: `npm run -s validation:local-merge-bar` (ver `docs/validation/README.md` § GitHub Actions y cuota)
43
43
 
44
44
  - Quiero saber en qué estamos ahora:
45
- - `docs/tracking/plan-activo-de-trabajo.md`
45
+ - `../PUMUKI-RESET-MASTER-PLAN.md`
46
46
  - Quiero el seguimiento del curso Stack My Architecture (Pumuki), iniciativa formativa aparte del espejo operativo:
47
47
  - `docs/tracking/plan-curso-pumuki-stack-my-architecture.md`
48
48
 
@@ -71,8 +71,8 @@ Mapa corto y humano de la documentación oficial de Pumuki.
71
71
  - Skills vendorizadas que el repo usa como contrato local.
72
72
 
73
73
  - `docs/tracking/`
74
- - Seguimiento permitido y solo el imprescindible.
75
- - Espejo operativo de producto y consumidores: `docs/tracking/plan-activo-de-trabajo.md` (unica fuente de verdad para ese ambito).
74
+ - Material histórico o auxiliar de seguimiento; no actúa como backlog operativo ni fuente canónica del repo.
75
+ - El seguimiento operativo vivo de producto y consumidores está en `PUMUKI-RESET-MASTER-PLAN.md`.
76
76
  - Curso Pumuki (Stack My Architecture): diseño pedagógico + seguimiento de entrega en `docs/tracking/plan-curso-pumuki-stack-my-architecture.md` (no sustituye al plan activo).
77
77
  - Regla hard: solo puede existir una tarea `🚧` en cada documento de seguimiento que lo use.
78
78
 
@@ -4,6 +4,12 @@ This file tracks the active deterministic framework line used in this repository
4
4
  Canonical release chronology lives in `CHANGELOG.md`.
5
5
  This file keeps only the operational highlights and rollout notes that matter while running the framework.
6
6
 
7
+ ### 2026-05-03 (v6.3.130)
8
+
9
+ - **Menú consumer legacy recuperado:** `pumuki-framework` vuelve a mostrar la portada plana de 9 opciones y la salida clásica de auditoría.
10
+ - **Auditoría repo completo con cobertura real:** la opción `1) Full audit (repo analysis)` muestra iOS/Android/Backend/Frontend con `rules evaluated=x/y` y explica `Other`.
11
+ - **Rollout recomendado:** publicar `pumuki@6.3.130`, repin inmediato en consumers activos y revalidar `node bin/pumuki-framework.js` opción `1`, `status` y `doctor`.
12
+
7
13
  ### 2026-04-29 (v6.3.129)
8
14
 
9
15
  - **Singletons Android con detector AST real:** `skills.android.no-singleton-usar-inyeccio-n-de-dependencias-hilt-dagger` queda vinculada a un detector que distingue singleton real de `@Module` / `@InstallIn` / `@EntryPoint`.
@@ -496,7 +502,7 @@ This file keeps only the operational highlights and rollout notes that matter wh
496
502
 
497
503
  - Blocked notification UX hardening for macOS:
498
504
  - short, human-readable Spanish banner (`🔴 Pumuki bloqueado`) with stage + summarized cause.
499
- - remediation-first body (`Solución: ...`) to maximize visibility in truncated notification banners.
505
+ - actionable body (`Causa / Impacto / Comando / Siguiente acción`) to maximize visibility in truncated notification banners.
500
506
  - Optional blocked-dialog workflow (`PUMUKI_MACOS_BLOCKED_DIALOG=1`):
501
507
  - full cause/remediation modal for critical blocks.
502
508
  - anti-spam controls in dialog:
@@ -1,20 +1,23 @@
1
- # README Menu Walkthrough (Option 1)
1
+ # README Menu Walkthrough (Consumer Legacy)
2
2
 
3
- This walkthrough documents **Option 1: Full audit (repo analysis · PRE_COMMIT)** with real execution captures.
3
+ This walkthrough documents the consumer legacy menu contract restored from tag `v0-legacy-last`, specifically `scripts/hooks-system/infrastructure/shell/orchestrators/audit-orchestrator.sh`.
4
4
 
5
- ## Capture 1 — Consumer Menu (v2)
5
+ ## Capture 1 — Consumer Menu (legacy)
6
6
 
7
- ![Consumer Menu v2](../assets/readme/menu-option1/01-menu-consumer-v2.png)
7
+ ![Consumer Menu legacy](../assets/readme/menu-option1/01-menu-consumer-v2.png)
8
8
 
9
9
  What this shows:
10
10
 
11
- - Consumer menu grouped by operational flows.
12
- - Option `1` is the full repo audit path for `PRE_COMMIT` policy.
13
- - Current menu status reflects latest evidence context.
11
+ - The consumer menu is a flat legacy surface with 9 options.
12
+ - Option `1` is `Full audit (repo analysis)`.
13
+ - Options `2-4` are the strict/staged/standard audit flows.
14
+ - Options `5-8` keep the legacy diagnostics/export actions.
15
+ - Option `9` is `Exit`.
16
+ - The audit output follows the legacy `summarize_all` sections and severity counts.
14
17
 
15
- ## Capture 2 — Option 1 Pre-flight (BLOCK context)
18
+ ## Capture 2 — Archived v2 Full-Audit Pre-flight (BLOCK context)
16
19
 
17
- ![Option 1 Pre-flight Block](../assets/readme/menu-option1/02-option1-preflight-block.png)
20
+ ![Archived v2 Full-Audit Pre-flight Block](../assets/readme/menu-option1/02-option1-preflight-block.png)
18
21
 
19
22
  What this shows:
20
23
 
@@ -22,9 +25,9 @@ What this shows:
22
25
  - Runtime context includes branch/upstream/worktree/evidence freshness.
23
26
  - Operational hints explain why governance is currently blocked.
24
27
 
25
- ## Capture 3 — Option 1 Final Summary (BLOCK)
28
+ ## Capture 3 — Archived v2 Full-Audit Final Summary (BLOCK)
26
29
 
27
- ![Option 1 Final Summary Block](../assets/readme/menu-option1/03-option1-final-summary-block.png)
30
+ ![Archived v2 Full-Audit Final Summary Block](../assets/readme/menu-option1/03-option1-final-summary-block.png)
28
31
 
29
32
  What this shows:
30
33
 
@@ -34,18 +37,18 @@ What this shows:
34
37
  - `Outcome: BLOCK`
35
38
  - Actionable remediation next step.
36
39
 
37
- ## Capture 4 — Option 1 Pre-flight (PASS scenario)
40
+ ## Capture 4 — Archived v2 Full-Audit Pre-flight (PASS scenario)
38
41
 
39
- ![Option 1 Pre-flight Pass Scenario](../assets/readme/menu-option1/04-option1-preflight-pass.png)
42
+ ![Archived v2 Full-Audit Pre-flight Pass Scenario](../assets/readme/menu-option1/04-option1-preflight-pass.png)
40
43
 
41
44
  What this shows:
42
45
 
43
46
  - A clean fixture scenario where the run can complete without findings.
44
47
  - Pre-flight can still surface policy warnings while run execution proceeds.
45
48
 
46
- ## Capture 5 — Option 1 Final Summary (PASS)
49
+ ## Capture 5 — Archived v2 Full-Audit Final Summary (PASS)
47
50
 
48
- ![Option 1 Final Summary Pass](../assets/readme/menu-option1/05-option1-final-summary-pass.png)
51
+ ![Archived v2 Full-Audit Final Summary Pass](../assets/readme/menu-option1/05-option1-final-summary-pass.png)
49
52
 
50
53
  What this shows:
51
54
 
@@ -174,7 +174,7 @@ Interpretation contract:
174
174
  - `consumerInstalled`: version installed in the consumer repository.
175
175
  - `lifecycleInstalled`: version recorded in managed lifecycle metadata.
176
176
  - `driftWarning`: compact human-readable explanation when those values diverge.
177
- - `alignmentCommand`: exact remediation command to align dependency and lifecycle state with the current runtime version.
177
+ - `alignmentCommand`: exact remediation command to align dependency and lifecycle state with the current runtime version. When the consumer repo declares a Node runtime via `volta`, `.nvmrc`, or `package.json.engines.node`, this command prepends the matching runtime switch before the Pumuki install step.
178
178
  - `pathExecutionHazard`: boolean flag raised when the repo root contains the platform `PATH` delimiter and `npx/npm exec` can fail to resolve `pumuki`.
179
179
  - `pathExecutionWarning`: compact warning explaining why `PATH` resolution is unsafe in that repo.
180
180
  - `pathExecutionWorkaroundCommand`: safe local-node entrypoint to use when `pathExecutionHazard=true`.
@@ -439,7 +439,7 @@ How to read it:
439
439
  - `lifecycleInstalled`: version persisted in managed lifecycle state.
440
440
  - `source`: source chosen to compute `effective`.
441
441
  - `driftWarning`: compact explanation when those values diverge.
442
- - `alignmentCommand`: exact command to align consumer dependency and lifecycle state with the current runtime.
442
+ - `alignmentCommand`: exact command to align consumer dependency and lifecycle state with the current runtime. If the consumer declares Node via `volta`, `.nvmrc`, or `package.json.engines.node`, the command prepends the matching runtime switch before the Pumuki install step.
443
443
  - `pathExecutionHazard`: tells you whether the repo root itself can break `PATH`-based execution.
444
444
  - `pathExecutionWarning`: compact explanation of that hazard.
445
445
  - `pathExecutionWorkaroundCommand`: safe local-node entrypoint to use when `PATH` execution is unsafe.
@@ -14,7 +14,9 @@ Este directorio contiene solo documentación estable de validación y runbooks o
14
14
 
15
15
  ## Estado de seguimiento
16
16
 
17
- - Única fuente de seguimiento: `docs/tracking/plan-activo-de-trabajo.md`
17
+ - `docs/validation/` no gobierna backlog.
18
+ - La única fuente viva del tracking interno es `PUMUKI-RESET-MASTER-PLAN.md` en la raíz del repo.
19
+ - `docs/tracking/plan-activo-de-trabajo.md` queda retirado como espejo operativo y solo conserva valor histórico.
18
20
 
19
21
  ## GitHub Actions y cuota
20
22