@nac3/forge-cli 1.23.6 → 1.24.0
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/dist/bin/yf.js +0 -0
- package/dist/chat/claude.d.ts +8 -0
- package/dist/chat/claude.d.ts.map +1 -1
- package/dist/chat/claude.js.map +1 -1
- package/dist/chat/claude_cli.d.ts +23 -0
- package/dist/chat/claude_cli.d.ts.map +1 -1
- package/dist/chat/claude_cli.js +76 -2
- package/dist/chat/claude_cli.js.map +1 -1
- package/dist/chat/doctrine_digest.d.ts.map +1 -1
- package/dist/chat/doctrine_digest.js +2 -1
- package/dist/chat/doctrine_digest.js.map +1 -1
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +11 -0
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/tools/pending.d.ts +11 -0
- package/dist/chat/tools/pending.d.ts.map +1 -1
- package/dist/chat/tools/pending.js +55 -8
- package/dist/chat/tools/pending.js.map +1 -1
- package/dist/chat/tools/shell.d.ts +39 -4
- package/dist/chat/tools/shell.d.ts.map +1 -1
- package/dist/chat/tools/shell.js +167 -7
- package/dist/chat/tools/shell.js.map +1 -1
- package/dist/chat/tools/urazuke.d.ts.map +1 -1
- package/dist/chat/tools/urazuke.js +8 -5
- package/dist/chat/tools/urazuke.js.map +1 -1
- package/dist/chat/urazuke_section.d.ts +26 -4
- package/dist/chat/urazuke_section.d.ts.map +1 -1
- package/dist/chat/urazuke_section.js +115 -9
- package/dist/chat/urazuke_section.js.map +1 -1
- package/dist/commands/pending.d.ts.map +1 -1
- package/dist/commands/pending.js +116 -12
- package/dist/commands/pending.js.map +1 -1
- package/dist/commands/urazuke.d.ts +3 -0
- package/dist/commands/urazuke.d.ts.map +1 -1
- package/dist/commands/urazuke.js +80 -3
- package/dist/commands/urazuke.js.map +1 -1
- package/dist/core/ascii_purity.d.ts +69 -0
- package/dist/core/ascii_purity.d.ts.map +1 -0
- package/dist/core/ascii_purity.js +141 -0
- package/dist/core/ascii_purity.js.map +1 -0
- package/dist/core/battery_stamp.d.ts +85 -0
- package/dist/core/battery_stamp.d.ts.map +1 -0
- package/dist/core/battery_stamp.js +237 -0
- package/dist/core/battery_stamp.js.map +1 -0
- package/dist/core/ci_gaps.d.ts +129 -0
- package/dist/core/ci_gaps.d.ts.map +1 -0
- package/dist/core/ci_gaps.js +352 -0
- package/dist/core/ci_gaps.js.map +1 -0
- package/dist/core/doc_citations.d.ts +133 -0
- package/dist/core/doc_citations.d.ts.map +1 -0
- package/dist/core/doc_citations.js +271 -0
- package/dist/core/doc_citations.js.map +1 -0
- package/dist/core/turn_classifier.d.ts +4 -3
- package/dist/core/turn_classifier.d.ts.map +1 -1
- package/dist/core/turn_classifier.js +65 -20
- package/dist/core/turn_classifier.js.map +1 -1
- package/dist/docs/doctrine/urazuke.md +173 -2
- package/dist/nac3/internal_manifest.d.ts.map +1 -1
- package/dist/nac3/internal_manifest.js +28 -2
- package/dist/nac3/internal_manifest.js.map +1 -1
- package/dist/pending/store.d.ts +29 -0
- package/dist/pending/store.d.ts.map +1 -1
- package/dist/pending/store.js +51 -1
- package/dist/pending/store.js.map +1 -1
- package/dist/pending/types.d.ts +23 -0
- package/dist/pending/types.d.ts.map +1 -1
- package/dist/pending/types.js.map +1 -1
- package/dist/telemetry/usage.d.ts +18 -0
- package/dist/telemetry/usage.d.ts.map +1 -1
- package/dist/telemetry/usage.js +16 -1
- package/dist/telemetry/usage.js.map +1 -1
- package/dist/urazuke/announce.d.ts +7 -0
- package/dist/urazuke/announce.d.ts.map +1 -1
- package/dist/urazuke/announce.js +20 -0
- package/dist/urazuke/announce.js.map +1 -1
- package/dist/urazuke/catalog.d.ts +1 -1
- package/dist/urazuke/catalog.d.ts.map +1 -1
- package/dist/urazuke/catalog.js.map +1 -1
- package/dist/urazuke/close_gate.d.ts +31 -4
- package/dist/urazuke/close_gate.d.ts.map +1 -1
- package/dist/urazuke/close_gate.js +70 -13
- package/dist/urazuke/close_gate.js.map +1 -1
- package/dist/urazuke/current.d.ts +28 -0
- package/dist/urazuke/current.d.ts.map +1 -1
- package/dist/urazuke/current.js +18 -5
- package/dist/urazuke/current.js.map +1 -1
- package/dist/urazuke/cycle.d.ts +3 -0
- package/dist/urazuke/cycle.d.ts.map +1 -1
- package/dist/urazuke/cycle.js +5 -3
- package/dist/urazuke/cycle.js.map +1 -1
- package/dist/urazuke/evidence.d.ts +58 -1
- package/dist/urazuke/evidence.d.ts.map +1 -1
- package/dist/urazuke/evidence.js +203 -27
- package/dist/urazuke/evidence.js.map +1 -1
- package/dist/urazuke/evidence_env.d.ts +78 -0
- package/dist/urazuke/evidence_env.d.ts.map +1 -0
- package/dist/urazuke/evidence_env.js +341 -0
- package/dist/urazuke/evidence_env.js.map +1 -0
- package/dist/urazuke/freeze.d.ts.map +1 -1
- package/dist/urazuke/freeze.js +16 -9
- package/dist/urazuke/freeze.js.map +1 -1
- package/dist/urazuke/gate.d.ts +48 -0
- package/dist/urazuke/gate.d.ts.map +1 -1
- package/dist/urazuke/gate.js +251 -25
- package/dist/urazuke/gate.js.map +1 -1
- package/dist/urazuke/gates_data.d.ts +30 -3
- package/dist/urazuke/gates_data.d.ts.map +1 -1
- package/dist/urazuke/gates_data.js +51 -5
- package/dist/urazuke/gates_data.js.map +1 -1
- package/dist/urazuke/gates_pull.d.ts +40 -0
- package/dist/urazuke/gates_pull.d.ts.map +1 -1
- package/dist/urazuke/gates_pull.js +118 -8
- package/dist/urazuke/gates_pull.js.map +1 -1
- package/dist/urazuke/manual_cases.d.ts +11 -1
- package/dist/urazuke/manual_cases.d.ts.map +1 -1
- package/dist/urazuke/manual_cases.js +1 -0
- package/dist/urazuke/manual_cases.js.map +1 -1
- package/dist/urazuke/overrides.d.ts +107 -0
- package/dist/urazuke/overrides.d.ts.map +1 -0
- package/dist/urazuke/overrides.js +128 -0
- package/dist/urazuke/overrides.js.map +1 -0
- package/dist/urazuke/probes.d.ts.map +1 -1
- package/dist/urazuke/probes.js +51 -0
- package/dist/urazuke/probes.js.map +1 -1
- package/dist/urazuke/profiles.d.ts +135 -0
- package/dist/urazuke/profiles.d.ts.map +1 -0
- package/dist/urazuke/profiles.js +470 -0
- package/dist/urazuke/profiles.js.map +1 -0
- package/dist/urazuke/receipt_audit.d.ts +67 -0
- package/dist/urazuke/receipt_audit.d.ts.map +1 -0
- package/dist/urazuke/receipt_audit.js +103 -0
- package/dist/urazuke/receipt_audit.js.map +1 -0
- package/dist/urazuke/receipts.d.ts +22 -0
- package/dist/urazuke/receipts.d.ts.map +1 -1
- package/dist/urazuke/receipts.js +44 -0
- package/dist/urazuke/receipts.js.map +1 -1
- package/dist/urazuke/report.d.ts +30 -0
- package/dist/urazuke/report.d.ts.map +1 -1
- package/dist/urazuke/report.js +39 -0
- package/dist/urazuke/report.js.map +1 -1
- package/dist/urazuke/reset.d.ts +35 -0
- package/dist/urazuke/reset.d.ts.map +1 -0
- package/dist/urazuke/reset.js +150 -0
- package/dist/urazuke/reset.js.map +1 -0
- package/dist/urazuke/retro.d.ts +5 -1
- package/dist/urazuke/retro.d.ts.map +1 -1
- package/dist/urazuke/retro.js +21 -8
- package/dist/urazuke/retro.js.map +1 -1
- package/dist/urazuke/section.d.ts.map +1 -1
- package/dist/urazuke/section.js +17 -2
- package/dist/urazuke/section.js.map +1 -1
- package/dist/urazuke/semantics.d.ts +173 -0
- package/dist/urazuke/semantics.d.ts.map +1 -0
- package/dist/urazuke/semantics.js +232 -0
- package/dist/urazuke/semantics.js.map +1 -0
- package/dist/urazuke/start.d.ts +8 -0
- package/dist/urazuke/start.d.ts.map +1 -1
- package/dist/urazuke/start.js +10 -2
- package/dist/urazuke/start.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/workflow/orchestrator.d.ts.map +1 -1
- package/dist/workflow/orchestrator.js +6 -7
- package/dist/workflow/orchestrator.js.map +1 -1
- package/docs/doctrine/urazuke.md +173 -2
- package/package.json +24 -20
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EL MOTIVO TIPADO DE UN CIERRE FORZADO -- M-02 (decision del dueno,
|
|
3
|
+
* 2026-11-01).
|
|
4
|
+
*
|
|
5
|
+
* DE DONDE SALE. El experimento midio que un pendiente de DOCUMENTACION no
|
|
6
|
+
* puede cerrar: la compuerta del cierre exige rojo + verde + regresion, y un
|
|
7
|
+
* documento no tiene conducta que un test distinga, asi que el unico camino
|
|
8
|
+
* es el `force_reason`. El pedido original era una clase de pendiente que se
|
|
9
|
+
* autorizara sola. Eso se descarto a proposito: la garantia de que un
|
|
10
|
+
* pendiente de CODIGO no se declare "de documentacion" no se puede dar hoy
|
|
11
|
+
* con un mecanismo, y una clase que se autoriza sola es un agujero con mejor
|
|
12
|
+
* nombre. Un cierre forzado honesto es mejor.
|
|
13
|
+
*
|
|
14
|
+
* LA CONDICION QUE LO HACE SERVIR, y es del dueno: "el motivo tipado tiene
|
|
15
|
+
* que ser un NUMERO en el reporte. Que se pueda preguntar cuantos cierres se
|
|
16
|
+
* forzaron por `documentacion_sin_rojo_posible` y que haya una respuesta. Si
|
|
17
|
+
* el tipo existe pero nadie lo cuenta, es el mismo agujero con mejor nombre
|
|
18
|
+
* -- y peor, porque suena resuelto."
|
|
19
|
+
*
|
|
20
|
+
* Asi que este modulo trae las dos mitades y ninguna sirve sin la otra:
|
|
21
|
+
*
|
|
22
|
+
* 1. EL TIPO, de un catalogo CERRADO. `force_reason` sigue siendo la prosa
|
|
23
|
+
* del dueno (es su decision y su firma), y `force_kind` la clasifica.
|
|
24
|
+
* Un tipo que no esta en el catalogo se RECHAZA nombrando los que hay:
|
|
25
|
+
* aceptar uno libre volveria el contador una nube de sinonimos, que es
|
|
26
|
+
* no contar.
|
|
27
|
+
*
|
|
28
|
+
* 2. EL CONTADOR. El override se guarda ESTRUCTURADO en el history del
|
|
29
|
+
* item (`entry.override`), no como prosa, y la retrospectiva lo cuenta
|
|
30
|
+
* por tipo. Antes se contaba con un `/OVERRIDE/` sobre el texto de la
|
|
31
|
+
* nota: un numero total y ninguna pregunta contestable. Los viejos
|
|
32
|
+
* siguen contandose, en su propia fila (`sin_tipo`): descontarlos haria
|
|
33
|
+
* BAJAR el total el dia del arreglo, que es la peor forma de medir una
|
|
34
|
+
* deuda -- parece que se arreglo algo.
|
|
35
|
+
*
|
|
36
|
+
* Y el dia que el numero de un tipo crezca, se ve. Si no crece, el problema
|
|
37
|
+
* era chico y nos ahorramos el mecanismo.
|
|
38
|
+
*
|
|
39
|
+
* ASCII-only.
|
|
40
|
+
*/
|
|
41
|
+
/** Que compuerta se saltea el override. Se guarda porque son exigencias
|
|
42
|
+
* distintas: "faltan recibos" y "el peldano esta en rojo" se arreglan de
|
|
43
|
+
* maneras distintas, y un contador que las sume es un contador que no
|
|
44
|
+
* sirve para decidir nada. */
|
|
45
|
+
export type OverrideGate = 'evidence' | 'step' | 'order';
|
|
46
|
+
/** EL CATALOGO CERRADO. Cada entrada es un motivo por el que un cierre
|
|
47
|
+
* forzado puede ser legitimo; el texto es lo que ve quien tiene que
|
|
48
|
+
* elegir, asi que dice el caso y no la categoria. */
|
|
49
|
+
export declare const OVERRIDE_KINDS: Readonly<Record<string, string>>;
|
|
50
|
+
export declare const OVERRIDE_KIND_NAMES: readonly string[];
|
|
51
|
+
/** El minimo de la prosa. 15 caracteres era el numero del `force_reason`
|
|
52
|
+
* antes de esto y se mantiene: el tipo clasifica, no reemplaza al motivo. */
|
|
53
|
+
export declare const OVERRIDE_REASON_MIN = 15;
|
|
54
|
+
/** Lo que se guarda en el history, estructurado. Es lo que el contador lee:
|
|
55
|
+
* prosa no, nunca mas. */
|
|
56
|
+
export interface OverrideRecord {
|
|
57
|
+
gate: OverrideGate;
|
|
58
|
+
kind: string;
|
|
59
|
+
/** Cuantas exigencias quedaron sin cumplir (recibos faltantes, o 1 para
|
|
60
|
+
* un peldano en rojo). Le da peso al numero: forzar sobre un faltante y
|
|
61
|
+
* forzar sobre tres no es lo mismo. */
|
|
62
|
+
missing: number;
|
|
63
|
+
}
|
|
64
|
+
/** El catalogo como texto, para el mensaje que lo pide. Una sola redaccion:
|
|
65
|
+
* el verbo, el CLI y el manifiesto la comparten. */
|
|
66
|
+
export declare function renderOverrideCatalogue(): string;
|
|
67
|
+
export interface OverrideCheck {
|
|
68
|
+
ok: boolean;
|
|
69
|
+
/** El problema, listo para mostrar. Vacio cuando ok. */
|
|
70
|
+
error?: string;
|
|
71
|
+
kind?: string;
|
|
72
|
+
}
|
|
73
|
+
/** Validar el par (motivo, tipo) de un cierre forzado.
|
|
74
|
+
*
|
|
75
|
+
* El tipo es OBLIGATORIO cuando se fuerza. Es la unica forma de que el
|
|
76
|
+
* contador exista: un campo opcional en un verbo es un campo que nadie
|
|
77
|
+
* manda -- medido en este mismo registro, 106 cierres con `shipped` y UNO
|
|
78
|
+
* con expediente, hasta que el verbo se nego sin el. */
|
|
79
|
+
export declare function checkOverride(reason: string, kind: unknown): OverrideCheck;
|
|
80
|
+
export interface OverrideCounts {
|
|
81
|
+
total: number;
|
|
82
|
+
/** Por tipo del catalogo. Solo aparecen los que tienen al menos uno: una
|
|
83
|
+
* tabla con seis ceros no es informacion. */
|
|
84
|
+
by_kind: Record<string, number>;
|
|
85
|
+
/** Por compuerta salteada. */
|
|
86
|
+
by_gate: Record<string, number>;
|
|
87
|
+
/** Los anteriores al tipo (prosa suelta con "OVERRIDE" en la nota). Se
|
|
88
|
+
* cuentan: descontarlos haria bajar el total el dia del arreglo. */
|
|
89
|
+
untyped: number;
|
|
90
|
+
}
|
|
91
|
+
/** La forma minima de una entrada de history que este contador necesita.
|
|
92
|
+
* Local a proposito: el contador no tiene que importar el store para
|
|
93
|
+
* contar, y asi se puede probar con datos a mano. */
|
|
94
|
+
export interface CountableHistoryEntry {
|
|
95
|
+
at?: unknown;
|
|
96
|
+
note?: string;
|
|
97
|
+
override?: OverrideRecord;
|
|
98
|
+
}
|
|
99
|
+
/** Contar los overrides de una lista de items. `inWindow` decide la
|
|
100
|
+
* ventana (la retrospectiva usa la suya); sin ella cuenta todo. */
|
|
101
|
+
export declare function countOverrides(items: ReadonlyArray<{
|
|
102
|
+
history?: CountableHistoryEntry[];
|
|
103
|
+
}>, inWindow?: (at: unknown) => boolean): OverrideCounts;
|
|
104
|
+
/** Las filas del reporte, en orden de mas a menos. Vive aca y no en el
|
|
105
|
+
* renderizador para que el numero y su etiqueta no puedan separarse. */
|
|
106
|
+
export declare function renderOverrideRows(c: OverrideCounts): Array<[string, number]>;
|
|
107
|
+
//# sourceMappingURL=overrides.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../src/urazuke/overrides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH;;;+BAG+B;AAC/B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzD;;sDAEsD;AACtD,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAa3D,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAgC,CAAC;AAElF;8EAC8E;AAC9E,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC;2BAC2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb;;4CAEwC;IACxC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;qDACqD;AACrD,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;yDAKyD;AACzD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,aAAa,CAsB1E;AAMD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd;kDAC8C;IAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC;yEACqE;IACrE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;sDAEsD;AACtD,MAAM,WAAW,qBAAqB;IACpC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;oEACoE;AACpE,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,CAAC;IAAE,OAAO,CAAC,EAAE,qBAAqB,EAAE,CAAA;CAAE,CAAC,EAC3D,QAAQ,GAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OAAoB,GAC9C,cAAc,CAoBhB;AAED;yEACyE;AACzE,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,cAAc,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAU7E"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EL MOTIVO TIPADO DE UN CIERRE FORZADO -- M-02 (decision del dueno,
|
|
3
|
+
* 2026-11-01).
|
|
4
|
+
*
|
|
5
|
+
* DE DONDE SALE. El experimento midio que un pendiente de DOCUMENTACION no
|
|
6
|
+
* puede cerrar: la compuerta del cierre exige rojo + verde + regresion, y un
|
|
7
|
+
* documento no tiene conducta que un test distinga, asi que el unico camino
|
|
8
|
+
* es el `force_reason`. El pedido original era una clase de pendiente que se
|
|
9
|
+
* autorizara sola. Eso se descarto a proposito: la garantia de que un
|
|
10
|
+
* pendiente de CODIGO no se declare "de documentacion" no se puede dar hoy
|
|
11
|
+
* con un mecanismo, y una clase que se autoriza sola es un agujero con mejor
|
|
12
|
+
* nombre. Un cierre forzado honesto es mejor.
|
|
13
|
+
*
|
|
14
|
+
* LA CONDICION QUE LO HACE SERVIR, y es del dueno: "el motivo tipado tiene
|
|
15
|
+
* que ser un NUMERO en el reporte. Que se pueda preguntar cuantos cierres se
|
|
16
|
+
* forzaron por `documentacion_sin_rojo_posible` y que haya una respuesta. Si
|
|
17
|
+
* el tipo existe pero nadie lo cuenta, es el mismo agujero con mejor nombre
|
|
18
|
+
* -- y peor, porque suena resuelto."
|
|
19
|
+
*
|
|
20
|
+
* Asi que este modulo trae las dos mitades y ninguna sirve sin la otra:
|
|
21
|
+
*
|
|
22
|
+
* 1. EL TIPO, de un catalogo CERRADO. `force_reason` sigue siendo la prosa
|
|
23
|
+
* del dueno (es su decision y su firma), y `force_kind` la clasifica.
|
|
24
|
+
* Un tipo que no esta en el catalogo se RECHAZA nombrando los que hay:
|
|
25
|
+
* aceptar uno libre volveria el contador una nube de sinonimos, que es
|
|
26
|
+
* no contar.
|
|
27
|
+
*
|
|
28
|
+
* 2. EL CONTADOR. El override se guarda ESTRUCTURADO en el history del
|
|
29
|
+
* item (`entry.override`), no como prosa, y la retrospectiva lo cuenta
|
|
30
|
+
* por tipo. Antes se contaba con un `/OVERRIDE/` sobre el texto de la
|
|
31
|
+
* nota: un numero total y ninguna pregunta contestable. Los viejos
|
|
32
|
+
* siguen contandose, en su propia fila (`sin_tipo`): descontarlos haria
|
|
33
|
+
* BAJAR el total el dia del arreglo, que es la peor forma de medir una
|
|
34
|
+
* deuda -- parece que se arreglo algo.
|
|
35
|
+
*
|
|
36
|
+
* Y el dia que el numero de un tipo crezca, se ve. Si no crece, el problema
|
|
37
|
+
* era chico y nos ahorramos el mecanismo.
|
|
38
|
+
*
|
|
39
|
+
* ASCII-only.
|
|
40
|
+
*/
|
|
41
|
+
/** EL CATALOGO CERRADO. Cada entrada es un motivo por el que un cierre
|
|
42
|
+
* forzado puede ser legitimo; el texto es lo que ve quien tiene que
|
|
43
|
+
* elegir, asi que dice el caso y no la categoria. */
|
|
44
|
+
export const OVERRIDE_KINDS = {
|
|
45
|
+
documentacion_sin_rojo_posible: 'es documentacion (o configuracion): no hay conducta que un test pueda distinguir, asi que no hay rojo que producir',
|
|
46
|
+
rojo_imposible_en_este_entorno: 'el rojo necesita hardware, un servicio externo o una credencial que no esta en esta maquina',
|
|
47
|
+
evidencia_fuera_de_forge: 'la evidencia existe pero la produjo otra herramienta (una corrida de CI, un informe de un tercero) y no hay recibo',
|
|
48
|
+
insumo_del_dueno_pendiente: 'el peldano espera un insumo mio que todavia no prepare, y decido avanzar igual',
|
|
49
|
+
cierre_fuera_de_orden_a_sabiendas: 'cierro fuera del orden obligatorio a sabiendas, por un motivo que escribo',
|
|
50
|
+
deuda_asumida_por_urgencia: 'decido entregar ahora y asumir la deuda, que queda contada aca',
|
|
51
|
+
};
|
|
52
|
+
export const OVERRIDE_KIND_NAMES = Object.keys(OVERRIDE_KINDS);
|
|
53
|
+
/** El minimo de la prosa. 15 caracteres era el numero del `force_reason`
|
|
54
|
+
* antes de esto y se mantiene: el tipo clasifica, no reemplaza al motivo. */
|
|
55
|
+
export const OVERRIDE_REASON_MIN = 15;
|
|
56
|
+
/** El catalogo como texto, para el mensaje que lo pide. Una sola redaccion:
|
|
57
|
+
* el verbo, el CLI y el manifiesto la comparten. */
|
|
58
|
+
export function renderOverrideCatalogue() {
|
|
59
|
+
return OVERRIDE_KIND_NAMES.map((k) => '`' + k + '` (' + OVERRIDE_KINDS[k] + ')').join('; ');
|
|
60
|
+
}
|
|
61
|
+
/** Validar el par (motivo, tipo) de un cierre forzado.
|
|
62
|
+
*
|
|
63
|
+
* El tipo es OBLIGATORIO cuando se fuerza. Es la unica forma de que el
|
|
64
|
+
* contador exista: un campo opcional en un verbo es un campo que nadie
|
|
65
|
+
* manda -- medido en este mismo registro, 106 cierres con `shipped` y UNO
|
|
66
|
+
* con expediente, hasta que el verbo se nego sin el. */
|
|
67
|
+
export function checkOverride(reason, kind) {
|
|
68
|
+
const prose = String(reason ?? '').trim();
|
|
69
|
+
if (prose.length < OVERRIDE_REASON_MIN) {
|
|
70
|
+
return { ok: false, error: 'el motivo escrito tiene que tener al menos ' + OVERRIDE_REASON_MIN + ' caracteres' };
|
|
71
|
+
}
|
|
72
|
+
const k = String(kind ?? '').trim();
|
|
73
|
+
if (!k) {
|
|
74
|
+
return {
|
|
75
|
+
ok: false,
|
|
76
|
+
error: 'falta `force_kind`: un cierre forzado se CUENTA por tipo, y un motivo sin tipo no entra'
|
|
77
|
+
+ ' en ningun numero del reporte. Elegi uno de: ' + renderOverrideCatalogue(),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
if (!OVERRIDE_KIND_NAMES.includes(k)) {
|
|
81
|
+
return {
|
|
82
|
+
ok: false,
|
|
83
|
+
error: '`force_kind` "' + k + '" no esta en el catalogo. El catalogo es CERRADO a proposito:'
|
|
84
|
+
+ ' un tipo libre convierte el contador en una nube de sinonimos. Elegi uno de: '
|
|
85
|
+
+ renderOverrideCatalogue(),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return { ok: true, kind: k };
|
|
89
|
+
}
|
|
90
|
+
/** Contar los overrides de una lista de items. `inWindow` decide la
|
|
91
|
+
* ventana (la retrospectiva usa la suya); sin ella cuenta todo. */
|
|
92
|
+
export function countOverrides(items, inWindow = () => true) {
|
|
93
|
+
const out = { total: 0, by_kind: {}, by_gate: {}, untyped: 0 };
|
|
94
|
+
for (const it of items) {
|
|
95
|
+
for (const h of it.history ?? []) {
|
|
96
|
+
if (!inWindow(h.at))
|
|
97
|
+
continue;
|
|
98
|
+
const ov = h.override;
|
|
99
|
+
if (ov && typeof ov.kind === 'string') {
|
|
100
|
+
out.total++;
|
|
101
|
+
out.by_kind[ov.kind] = (out.by_kind[ov.kind] ?? 0) + 1;
|
|
102
|
+
out.by_gate[ov.gate] = (out.by_gate[ov.gate] ?? 0) + 1;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
/* El camino viejo: prosa. Se cuenta y se marca como sin tipo. */
|
|
106
|
+
if (typeof h.note === 'string' && /OVERRIDE/.test(h.note)) {
|
|
107
|
+
out.total++;
|
|
108
|
+
out.untyped++;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return out;
|
|
113
|
+
}
|
|
114
|
+
/** Las filas del reporte, en orden de mas a menos. Vive aca y no en el
|
|
115
|
+
* renderizador para que el numero y su etiqueta no puedan separarse. */
|
|
116
|
+
export function renderOverrideRows(c) {
|
|
117
|
+
const rows = [['Overrides de compuertas (total)', c.total]];
|
|
118
|
+
for (const [k, n] of Object.entries(c.by_kind).sort((a, b) => b[1] - a[1])) {
|
|
119
|
+
rows.push([' por motivo `' + k + '`', n]);
|
|
120
|
+
}
|
|
121
|
+
if (c.untyped)
|
|
122
|
+
rows.push([' sin tipo (anteriores a M-02)', c.untyped]);
|
|
123
|
+
for (const [g, n] of Object.entries(c.by_gate).sort((a, b) => b[1] - a[1])) {
|
|
124
|
+
rows.push([' compuerta salteada: ' + g, n]);
|
|
125
|
+
}
|
|
126
|
+
return rows;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=overrides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/urazuke/overrides.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probes.d.ts","sourceRoot":"","sources":["../../src/urazuke/probes.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"probes.d.ts","sourceRoot":"","sources":["../../src/urazuke/probes.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAyFtD;AAED;0BAC0B;AAC1B,wBAAgB,OAAO,CAAC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GAAG,OAAO,CAInG;AAED;;2DAE2D;AAC3D,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ9E"}
|
package/dist/urazuke/probes.js
CHANGED
|
@@ -47,6 +47,57 @@ export function realProbes(slug) {
|
|
|
47
47
|
return { with_report: 0, without_report: 0 };
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
|
+
pendingsProfiles: async () => {
|
|
51
|
+
/* Peldano 5, Pieza 6. La fuente es el REGISTRO (decision del dueno,
|
|
52
|
+
* 2026-11-01): `PendingSpec` y no docs/PENDING.md, porque una
|
|
53
|
+
* compuerta no puede medir prosa y porque el otro evaluador del mismo
|
|
54
|
+
* peldano ya mide aca. */
|
|
55
|
+
try {
|
|
56
|
+
const { listPending } = await import('../pending/store.js');
|
|
57
|
+
const open = await listPending(slug, { status: 'open' });
|
|
58
|
+
const plan = open.filter((p) => !p.workflow || p.workflow.ad_hoc);
|
|
59
|
+
const touching = [];
|
|
60
|
+
const undeclared = [];
|
|
61
|
+
for (const item of plan) {
|
|
62
|
+
const spec = item.spec;
|
|
63
|
+
if (!spec || spec.touches_screen == null) {
|
|
64
|
+
undeclared.push(item.id);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (spec.touches_screen !== true)
|
|
68
|
+
continue;
|
|
69
|
+
const missing = [];
|
|
70
|
+
if (!String(spec.convergence_group ?? '').trim())
|
|
71
|
+
missing.push('convergence_group');
|
|
72
|
+
const profiles = Array.isArray(spec.profiles) ? spec.profiles.filter((x) => String(x).trim()) : [];
|
|
73
|
+
if (!profiles.length)
|
|
74
|
+
missing.push('profiles');
|
|
75
|
+
const per = spec.acceptance_per_profile ?? {};
|
|
76
|
+
const missingPer = profiles.filter((p) => !String(per[p] ?? '').trim());
|
|
77
|
+
if (!profiles.length || missingPer.length) {
|
|
78
|
+
missing.push('acceptance_per_profile' + (missingPer.length ? ' (' + missingPer.join(', ') + ')' : ''));
|
|
79
|
+
}
|
|
80
|
+
touching.push({ id: item.id, missing });
|
|
81
|
+
}
|
|
82
|
+
return { plan: plan.length, touching, undeclared };
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
/* Fail-closed: un registro que no se pudo leer no dice "no hay
|
|
86
|
+
* pendientes de pantalla". Se devuelve el plan en cero y todos sin
|
|
87
|
+
* declarar, que es lo que el evaluador reporta como no mirado. */
|
|
88
|
+
return { plan: 0, touching: [], undeclared: [] };
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
receiptIndex: async () => {
|
|
92
|
+
try {
|
|
93
|
+
const { readReceipts } = await import('./receipts.js');
|
|
94
|
+
const f = await readReceipts(slug);
|
|
95
|
+
return f.items.map((r) => ({ id: r.id, kind: r.kind, verdict: r.verdict }));
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
},
|
|
50
101
|
receipts: async () => {
|
|
51
102
|
try {
|
|
52
103
|
const { readReceipts, summarizeReceipts } = await import('./receipts.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probes.js","sourceRoot":"","sources":["../../src/urazuke/probes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO;QACL,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC;gBACH,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;gBAC1D,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzD,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACvG,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B,GAAG,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9G,CAAC;QACH,CAAC;QACD,YAAY,EAAE,KAAK,IAAI,EAAE;YACvB,IAAI,CAAC;gBACH,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACzD;wDACwC;gBACxC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YACvE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;YAC3C,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC1G,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC;gBAC5E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;YAClF,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC;gBACH,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;gBAC1E,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnC,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACrC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAClH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YAC9C,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;0BAC0B;AAC1B,MAAM,UAAU,OAAO,CAAC,IAAkE;IACxF,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9G,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC;AAC9E,CAAC;AAED;;2DAE2D;AAC3D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAmB;IAC1D,KAAK,MAAM,GAAG,IAAI,CAAC,2BAA2B,EAAE,uBAAuB,EAAE,eAAe,CAAC,EAAE,CAAC;QAC1F,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,GAAG,GAAG;gBAAE,OAAO,KAAK,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"probes.js","sourceRoot":"","sources":["../../src/urazuke/probes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
export declare const MATRIX_REL = "docs/PROFILE_MATRIX.md";
|
|
2
|
+
export declare const NAVIGATION_REL = ".forge/profile-navigation.json";
|
|
3
|
+
export declare const REACHABILITY_REL = ".forge/profile-reachability.json";
|
|
4
|
+
/** Una fila de la matriz: las cuatro columnas del Anexo H B2 y nada mas. */
|
|
5
|
+
export interface MatrixRow {
|
|
6
|
+
functionality: string;
|
|
7
|
+
/** El "hogar" de la funcionalidad: donde vive. */
|
|
8
|
+
home: string;
|
|
9
|
+
profiles: string[];
|
|
10
|
+
entry_point: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ProfileMatrix {
|
|
13
|
+
rows: MatrixRow[];
|
|
14
|
+
/** Lo que impide leer la matriz. Con problemas, `rows` puede estar vacio y
|
|
15
|
+
* eso NO se lee como "no hay funcionalidades". */
|
|
16
|
+
problems: string[];
|
|
17
|
+
}
|
|
18
|
+
/** La matriz, leida de la tabla markdown que trae las cuatro columnas.
|
|
19
|
+
*
|
|
20
|
+
* Se busca por CABECERA y no por posicion: una tabla con las columnas en
|
|
21
|
+
* otro orden es la misma matriz, y una tabla cualquiera del documento no lo
|
|
22
|
+
* es. Si ninguna tabla tiene las cuatro, eso es un problema nombrado -- no
|
|
23
|
+
* una matriz vacia. */
|
|
24
|
+
export declare function parseProfileMatrix(markdown: string): ProfileMatrix;
|
|
25
|
+
/** Los perfiles que la matriz nombra, ordenados. */
|
|
26
|
+
export declare function profilesOf(m: ProfileMatrix): string[];
|
|
27
|
+
/** Las funcionalidades que un perfil tiene, segun su fila. */
|
|
28
|
+
export declare function functionalitiesFor(m: ProfileMatrix, profile: string): string[];
|
|
29
|
+
/** La huella, AUTODESCRIPTA. Misma regla que el congelado y que el sello de
|
|
30
|
+
* la bateria: una huella que no se puede reproducir desde afuera no es
|
|
31
|
+
* evidencia, asi que la definicion viaja con el dato.
|
|
32
|
+
*
|
|
33
|
+
* Y la condicion que decide si sirve (dueno, 2026-11-01): la huella se
|
|
34
|
+
* RECALCULA desde la matriz y se compara contra la que el artefacto
|
|
35
|
+
* declara. Leer la declarada y compararla consigo misma daria verde sobre
|
|
36
|
+
* cualquier archivo. */
|
|
37
|
+
export declare const NAVIGATION_FINGERPRINT_SPEC: {
|
|
38
|
+
readonly algorithm: "sha256";
|
|
39
|
+
readonly encoding: "utf8";
|
|
40
|
+
readonly canonical_form: string;
|
|
41
|
+
readonly covers: string;
|
|
42
|
+
readonly excludes: string;
|
|
43
|
+
};
|
|
44
|
+
export declare function navigationCanonicalForm(m: ProfileMatrix): string;
|
|
45
|
+
export declare function navigationFingerprint(m: ProfileMatrix): string;
|
|
46
|
+
/** El artefacto de navegacion generado, como lo deja el proyecto. */
|
|
47
|
+
export interface NavigationArtifact {
|
|
48
|
+
version?: number;
|
|
49
|
+
generated_at?: string;
|
|
50
|
+
fingerprint?: {
|
|
51
|
+
value?: string;
|
|
52
|
+
algorithm?: string;
|
|
53
|
+
encoding?: string;
|
|
54
|
+
canonical_form?: string;
|
|
55
|
+
covers?: string;
|
|
56
|
+
excludes?: string;
|
|
57
|
+
};
|
|
58
|
+
/** Lo generado. No se interpreta: lo que la condicion protege es que la
|
|
59
|
+
* matriz sea el productor, y eso lo dice la huella. */
|
|
60
|
+
routes?: unknown[];
|
|
61
|
+
}
|
|
62
|
+
/** El resultado alcanzado por perfil (UX-12), como lo deja la corrida e2e.
|
|
63
|
+
*
|
|
64
|
+
* `reached` lista lo que se ALCANZO, no lo que se intento: esa es la
|
|
65
|
+
* diferencia entre un artefacto de resultado y una lista de deseos. */
|
|
66
|
+
export interface ReachabilityArtifact {
|
|
67
|
+
version?: number;
|
|
68
|
+
per_profile?: Record<string, {
|
|
69
|
+
reached?: string[];
|
|
70
|
+
receipt?: string;
|
|
71
|
+
}>;
|
|
72
|
+
}
|
|
73
|
+
export declare function readJsonArtifact<T>(root: string, rel: string): Promise<T | undefined>;
|
|
74
|
+
export declare function readProfileMatrix(root: string): Promise<ProfileMatrix>;
|
|
75
|
+
export type ProfileCheckStatus = 'ok' | 'fail' | 'unknown';
|
|
76
|
+
export interface ProfileCheck {
|
|
77
|
+
label: string;
|
|
78
|
+
status: ProfileCheckStatus;
|
|
79
|
+
detail: string;
|
|
80
|
+
/** La clase del defecto, cuando el metodo le da una. `authorization` es
|
|
81
|
+
* gravedad alta POR DEFINICION ESCRITA: un perfil que llega a donde no
|
|
82
|
+
* debe no es "la fila no coincide". El mensaje nombra la clase porque,
|
|
83
|
+
* medido en el experimento, cuando la gravedad se deja a interpretacion
|
|
84
|
+
* el que lee la subcalifica (cuatro pases calificaron 3 lo que la
|
|
85
|
+
* definicion pone en 1). */
|
|
86
|
+
kind?: 'missing' | 'authorization';
|
|
87
|
+
path?: string;
|
|
88
|
+
}
|
|
89
|
+
/** `profile_matrix` -- el peldano 8. */
|
|
90
|
+
export declare function checkProfileMatrix(input: {
|
|
91
|
+
matrix: ProfileMatrix;
|
|
92
|
+
navigation?: NavigationArtifact;
|
|
93
|
+
reachability?: ReachabilityArtifact;
|
|
94
|
+
/** Los recibos de evidencia del proyecto, por id. Sin el indice, la
|
|
95
|
+
* verificacion del recibo es `unknown` y no un aprobado. */
|
|
96
|
+
receipts?: Array<{
|
|
97
|
+
id: string;
|
|
98
|
+
kind: string;
|
|
99
|
+
verdict: string;
|
|
100
|
+
}>;
|
|
101
|
+
}): ProfileCheck[];
|
|
102
|
+
/** Lo que una sonda del registro de pendientes tiene que devolver para
|
|
103
|
+
* `pendings_profiles`. */
|
|
104
|
+
export interface PendingsProfilesProbe {
|
|
105
|
+
/** Pendientes abiertos del plan (sin las tareas canonicas del metodo). */
|
|
106
|
+
plan: number;
|
|
107
|
+
/** Los que declaran `touches_screen: true`. */
|
|
108
|
+
touching: Array<{
|
|
109
|
+
id: string;
|
|
110
|
+
missing: string[];
|
|
111
|
+
}>;
|
|
112
|
+
/** Los que NO declaran el campo: no se puede saber si tocan pantalla, y
|
|
113
|
+
* eso no es "no toca". */
|
|
114
|
+
undeclared: string[];
|
|
115
|
+
}
|
|
116
|
+
/** `pendings_profiles` -- el peldano 5. */
|
|
117
|
+
export declare function checkPendingsProfiles(p: PendingsProfilesProbe | undefined): ProfileCheck[];
|
|
118
|
+
/** Un caso del registro manual, con el eslabon nuevo. */
|
|
119
|
+
export interface ManualCaseView {
|
|
120
|
+
rule: string;
|
|
121
|
+
verdict: 'passed' | 'failed';
|
|
122
|
+
profile?: string;
|
|
123
|
+
/** EL ESLABON QUE FALTABA (dueno, 2026-11-01): la funcionalidad que el
|
|
124
|
+
* caso ejercita. "Derived from the matrix" exige caso -> funcionalidad;
|
|
125
|
+
* sin el, los perfiles afectados solo pueden salir de un campo escrito a
|
|
126
|
+
* mano, y un evaluador que confia en ese campo da verde con su insumo
|
|
127
|
+
* ausente. */
|
|
128
|
+
functionality?: string;
|
|
129
|
+
}
|
|
130
|
+
/** `manual_cases_per_profile` -- el peldano 10. */
|
|
131
|
+
export declare function checkManualCasesPerProfile(input: {
|
|
132
|
+
matrix: ProfileMatrix;
|
|
133
|
+
cases: ManualCaseView[];
|
|
134
|
+
}): ProfileCheck[];
|
|
135
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/urazuke/profiles.ts"],"names":[],"mappings":"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"}
|