pumuki 6.3.30 → 6.3.31

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.
@@ -7,7 +7,7 @@
7
7
  ## Estado actual
8
8
  - Plan activo: `docs/seguimiento-completo-validacion-ruralgo-03-03-2026.md`
9
9
  - Estado del plan: EN CURSO
10
- - Task activa (`🚧`): `P12.F1.T42` (sincronizar canónico RuralGO tras cierre de `#543` y actualizar refs reales en feedback/master plan).
10
+ - Task activa (`🚧`): `P12.F2.T51` (publicar release con el hardening `#551` y cerrar trazabilidad final en canónico + master).
11
11
 
12
12
  ## Historial resumido
13
13
  - No se mantienen MDs históricos de seguimiento en este repositorio.
@@ -1326,10 +1326,21 @@ Criterio de salida F5:
1326
1326
  - desbloquear billing de la cuenta/organización de GitHub Actions.
1327
1327
  - restaurar cuota/permisos de Snyk o ajustar temporalmente ese check requerido.
1328
1328
 
1329
- - 🚧 `P12.F1.T42` Sincronizar canónico RuralGO tras cierre de `#543` (`REPORTED -> FIXED` en feedback + master plan con refs reales).
1330
- - salida esperada:
1331
- - `R_GO/docs/technical/08-validation/refactor/pumuki-integration-feedback.md` actualizado a `FIXED` para `PUMUKI-INC-055`.
1332
- - `R_GO/ruralgo-master-plan.md` con leyenda actualizada (solo 1 `🚧` activa) y referencia de issue/PR/commit.
1329
+ - `P12.F1.T42` Sincronizar canónico RuralGO tras cierre de `#543` (`REPORTED -> FIXED` en feedback + master plan con refs reales).
1330
+ - cierre ejecutado:
1331
+ - se resolvió el bloqueo histórico de rama creando una rama docs limpia desde `origin/develop` en `R_GO`: `docs/rgo-sync-issue-543-fixed-20260304`.
1332
+ - commit documental atómico aplicado: `66d88dacb` (`docs(validation): sync canonical issue 543 to fixed`).
1333
+ - PR abierta en `R_GO`: `https://github.com/SwiftEnProfundidad/R_GO/pull/1503`.
1334
+ - canónico actualizado en la PR:
1335
+ - `docs/technical/08-validation/refactor/pumuki-integration-feedback.md` (`PUMUKI-INC-055 => ✅ FIXED`).
1336
+ - `ruralgo-master-plan.md` (`#543 => ✅`, leyenda recalculada).
1337
+ - evidencia:
1338
+ - `git -C /tmp/rgo-sync-issue-543-*/ commit -m "docs(validation): sync canonical issue 543 to fixed"`
1339
+ - `git -C /tmp/rgo-sync-issue-543-*/ push -u origin docs/rgo-sync-issue-543-fixed-20260304`
1340
+ - `gh pr create --base develop --head docs/rgo-sync-issue-543-fixed-20260304`
1341
+ - hook gates en verde:
1342
+ - `pre-commit => ALLOW/PASS`
1343
+ - `pre-push => ALLOW/PASS`
1333
1344
 
1334
1345
  - ✅ `P12.F1.T46` Sincronizar canónico RuralGO en estado intermedio de `#544` (`REPORTED` con refs reales de issue/branch/PR/commit/evidencia) y alinear master plan con una única mejora `🚧`.
1335
1346
  - cierre ejecutado:
@@ -1678,10 +1689,58 @@ Criterio de salida F5:
1678
1689
  - `gh run rerun 22648216106 --failed` (rerun solicitado en iteración actual).
1679
1690
  - `gh run rerun 22670371464 --failed` (rerun solicitado en iteración actual).
1680
1691
 
1681
- - `P12.F1.T45` Sincronizar canónico RuralGO tras cierre de `#544` (`REPORTED -> FIXED` en feedback + master plan con refs reales).
1692
+ - `P12.F1.T48` Corregir regresión crítica de packaging en `pumuki@6.3.29` (módulo telemetry ausente en npm) y publicar patch release.
1693
+ - cierre ejecutado:
1694
+ - issue creada: `#548` (`bug: npm package misses integrations/telemetry and breaks hooks at runtime`).
1695
+ - fix implementado:
1696
+ - `package.json` incluye `integrations/telemetry/*.ts` en `files`.
1697
+ - `scripts/package-manifest-lib.ts` exige `integrations/telemetry/gateTelemetry.ts` como ruta requerida.
1698
+ - PR mergeada: `#549` (commit de merge `1075752d338f38354772781b5e32e0face35189c`).
1699
+ - issue `#548` cerrada.
1700
+ - release publicada: `pumuki@6.3.30` + tag `v6.3.30`.
1701
+ - evidencia:
1702
+ - `npx --yes tsx@4.21.0 --test scripts/__tests__/package-manifest-lib.test.ts scripts/__tests__/check-package-manifest.test.ts`
1703
+ - `npm run -s validation:package-manifest`
1704
+ - `npm pack --json --dry-run | rg "integrations/telemetry/gateTelemetry.ts"`
1705
+ - `npm run -s typecheck`
1706
+ - `npm publish --access public`
1707
+
1708
+ - ✅ `P12.F1.T45` Sincronizar canónico RuralGO tras cierre de `#544` (`REPORTED -> FIXED` en feedback + master plan con refs reales).
1709
+ - cierre ejecutado:
1710
+ - rama docs creada y publicada: `docs/rgo-sync-issue-544-fixed-20260304`.
1711
+ - PR abierta y mergeada: `R_GO#1504` (`https://github.com/SwiftEnProfundidad/R_GO/pull/1504`).
1712
+ - commit de merge en `develop`: `5c0306ba14ab59511a10d12d01a35911481154e3`.
1713
+ - evidencia:
1714
+ - `R_GO/docs/technical/08-validation/refactor/pumuki-integration-feedback.md` actualizado a `✅ FIXED` para `PUMUKI-INC-056`.
1715
+ - `R_GO/ruralgo-master-plan.md` actualizado con leyenda y siguiente mejora estratégica activa.
1716
+ - hooks en verde durante commit/push de la rama docs (`PRE_COMMIT=ALLOW`, `PRE_PUSH=ALLOW`).
1717
+
1718
+ - ✅ `P12.F2.T49` Ejecutar la siguiente mejora estratégica pendiente: suite contractual multi-repo de regresión enterprise (issue -> rama -> PR -> evidencia).
1719
+ - cierre ejecutado:
1720
+ - issue creada y priorizada: `#551` (`feature: suite contractual multi-repo de regresión enterprise`).
1721
+ - sincronización canónica RuralGO aplicada y mergeada: `R_GO#1505` (`https://github.com/SwiftEnProfundidad/R_GO/pull/1505`).
1722
+ - commit de merge en `R_GO/develop`: `64e40d2365f3edf1137cf70a038a638398503db1`.
1723
+ - evidencia:
1724
+ - `R_GO/docs/technical/08-validation/refactor/pumuki-integration-feedback.md` actualizado con `PUMUKI-INC-057` en estado `🚧 REPORTED (#551)`.
1725
+ - `R_GO/ruralgo-master-plan.md` actualizado con mejora estratégica activa referenciada a `#551`.
1726
+
1727
+ - ✅ `P12.F2.T50` Ejecutar implementación técnica de la suite contractual multi-repo (`#551`) con ciclo RED -> GREEN -> REFACTOR y trazabilidad E2E.
1728
+ - cierre ejecutado:
1729
+ - rama técnica creada: `feature/551-enterprise-contract-suite`.
1730
+ - PR abierta y mergeada: `#553` (`https://github.com/SwiftEnProfundidad/ast-intelligence-hooks/pull/553`).
1731
+ - issue cerrada: `#551`.
1732
+ - commit de merge en `develop`: `0a3a005f004f6a65bb33946450cdb382af1a59f6`.
1733
+ - evidencia:
1734
+ - `npx --yes tsx@4.21.0 --test scripts/__tests__/enterprise-contract-suite-args-lib.test.ts scripts/__tests__/enterprise-contract-suite-report-lib.test.ts`
1735
+ - `npm run -s typecheck`
1736
+ - `npm run -s validation:contract-suite:enterprise -- --json`
1737
+ - `npm run -s validation:package-manifest`
1738
+
1739
+ - 🚧 `P12.F2.T51` Publicar release que incluya el hardening `#551` (suite contractual) y dejar trazabilidad final en canónico + master.
1682
1740
  - salida esperada:
1683
- - `R_GO/docs/technical/08-validation/refactor/pumuki-integration-feedback.md` actualizado a `FIXED` para `PUMUKI-INC-056`.
1684
- - `R_GO/ruralgo-master-plan.md` con leyenda final actualizada y referencia de merge real.
1741
+ - versión npm publicada con el MVP de suite contractual multi-repo.
1742
+ - canónico RuralGO y master plan alineados con refs de release.
1743
+ - estado operativo preparado para siguiente bloque de mejoras.
1685
1744
 
1686
1745
  Criterio de salida F6:
1687
1746
  - veredicto final trazable y cierre administrativo completo.
@@ -15,6 +15,7 @@ Este directorio contiene solo documentación oficial y estable de validación pa
15
15
 
16
16
  - Master de seguimiento: `docs/registro-maestro-de-seguimiento.md`.
17
17
  - Plan activo: `docs/seguimiento-completo-validacion-ruralgo-03-03-2026.md`.
18
+ - Suite contractual enterprise (MVP): `npm run -s validation:contract-suite:enterprise`.
18
19
 
19
20
  ## Política de higiene
20
21
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pumuki",
3
- "version": "6.3.30",
3
+ "version": "6.3.31",
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": {
@@ -108,6 +108,7 @@
108
108
  "validation:package-smoke": "node --import tsx scripts/package-install-smoke.ts --mode=block",
109
109
  "validation:package-smoke:minimal": "node --import tsx scripts/package-install-smoke.ts --mode=minimal",
110
110
  "validation:lifecycle-smoke": "node --import tsx scripts/package-install-smoke.ts --mode=minimal",
111
+ "validation:contract-suite:enterprise": "node --import tsx scripts/run-enterprise-contract-suite.ts",
111
112
  "validation:c020-benchmark": "node --import tsx scripts/run-c020-benchmark.ts",
112
113
  "validation:clean-artifacts": "npx --yes tsx@4.21.0 scripts/clean-validation-artifacts.ts",
113
114
  "skills:compile": "npx --yes tsx@4.21.0 scripts/compile-skills-lock.ts",
@@ -0,0 +1,60 @@
1
+ import { resolve } from 'node:path';
2
+ import type { EnterpriseContractSuiteOptions } from './enterprise-contract-suite-contract';
3
+
4
+ export const DEFAULT_ENTERPRISE_CONTRACT_REPORT_PATH =
5
+ '.audit-reports/enterprise-contract-suite/report.json';
6
+
7
+ export const DEFAULT_ENTERPRISE_CONTRACT_SUMMARY_PATH =
8
+ '.audit-reports/enterprise-contract-suite/summary.md';
9
+
10
+ export const parseEnterpriseContractSuiteArgs = (
11
+ argv: ReadonlyArray<string>,
12
+ cwd = process.cwd()
13
+ ): EnterpriseContractSuiteOptions => {
14
+ const options: EnterpriseContractSuiteOptions = {
15
+ repoRoot: resolve(cwd),
16
+ reportPath: DEFAULT_ENTERPRISE_CONTRACT_REPORT_PATH,
17
+ summaryPath: DEFAULT_ENTERPRISE_CONTRACT_SUMMARY_PATH,
18
+ printJson: false,
19
+ };
20
+
21
+ for (const arg of argv) {
22
+ if (arg === '--json') {
23
+ options.printJson = true;
24
+ continue;
25
+ }
26
+
27
+ if (arg.startsWith('--repo=')) {
28
+ const value = arg.slice('--repo='.length).trim();
29
+ if (!value) {
30
+ throw new Error('Flag --repo requires a non-empty path.');
31
+ }
32
+ options.repoRoot = resolve(value);
33
+ continue;
34
+ }
35
+
36
+ if (arg.startsWith('--out=')) {
37
+ const value = arg.slice('--out='.length).trim();
38
+ if (!value) {
39
+ throw new Error('Flag --out requires a non-empty path.');
40
+ }
41
+ options.reportPath = value;
42
+ continue;
43
+ }
44
+
45
+ if (arg.startsWith('--summary=')) {
46
+ const value = arg.slice('--summary='.length).trim();
47
+ if (!value) {
48
+ throw new Error('Flag --summary requires a non-empty path.');
49
+ }
50
+ options.summaryPath = value;
51
+ continue;
52
+ }
53
+
54
+ throw new Error(
55
+ `Unsupported argument "${arg}". Allowed: --repo=<path> --out=<path> --summary=<path> --json`
56
+ );
57
+ }
58
+
59
+ return options;
60
+ };
@@ -0,0 +1,31 @@
1
+ export type EnterpriseContractProfileId = 'minimal' | 'block';
2
+
3
+ export type EnterpriseContractProfileSpec = {
4
+ id: EnterpriseContractProfileId;
5
+ mode: 'minimal' | 'block';
6
+ expectedExitCode: number;
7
+ };
8
+
9
+ export type EnterpriseContractProfileResult = {
10
+ id: EnterpriseContractProfileId;
11
+ mode: 'minimal' | 'block';
12
+ command: string;
13
+ expectedExitCode: number;
14
+ exitCode: number;
15
+ status: 'PASS' | 'FAIL';
16
+ };
17
+
18
+ export type EnterpriseContractSuiteReport = {
19
+ suiteVersion: '1';
20
+ generatedAt: string;
21
+ repoRoot: string;
22
+ profiles: ReadonlyArray<EnterpriseContractProfileResult>;
23
+ overall: 'PASS' | 'FAIL';
24
+ };
25
+
26
+ export type EnterpriseContractSuiteOptions = {
27
+ repoRoot: string;
28
+ reportPath: string;
29
+ summaryPath: string;
30
+ printJson: boolean;
31
+ };
@@ -0,0 +1,45 @@
1
+ import type {
2
+ EnterpriseContractProfileResult,
3
+ EnterpriseContractSuiteReport,
4
+ } from './enterprise-contract-suite-contract';
5
+
6
+ export const resolveEnterpriseContractOverall = (
7
+ profiles: ReadonlyArray<EnterpriseContractProfileResult>
8
+ ): 'PASS' | 'FAIL' =>
9
+ profiles.every((profile) => profile.status === 'PASS') ? 'PASS' : 'FAIL';
10
+
11
+ export const buildEnterpriseContractReport = (params: {
12
+ repoRoot: string;
13
+ generatedAt?: string;
14
+ profiles: ReadonlyArray<EnterpriseContractProfileResult>;
15
+ }): EnterpriseContractSuiteReport => ({
16
+ suiteVersion: '1',
17
+ generatedAt: params.generatedAt ?? new Date().toISOString(),
18
+ repoRoot: params.repoRoot,
19
+ profiles: params.profiles,
20
+ overall: resolveEnterpriseContractOverall(params.profiles),
21
+ });
22
+
23
+ export const renderEnterpriseContractSummary = (
24
+ report: EnterpriseContractSuiteReport
25
+ ): string => {
26
+ const lines: string[] = [
27
+ '# Enterprise Contract Suite Summary',
28
+ '',
29
+ `- Overall: ${report.overall}`,
30
+ `- Generated At: ${report.generatedAt}`,
31
+ `- Repo Root: ${report.repoRoot}`,
32
+ '',
33
+ '## Profiles',
34
+ '',
35
+ ];
36
+
37
+ for (const profile of report.profiles) {
38
+ lines.push(
39
+ `- ${profile.id}: status=${profile.status} expected_exit=${profile.expectedExitCode} actual_exit=${profile.exitCode}`
40
+ );
41
+ }
42
+
43
+ lines.push('');
44
+ return lines.join('\n');
45
+ };
@@ -0,0 +1,78 @@
1
+ import { dirname, join } from 'node:path';
2
+ import { writeFileSync } from 'node:fs';
3
+ import {
4
+ parseEnterpriseContractSuiteArgs,
5
+ } from './enterprise-contract-suite-args-lib';
6
+ import {
7
+ buildEnterpriseContractReport,
8
+ renderEnterpriseContractSummary,
9
+ } from './enterprise-contract-suite-report-lib';
10
+ import type {
11
+ EnterpriseContractProfileResult,
12
+ EnterpriseContractProfileSpec,
13
+ } from './enterprise-contract-suite-contract';
14
+ import { ensureDirectory } from './package-install-smoke-file-lib';
15
+ import { runCommand } from './package-install-smoke-command-lib';
16
+
17
+ const PROFILE_SPECS: ReadonlyArray<EnterpriseContractProfileSpec> = [
18
+ {
19
+ id: 'minimal',
20
+ mode: 'minimal',
21
+ // The minimal fixture intentionally omits platform skill contracts to assert strict governance blocking.
22
+ expectedExitCode: 1,
23
+ },
24
+ {
25
+ id: 'block',
26
+ mode: 'block',
27
+ // The block fixture is expected to complete successfully as a deterministic BLOCK smoke scenario.
28
+ expectedExitCode: 0,
29
+ },
30
+ ];
31
+
32
+ const runProfile = (
33
+ repoRoot: string,
34
+ profile: EnterpriseContractProfileSpec
35
+ ): EnterpriseContractProfileResult => {
36
+ const args = ['--import', 'tsx', 'scripts/package-install-smoke.ts', `--mode=${profile.mode}`];
37
+ const result = runCommand({
38
+ cwd: repoRoot,
39
+ executable: 'node',
40
+ args,
41
+ });
42
+
43
+ return {
44
+ id: profile.id,
45
+ mode: profile.mode,
46
+ command: `node ${args.join(' ')}`,
47
+ expectedExitCode: profile.expectedExitCode,
48
+ exitCode: result.exitCode,
49
+ status: result.exitCode === profile.expectedExitCode ? 'PASS' : 'FAIL',
50
+ };
51
+ };
52
+
53
+ const writeTextFile = (repoRoot: string, relativePath: string, content: string): void => {
54
+ const filePath = join(repoRoot, relativePath);
55
+ ensureDirectory(dirname(filePath));
56
+ writeFileSync(filePath, content, 'utf8');
57
+ };
58
+
59
+ const main = (): number => {
60
+ const options = parseEnterpriseContractSuiteArgs(process.argv.slice(2));
61
+ const results = PROFILE_SPECS.map((profile) => runProfile(options.repoRoot, profile));
62
+
63
+ const report = buildEnterpriseContractReport({
64
+ repoRoot: options.repoRoot,
65
+ profiles: results,
66
+ });
67
+
68
+ writeTextFile(options.repoRoot, options.reportPath, `${JSON.stringify(report, null, 2)}\n`);
69
+ writeTextFile(options.repoRoot, options.summaryPath, renderEnterpriseContractSummary(report));
70
+
71
+ if (options.printJson) {
72
+ process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
73
+ }
74
+
75
+ return report.overall === 'PASS' ? 0 : 1;
76
+ };
77
+
78
+ process.exit(main());