pumuki 6.3.191 → 6.3.192
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.
|
@@ -366,11 +366,15 @@ const resolveRuleSeverity = (params: {
|
|
|
366
366
|
stage: Exclude<GateStage, 'STAGED'>;
|
|
367
367
|
}): Severity => {
|
|
368
368
|
const promotedRuleIds = params.bundlePolicy?.promoteToErrorRuleIds ?? [];
|
|
369
|
-
const
|
|
369
|
+
const shouldPromote = promotedRuleIds.includes(params.rule.id);
|
|
370
|
+
|
|
371
|
+
if (
|
|
370
372
|
params.rule.id.endsWith('.no-solid-violations') &&
|
|
371
|
-
(params.stage === 'PRE_PUSH' || params.stage === 'CI')
|
|
372
|
-
|
|
373
|
-
|
|
373
|
+
(params.stage === 'PRE_PUSH' || params.stage === 'CI') &&
|
|
374
|
+
!shouldPromote
|
|
375
|
+
) {
|
|
376
|
+
return 'WARN';
|
|
377
|
+
}
|
|
374
378
|
|
|
375
379
|
if (!shouldPromote) {
|
|
376
380
|
return params.rule.severity;
|
|
@@ -111,6 +111,22 @@ const toLifecycleAuditFinding = (finding: SnapshotFinding): LifecycleAuditFindin
|
|
|
111
111
|
blocking: isFindingBlocking(finding),
|
|
112
112
|
});
|
|
113
113
|
|
|
114
|
+
const toGateAllowedAuditAdvisoryFinding = (
|
|
115
|
+
finding: LifecycleAuditFinding
|
|
116
|
+
): LifecycleAuditFinding => {
|
|
117
|
+
if (!finding.blocking) {
|
|
118
|
+
return finding;
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
...finding,
|
|
122
|
+
severity: 'WARN',
|
|
123
|
+
blocking: false,
|
|
124
|
+
message:
|
|
125
|
+
`${finding.message} ` +
|
|
126
|
+
'(Advisory: current audit gate exited 0, so this finding is not blocking for this run.)',
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
|
|
114
130
|
const buildBlockedWithoutFindingsFallback = (params: {
|
|
115
131
|
stage: LifecycleAuditStage;
|
|
116
132
|
gateExitCode: number;
|
|
@@ -282,10 +298,15 @@ export const runLifecycleAudit = async (params: {
|
|
|
282
298
|
scope,
|
|
283
299
|
findings,
|
|
284
300
|
});
|
|
301
|
+
const gateAllowed = originalGateExitCode === 0;
|
|
285
302
|
const effectiveFindings = scopedGlobalEnforcementOnly
|
|
286
303
|
? findings.map(toScopedAuditAdvisoryFinding)
|
|
287
|
-
:
|
|
304
|
+
: gateAllowed
|
|
305
|
+
? findings.map(toGateAllowedAuditAdvisoryFinding)
|
|
306
|
+
: findings;
|
|
288
307
|
const gateExitCode = scopedGlobalEnforcementOnly ? 0 : originalGateExitCode;
|
|
308
|
+
const effectiveSnapshotOutcome =
|
|
309
|
+
gateExitCode === 0 && snapshotOutcome === 'BLOCK' ? 'PASS' : snapshotOutcome;
|
|
289
310
|
|
|
290
311
|
return {
|
|
291
312
|
command: 'pumuki audit',
|
|
@@ -299,7 +320,7 @@ export const runLifecycleAudit = async (params: {
|
|
|
299
320
|
gate_exit_code: gateExitCode,
|
|
300
321
|
files_scanned: filesScanned,
|
|
301
322
|
untracked_matching_extensions_count: untrackedMatchingExtensionsCount,
|
|
302
|
-
snapshot_outcome:
|
|
323
|
+
snapshot_outcome: effectiveSnapshotOutcome,
|
|
303
324
|
findings_count: effectiveFindings.length,
|
|
304
325
|
blocking_findings_count: effectiveFindings.filter((finding) => finding.blocking).length,
|
|
305
326
|
rules_coverage: evidence?.snapshot.rules_coverage ?? null,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pumuki",
|
|
3
|
-
"version": "6.3.
|
|
3
|
+
"version": "6.3.192",
|
|
4
4
|
"description": "Enterprise-grade AST Intelligence System with multi-platform support (iOS, Android, Backend, Frontend) and Feature-First + DDD + Clean Architecture enforcement. Includes dynamic violations API for intelligent querying.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|