@fontdata/ai-harness 3.3.0 → 3.3.1

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,8 +1,8 @@
1
1
  {
2
2
  "name": "fontdata",
3
- "version": "3.3.0",
3
+ "version": "3.3.1",
4
4
  "mcpServers": {
5
- "banco_dados": { "command": "npx", "args": ["-y", "@fontdata/ai-harness@3.3.0", "banco-dados-mcp"] }
5
+ "banco_dados": { "command": "npx", "args": ["-y", "@fontdata/ai-harness@3.3.1", "banco-dados-mcp"] }
6
6
  },
7
7
  "description": "Harness de engenharia com IA da Fontdata para Claude Code",
8
8
  "author": { "name": "Fontdata" },
@@ -325,9 +325,17 @@ function checkStaleDraftPlans(root, now) {
325
325
  }
326
326
  return findings;
327
327
  }
328
+ /** Script SQL entregável do trabalho: `<id>.sql` ou `<id>-<sufixo>.sql`, só na raiz da pasta. */
329
+ function isWorkScript(rel, work) {
330
+ if (rel === `${work}.sql`)
331
+ return true;
332
+ if (!rel.startsWith(`${work}-`) || !rel.endsWith('.sql'))
333
+ return false;
334
+ return /^[a-z0-9]+(-[a-z0-9]+)*$/.test(rel.slice(work.length + 1, -'.sql'.length));
335
+ }
328
336
  /** Nome que só difere de um artefato pela caixa já é apontado por `contrato-nome-fora-do-padrao`. */
329
- function isOutsideContract(rel) {
330
- if (rel in ARTIFACT_TYPES || rel.startsWith('anexos/'))
337
+ function isOutsideContract(rel, work) {
338
+ if (rel in ARTIFACT_TYPES || rel.startsWith('anexos/') || isWorkScript(rel, work))
331
339
  return false;
332
340
  if (rel.split('/').at(-1)?.startsWith('.'))
333
341
  return false;
@@ -335,15 +343,18 @@ function isOutsideContract(rel) {
335
343
  }
336
344
  function checkFilesOutsideContract(root) {
337
345
  return activeWorkFolders(root).flatMap((work) => {
338
- const extras = listWorkFiles(join(root, WORKS_DIR, work)).filter(isOutsideContract);
346
+ const extras = listWorkFiles(join(root, WORKS_DIR, work)).filter((rel) => isOutsideContract(rel, work));
339
347
  if (!extras.length)
340
348
  return [];
349
+ const renomear = extras.some((rel) => rel.toLowerCase().endsWith('.sql'))
350
+ ? ` Se é o script SQL do trabalho, renomeie para ${work}.sql (ou ${work}-<sufixo>.sql) na raiz da pasta.`
351
+ : '';
341
352
  return [
342
353
  {
343
354
  id: 'arquivo-fora-do-contrato',
344
355
  severidade: 'aviso',
345
356
  mensagem: `docs/trabalhos/${work}/ tem arquivo(s) fora do contrato de artefatos: ${extras.join(', ')}.`,
346
- correcao: `Se é relatório, mova o conteúdo para relatorios/TECNICO.md ou o arquivo para anexos/. Contrato: ${CONTRACT_URL}`,
357
+ correcao: `Se é relatório, mova o conteúdo para relatorios/TECNICO.md ou o arquivo para anexos/.${renomear} Contrato: ${CONTRACT_URL}`,
347
358
  },
348
359
  ];
349
360
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fontdata/ai-harness",
3
- "version": "3.3.0",
3
+ "version": "3.3.1",
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": {
@@ -27,6 +27,7 @@ Comece por `/harness`, que conduz o setup em etapas.
27
27
  | `docs/trabalhos/<id>/DECISOES.md` | Decisões tomadas no planejamento e na execução |
28
28
  | `docs/trabalhos/<id>/BLOQUEIOS.md` | Dúvidas que pararam uma task |
29
29
  | `docs/trabalhos/<id>/relatorios/TECNICO.md` e `relatorios/CLIENTE.md` | Relatório para engenharia e para cliente e suporte (sem jargão) |
30
+ | `docs/trabalhos/<id>/<id>.sql` | Script SQL entregável do trabalho, opcional (`<id>-<sufixo>.sql` se houver mais de um); apoio vai em `anexos/` |
30
31
  | `docs/eventos/<id>.jsonl` | Rastro de eventos (não versionado por padrão) |
31
32
  | `.ai-harness/` | Lock da instalação e configuração dos hooks (versionar) |
32
33
 
@@ -47,6 +47,7 @@ Se o porquê não cabe em 3 linhas, **ele não pertence ao código**.
47
47
  | Task / fase / plano / spec | `PLAN.md` e `SPEC.md` do trabalho em `docs/trabalhos/<id>/` | comentário |
48
48
  | Diagnóstico e correção de um defeito | trabalho do tipo `bug` em `docs/trabalhos/<id>/` | comentário |
49
49
  | Investigação, medição, auditoria, paridade, comparação | `relatorios/TECNICO.md` do trabalho em `docs/trabalhos/<id>/` | comentário |
50
+ | Script SQL entregável do trabalho (DDL/DML) | raiz do trabalho, `docs/trabalhos/<id>/<id>.sql` | comentário |
50
51
  | Documento de apoio do trabalho (imagem, planilha, export, contrato de API) | `anexos/` do trabalho em `docs/trabalhos/<id>/` | comentário |
51
52
  | Achado de review | resposta do review, commit | comentário |
52
53
  | Decisão de arquitetura | `SPEC.md` | comentário |
@@ -59,7 +60,8 @@ auditoria, paridade com legado, medição, comparação, levantamento, handoff o
59
60
 
60
61
  Convenção: uma pasta por trabalho, `docs/trabalhos/<yyyy-mm-dd>-<slug>/`. Relatório não ganha nome livre em
61
62
  `relatorios/`: o conteúdo vai para `relatorios/TECNICO.md` e o arquivo de apoio para `anexos/`, senão o `doctor`
62
- avisa `arquivo-fora-do-contrato`.
63
+ avisa `arquivo-fora-do-contrato`. O script SQL do trabalho é entregável, não apoio: fica na raiz como `<id>.sql`
64
+ (ou `<id>-<sufixo>.sql`).
63
65
 
64
66
  ## Antes e depois
65
67