pumuki 6.3.333 → 6.3.335
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [6.3.335] - 2026-05-21
|
|
4
|
+
|
|
5
|
+
- `R_GO`: `skills.ios.no-wait-for-expectations` no longer reports domain helper calls such as `await waiter.wait(for:)` as XCTest legacy waits. The detector still reports free `wait(for:)`, `self.wait(for:)`, `waitForExpectations`, `XCTWaiter.wait(for:)` and `waitForExistence`.
|
|
6
|
+
|
|
3
7
|
## [6.3.308] - 2026-05-20
|
|
4
8
|
|
|
5
9
|
- `R_GO`: PRE_WRITE deja de exigir `skills.ios.critical-test-quality` cuando no hay cambios efectivos de test iOS en el scope actual aunque la evidencia previa arrastre `platforms.ios`. Evita el bloqueo falso `EVIDENCE_PLATFORM_CRITICAL_SKILLS_RULES_MISSING` sobre `.ai_evidence.json` en repos limpios/no-code.
|
|
@@ -3517,6 +3517,27 @@ final class BuyerCommerceUISmokeTests: XCTestCase {
|
|
|
3517
3517
|
assert.deepEqual(collectSwiftWaitForExpectationsLines(uiWait), []);
|
|
3518
3518
|
});
|
|
3519
3519
|
|
|
3520
|
+
test('hasSwiftWaitForExpectationsUsage no confunde metodos de dominio llamados wait', () => {
|
|
3521
|
+
const domainWait = `
|
|
3522
|
+
import Presentation
|
|
3523
|
+
import XCTest
|
|
3524
|
+
|
|
3525
|
+
@MainActor
|
|
3526
|
+
final class SplashDelayWaiterTests: XCTestCase {
|
|
3527
|
+
func test_wait_returns() async {
|
|
3528
|
+
let waiter = SplashDelayWaiter()
|
|
3529
|
+
|
|
3530
|
+
await waiter.wait(for: .milliseconds(1))
|
|
3531
|
+
|
|
3532
|
+
XCTAssertTrue(true)
|
|
3533
|
+
}
|
|
3534
|
+
}
|
|
3535
|
+
`;
|
|
3536
|
+
|
|
3537
|
+
assert.equal(hasSwiftWaitForExpectationsUsage(domainWait), false);
|
|
3538
|
+
assert.deepEqual(collectSwiftWaitForExpectationsLines(domainWait), []);
|
|
3539
|
+
});
|
|
3540
|
+
|
|
3520
3541
|
test('hasSwiftLegacyExpectationDescriptionUsage detecta expectation(description:) sin flujo moderno', () => {
|
|
3521
3542
|
const legacyExpectation = `
|
|
3522
3543
|
let expectation = expectation(description: "Done")
|
|
@@ -3143,7 +3143,8 @@ export const collectSwiftWaitForExpectationsLines = (source: string): readonly n
|
|
|
3143
3143
|
}
|
|
3144
3144
|
|
|
3145
3145
|
return sortedUniqueLines([
|
|
3146
|
-
...collectSwiftRegexLines(source, /\
|
|
3146
|
+
...collectSwiftRegexLines(source, /\bself\s*\.\s*wait\s*\(\s*for\s*:/),
|
|
3147
|
+
...collectSwiftRegexLines(source, /(?<![.\w])wait\s*\(\s*for\s*:/),
|
|
3147
3148
|
...collectSwiftRegexLines(source, /\bwaitForExpectations\s*\(/),
|
|
3148
3149
|
...collectSwiftRegexLines(source, /\bXCTWaiter\s*\.\s*wait\s*\(\s*for\s*:/),
|
|
3149
3150
|
...collectSwiftRegexLines(source, /\bwaitForExistence\s*\(/),
|
|
@@ -4,6 +4,10 @@ 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-21 (v6.3.335)
|
|
8
|
+
|
|
9
|
+
- `R_GO`: `skills.ios.no-wait-for-expectations` deja de marcar llamadas de dominio como `await waiter.wait(for:)`. La regla conserva bloqueo para `wait(for:)` XCTest libre, `self.wait(for:)`, `waitForExpectations`, `XCTWaiter.wait(for:)` y `waitForExistence`, pero no confunde helpers propios de la app con APIs legacy de XCTest.
|
|
10
|
+
|
|
7
11
|
### 2026-05-18 (v6.3.277)
|
|
8
12
|
|
|
9
13
|
- `PUMUKI-INC-146`: PRE_WRITE uses staged paths as the effective slice for `skills.ios.critical-test-quality` when staged files exist. Unstaged Swift tests no longer contaminate a staged production-only iOS commit, but staged Swift tests still require the critical test-quality rule and remain fail-closed.
|
|
@@ -269,6 +269,24 @@ const normalizeScopedRuleEngineFindings = (params: {
|
|
|
269
269
|
});
|
|
270
270
|
};
|
|
271
271
|
|
|
272
|
+
const normalizeNonBlockingSwiftTestingMigrationWarnings = (
|
|
273
|
+
findings: ReadonlyArray<Finding>
|
|
274
|
+
): ReadonlyArray<Finding> => findings.map((finding) => {
|
|
275
|
+
if (
|
|
276
|
+
finding.ruleId !== 'skills.ios.prefer-swift-testing' ||
|
|
277
|
+
finding.severity !== 'WARN'
|
|
278
|
+
) {
|
|
279
|
+
return finding;
|
|
280
|
+
}
|
|
281
|
+
return {
|
|
282
|
+
...finding,
|
|
283
|
+
blocking: false,
|
|
284
|
+
expected_fix:
|
|
285
|
+
finding.expected_fix ??
|
|
286
|
+
'Mantén XCTest en suites legacy, UI o brownfield. Planifica una migración a Swift Testing en una slice dedicada si el repo lo decide.',
|
|
287
|
+
};
|
|
288
|
+
});
|
|
289
|
+
|
|
272
290
|
const buildDefaultMemoryShadowRecommendation = (params: {
|
|
273
291
|
findings: ReadonlyArray<Finding>;
|
|
274
292
|
tddBddSnapshot?: TddBddSnapshot;
|
|
@@ -1196,7 +1214,10 @@ export async function runPlatformGate(params: {
|
|
|
1196
1214
|
stage: params.policy.stage,
|
|
1197
1215
|
changedLinesByPath: stagedChangedLinesByPath,
|
|
1198
1216
|
});
|
|
1199
|
-
const findings = [
|
|
1217
|
+
const findings = normalizeNonBlockingSwiftTestingMigrationWarnings([
|
|
1218
|
+
...aiGateRepoPolicyFindings,
|
|
1219
|
+
...scopedRuleEngineFindings,
|
|
1220
|
+
]);
|
|
1200
1221
|
const evaluationMetrics: SnapshotEvaluationMetrics = coverage
|
|
1201
1222
|
? {
|
|
1202
1223
|
facts_total: coverage.factsTotal,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pumuki",
|
|
3
|
-
"version": "6.3.
|
|
3
|
+
"version": "6.3.335",
|
|
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": {
|