pumuki 6.3.134 → 6.3.135

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
@@ -6,12 +6,19 @@ This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [6.3.135] - 2026-05-03
10
+
11
+ ### Fixed
12
+
13
+ - **Bootstrap de pre-push por delta real:** cuando una rama no tiene upstream, el bootstrap de `PRE_PUSH` elige la base con menor delta real entre `main` y `develop`, evitando falsos positivos de atomicidad en branches nacidas de `main`.
14
+ - **Repin desbloqueable:** esta versión corrige el bloqueo que impedía publicar el repin de `Flux_training` aunque el diff efectivo del cambio fuese mínimo.
15
+
9
16
  ## [6.3.134] - 2026-05-03
10
17
 
11
18
  ### Fixed
12
19
 
13
20
  - **Policy hash drift accionable:** `governanceObservationSnapshot`, `governanceNextAction` y el catálogo de remediación ya convierten la divergencia entre stages en una acción estricta y aplicable.
14
- - **Release preparada para repin:** esta versión queda lista para publicarse y repinear consumers activos como RuralGo con el fix real ya distribuido.
21
+ - **Release publicada y lista para repin:** esta versión ya está en npm y queda lista para repinear consumers activos como RuralGo con el fix real distribuido.
15
22
 
16
23
  ## [6.3.133] - 2026-05-03
17
24
 
@@ -4,11 +4,16 @@ 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.135)
8
+
9
+ - **Bootstrap de pre-push por delta real:** en ramas sin upstream, `PRE_PUSH` elige la base con menor delta real entre `main` y `develop`, evitando que un rollout nacido de `main` se bloquee como si heredara todo `develop`.
10
+ - **Repin desbloqueable:** esta release corrige el falso positivo que impedía publicar el repin de `Flux_training` aunque el diff efectivo fuese mínimo.
11
+
7
12
  ### 2026-05-03 (v6.3.134)
8
13
 
9
14
  - **Policy hash drift accionable:** `governanceObservationSnapshot`, `governanceNextAction` y el catálogo de remediación ya convierten la divergencia entre stages en una acción estricta y aplicable.
10
15
  - **Repin recomendado:** publicar `pumuki@6.3.134`, repinear RuralGo y revalidar `status`, `doctor`, `audit --stage=PRE_WRITE --json` y hooks gestionados.
11
- - **Contrato de release estable:** no hace falta cerrar más gaps funcionales para este fix; la solución ya quedó validada localmente y lo que falta es distribución.
16
+ - **Contrato de release estable:** no hace falta cerrar más gaps funcionales para este fix; la solución ya quedó validada localmente y la distribución de `6.3.134` ya está publicada.
12
17
 
13
18
  ### 2026-05-03 (v6.3.133)
14
19
 
@@ -26,6 +26,37 @@ const resolveDefaultCiBaseRef = (): string => {
26
26
  return 'HEAD';
27
27
  };
28
28
 
29
+ const resolveDiffFileCount = (fromRef: string): number | null => {
30
+ try {
31
+ return runGit(['diff', '--name-only', '--diff-filter=ACMR', `${fromRef}..HEAD`])
32
+ .split('\n')
33
+ .map((line) => line.trim())
34
+ .filter((line) => line.length > 0).length;
35
+ } catch {
36
+ return null;
37
+ }
38
+ };
39
+
40
+ const resolveBestBootstrapBaseRef = (): string | null => {
41
+ const candidates = ['origin/main', 'main', 'origin/develop', 'develop'];
42
+ let best: { ref: string; changedFiles: number } | undefined;
43
+
44
+ for (const candidate of candidates) {
45
+ if (!isResolvableRef(candidate)) {
46
+ continue;
47
+ }
48
+ const changedFiles = resolveDiffFileCount(candidate);
49
+ if (changedFiles === null) {
50
+ continue;
51
+ }
52
+ if (!best || changedFiles < best.changedFiles) {
53
+ best = { ref: candidate, changedFiles };
54
+ }
55
+ }
56
+
57
+ return best?.ref ?? null;
58
+ };
59
+
29
60
  export const resolveUpstreamRef = (): string | null => {
30
61
  try {
31
62
  return runGit(['rev-parse', '@{u}']);
@@ -88,12 +119,10 @@ export const resolveCiBaseRef = (): string => {
88
119
  };
89
120
 
90
121
  export const resolvePrePushBootstrapBaseRef = (): string => {
91
- const candidates = ['origin/develop', 'develop', resolveCiBaseRef()];
92
- for (const candidate of candidates) {
93
- if (isResolvableRef(candidate)) {
94
- return candidate;
95
- }
122
+ const best = resolveBestBootstrapBaseRef();
123
+ if (best) {
124
+ return best;
96
125
  }
97
126
 
98
- return 'HEAD';
127
+ return resolveDefaultCiBaseRef();
99
128
  };
@@ -44,14 +44,30 @@ const resolveCiBaseRefInRepo = (repoRoot: string): string => {
44
44
  };
45
45
 
46
46
  const resolvePrePushBootstrapBaseRefInRepo = (repoRoot: string): string => {
47
- const candidates = ['origin/develop', 'develop', resolveCiBaseRefInRepo(repoRoot)];
47
+ const candidates = ['origin/main', 'main', 'origin/develop', 'develop'];
48
+ let best: { ref: string; changedFiles: number } | undefined;
49
+
48
50
  for (const candidate of candidates) {
49
- if (runGit(repoRoot, ['rev-parse', '--verify', candidate])) {
50
- return candidate;
51
+ if (!runGit(repoRoot, ['rev-parse', '--verify', candidate])) {
52
+ continue;
53
+ }
54
+ try {
55
+ const changedFiles = runGit(
56
+ repoRoot,
57
+ ['diff', '--name-only', '--diff-filter=ACMR', `${candidate}..HEAD`]
58
+ )
59
+ .split('\n')
60
+ .map((line) => line.trim())
61
+ .filter((line) => line.length > 0).length;
62
+ if (!best || changedFiles < best.changedFiles) {
63
+ best = { ref: candidate, changedFiles };
64
+ }
65
+ } catch {
66
+ continue;
51
67
  }
52
68
  }
53
69
 
54
- return 'HEAD';
70
+ return best?.ref ?? resolveCiBaseRefInRepo(repoRoot);
55
71
  };
56
72
 
57
73
  const shouldAllowBootstrapPrePush = (rawInput: string): boolean => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pumuki",
3
- "version": "6.3.134",
3
+ "version": "6.3.135",
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": {