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.
- package/AGENTS.md +16 -1
- package/CHANGELOG.md +9 -0
- package/README.md +14 -10
- package/VERSION +1 -1
- package/core/facts/detectors/text/android.test.ts +2583 -24
- package/core/facts/detectors/text/android.ts +4633 -34
- package/core/facts/detectors/typescript/index.test.ts +3639 -73
- package/core/facts/detectors/typescript/index.ts +4819 -270
- package/core/facts/extractHeuristicFacts.ts +271 -6
- package/core/rules/presets/heuristics/android.test.ts +314 -1
- package/core/rules/presets/heuristics/android.ts +1220 -50
- package/core/rules/presets/heuristics/typescript.test.ts +158 -2
- package/core/rules/presets/heuristics/typescript.ts +508 -0
- package/docs/README.md +3 -3
- package/docs/operations/RELEASE_NOTES.md +7 -1
- package/docs/operations/framework-menu-consumer-walkthrough.md +18 -15
- package/docs/product/API_REFERENCE.md +1 -1
- package/docs/product/USAGE.md +1 -1
- package/docs/validation/README.md +3 -1
- package/integrations/config/skillsCompilerTemplates.test.ts +131 -0
- package/integrations/config/skillsCompilerTemplates.ts +953 -7
- package/integrations/config/skillsDetectorRegistry.ts +451 -8
- package/integrations/config/skillsMarkdownRules.ts +884 -2
- package/integrations/evidence/buildEvidence.ts +29 -1
- package/integrations/evidence/platformSummary.test.ts +73 -9
- package/integrations/evidence/platformSummary.ts +165 -7
- package/integrations/evidence/repoState.ts +3 -0
- package/integrations/evidence/schema.ts +18 -0
- package/integrations/evidence/trackingContract.ts +17 -0
- package/integrations/evidence/writeEvidence.test.ts +3 -0
- package/integrations/evidence/writeEvidence.ts +29 -1
- package/integrations/gate/evaluateAiGate.ts +251 -8
- package/integrations/gate/governanceActionCatalog.ts +275 -0
- package/integrations/gate/remediationCatalog.ts +8 -0
- package/integrations/git/runPlatformGate.ts +9 -1
- package/integrations/lifecycle/adapter.ts +24 -0
- package/integrations/lifecycle/bootstrapManifest.ts +248 -0
- package/integrations/lifecycle/cliGovernanceConsole.ts +69 -0
- package/integrations/lifecycle/governanceNextAction.ts +171 -0
- package/integrations/lifecycle/governanceObservationSnapshot.ts +369 -0
- package/integrations/lifecycle/packageInfo.ts +118 -1
- package/integrations/lifecycle/state.ts +8 -1
- package/integrations/lifecycle/trackingState.ts +403 -0
- package/integrations/lifecycle/watch.ts +1 -1
- package/integrations/mcp/aiGateCheck.ts +194 -10
- package/integrations/mcp/alignedPlatformGate.ts +232 -0
- package/integrations/mcp/enterpriseServer.ts +19 -3
- package/integrations/mcp/preFlightCheck.ts +66 -3
- package/integrations/mcp/readMcpPrePushStdin.ts +7 -0
- package/package.json +1 -1
- package/scripts/build-ruralgo-s1-evidence-pack.ts +85 -0
- package/scripts/check-tracking-single-active.sh +1 -1
- package/scripts/framework-menu-advanced-view-lib.ts +49 -0
- package/scripts/framework-menu-consumer-actions-lib.ts +32 -32
- package/scripts/framework-menu-consumer-preflight-render.ts +10 -0
- package/scripts/framework-menu-consumer-preflight-run.ts +23 -0
- package/scripts/framework-menu-consumer-preflight-types.ts +12 -0
- package/scripts/framework-menu-consumer-runtime-actions.ts +11 -5
- package/scripts/framework-menu-consumer-runtime-audit.ts +0 -28
- package/scripts/framework-menu-consumer-runtime-evidence-classic.ts +118 -42
- package/scripts/framework-menu-consumer-runtime-lib.ts +38 -0
- package/scripts/framework-menu-consumer-runtime-menu.ts +55 -15
- package/scripts/framework-menu-consumer-runtime-types.ts +4 -0
- package/scripts/framework-menu-evidence-summary-read.ts +17 -1
- package/scripts/framework-menu-evidence-summary-types.ts +3 -0
- package/scripts/framework-menu-layout-data.ts +3 -23
- package/scripts/framework-menu-system-notifications-macos-applescript-dialog.ts +1 -1
- package/scripts/framework-menu-system-notifications-macos-dialog-payload.ts +14 -2
- package/scripts/framework-menu-system-notifications-macos-swift-source.ts +1 -1
- package/scripts/framework-menu-system-notifications-payloads-blocked.ts +128 -4
- package/scripts/framework-menu-system-notifications-payloads.ts +8 -1
- package/scripts/framework-menu-system-notifications-text.ts +7 -1
- package/scripts/framework-menu.ts +37 -2
- package/scripts/package-install-smoke-consumer-git-repo-lib.ts +10 -1
- package/scripts/package-install-smoke-consumer-npm-lib.ts +46 -9
- package/scripts/ruralgo-s1-evidence-pack-lib.ts +200 -0
- 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
|
-
-
|
|
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
|
-
-
|
|
75
|
-
-
|
|
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
|
-
-
|
|
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 (
|
|
1
|
+
# README Menu Walkthrough (Consumer Legacy)
|
|
2
2
|
|
|
3
|
-
This walkthrough documents
|
|
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 (
|
|
5
|
+
## Capture 1 — Consumer Menu (legacy)
|
|
6
6
|
|
|
7
|
-

|
|
8
8
|
|
|
9
9
|
What this shows:
|
|
10
10
|
|
|
11
|
-
-
|
|
12
|
-
- Option `1` is
|
|
13
|
-
-
|
|
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 —
|
|
18
|
+
## Capture 2 — Archived v2 Full-Audit Pre-flight (BLOCK context)
|
|
16
19
|
|
|
17
|
-

|
|
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 —
|
|
28
|
+
## Capture 3 — Archived v2 Full-Audit Final Summary (BLOCK)
|
|
26
29
|
|
|
27
|
-

|
|
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 —
|
|
40
|
+
## Capture 4 — Archived v2 Full-Audit Pre-flight (PASS scenario)
|
|
38
41
|
|
|
39
|
-

|
|
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 —
|
|
49
|
+
## Capture 5 — Archived v2 Full-Audit Final Summary (PASS)
|
|
47
50
|
|
|
48
|
-

|
|
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`.
|
package/docs/product/USAGE.md
CHANGED
|
@@ -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
|
-
-
|
|
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
|
|