@ingeniomaps/cauce 0.19.0 → 0.20.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/.github/workflows/agent-learning.yml +103 -13
- package/.github/workflows/ci.yml +2 -2
- package/CHANGELOG.md +63 -0
- package/automatization/hooks/README.md +27 -0
- package/engine/agents/fork.js +8 -3
- package/engine/agents/learning.js +12 -0
- package/engine/hooks/run.js +9 -0
- package/package.json +1 -1
- package/agents/roles/system/ai-governance-lead/learning/proposals/_template.md +0 -11
- package/agents/roles/system/ai-governance-lead/learning/reports/_template.md +0 -11
- package/agents/roles/system/ai-product-manager/learning/proposals/_template.md +0 -9
- package/agents/roles/system/ai-product-manager/learning/reports/_template.md +0 -9
- package/agents/roles/system/analytics-engineer/learning/proposals/_template.md +0 -9
- package/agents/roles/system/analytics-engineer/learning/reports/_template.md +0 -9
- package/agents/roles/system/backend-engineer/learning/proposals/_template.md +0 -15
- package/agents/roles/system/backend-engineer/learning/reports/_template.md +0 -14
- package/agents/roles/system/business-operations-manager/learning/proposals/_template.md +0 -13
- package/agents/roles/system/business-operations-manager/learning/reports/_template.md +0 -12
- package/agents/roles/system/business-strategist/learning/proposals/_template.md +0 -15
- package/agents/roles/system/business-strategist/learning/reports/_template.md +0 -14
- package/agents/roles/system/cloud-architect/learning/proposals/_template.md +0 -9
- package/agents/roles/system/cloud-architect/learning/reports/_template.md +0 -9
- package/agents/roles/system/community-manager/learning/proposals/_template.md +0 -11
- package/agents/roles/system/community-manager/learning/reports/_template.md +0 -10
- package/agents/roles/system/content-specialist/learning/proposals/_template.md +0 -15
- package/agents/roles/system/content-specialist/learning/reports/_template.md +0 -14
- package/agents/roles/system/customer-success-manager/learning/proposals/_template.md +0 -15
- package/agents/roles/system/customer-success-manager/learning/reports/_template.md +0 -14
- package/agents/roles/system/customer-support-specialist/learning/proposals/_template.md +0 -15
- package/agents/roles/system/customer-support-specialist/learning/reports/_template.md +0 -14
- package/agents/roles/system/data-analyst/learning/proposals/_template.md +0 -15
- package/agents/roles/system/data-analyst/learning/reports/_template.md +0 -14
- package/agents/roles/system/data-engineer/learning/proposals/_template.md +0 -11
- package/agents/roles/system/data-engineer/learning/reports/_template.md +0 -10
- package/agents/roles/system/data-scientist/learning/proposals/_template.md +0 -11
- package/agents/roles/system/data-scientist/learning/reports/_template.md +0 -10
- package/agents/roles/system/database-administrator/learning/proposals/_template.md +0 -9
- package/agents/roles/system/database-administrator/learning/reports/_template.md +0 -9
- package/agents/roles/system/developer-relations-engineer/learning/proposals/_template.md +0 -11
- package/agents/roles/system/developer-relations-engineer/learning/reports/_template.md +0 -10
- package/agents/roles/system/devops-engineer/learning/proposals/_template.md +0 -15
- package/agents/roles/system/devops-engineer/learning/reports/_template.md +0 -14
- package/agents/roles/system/engineering-manager/learning/proposals/_template.md +0 -13
- package/agents/roles/system/engineering-manager/learning/reports/_template.md +0 -12
- package/agents/roles/system/financial-controller/learning/proposals/_template.md +0 -15
- package/agents/roles/system/financial-controller/learning/reports/_template.md +0 -14
- package/agents/roles/system/finops-engineer/learning/proposals/_template.md +0 -15
- package/agents/roles/system/finops-engineer/learning/reports/_template.md +0 -14
- package/agents/roles/system/frontend-engineer/learning/proposals/_template.md +0 -15
- package/agents/roles/system/frontend-engineer/learning/reports/_template.md +0 -14
- package/agents/roles/system/growth-marketer/learning/proposals/_template.md +0 -15
- package/agents/roles/system/growth-marketer/learning/reports/_template.md +0 -14
- package/agents/roles/system/implementation-manager/learning/proposals/_template.md +0 -11
- package/agents/roles/system/implementation-manager/learning/reports/_template.md +0 -12
- package/agents/roles/system/legal-counsel/learning/proposals/_template.md +0 -14
- package/agents/roles/system/legal-counsel/learning/reports/_template.md +0 -14
- package/agents/roles/system/machine-learning-engineer/learning/proposals/_template.md +0 -11
- package/agents/roles/system/machine-learning-engineer/learning/reports/_template.md +0 -10
- package/agents/roles/system/mlops-engineer/learning/proposals/_template.md +0 -9
- package/agents/roles/system/mlops-engineer/learning/reports/_template.md +0 -9
- package/agents/roles/system/mobile-engineer/learning/proposals/_template.md +0 -15
- package/agents/roles/system/mobile-engineer/learning/reports/_template.md +0 -14
- package/agents/roles/system/partnerships-manager/learning/proposals/_template.md +0 -11
- package/agents/roles/system/partnerships-manager/learning/reports/_template.md +0 -10
- package/agents/roles/system/people-operations-manager/learning/proposals/_template.md +0 -14
- package/agents/roles/system/people-operations-manager/learning/reports/_template.md +0 -14
- package/agents/roles/system/privacy-compliance-specialist/learning/proposals/_template.md +0 -15
- package/agents/roles/system/privacy-compliance-specialist/learning/reports/_template.md +0 -14
- package/agents/roles/system/procurement-manager/learning/proposals/_template.md +0 -14
- package/agents/roles/system/procurement-manager/learning/reports/_template.md +0 -13
- package/agents/roles/system/product-manager/learning/proposals/_template.md +0 -15
- package/agents/roles/system/product-manager/learning/reports/_template.md +0 -14
- package/agents/roles/system/product-marketing-manager/learning/proposals/_template.md +0 -15
- package/agents/roles/system/product-marketing-manager/learning/reports/_template.md +0 -14
- package/agents/roles/system/project-manager/learning/proposals/_template.md +0 -13
- package/agents/roles/system/project-manager/learning/reports/_template.md +0 -12
- package/agents/roles/system/qa-engineer/learning/proposals/_template.md +0 -15
- package/agents/roles/system/qa-engineer/learning/reports/_template.md +0 -14
- package/agents/roles/system/release-manager/learning/proposals/_template.md +0 -13
- package/agents/roles/system/release-manager/learning/reports/_template.md +0 -12
- package/agents/roles/system/revenue-operations-manager/learning/proposals/_template.md +0 -13
- package/agents/roles/system/revenue-operations-manager/learning/reports/_template.md +0 -12
- package/agents/roles/system/sales-representative/learning/proposals/_template.md +0 -15
- package/agents/roles/system/sales-representative/learning/reports/_template.md +0 -14
- package/agents/roles/system/security-engineer/learning/proposals/_template.md +0 -15
- package/agents/roles/system/security-engineer/learning/reports/_template.md +0 -14
- package/agents/roles/system/site-reliability-engineer/learning/proposals/_template.md +0 -15
- package/agents/roles/system/site-reliability-engineer/learning/reports/_template.md +0 -14
- package/agents/roles/system/software-architect/learning/proposals/_template.md +0 -15
- package/agents/roles/system/software-architect/learning/reports/_template.md +0 -14
- package/agents/roles/system/solutions-engineer/learning/proposals/_template.md +0 -13
- package/agents/roles/system/solutions-engineer/learning/reports/_template.md +0 -12
- package/agents/roles/system/technical-program-manager/learning/proposals/_template.md +0 -9
- package/agents/roles/system/technical-program-manager/learning/reports/_template.md +0 -9
- package/agents/roles/system/technical-writer/learning/proposals/_template.md +0 -14
- package/agents/roles/system/technical-writer/learning/reports/_template.md +0 -12
- package/agents/roles/system/ui-designer/learning/proposals/_template.md +0 -15
- package/agents/roles/system/ui-designer/learning/reports/_template.md +0 -14
- package/agents/roles/system/user-researcher/learning/proposals/_template.md +0 -15
- package/agents/roles/system/user-researcher/learning/reports/_template.md +0 -14
- package/agents/roles/system/ux-designer/learning/proposals/_template.md +0 -15
- package/agents/roles/system/ux-designer/learning/reports/_template.md +0 -14
|
@@ -16,9 +16,10 @@ on:
|
|
|
16
16
|
required: false
|
|
17
17
|
default: ""
|
|
18
18
|
|
|
19
|
+
# Mínimo arriba: cada job eleva sólo lo que necesita. El que corre el agente se queda en `read` —
|
|
20
|
+
# ingiere contenido web que no controlamos y no tiene por qué poder escribir el repositorio.
|
|
19
21
|
permissions:
|
|
20
|
-
contents:
|
|
21
|
-
pull-requests: write
|
|
22
|
+
contents: read
|
|
22
23
|
|
|
23
24
|
jobs:
|
|
24
25
|
discover:
|
|
@@ -26,8 +27,8 @@ jobs:
|
|
|
26
27
|
outputs:
|
|
27
28
|
agents: ${{ steps.list.outputs.agents }}
|
|
28
29
|
steps:
|
|
29
|
-
- uses: actions/checkout@v4
|
|
30
|
-
- uses: actions/setup-node@v4
|
|
30
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
31
|
+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
|
|
31
32
|
with:
|
|
32
33
|
node-version: "24"
|
|
33
34
|
|
|
@@ -71,14 +72,16 @@ jobs:
|
|
|
71
72
|
if: github.event.schedule != '17 13 1 * *'
|
|
72
73
|
needs: discover
|
|
73
74
|
runs-on: ubuntu-latest
|
|
75
|
+
permissions:
|
|
76
|
+
contents: read
|
|
74
77
|
strategy:
|
|
75
78
|
fail-fast: false
|
|
76
79
|
max-parallel: 3
|
|
77
80
|
matrix:
|
|
78
81
|
agent: ${{ fromJSON(needs.discover.outputs.agents) }}
|
|
79
82
|
steps:
|
|
80
|
-
- uses: actions/checkout@v4
|
|
81
|
-
- uses: actions/setup-node@v4
|
|
83
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
84
|
+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
|
|
82
85
|
with:
|
|
83
86
|
node-version: "24"
|
|
84
87
|
- name: Check credential
|
|
@@ -118,7 +121,7 @@ jobs:
|
|
|
118
121
|
AGENT: ${{ matrix.agent }}
|
|
119
122
|
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
120
123
|
run: |
|
|
121
|
-
npm install -g @anthropic-ai/claude-code
|
|
124
|
+
npm install -g @anthropic-ai/claude-code@2.1.233
|
|
122
125
|
claude -p "Leé el learning/AUTOMATION.md del cargo $AGENT y ejecutá exactamente lo que declara. El informe de esta semana ya está creado y vacío: completalo. Cada afirmación necesita enlace, fecha y versión; lo que no puedas corroborar va a Preguntas abiertas en vez de afirmarse. El único archivo que escribís es ese informe."
|
|
123
126
|
- name: Detect changes
|
|
124
127
|
if: steps.creds.outputs.ready == 'true'
|
|
@@ -129,20 +132,102 @@ jobs:
|
|
|
129
132
|
else
|
|
130
133
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
131
134
|
fi
|
|
132
|
-
|
|
135
|
+
# El informe sale de acá como artifact, no como commit. Lo que el agente escribió fuera de su
|
|
136
|
+
# informe se queda en este runner y muere con él: no hay credencial con que sacarlo.
|
|
137
|
+
- name: Collect report
|
|
133
138
|
if: steps.creds.outputs.ready == 'true' && steps.changes.outputs.changed == 'true'
|
|
139
|
+
id: collect
|
|
134
140
|
env:
|
|
135
141
|
AGENT: ${{ matrix.agent }}
|
|
136
|
-
GH_TOKEN: ${{ github.token }}
|
|
137
142
|
run: |
|
|
138
143
|
stamp="$(date -u +%Y-%m-%d)"
|
|
139
|
-
branch="automation/$AGENT-research-$stamp"
|
|
140
144
|
report="$(git diff --name-only -- "agents/*/$AGENT/learning/reports/$stamp.md")"
|
|
141
145
|
if [ -z "$report" ]; then
|
|
142
|
-
echo "El agente
|
|
146
|
+
echo "El agente no escribió su informe; lo que haya tocado no sale de acá." >&2
|
|
143
147
|
git diff --name-only >&2
|
|
144
148
|
exit 1
|
|
145
149
|
fi
|
|
150
|
+
echo "path=$report" >> "$GITHUB_OUTPUT"
|
|
151
|
+
echo "stamp=$stamp" >> "$GITHUB_OUTPUT"
|
|
152
|
+
- name: Upload report
|
|
153
|
+
if: steps.collect.outputs.path != ''
|
|
154
|
+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
155
|
+
with:
|
|
156
|
+
name: research-${{ matrix.agent }}
|
|
157
|
+
path: ${{ steps.collect.outputs.path }}
|
|
158
|
+
retention-days: 7
|
|
159
|
+
|
|
160
|
+
# Segundo job y no un paso más: acá vive la credencial de escritura, y para llegar hasta acá el
|
|
161
|
+
# informe tuvo que pasar por un artifact. Este job no habla con ningún modelo ni lee la web —
|
|
162
|
+
# recibe un archivo, comprueba que caiga donde debe, y lo commitea.
|
|
163
|
+
research-pr:
|
|
164
|
+
needs: [discover, research]
|
|
165
|
+
if: needs.research.result == 'success'
|
|
166
|
+
runs-on: ubuntu-latest
|
|
167
|
+
permissions:
|
|
168
|
+
contents: write
|
|
169
|
+
pull-requests: write
|
|
170
|
+
strategy:
|
|
171
|
+
fail-fast: false
|
|
172
|
+
max-parallel: 3
|
|
173
|
+
matrix:
|
|
174
|
+
agent: ${{ fromJSON(needs.discover.outputs.agents) }}
|
|
175
|
+
steps:
|
|
176
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
177
|
+
- name: Download report
|
|
178
|
+
id: fetch
|
|
179
|
+
continue-on-error: true
|
|
180
|
+
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
|
181
|
+
with:
|
|
182
|
+
name: research-${{ matrix.agent }}
|
|
183
|
+
path: ${{ github.workspace }}
|
|
184
|
+
- name: Resolve CLI
|
|
185
|
+
if: steps.fetch.outcome == 'success'
|
|
186
|
+
id: cli
|
|
187
|
+
run: |
|
|
188
|
+
for candidate in tools/ops.js engine/cli/ops.js; do
|
|
189
|
+
if [ -f "$candidate" ]; then
|
|
190
|
+
echo "path=$candidate" >> "$GITHUB_OUTPUT"
|
|
191
|
+
exit 0
|
|
192
|
+
fi
|
|
193
|
+
done
|
|
194
|
+
echo "No se encontró el CLI de Cauce." >&2
|
|
195
|
+
exit 1
|
|
196
|
+
- name: Open research pull request
|
|
197
|
+
if: steps.fetch.outcome == 'success'
|
|
198
|
+
env:
|
|
199
|
+
AGENT: ${{ matrix.agent }}
|
|
200
|
+
OPS: ${{ steps.cli.outputs.path }}
|
|
201
|
+
GH_TOKEN: ${{ github.token }}
|
|
202
|
+
run: |
|
|
203
|
+
stamp="$(date -u +%Y-%m-%d)"
|
|
204
|
+
branch="automation/$AGENT-research-$stamp"
|
|
205
|
+
# El artifact trae contenido, no destino: `upload-artifact` aplana la ruta de un archivo
|
|
206
|
+
# suelto, así que llega como `<fecha>.md` a la raíz. Dónde va se resuelve **acá**, con el
|
|
207
|
+
# mismo CLI que resolvió el catálogo antes, y eso además es la garantía: nada de lo que
|
|
208
|
+
# venga en el artifact puede redirigir dónde aterriza el archivo.
|
|
209
|
+
dir="$(node "$OPS" agents list --json | node -e '
|
|
210
|
+
let s = ""
|
|
211
|
+
process.stdin.on("data", (d) => { s += d }).on("end", () => {
|
|
212
|
+
const found = JSON.parse(s).find((role) => role.slug === process.env.AGENT)
|
|
213
|
+
if (!found) { console.error("agente desconocido"); process.exit(1) }
|
|
214
|
+
console.log(found.path)
|
|
215
|
+
})')"
|
|
216
|
+
dest="$dir/learning/reports/$stamp.md"
|
|
217
|
+
mkdir -p "$(dirname "$dest")"
|
|
218
|
+
mv "$stamp.md" "$dest"
|
|
219
|
+
report="$(git diff --name-only -- "agents/*/$AGENT/learning/reports/$stamp.md")"
|
|
220
|
+
otros="$(git status --porcelain | awk '{print $2}' | grep -v -F "$dest" || true)"
|
|
221
|
+
if [ -z "$report" ] && [ ! -f "$dest" ]; then
|
|
222
|
+
echo "No llegó el informe de $AGENT." >&2
|
|
223
|
+
exit 1
|
|
224
|
+
fi
|
|
225
|
+
if [ -n "$otros" ]; then
|
|
226
|
+
echo "Se esperaba exactamente el informe de $AGENT y nada más." >&2
|
|
227
|
+
git status --porcelain >&2
|
|
228
|
+
exit 1
|
|
229
|
+
fi
|
|
230
|
+
report="$dest"
|
|
146
231
|
git config user.name "github-actions[bot]"
|
|
147
232
|
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
148
233
|
git switch -c "$branch"
|
|
@@ -153,18 +238,23 @@ jobs:
|
|
|
153
238
|
--title "$AGENT weekly research — $stamp" \
|
|
154
239
|
--body "Investigación semanal de la profesión. No modifica SKILL.md ni propone cambios: alimenta la propuesta mensual."
|
|
155
240
|
|
|
241
|
+
# Este job no habla con ningún modelo: consolida informes ya commiteados con el CLI y abre el PR.
|
|
242
|
+
# Por eso puede escribir sin la separación que exige `research`.
|
|
156
243
|
propose:
|
|
157
244
|
if: github.event.schedule == '17 13 1 * *' || github.event_name == 'workflow_dispatch'
|
|
158
245
|
needs: discover
|
|
159
246
|
runs-on: ubuntu-latest
|
|
247
|
+
permissions:
|
|
248
|
+
contents: write
|
|
249
|
+
pull-requests: write
|
|
160
250
|
strategy:
|
|
161
251
|
fail-fast: false
|
|
162
252
|
max-parallel: 5
|
|
163
253
|
matrix:
|
|
164
254
|
agent: ${{ fromJSON(needs.discover.outputs.agents) }}
|
|
165
255
|
steps:
|
|
166
|
-
- uses: actions/checkout@v4
|
|
167
|
-
- uses: actions/setup-node@v4
|
|
256
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
257
|
+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
|
|
168
258
|
with:
|
|
169
259
|
node-version: "24"
|
|
170
260
|
|
package/.github/workflows/ci.yml
CHANGED
|
@@ -17,8 +17,8 @@ jobs:
|
|
|
17
17
|
ci:
|
|
18
18
|
runs-on: ubuntu-latest
|
|
19
19
|
steps:
|
|
20
|
-
- uses: actions/checkout@v4
|
|
21
|
-
- uses: actions/setup-node@v4
|
|
20
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
21
|
+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
|
|
22
22
|
with:
|
|
23
23
|
node-version: "24"
|
|
24
24
|
# Valida planning, automatización e integraciones y después corre las pruebas
|
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,69 @@ esa operación sea confiable en vez de sólo cómoda: acá se lee qué cambió a
|
|
|
8
8
|
un cambio en el protocolo, en las reglas del sistema o en un guard es visible para el usuario y sube
|
|
9
9
|
minor aunque no toque una sola línea de código.
|
|
10
10
|
|
|
11
|
+
## [0.20.0] - 2026-08-17
|
|
12
|
+
|
|
13
|
+
Casi todo lo de abajo sale de la primera investigación semanal del cargo `security-engineer` corriendo
|
|
14
|
+
de verdad sobre este repositorio. De sus ocho hallazgos, dos resultaron sobredimensionados al
|
|
15
|
+
verificarlos y quedaron cerrados sin cambio; el resto está acá.
|
|
16
|
+
|
|
17
|
+
### Cambiado
|
|
18
|
+
|
|
19
|
+
- **El agente de investigación semanal ya no comparte job con la credencial de escritura.** Ingiere
|
|
20
|
+
contenido web que nadie controla, y hasta ahora corría con `contents: write` y la API key en el
|
|
21
|
+
mismo lugar: cualquier instrucción que llegara dentro de una página tenía un repositorio a mano.
|
|
22
|
+
|
|
23
|
+
Ahora entrega su informe como artifact y un segundo job lo commitea, sin modelo y sin credencial de
|
|
24
|
+
API. Ese job resuelve **dónde** aterriza el archivo con el mismo CLI que resolvió el catálogo, así
|
|
25
|
+
que nada de lo que viaje en el artifact puede redirigirlo. El permiso por defecto del workflow baja
|
|
26
|
+
a `contents: read`: un job nuevo ya no nace pudiendo escribir por herencia.
|
|
27
|
+
|
|
28
|
+
- **Las acciones de GitHub quedan fijadas por SHA de commit**, y el CLI del agente por versión. Un tag
|
|
29
|
+
es mutable: quien controle el repositorio de la acción puede moverlo a otro commit y el workflow
|
|
30
|
+
ejecuta código nuevo sin que cambie una línea acá.
|
|
31
|
+
|
|
32
|
+
- **`guard-secrets` reconoce los archivos de credencial que las herramientas escriben solas** —
|
|
33
|
+
`.npmrc`, `.netrc`, `id_rsa` y compañía—. Correr el guard sobre trece nombres mostró que `.env`
|
|
34
|
+
bloqueaba y esos pasaban, y `.npmrc` es donde vive el token de publicación. Tapa un caso conocido;
|
|
35
|
+
no vuelve completo al guard.
|
|
36
|
+
|
|
37
|
+
### Corregido
|
|
38
|
+
|
|
39
|
+
- **Los informes de aprendizaje traen escritas las convenciones de las que depende el ciclo.** Cuatro
|
|
40
|
+
corridas independientes etiquetaron sus hallazgos `H1`, `H2`, … sin que nada se lo pidiera, y esa
|
|
41
|
+
etiqueta terminó siendo carga: dentro del informe une «Hallazgos» con «Evidencia» y «Recomendación»,
|
|
42
|
+
y la propuesta mensual la cita para decir de qué hallazgo sale un cambio. Funcionaba porque los
|
|
43
|
+
modelos convergen, que es exactamente lo que deja de funcionar sin avisar.
|
|
44
|
+
|
|
45
|
+
Lo mismo con los títulos: la consolidación busca `## Recomendación` exacto y renombrarlo no da error
|
|
46
|
+
— deja la propuesta diciendo que no se registró nada.
|
|
47
|
+
|
|
48
|
+
### Removido
|
|
49
|
+
|
|
50
|
+
- **Se retiran 94 `_template.md` que el motor nunca leyó.** `learn` arma el andamiaje del informe y de
|
|
51
|
+
la propuesta desde un molde propio; esos archivos no los leía nadie: ni el motor, ni un workflow, ni
|
|
52
|
+
un runner, y ningún `SKILL.md` los nombra.
|
|
53
|
+
|
|
54
|
+
No eran inertes. **Quince de los cuarenta y siete describían una forma que el motor nunca produce**
|
|
55
|
+
—viñetas planas, sin sección de hallazgos y sin el título que la consolidación busca—, así que un
|
|
56
|
+
agente que respetara su molde habría reestructurado el informe y dejado la propuesta vacía sin
|
|
57
|
+
levantar nada.
|
|
58
|
+
|
|
59
|
+
Comprobado antes de retirarlos: sin sus moldes, `qa-engineer` sigue evaluando 7/7 y `learn` arma su
|
|
60
|
+
andamiaje igual. Adoptar un cargo pasa a copiar trece archivos en vez de quince.
|
|
61
|
+
|
|
62
|
+
### Notas de seguridad sin cambio
|
|
63
|
+
|
|
64
|
+
- **El token de npm no requiere acción.** El hallazgo lo describía como secreto de larga vida y sin
|
|
65
|
+
expiración; verificado, tiene ventana acotada, y la afirmación de que npm revocó los tokens clásicos
|
|
66
|
+
no se sostiene —el token funciona—. Lo único cierto que queda es que su alcance es de cuenta y no de
|
|
67
|
+
paquete: al renovarlo conviene acotarlo, y nada más.
|
|
68
|
+
|
|
69
|
+
- **Los guards no son un límite de seguridad**, y `automatization/hooks/README.md` ahora lo dice con
|
|
70
|
+
sus dos casos reproducibles. El riesgo real no es el bypass sino la confianza que doce guards
|
|
71
|
+
puestos inspiran: si algo tiene que ser imposible, va en permisos, alcance de token o revisión
|
|
72
|
+
humana, no en una coincidencia de texto.
|
|
73
|
+
|
|
11
74
|
## [0.19.0] - 2026-08-16
|
|
12
75
|
|
|
13
76
|
Los cuatro arreglos de abajo salieron de correr los tres caminos de punta a punta —un cargo que
|
|
@@ -15,6 +15,33 @@ Los hooks convierten invariantes comprobables en gates mecánicos. La base recom
|
|
|
15
15
|
La lógica portable vive en `engine/hooks/run.js`; los `guard-*.sh` son entradas ejecutables comunes. Cada
|
|
16
16
|
adaptador de `runners/` conecta los eventos de su herramienta con esos mismos guards.
|
|
17
17
|
|
|
18
|
+
## Qué son y qué no son
|
|
19
|
+
|
|
20
|
+
**Son andamiaje de disciplina: coincidencia de texto sobre el comando o la ruta que el agente propone.**
|
|
21
|
+
Convierten un descuido en un alto y hacen visible una intención en el momento de tenerla. Para eso
|
|
22
|
+
sirven, y sirven bien.
|
|
23
|
+
|
|
24
|
+
**No son un límite de seguridad, y conviene saber exactamente por qué.** Comprobado corriendo los
|
|
25
|
+
guards directamente:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
git push origin main → bloquea g=push; git $g origin main → pasa
|
|
29
|
+
.env → bloquea .npmrc .netrc id_rsa → pasan
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
La primera línea no se arregla con más expresiones regulares: cualquier guard que lea el texto de un
|
|
33
|
+
comando se esquiva componiéndolo, y una shell tiene infinitas formas de hacerlo. La segunda sí es un
|
|
34
|
+
hueco tapable —son nombres de credencial conocidos— pero taparlo no cambia la naturaleza de la
|
|
35
|
+
herramienta.
|
|
36
|
+
|
|
37
|
+
El riesgo real de esta página no es el bypass: es **la confianza que un guard inspira**. Un repositorio
|
|
38
|
+
con doce guards puestos parece más protegido de lo que está, y esa lectura es peor que no tenerlos,
|
|
39
|
+
porque reemplaza controles que sí son límites —permisos, tokens acotados, revisión humana de lo que se
|
|
40
|
+
publica— por la sensación de que ya está cubierto.
|
|
41
|
+
|
|
42
|
+
Regla práctica: si algo **tiene** que ser imposible, no lo pongas acá. Ponelo donde no dependa de leer
|
|
43
|
+
una cadena — permisos del runner, alcance del token, aprobación de un PR.
|
|
44
|
+
|
|
18
45
|
## Cómo se ejecutan
|
|
19
46
|
|
|
20
47
|
```text
|
package/engine/agents/fork.js
CHANGED
|
@@ -22,10 +22,15 @@ const catalog = require('./catalog')
|
|
|
22
22
|
const manifest = require('../core/manifest')
|
|
23
23
|
const ownership = require('../core/ownership')
|
|
24
24
|
|
|
25
|
-
// Se comparan contra la ruta relativa dentro del cargo.
|
|
26
|
-
//
|
|
25
|
+
// Se comparan contra la ruta relativa dentro del cargo. Informes, propuestas y veredictos no viajan:
|
|
26
|
+
// son lo que produjo nuestra versión del contrato, y el fork nace para dejar de ser ese contrato.
|
|
27
|
+
//
|
|
28
|
+
// Antes se exceptuaba `_template.md`, por andamiaje. Ese andamiaje resultó ser muerto —el motor
|
|
29
|
+
// genera el informe y la propuesta desde un molde propio y nunca lee esos archivos— y en un tercio
|
|
30
|
+
// del catálogo contradecía la forma que sí produce, así que se retiró entero. No hay caso especial
|
|
31
|
+
// que preservar.
|
|
27
32
|
function inherited(relative) {
|
|
28
|
-
if (/^learning\/(reports|proposals)\//.test(relative)) return
|
|
33
|
+
if (/^learning\/(reports|proposals)\//.test(relative)) return false
|
|
29
34
|
if (relative.startsWith('evaluations/results/')) return false
|
|
30
35
|
return true
|
|
31
36
|
}
|
|
@@ -52,6 +52,18 @@ status: draft
|
|
|
52
52
|
|
|
53
53
|
# Investigación semanal — ${isoDate(now)}
|
|
54
54
|
|
|
55
|
+
<!-- Dos convenciones que el ciclo necesita y que nada más sostiene:
|
|
56
|
+
|
|
57
|
+
· Etiquetá cada hallazgo H1, H2, … en el orden en que aparecen. «Evidencia» y «Recomendación» se
|
|
58
|
+
refieren a ellos por esa clave, y la propuesta mensual la cita para decir de qué hallazgo sale
|
|
59
|
+
un cambio. Sin etiqueta las tres secciones dejan de cruzarse y nada lo delata.
|
|
60
|
+
|
|
61
|
+
· No renombres los títulos. «## Recomendación» se lee con un patrón exacto y es lo único que la
|
|
62
|
+
propuesta consolida de cada informe: renombrarlo no da error, deja la propuesta vacía.
|
|
63
|
+
|
|
64
|
+
Este comentario vive fuera de toda sección a propósito — dentro de «Recomendación» viajaría a cada
|
|
65
|
+
propuesta consolidada. -->
|
|
66
|
+
|
|
55
67
|
## Fuentes consultadas
|
|
56
68
|
|
|
57
69
|
## Hallazgos
|
package/engine/hooks/run.js
CHANGED
|
@@ -112,6 +112,15 @@ function secrets(input) {
|
|
|
112
112
|
if (/^(?:accesos\.md|credenciales.*|credentials.*\.json|.*service-account.*\.json|.*\.(?:pem|key))$/i.test(base)) {
|
|
113
113
|
block(`${file} parece un archivo de credenciales en texto plano.`)
|
|
114
114
|
}
|
|
115
|
+
// Nombres de credencial que la herramienta escribe sola y que la lista anterior no cubría:
|
|
116
|
+
// `.npmrc` guarda el token de publicación, `.netrc` el de cualquier host, `id_*` una clave
|
|
117
|
+
// privada de SSH y `~/.aws/credentials` las de AWS. Los cuatro son estándar, no exóticos.
|
|
118
|
+
//
|
|
119
|
+
// Esto tapa un caso conocido; no vuelve completo al guard. La forma de decidir sigue siendo el
|
|
120
|
+
// nombre del archivo, así que otro formato pasa igual — ver «Qué son y qué no son» en el README.
|
|
121
|
+
if (/^(?:\.npmrc|\.netrc|_netrc|\.pypirc|\.dockercfg|id_(?:rsa|dsa|ecdsa|ed25519)|credentials)$/i.test(base)) {
|
|
122
|
+
block(`${file} es un archivo de credenciales que su herramienta mantiene. No lo edites a mano.`)
|
|
123
|
+
}
|
|
115
124
|
}
|
|
116
125
|
}
|
|
117
126
|
|
package/package.json
CHANGED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Propuesta mensual — AI Governance Lead
|
|
2
|
-
|
|
3
|
-
- Periodo e informes incluidos:
|
|
4
|
-
- Problema verificable:
|
|
5
|
-
- Cambio propuesto:
|
|
6
|
-
- Fuentes/versiones/estado/fechas:
|
|
7
|
-
- Jurisdicciones, roles y sistemas:
|
|
8
|
-
- Impacto en controles, evidencia y decisiones:
|
|
9
|
-
- Revisión Legal/owners requerida:
|
|
10
|
-
- Evaluaciones afectadas y rollback:
|
|
11
|
-
- Decisión humana: pendiente
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Informe semanal — AI Governance Lead
|
|
2
|
-
|
|
3
|
-
- Periodo y responsable:
|
|
4
|
-
- Fuente/instrumento/versión/estado:
|
|
5
|
-
- Jurisdicción/rol/sistemas afectados:
|
|
6
|
-
- Publicación/vigencia/aplicación/transición:
|
|
7
|
-
- Cambios observados:
|
|
8
|
-
- Prácticas vigentes u obsoletas:
|
|
9
|
-
- Impacto en inventario, assessment, controles o gates:
|
|
10
|
-
- Interpretación/evidencia faltante:
|
|
11
|
-
- Recomendación (mantener / Legal-review / investigar / proponer):
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Propuesta mensual — AI Product Manager
|
|
2
|
-
|
|
3
|
-
- Periodo e informes incluidos:
|
|
4
|
-
- Problema y cambio propuesto:
|
|
5
|
-
- Modelo/provider/versión/fecha/estado/fuentes:
|
|
6
|
-
- Impacto en usuarios, afectados, valor y journey:
|
|
7
|
-
- Riesgo, evals, operación, economics y retiro:
|
|
8
|
-
- Evaluaciones afectadas y rollback:
|
|
9
|
-
- Decisión humana: pendiente
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Informe semanal — AI Product Manager
|
|
2
|
-
|
|
3
|
-
- Periodo y responsable:
|
|
4
|
-
- Modelo/provider/versión/fecha/estado y fuentes:
|
|
5
|
-
- Cambios observados y aplicabilidad:
|
|
6
|
-
- Prácticas vigentes u obsoletas:
|
|
7
|
-
- Impacto en valor, experiencia, riesgo, evals, operación o costo:
|
|
8
|
-
- Evidencia reproducible/input de afectados/faltante:
|
|
9
|
-
- Recomendación (mantener / investigar / proponer):
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Propuesta mensual — Analytics Engineer
|
|
2
|
-
|
|
3
|
-
- Periodo e informes incluidos:
|
|
4
|
-
- Problema y cambio propuesto:
|
|
5
|
-
- Fuentes/versiones/estado/aplicabilidad:
|
|
6
|
-
- Impacto semántico, consumers y compatibilidad:
|
|
7
|
-
- Calidad, seguridad, costo y operación:
|
|
8
|
-
- Evaluaciones afectadas y rollback:
|
|
9
|
-
- Decisión humana: pendiente
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Informe semanal — Analytics Engineer
|
|
2
|
-
|
|
3
|
-
- Periodo y responsable:
|
|
4
|
-
- Fuentes/versiones/estado/plataforma:
|
|
5
|
-
- Cambios observados:
|
|
6
|
-
- Prácticas vigentes u obsoletas:
|
|
7
|
-
- Impacto en modelado, métricas, calidad, costo o lineage:
|
|
8
|
-
- Evidencia reproducible/equivalencia semántica/faltante:
|
|
9
|
-
- Recomendación (mantener / investigar / proponer):
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
agent: backend-engineer
|
|
3
|
-
period: YYYY-MM
|
|
4
|
-
status: proposed
|
|
5
|
-
automatic_apply: false
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Propuesta mensual — YYYY-MM
|
|
9
|
-
|
|
10
|
-
## Hallazgos
|
|
11
|
-
## Evidencia
|
|
12
|
-
## Cambio propuesto
|
|
13
|
-
## Riesgos y regresiones
|
|
14
|
-
## Evaluación
|
|
15
|
-
## Aprobación humana
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
agent: backend-engineer
|
|
3
|
-
date: YYYY-MM-DD
|
|
4
|
-
status: draft
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Investigación profesional semanal — YYYY-MM-DD
|
|
8
|
-
|
|
9
|
-
## Fuentes consultadas
|
|
10
|
-
## Hallazgos
|
|
11
|
-
## Evidencia
|
|
12
|
-
## Posibles prácticas obsoletas
|
|
13
|
-
## Recomendación
|
|
14
|
-
## Preguntas abiertas
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
agent: business-operations-manager
|
|
3
|
-
period: YYYY-MM
|
|
4
|
-
status: proposed
|
|
5
|
-
automatic_apply: false
|
|
6
|
-
---
|
|
7
|
-
# Propuesta mensual — YYYY-MM
|
|
8
|
-
## Hallazgos y aplicabilidad
|
|
9
|
-
## Evidencia
|
|
10
|
-
## Cambio propuesto
|
|
11
|
-
## Riesgos, incentivos y regresiones
|
|
12
|
-
## Evaluación
|
|
13
|
-
## Aprobación humana
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
agent: business-operations-manager
|
|
3
|
-
date: YYYY-MM-DD
|
|
4
|
-
status: draft
|
|
5
|
-
---
|
|
6
|
-
# Investigación profesional semanal — YYYY-MM-DD
|
|
7
|
-
## Fuentes, versiones y aplicabilidad
|
|
8
|
-
## Hallazgos y evidencia
|
|
9
|
-
## Prácticas posiblemente obsoletas
|
|
10
|
-
## Impacto en outcomes, calidad y riesgo
|
|
11
|
-
## Recomendación y confianza
|
|
12
|
-
## Preguntas abiertas
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
agent: business-strategist
|
|
3
|
-
period: YYYY-MM
|
|
4
|
-
status: proposed
|
|
5
|
-
automatic_apply: false
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Propuesta mensual — YYYY-MM
|
|
9
|
-
|
|
10
|
-
## Hallazgos
|
|
11
|
-
## Evidencia
|
|
12
|
-
## Cambio propuesto
|
|
13
|
-
## Riesgos y regresiones
|
|
14
|
-
## Evaluación
|
|
15
|
-
## Aprobación humana
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
agent: business-strategist
|
|
3
|
-
date: YYYY-MM-DD
|
|
4
|
-
status: draft
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Investigación profesional semanal — YYYY-MM-DD
|
|
8
|
-
|
|
9
|
-
## Fuentes consultadas
|
|
10
|
-
## Hallazgos
|
|
11
|
-
## Evidencia
|
|
12
|
-
## Posibles prácticas obsoletas
|
|
13
|
-
## Recomendación
|
|
14
|
-
## Preguntas abiertas
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Propuesta mensual — Cloud Architect
|
|
2
|
-
|
|
3
|
-
- Periodo e informes incluidos:
|
|
4
|
-
- Problema y cambio propuesto:
|
|
5
|
-
- Proveedor/servicio/región/versión/estado/fuentes:
|
|
6
|
-
- Impacto en arquitectura, datos, compatibilidad, SLO y consumers:
|
|
7
|
-
- Seguridad, resiliencia, costo, operación y salida:
|
|
8
|
-
- Evaluaciones afectadas y rollback:
|
|
9
|
-
- Decisión humana: pendiente
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Informe semanal — Cloud Architect
|
|
2
|
-
|
|
3
|
-
- Periodo y responsable:
|
|
4
|
-
- Proveedor/servicio/región/versión/fecha/estado y fuentes:
|
|
5
|
-
- Cambios observados y aplicabilidad:
|
|
6
|
-
- Prácticas vigentes u obsoletas:
|
|
7
|
-
- Impacto en seguridad, resiliencia, operación, costo o sostenibilidad:
|
|
8
|
-
- Evidencia/workload fit/faltante:
|
|
9
|
-
- Recomendación (mantener / investigar / proponer):
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Propuesta mensual — Community Manager
|
|
2
|
-
|
|
3
|
-
- Periodo e informes incluidos:
|
|
4
|
-
- Problema verificable:
|
|
5
|
-
- Cambio propuesto:
|
|
6
|
-
- Fuentes/versiones/aplicabilidad:
|
|
7
|
-
- Fit con comunidad, plataforma y jurisdicción:
|
|
8
|
-
- Seguridad, privacidad, inclusión y accesibilidad:
|
|
9
|
-
- Evaluaciones afectadas:
|
|
10
|
-
- Rollback:
|
|
11
|
-
- Decisión humana: pendiente
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
# Informe semanal — Community Manager
|
|
2
|
-
|
|
3
|
-
- Periodo y responsable:
|
|
4
|
-
- Fuentes/versiones/plataformas/jurisdicción:
|
|
5
|
-
- Cambios observados:
|
|
6
|
-
- Prácticas vigentes:
|
|
7
|
-
- Prácticas obsoletas o riesgosas:
|
|
8
|
-
- Impacto en salud, programas, privacidad o moderación:
|
|
9
|
-
- Evidencia desidentificada/faltante:
|
|
10
|
-
- Recomendación (mantener / investigar / proponer):
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
agent: content-specialist
|
|
3
|
-
period: YYYY-MM
|
|
4
|
-
status: proposed
|
|
5
|
-
automatic_apply: false
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Propuesta mensual — YYYY-MM
|
|
9
|
-
|
|
10
|
-
## Hallazgos
|
|
11
|
-
## Evidencia
|
|
12
|
-
## Cambio propuesto
|
|
13
|
-
## Riesgos y regresiones
|
|
14
|
-
## Evaluación
|
|
15
|
-
## Aprobación humana
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
agent: content-specialist
|
|
3
|
-
date: YYYY-MM-DD
|
|
4
|
-
status: draft
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Investigación profesional semanal — YYYY-MM-DD
|
|
8
|
-
|
|
9
|
-
## Fuentes consultadas
|
|
10
|
-
## Hallazgos
|
|
11
|
-
## Evidencia
|
|
12
|
-
## Posibles prácticas obsoletas
|
|
13
|
-
## Recomendación
|
|
14
|
-
## Preguntas abiertas
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
agent: customer-success-manager
|
|
3
|
-
period: YYYY-MM
|
|
4
|
-
status: proposed
|
|
5
|
-
automatic_apply: false
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Propuesta mensual — YYYY-MM
|
|
9
|
-
|
|
10
|
-
## Hallazgos
|
|
11
|
-
## Evidencia
|
|
12
|
-
## Cambio propuesto
|
|
13
|
-
## Riesgos y regresiones
|
|
14
|
-
## Evaluación
|
|
15
|
-
## Aprobación humana
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
agent: customer-success-manager
|
|
3
|
-
date: YYYY-MM-DD
|
|
4
|
-
status: draft
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Investigación profesional semanal — YYYY-MM-DD
|
|
8
|
-
|
|
9
|
-
## Fuentes consultadas
|
|
10
|
-
## Hallazgos
|
|
11
|
-
## Evidencia
|
|
12
|
-
## Posibles prácticas obsoletas
|
|
13
|
-
## Recomendación
|
|
14
|
-
## Preguntas abiertas
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
agent: customer-support-specialist
|
|
3
|
-
period: YYYY-MM
|
|
4
|
-
status: proposed
|
|
5
|
-
automatic_apply: false
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Propuesta mensual — YYYY-MM
|
|
9
|
-
|
|
10
|
-
## Hallazgos
|
|
11
|
-
## Evidencia
|
|
12
|
-
## Cambio propuesto
|
|
13
|
-
## Riesgos y regresiones
|
|
14
|
-
## Evaluación
|
|
15
|
-
## Aprobación humana
|