@fontdata/ai-harness 2.3.1 → 2.3.2

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fontdata",
3
- "version": "2.3.1",
3
+ "version": "2.3.2",
4
4
  "description": "Harness de engenharia com IA da Fontdata para Claude Code",
5
5
  "author": { "name": "Fontdata" },
6
6
  "commands": ["./templates/commands"],
package/README.md CHANGED
@@ -141,7 +141,7 @@ Os formatos estão em [`docs/contratos/ARTEFATOS.md`](docs/contratos/ARTEFATOS.m
141
141
  | Hook | Quando | Modo inicial |
142
142
  |---|---|---|
143
143
  | `lembrete` | O pedido parece bug, funcionalidade nova, risco de segurança ou problema de performance: sugere o fluxo certo | aviso |
144
- | `segredo-no-commit` | `git commit` com chave de acesso, token, chave privada ou senha no diff | **bloqueio** |
144
+ | `segredo-no-commit` | `git commit` com chave de acesso, token, chave privada ou senha no diff (em arquivo de teste, só token e chave de verdade) | **bloqueio** |
145
145
  | `proteger-contratos` | SPEC, PLAN ou CLAUDE.md reescritos durante a execução de um trabalho | aviso |
146
146
  | `task-so-fecha-verde` | Task marcada como concluída sem suíte verde no rastro | aviso |
147
147
  | `sem-jargao` | Termo técnico no relatório para o cliente | aviso |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fontdata/ai-harness",
3
- "version": "2.3.1",
3
+ "version": "2.3.2",
4
4
  "description": "Harness de engenharia com IA da Fontdata para Claude Code: roda os slash commands direto na pasta do projeto via npx, sem instalar nada — ou instala-os em .claude/commands.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -33,6 +33,15 @@ function isEnvFile(path) {
33
33
  return /^\.env(\..+)?$/.test(name) && !/\.(example|sample|template|dist)$/.test(name);
34
34
  }
35
35
 
36
+ /**
37
+ * Arquivo de teste: `tests/`, `test/`, `__tests__/`, `spec/` ou `*.test.ts` / `*.spec.js`...
38
+ * Fixture de senha é o caso normal em teste, então a heurística de atribuição não vale ali.
39
+ * @param {string} path
40
+ */
41
+ function isTestFile(path) {
42
+ return /(^|\/)(tests?|__tests__|spec)\//.test(path) || /\.(test|spec)\.[cm]?[jt]sx?$/.test(basename(path));
43
+ }
44
+
36
45
  /**
37
46
  * @param {string} path
38
47
  * @param {string} content Linha adicionada, sem o `+`.
@@ -47,6 +56,8 @@ function secretIn(path, content) {
47
56
  return value && !isPlaceholder(value) ? 'valor em arquivo .env' : null;
48
57
  }
49
58
 
59
+ if (isTestFile(path)) return null;
60
+
50
61
  const assigned = ASSIGNED_SECRET.exec(content);
51
62
  return assigned && !isPlaceholder(assigned[2] ?? '') ? 'senha ou token atribuído no código' : null;
52
63
  }