altis-claude-harness 1.4.7 → 1.4.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "altis-claude-harness",
3
- "version": "1.4.7",
3
+ "version": "1.4.8",
4
4
  "description": "Padroes Claude Code da Altis Sistemas - instalador, auto-update e liberacao por estacao",
5
5
  "bin": {
6
6
  "altis-claude-harness": "bin/cli.js"
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Gera os comandos de update do banco (Oracle + PostgreSQL) a partir dos scripts .sql alterados no branch — só o nome para objetos novos (tabela/trigger/view/procedure/function/índice), comando completo de create sequence, alter table para colunas novas em tabelas já existentes, e drop+recreate para constraints alteradas. Exibe no chat e pergunta se quer anexar ao update.sql.
2
+ description: Gera os comandos de update do banco (Oracle + PostgreSQL) a partir dos scripts .sql alterados no branch — só o nome para objetos novos (tabela/trigger/view/procedure/function), comando completo de create sequence e de create index (índice alterado = drop + create), alter table para colunas novas em tabelas já existentes, e drop+recreate para constraints alteradas. Exibe no chat e pergunta se quer anexar ao update.sql.
3
3
  argument-hint: "[branch-base] (opcional, default master)"
4
4
  model: sonnet
5
5
  effort: medium
@@ -99,8 +99,41 @@ Mapeie o que foi adicionado (use os tipos/definições **exatamente** como estã
99
99
  | **Coluna(s) nova(s)** | **UMA só** `alter table T` agrupando **todas** as colunas novas dessa tabela — ver "Agrupamento de colunas novas" abaixo. |
100
100
  | **Constraint ALTERADA** (mesma constraint mudou de definição) | `alter table T`<br>`drop constraint C;`<br><br>`alter table T`<br>`add constraint C`<br>`<definição nova exata>;` |
101
101
  | **Constraint NOVA** (não existia antes) | `alter table T`<br>`add constraint C`<br>`<definição exata>;` (sem drop) |
102
+ | **Índice NOVO** (`create ... index IDX_X` adicionado) | comando `create index` **completo e exato** do script — nunca só o nome. Ver "Índices" abaixo. |
103
+ | **Índice ALTERADO** (mesmo nome, definição diferente) | `drop index IDX_X;`<br><br>`create index IDX_X`<br>`<definição nova exata>;` |
102
104
 
103
- Para saber se a constraint é **nova** ou **alterada**: é **alterada** se o nome já existia na versão base (`git show "$BASE:<arquivo>"`) com definição diferente; é **nova** se o nome não existia na base.
105
+ Para saber se a constraint (ou o índice) é **nova** ou **alterada**: é **alterada** se o nome já existia na versão base (`git show "$BASE:<arquivo>"`) com definição diferente; é **nova** se o nome não existia na base.
106
+
107
+ #### Índices — comando completo, nunca só o nome
108
+
109
+ Índice **não** entra pelo nome. Objeto novo entra pelo nome porque o update roda o script inteiro daquele objeto; o índice, porém, mora dentro do script de uma tabela **que já existe** em produção — esse script não é re-executado, então o bloco precisa do comando executável.
110
+
111
+ - **Extraia o comando inteiro do script**, exatamente como está: da linha `create [unique|bitmap] index NOME` até o `;`, incluindo `on TABELA(COLUNAS)` e `tablespace INDICES`. Preserve quebras de linha e indentação; **não** reescreva, não normalize, não reordene colunas.
112
+ - **Índice novo** (nome não existia na versão base do arquivo) → só o `create index ...;`.
113
+ - **Índice alterado** (mesmo nome já existia na base com definição diferente — colunas, ordem das colunas, `unique`, expressão, tablespace) → **`drop index` + `create index`**, nessa ordem, separados por linha em branco:
114
+
115
+ **Oracle**
116
+ ```sql
117
+ drop index IDX_ARQUIVOS_WS_ORIGEM_INVENT;
118
+
119
+ create index IDX_ARQUIVOS_WS_ORIGEM_INVENT
120
+ on ARQUIVOS_WS(ORIGEM, INVENTARIO_ID)
121
+ tablespace INDICES;
122
+ ```
123
+
124
+ **PostgreSQL**
125
+ ```sql
126
+ drop index if exists idx_logs_arquivos_ws_origem;
127
+
128
+ create index if not exists idx_logs_arquivos_ws_origem
129
+ on logs_arquivos_ws(origem, inventario_id)
130
+ tablespace INDICES;
131
+ ```
132
+
133
+ O `drop` é o único comando sintetizado (não existe no script): Oracle `drop index NOME;`, PostgreSQL `drop index if exists nome;`. O `create` continua vindo **literal** do arquivo.
134
+ - **Exceção — índice de tabela NOVA (Caso A):** não emita nada. Ele nasce junto com o `create table` quando o script novo roda.
135
+ - **Índice implícito de constraint** (`using index tablespace INDICES` dentro de PK/UN) **não** é índice avulso — já vem no `add constraint`; não gere comando separado para ele.
136
+ - **Índice removido** no diff (linha `-` com `create index`, sem `+` correspondente) → **não** gere `drop` automaticamente; reporte em texto no chat como "revisar manualmente" (destrutivo).
104
137
 
105
138
  #### Agrupamento de colunas novas — UMA só `alter table` por tabela
106
139
 
@@ -132,7 +165,7 @@ Quando o diff adiciona **várias colunas à mesma tabela**, gere **um único** `
132
165
  ### Caso C — Arquivos compartilhados (sempre existentes → trate pelo diff)
133
166
 
134
167
  - **`Sequenciais.sql`** → diff e extraia o **comando `create sequence` COMPLETO** de cada `SEQ_*` adicionada (linhas `+`), exatamente como está no arquivo (incluindo `nocycle nocache noorder` e demais cláusulas). Ex.: `create sequence SEQ_ALERTA_ID nocycle nocache noorder;`
135
- - **Índices** novos (`create ... index IDX_NOME`) → `IDX_NOME;`
168
+ - **Índices** (`create ... index IDX_NOME` em linhas `+`, em qualquer script) → **comando `create index` completo**, copiado literalmente do script; se o índice já existia na base com definição diferente, `drop index` + `create index`. **Nunca** só o nome — ver "Índices — comando completo, nunca só o nome" no Caso B.
136
169
  - **Scripts avulsos / migração de dados** (ex.: `reprocessar_*.sql`, `zOutros/*.sql`, scripts de `update`/`delete`/`insert` de dados) → **não** gere DDL; reporte o **nome do arquivo** em texto no chat, fora do bloco SQL, como "scripts avulsos para revisar e rodar manualmente".
137
170
  - Qualquer coisa que **não** consiga classificar com confiança, ou mudanças potencialmente destrutivas (`modify` de tipo, `drop column`, migração de dados) → **não** gere automaticamente; reporte em texto no chat (fora do bloco SQL) como "revisar manualmente", com caminho do arquivo e motivo.
138
171
 
@@ -198,7 +231,7 @@ Um bloco SQL por banco, em **ordem de aplicação**:
198
231
  2. **Tabelas novas, na ordem topológica calculada no Passo 3** (`NOME_TABELA;`) — referenciada antes de quem referencia
199
232
  3. `alter table` de colunas novas em tabelas existentes — **uma única `alter table` por tabela**, agrupando todas as colunas novas dela (Oracle: `add ( ... )`; PostgreSQL: várias `add column` na mesma `alter`)
200
233
  4. Constraints alteradas/novas em tabelas existentes (`drop` + `add`, ou só `add`) — incluindo FKs de tabela existente que apontam para tabela nova (já garantidamente criada no passo 2)
201
- 5. Índices novos (`IDX_*;`)
234
+ 5. Índices novos/alterados — `create index` **completo** (alterado: `drop index` imediatamente antes)
202
235
  6. Triggers / Views / Procedures / Functions novos (`NOME;`)
203
236
 
204
237
  **Formato:** cada item separado por **uma linha em branco** e terminado em **`;`**; `alter table` em múltiplas linhas, como nos scripts. **Sem nenhum comentário** dentro do bloco. A separação entre Oracle e PostgreSQL é feita por **título markdown no chat** (`### Oracle`, `### PostgreSQL`), cada um com seu próprio bloco de código.
@@ -227,6 +260,16 @@ drop constraint CK_CONEXAO_WHATSAPP_ATIVO;
227
260
  alter table CONEXAO_WHATSAPP
228
261
  add constraint CK_CONEXAO_WHATSAPP_ATIVO
229
262
  check (ATIVO in ('S','N'));
263
+
264
+ create index IDX_CONEXAO_WHATSAPP_LIMITE
265
+ on CONEXAO_WHATSAPP(LIMITE_DIARIO)
266
+ tablespace INDICES;
267
+
268
+ drop index IDX_ARQUIVOS_WS_ORIGEM_INVENT;
269
+
270
+ create index IDX_ARQUIVOS_WS_ORIGEM_INVENT
271
+ on ARQUIVOS_WS(ORIGEM, INVENTARIO_ID)
272
+ tablespace INDICES;
230
273
  ```
231
274
 
232
275
  ### PostgreSQL
@@ -234,7 +277,7 @@ check (ATIVO in ('S','N'));
234
277
  logs_exemplo;
235
278
  ```
236
279
 
237
- > `ALERTAS` aparece **antes** de `ALERTAS_CARGOS` porque esta tem FK para aquela — ordem topológica, não de descoberta. Tabelas novas aparecem **só pelo nome** — sem `alter table`. Os `alter table` são **só** de tabelas que já existiam (ex.: `CONEXAO_WHATSAPP`), e **todas as colunas novas de uma mesma tabela entram num único `alter table ... add ( ... )`** (Oracle) — nunca um `alter` por coluna. Itens "avulsos" e "revisar manualmente", se houver, vão em texto após os blocos, **nunca** dentro do SQL. Se um banco não tiver itens, omita a seção dele.
280
+ > `ALERTAS` aparece **antes** de `ALERTAS_CARGOS` porque esta tem FK para aquela — ordem topológica, não de descoberta. Tabelas novas aparecem **só pelo nome** — sem `alter table` e **sem os índices delas** (nascem no `create table`). Os `alter table` são **só** de tabelas que já existiam (ex.: `CONEXAO_WHATSAPP`), e **todas as colunas novas de uma mesma tabela entram num único `alter table ... add ( ... )`** (Oracle) — nunca um `alter` por coluna. **Índices vêm sempre como comando completo** — `IDX_CONEXAO_WHATSAPP_LIMITE` é novo (só `create`), `IDX_ARQUIVOS_WS_ORIGEM_INVENT` teve a definição alterada (`drop` + `create`) — nunca só o nome. Itens "avulsos" e "revisar manualmente", se houver, vão em texto após os blocos, **nunca** dentro do SQL. Se um banco não tiver itens, omita a seção dele.
238
281
 
239
282
  ---
240
283
 
@@ -253,7 +296,8 @@ logs_exemplo;
253
296
 
254
297
  - Lê **todos** os `.sql` alterados no branch (Oracle + PostgreSQL), incluindo não commitados/novos.
255
298
  - **Sequence nova** → comando `create sequence ...;` completo (não só o nome).
256
- - **Objeto novo** (tabela, trigger, view, procedure, function, índice) → **só o nome `;`**.
299
+ - **Objeto novo** (tabela, trigger, view, procedure, function) → **só o nome `;`**.
300
+ - **Índice** → **comando `create index` completo**, literal do script (nunca só o nome); **índice alterado** → `drop index` + `create index`. Índice de tabela nova não entra (nasce no `create table`); índice implícito de PK/UN também não.
257
301
  - **Tabelas novas são ordenadas topologicamente por dependência de FK** (referenciada antes de quem referencia), via helper do Passo 3 — nunca pela ordem de descoberta. FK circular entre tabelas novas é reportada para tratamento manual.
258
302
  - **Tabela já existente** com **coluna(s) nova(s)** → **uma única** `alter table` por tabela agrupando todas as colunas (Oracle: `add ( col1, col2, ... )`; PostgreSQL: várias `add column` na mesma `alter`) — nunca um `alter` por coluna.
259
303
  - **Constraint alterada** → `drop constraint` + recriação; **constraint nova** → só `add constraint`.