feat: - tornado obrigatório registrar uma linha de resum
- tornado obrigatório registrar uma linha de resumo para cada implementação concluída - corrigido o Scanner e o Retakes no painel usando o Python do venv (3.14) em vez do /usr/bin/python3 3.9 e injetado o caminho da engine no executar_retakes.py Resumo: - 7 arquivos alterados - 0 novos - 7 modificados - 0 removidos 7 files changed, 57 insertions(+), 8 deletions(-) Arquivos: - .gitignore - AGENTS.md - CLAUDE.md - admin/DEV-NOTES.md - admin/deploy.command - code/cep-plugin/main.js - code/engine/executar_retakes.py
This commit is contained in:
@@ -28,3 +28,6 @@ build/
|
||||
# Temporary files
|
||||
*.tmp
|
||||
*.temp
|
||||
|
||||
# Resumo temporário usado pelo admin/deploy.command para detalhar o commit
|
||||
admin/COMMIT-DETAILS.md
|
||||
|
||||
@@ -2,6 +2,19 @@
|
||||
|
||||
## Project Skills
|
||||
|
||||
## Resumo obrigatório para commits
|
||||
|
||||
Toda pessoa, agente ou IA que implementar qualquer alteração neste projeto
|
||||
deve, antes de finalizar o trabalho, acrescentar **uma única linha** ao final
|
||||
de `admin/COMMIT-DETAILS.md`, em PT-BR, resumindo o que foi feito. Nunca
|
||||
substituir nem apagar as linhas já registradas durante o lote. A linha deve
|
||||
ser curta, sem credenciais, tokens ou dados sensíveis; por exemplo:
|
||||
`- corrigido o carregamento do Scanner quando executado pelo painel CEP`.
|
||||
|
||||
O script `admin/deploy.command` incorpora todas as linhas na mensagem do
|
||||
commit e limpa o arquivo somente após o commit ser concluído com sucesso. Se
|
||||
o commit falhar, os resumos devem ser preservados para nova tentativa.
|
||||
|
||||
## Convenções obrigatórias de Python / OO
|
||||
|
||||
Todo código Python em `code/engine/` deve seguir a skill **`.agents/skills/boas-praticas-oo/SKILL.md`** (boas práticas de programação orientada a objetos) — obrigatória, aplicada automaticamente, não apenas quando solicitada. Leia-a antes de criar, modificar, corrigir, revisar, refatorar ou ampliar qualquer sistema Python.
|
||||
|
||||
@@ -2,6 +2,15 @@
|
||||
|
||||
## Project Context
|
||||
|
||||
## Registro obrigatório de alterações
|
||||
|
||||
Ao concluir qualquer implementação, acrescentar uma única linha em
|
||||
`admin/COMMIT-DETAILS.md` descrevendo resumidamente o que foi alterado. A
|
||||
linha deve ser adicionada ao final do arquivo, sem apagar os registros
|
||||
anteriores do lote. O resumo não pode conter segredos ou tokens. O
|
||||
`admin/deploy.command` usa essas linhas na mensagem do commit e limpa o
|
||||
arquivo somente depois de um commit bem-sucedido.
|
||||
|
||||
This is a software engineering project that uses mattpocock/skills for code quality and organization.
|
||||
|
||||
## Code Search: use the RAG first
|
||||
|
||||
+5
-3
@@ -1,9 +1,11 @@
|
||||
# DEV-NOTES — Registro de Alterações (Jhonny Editor)
|
||||
|
||||
> **Como usar:**
|
||||
> 1. Ao fazer alterações, adicione bullets na seção `## NOVO NESTE LOTE`
|
||||
> 2. Rod `admin/deploy.command` — ele lê essas notas e usa como descrição do commit
|
||||
> 3. Após o deploy, mova os bullets para `## Histórico` e esvazie `NOVO NESTE LOTE`
|
||||
> 1. Para alterações feitas pelo agente, use `admin/COMMIT-DETAILS.md`.
|
||||
> 2. Rode `admin/deploy.command` — ele usa o resumo como detalhe do commit.
|
||||
> 3. Após um commit bem-sucedido, o arquivo temporário é limpo automaticamente.
|
||||
>
|
||||
> O bloco abaixo continua como fallback para notas manuais ou histórico do projeto.
|
||||
|
||||
---
|
||||
|
||||
|
||||
+12
-2
@@ -21,6 +21,7 @@ umask 077
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
||||
ADMIN="$ROOT/admin"
|
||||
NOTES="$ADMIN/DEV-NOTES.md"
|
||||
COMMIT_DETAILS="$ADMIN/COMMIT-DETAILS.md"
|
||||
REMOTE="origin"
|
||||
BRANCH="main"
|
||||
|
||||
@@ -57,10 +58,16 @@ echo " ... ($(echo "$CHANGES" | grep -c .) itens)"
|
||||
echo
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# 2) Extrair notas do DEV-NOTES.md
|
||||
# 2) Extrair detalhes preparados pelo agente
|
||||
# ------------------------------------------------------------
|
||||
MSG_NOTA=""
|
||||
if [[ -f "$NOTES" && -s "$NOTES" ]]; then
|
||||
if [[ -f "$COMMIT_DETAILS" && -s "$COMMIT_DETAILS" ]]; then
|
||||
MSG_NOTA="$(sed 's/^[[:space:]]*//; s/[[:space:]]*$//' "$COMMIT_DETAILS" \
|
||||
| grep -v '^$' \
|
||||
| grep -v '^<!--' \
|
||||
| grep -v '^-->' || true)"
|
||||
fi
|
||||
if [[ -z "$MSG_NOTA" && -f "$NOTES" && -s "$NOTES" ]]; then
|
||||
MSG_NOTA="$(awk '
|
||||
/^## NOVO NESTE LOTE/ {f=1; next}
|
||||
/^## / && f {exit}
|
||||
@@ -124,6 +131,9 @@ fi
|
||||
say "Adicionando arquivos e commitando..."
|
||||
git add -A
|
||||
git commit -m "$COMMIT_MSG" || die "commit falhou"
|
||||
if [[ -f "$COMMIT_DETAILS" ]]; then
|
||||
: > "$COMMIT_DETAILS"
|
||||
fi
|
||||
ok "commit criado: $(git rev-parse --short HEAD)"
|
||||
echo
|
||||
|
||||
|
||||
@@ -230,6 +230,10 @@ function switchTab(name) {
|
||||
// A aba apenas controla o processo e mostra resultados; a análise inteira
|
||||
// acontece na engine (scanner/retakes), chamada via executar_retakes.py.
|
||||
var RETAKES_ENGINE_SCRIPT = "/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code/engine/executar_retakes.py";
|
||||
// A engine usa tipos do Python 3.10+ (ex.: `X | None`, `dict[str, ...]`), que
|
||||
// o `/usr/bin/python3` do macOS (3.9) não aceita. Usar o mesmo venv do projeto
|
||||
// (Python 3.14, com faster_whisper) garante que Scanner e Retakes carreguem bem.
|
||||
var SCANNER_PYTHON_BIN = "/Volumes/Merongo/SISTEMAS/venvs/whisperx-transcricao/bin/python";
|
||||
var retakesCasoAtual = null;
|
||||
var retakesGrupos = [];
|
||||
var retakesProcesso = null;
|
||||
@@ -354,7 +358,7 @@ function retakesAnalisar() {
|
||||
taskStart("Retakes", "Preparando análise", null);
|
||||
document.getElementById("retakesProgressoCard").hidden = false;
|
||||
document.getElementById("retakesProgressoEtapa").textContent = "Analisando retakes…";
|
||||
var child = childProcess.spawn("python3", [RETAKES_ENGINE_SCRIPT, entrada, path.join(retakesRaiz(), retakesCasoAtual)],
|
||||
var child = childProcess.spawn(SCANNER_PYTHON_BIN, [RETAKES_ENGINE_SCRIPT, entrada, path.join(retakesRaiz(), retakesCasoAtual)],
|
||||
{ cwd: "/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code/engine", stdio: ["ignore", "pipe", "pipe"] });
|
||||
retakesProcesso = child;
|
||||
var resto = "";
|
||||
@@ -393,7 +397,7 @@ function retakesRevisar(grupoId, acao) {
|
||||
var pedido = { acao: "revisar", video_id: retakesCasoAtual, revisao: { grupo_id: grupoId, acao: acao } };
|
||||
var entrada = path.join(os.tmpdir(), "revisao-retakes-" + Date.now() + ".json");
|
||||
fs.writeFileSync(entrada, JSON.stringify(pedido), "utf-8");
|
||||
var child = childProcess.spawn("python3", [RETAKES_ENGINE_SCRIPT, entrada, path.join(retakesRaiz(), retakesCasoAtual)],
|
||||
var child = childProcess.spawn(SCANNER_PYTHON_BIN, [RETAKES_ENGINE_SCRIPT, entrada, path.join(retakesRaiz(), retakesCasoAtual)],
|
||||
{ cwd: "/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code/engine", stdio: ["ignore", "pipe", "pipe"] });
|
||||
child.on("close", function (codigo) {
|
||||
if (codigo !== 0) { showToast("err", "Não foi possível registrar a revisão."); return; }
|
||||
@@ -511,7 +515,7 @@ function scannerProcess() {
|
||||
setBusy("btnScannerProcess",true); taskStart("Scanner", "Preparando análise", null);
|
||||
var spawnOptions={cwd:"/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code",stdio:["ignore","pipe","pipe"]};
|
||||
var huggingFaceEnvironment=hfSpawnOptions(); if(huggingFaceEnvironment&&huggingFaceEnvironment.env) spawnOptions.env=huggingFaceEnvironment.env;
|
||||
var child=childProcess.spawn("python3",[SCANNER_ENGINE_SCRIPT,input,scannerReportPath],spawnOptions);
|
||||
var child=childProcess.spawn(SCANNER_PYTHON_BIN,[SCANNER_ENGINE_SCRIPT,input,scannerReportPath],spawnOptions);
|
||||
var stderr="", stdout="";
|
||||
child.stdout.on("data",function(chunk) {
|
||||
stdout += chunk.toString(); var lines=stdout.split("\n"); stdout=lines.pop();
|
||||
|
||||
@@ -36,6 +36,14 @@ import sys
|
||||
from dataclasses import asdict
|
||||
from pathlib import Path
|
||||
|
||||
# O painel chama este arquivo com cwd ``code/engine`` e o Python inclui apenas
|
||||
# essa pasta no caminho de importação. Injetar ``code`` (pai do pacote
|
||||
# ``engine``) para que os importes da engine funcionem, como em
|
||||
# ``executar_scanner.py``.
|
||||
CAMINHO_DO_CODIGO = Path(__file__).resolve().parent.parent
|
||||
if str(CAMINHO_DO_CODIGO) not in sys.path:
|
||||
sys.path.insert(0, str(CAMINHO_DO_CODIGO))
|
||||
|
||||
from engine.scanner.retakes import (
|
||||
STATUS_CONFIRMADO,
|
||||
STATUS_IGNORADO,
|
||||
|
||||
Reference in New Issue
Block a user