From fd07660c8aac905c20b743dca51758e09cf1f4b7 Mon Sep 17 00:00:00 2001 From: Gemini Automation Date: Wed, 15 Apr 2026 13:27:07 -0300 Subject: [PATCH 1/2] feat: authomation enhancements for nebu cli and pre-commits --- .pre-commit-config.yaml | 27 ++++++++++++++ CLI/src/nebu_cli/__main__.py | 18 ++++++++-- CLI/src/nebu_cli/commands/submit.py | 55 +++++++++++++++++++++++++++++ CLI/src/nebu_cli/specs/structure.py | 3 ++ Docs/efficiency-improvements.md | 39 ++++++++++++++++++++ 5 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 CLI/src/nebu_cli/commands/submit.py create mode 100644 Docs/efficiency-improvements.md diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..74caf44 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,27 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + args: [--allow-multiple-documents] + - id: check-added-large-files + + - repo: https://github.com/DavidAnson/markdownlint-cli2 + rev: v0.10.0 + hooks: + - id: markdownlint-cli2 + name: Nébula Markdown Rules + description: Enforces consistency across Docs via markdownlint. + files: \.md$ + args: ["--config", ".markdownlint-cli2.jsonc"] + + - repo: local + hooks: + - id: check-nebula-context + name: Analyze Nebula Context & Validation + description: Runs Nébula's consistency and context checks prior to commiting + entry: bash -c 'if [ -f "tools/analyze-consistency.sh" ]; then tools/analyze-consistency.sh; fi' + language: system + pass_filenames: false diff --git a/CLI/src/nebu_cli/__main__.py b/CLI/src/nebu_cli/__main__.py index bcf1d6e..fcaaf36 100644 --- a/CLI/src/nebu_cli/__main__.py +++ b/CLI/src/nebu_cli/__main__.py @@ -4,14 +4,28 @@ import argparse -from nebu_cli.commands import start, update, version - +from nebu_cli.commands import start, submit, update, version def build_parser() -> argparse.ArgumentParser: """Build root parser and subcommands.""" parser = argparse.ArgumentParser(prog="nebu") subparsers = parser.add_subparsers(dest="command") + submit_parser = subparsers.add_parser( + "submit", + help="Automatiza qualidade, commit e tracking no Docs/tasks.md", + ) + submit_parser.add_argument( + "message", + help="Mensagem do commit da task", + ) + submit_parser.add_argument( + "--task-id", + required=False, + help="ID opcional da task no formato (Ex: TASK-001)", + ) + submit_parser.set_defaults(handler=submit.run) + start_parser = subparsers.add_parser( "start", help="Inicializa estrutura Nebula no projeto alvo", diff --git a/CLI/src/nebu_cli/commands/submit.py b/CLI/src/nebu_cli/commands/submit.py new file mode 100644 index 0000000..5ad4e81 --- /dev/null +++ b/CLI/src/nebu_cli/commands/submit.py @@ -0,0 +1,55 @@ +"""Implementation of `nebu submit`.""" + +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + +def run(args) -> int: + """Execute the submit command enforcing Nébula task rules.""" + print("🚀 Iniciando submission de task (Quality Gate + Tracker)") + + # 1. Tenta rodar o Quality Gate (se existir no projeto alvo) + # Assumimos que a raiz possui as automações do Nebula em tools/ + script_path = Path("tools/analyze-consistency.sh") + if script_path.exists(): + print(f"✅ Encontrado analisador de consistência em {script_path}. Validando...") + gate_res = subprocess.run([str(script_path)]) + if gate_res.returncode != 0: + print("❌ Falha no Quality Gate. Corrija o documento antes de submeter a task.") + return 1 + else: + print("⚠️ Script de Quality Gate não encontrado localmente (tools/analyze-consistency.sh). Pulando...") + + # 2. Stage de arquivos (adiciona . e Docs/) + subprocess.run(["git", "add", "."]) + + # 3. Commit + commit_cmd = ["git", "commit", "-m", args.message] + commit_res = subprocess.run(commit_cmd, capture_output=True, text=True) + + if commit_res.returncode != 0: + print("ℹ️ Nada para comitar ou erro no hook do git.") + print(commit_res.stdout) + return commit_res.returncode + + # 4. Obter o Hash + hash_res = subprocess.run(["git", "rev-parse", "--short", "HEAD"], capture_output=True, text=True) + commit_hash = hash_res.stdout.strip() + + # 5. Registrar no Tasks.md + tasks_file = Path("Docs/tasks.md") + if tasks_file.exists(): + task_id_info = f" (Ref: {args.task_id})" if args.task_id else "" + log_entry = f"\n- ✅ **{commit_hash}** - {args.message}{task_id_info}" + + with open(tasks_file, "a", encoding="utf-8") as f: + f.write(log_entry) + + print(f"✅ Hash {commit_hash} registrado automaticamente em Docs/tasks.md!") + else: + print(f"⚠️ Docs/tasks.md não encontrado. Commit {commit_hash} gerado, mas o rastreamento foi ignorado.") + + print("🎉 Task concluída com sucesso e de acordo com as regras de Governança do Nébula!") + return 0 diff --git a/CLI/src/nebu_cli/specs/structure.py b/CLI/src/nebu_cli/specs/structure.py index 63aa29f..a26e078 100644 --- a/CLI/src/nebu_cli/specs/structure.py +++ b/CLI/src/nebu_cli/specs/structure.py @@ -6,6 +6,9 @@ REQUIRED_DIRS = ( ".nebula", + ".agents", + ".agents/rules", + ".agents/skills", "Docs", "Docs/Prototype", ) diff --git a/Docs/efficiency-improvements.md b/Docs/efficiency-improvements.md new file mode 100644 index 0000000..f67e122 --- /dev/null +++ b/Docs/efficiency-improvements.md @@ -0,0 +1,39 @@ +# Relatório de Melhorias de Eficiência & Integração de IA + +## Contexto + +Este relatório documenta as atualizações estruturais realizadas na arquitetura e CLI principal do Nébula Spec Kit. O objetivo primário destas mudanças é drásticamente **reduzir o atrito e tempo gasto pelo usuário (humano ou Agente de IA)** durante as repetições estruturais dos "ciclos de task" propostos pelo framework. + +As mudanças introduzidas visam automatizar o "trabalho braçal" sem retirar a rígida camada de Governança na qual o projeto se fundamenta. + +## Melhorias Implementadas + +### 1. Novo comando na CLI: `nebu submit` + +**Problema:** De acordo com os guias (`Manual/Uso.md`), ao final de toda "Task", o desenvolvedor precisava rodar o *Quality Gate*, certificar-se do commit, anotar o hash via `git rev-parse`, abrir o arquivo `Docs/tasks.md` e apensá-lo na mão. +**Solução:** Foi criado o comando `nebu submit "Mensagem" [--task-id TASK-1]`. +Este comando age como um wrapper inteligente: +- Aciona localmente o script de *Quality Gate* (analyze-consistency.sh) se existente no diretório target. +- Comita ("1 task = 1 commit") através do *git staging area*. +- Modifica silenciosamente via I/O o arquivo `Docs/tasks.md`, adicionando o log do Hash + Mensagem da task. +**Arquivos tocados:** +- `CLI/src/nebu_cli/commands/submit.py` +- `CLI/src/nebu_cli/__main__.py` + +### 2. Scaffold Inteligente de Agentes Iniciais + +**Problema:** Documentos no Nébula como `Manual/CreateAgents/Antigravity.md` relatam a necessidade de criar locais como arquivos (`.agents/rules`, `.agents/skills`) para parametrizar IAs de agentes complexos dentro do repo alvo. Fazer isso na mão atrasava as criações. +**Solução:** Atualizamos a árvore de diretórios padrão carregada internamente no comando `nebu start`. A partir de agora, as pastas ocultas `.agents`, `.agents/rules` e `.agents/skills` serão pré-populadas em toda invocação inicial da CLI do Nébula. +**Arquivos tocados:** +- `CLI/src/nebu_cli/specs/structure.py` + +### 3. Governança Via Pre-Commit Hook (Git Integrado) + +**Problema:** A validação estrita do Markdown/Linter e regras do check-context ficavam atreladas aos processos remotos em GitHub Actions, exigindo que o dev efetuasse *push* para descobrir do erro de tipografia de um token *markdown*. +**Solução:** Geração do `.pre-commit-config.yaml` que impõe, em escopo de *repo*, a checagem via hook local do script `tools/analyze-consistency.sh` e o próprio `MarkdownLint` antes mesmo que o *commit object* seja criado. Assim a governança se torna "Fail-Fast". +**Arquivos tocados:** +- `.pre-commit-config.yaml` (Novo arquivo raiz) + +## Status + +Melhorias aprovadas para incorporação via Branch Secundária (`feature/automation-improvements`), aguardando revisão oficial do autor do repositório via Pull Request/Push para fork. From 081c560b083c31e619d1b455f4de3c726c165f61 Mon Sep 17 00:00:00 2001 From: Gemini Automation Date: Wed, 15 Apr 2026 13:32:45 -0300 Subject: [PATCH 2/2] docs: update manuals adding nebu submit reporting --- Manual/Cli.md | 1 + README.md | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/Manual/Cli.md b/Manual/Cli.md index f0bba1a..917b048 100644 --- a/Manual/Cli.md +++ b/Manual/Cli.md @@ -17,6 +17,7 @@ python -m pip install nebula-spec-kit-cli ```bash nebu start [--profile full|quick] [--root ] [--dry-run] [--force] +nebu submit "mensagem" [--task-id ] nebu version nebu update [--apply] [--yes] ``` diff --git a/README.md b/README.md index 19fd181..89e781a 100644 --- a/README.md +++ b/README.md @@ -139,6 +139,7 @@ Observações: ```bash nebu start +nebu submit "commit message" nebu version nebu update ``` @@ -151,3 +152,7 @@ nebu update - Rastreabilidade de decisões e mudanças. - Consistência entre dev humano e IA. - Governança com qualidade desde o início. + +--- + +> **Nota:** Este framework recentemente recebeu atualizações relativas à automação (CLI e Pre-Commits). Veja o escopo no [Relatório de Eficiência (Docs/efficiency-improvements.md)](Docs/efficiency-improvements.md).