Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -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
18 changes: 16 additions & 2 deletions CLI/src/nebu_cli/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
55 changes: 55 additions & 0 deletions CLI/src/nebu_cli/commands/submit.py
Original file line number Diff line number Diff line change
@@ -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
3 changes: 3 additions & 0 deletions CLI/src/nebu_cli/specs/structure.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@

REQUIRED_DIRS = (
".nebula",
".agents",
".agents/rules",
".agents/skills",
"Docs",
"Docs/Prototype",
)
Expand Down
39 changes: 39 additions & 0 deletions Docs/efficiency-improvements.md
Original file line number Diff line number Diff line change
@@ -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.
1 change: 1 addition & 0 deletions Manual/Cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ python -m pip install nebula-spec-kit-cli

```bash
nebu start [--profile full|quick] [--root <diretorio>] [--dry-run] [--force]
nebu submit "mensagem" [--task-id <id>]
nebu version
nebu update [--apply] [--yes]
```
Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ Observações:

```bash
nebu start
nebu submit "commit message"
nebu version
nebu update
```
Expand All @@ -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).