Skip to content
Draft
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
53 changes: 53 additions & 0 deletions .github/RELEASE_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# 🎉 fotonPDF v{{VERSION}}

Obrigado por baixar o **fotonPDF**! Abaixo estão os detalhes desta release e como começar a usar.

---

## 📥 Como Instalar

### Opção 1: Instalador (Recomendado)

Baixe o arquivo **`fotonPDF_Setup_v{{VERSION}}.exe`** e execute. O instalador configura tudo automaticamente:

- ✅ Menu de contexto do Windows (clique direito em PDFs)
- ✅ Atalho no Desktop (opcional)
- ✅ Definir como leitor padrão de PDF (opcional)
- ✅ Adicionar ao PATH do terminal (opcional)

> Não requer privilégios de Administrador.

### Opção 2: Versão Portátil

Baixe o arquivo **`fotonPDF-portable-v{{VERSION}}.zip`**, descompacte e execute:

```bash
./foton.exe # Abre a interface gráfica
./foton-cli.exe setup # Configura o menu de contexto via terminal
```

---

## 🗑️ Desinstalação

Use **Configurações do Windows > Aplicativos > fotonPDF > Desinstalar**. Todas as entradas de registro e atalhos serão removidos automaticamente.

---

## 💻 Requisitos

| Requisito | Mínimo |
| ----------- | ------------------------ |
| **Sistema** | Windows 10/11 (64-bit) |
| **RAM** | 4 GB |
| **Espaço** | ~200 MB |

---

## 📋 O que mudou nesta versão

Veja a lista completa de commits e PRs mesclados na aba **Commits** acima.

---

*fotonPDF — De desenvolvedores para produtividade máxima.*
11 changes: 10 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@ jobs:
uses: actions/setup-python@v4
with:
python-version: "3.11"
cache: 'pip'

- name: Instalar Dependências
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pytest-mock
pip install pytest-mock pytest-qt

- name: Executar Testes Unitários
run: |
Expand All @@ -30,3 +31,11 @@ jobs:
- name: Executar Testes de Integração
run: |
pytest tests/integration

- name: Executar Testes de Interface (GUI)
run: |
pytest tests/gui

- name: Executar Testes BDD
run: |
pytest tests/bdd
26 changes: 23 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ jobs:
permissions:
contents: write

env:
PYTHONIOENCODING: utf-8

steps:
- name: Checkout Código
uses: actions/checkout@v3
Expand All @@ -21,6 +24,7 @@ jobs:
uses: actions/setup-python@v4
with:
python-version: "3.11"
cache: 'pip'

- name: Extrair e Validar Versão (Centro de Verdade)
id: version_check
Expand Down Expand Up @@ -57,13 +61,29 @@ jobs:
env:
APP_VERSION: ${{ env.APP_VERSION }}

- name: Gerar ZIP Portátil
shell: pwsh
run: |
$version = $env:APP_VERSION
Compress-Archive -Path "dist\foton\*" -DestinationPath "dist\fotonPDF-portable-v${version}.zip" -Force
echo "ZIP portátil gerado: dist\fotonPDF-portable-v${version}.zip"

- name: Preparar Release Notes
shell: pwsh
run: |
$version = $env:APP_VERSION
$template = Get-Content ".github/RELEASE_TEMPLATE.md" -Raw
$notes = $template -replace '\{\{VERSION\}\}', $version
$notes | Out-File -Encoding utf8 "release_notes.md"
echo "Release notes geradas com sucesso."

- name: Criar Release e Upload de Assets
uses: softprops/action-gh-release@v1
with:
files: |
fotonPDF_Setup_v*.exe
dist/foton/foton.exe
generate_release_notes: true
dist/fotonPDF_Setup_v*.exe
dist/fotonPDF-portable-v*.zip
body_path: release_notes.md
draft: false
prerelease: false
env:
Expand Down
95 changes: 43 additions & 52 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,72 +1,63 @@
# Python
# --- Python & Environment ---
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# Virtual Environments
.env
.venv
env/
venv/
env/
ENV/
env.bak/
venv.bak/

# Installer logs
pip-log.txt
pip-delete-this-directory.txt
*.bak/
.env

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# --- Build & Distribution ---
build/
dist/
out/
*.exe
*.egg-info/
.eggs/
*.egg

# IDEs and Editors
.obsidian/
.idea/
# --- IDEs & Editors ---
.vscode/
.idea/
.obsidian/
*.swp
*.swo
*~
.directory

# Operating System
Thumbs.db
Desktop.ini
.DS_Store
.AppleDouble
.LSOverride
._*

# Project specific
# --- Logs & Test Artifacts ---
*.log
tmp/
.obsidian/workspace.json
logs/
build_log.txt
.coverage
.coverage.*
coverage.xml
coverage_report.txt
htmlcov/
.pytest_cache/
pytest_*.txt
test_results.*
tests_failed*.txt
output.log
pytest_output.txt
pytest_full_output.txt
pytest_final_output.txt

# --- Project Specific Artifacts ---
stage_state.db
# Manter PDFs de teste manuais fora do repo para evitar volume desnecessário
manual_test*.pdf
test_complex.pdf
test_layers.pdf
test_multi_page.pdf

# --- Documentation ---
# Permitir docs mas ignorar capturas pesadas se necessário
docs/visuals/captures/
13 changes: 10 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ Siga os padrões do projeto ([[docs/DEVELOPMENT|Guia de Desenvolvimento]]).

```bash
pytest # Todos os testes
# Recomendado (com PYTHONPATH):
# $env:PYTHONPATH = ".;src"; pytest

pytest tests/unit # Apenas unitários
pytest --cov=src # Com cobertura
```
Expand Down Expand Up @@ -88,7 +91,7 @@ mypy src/

### Estrutura de Commits

```
```text
tipo(escopo): descrição curta

Descrição detalhada do que foi feito e por quê.
Expand All @@ -110,8 +113,12 @@ Closes #123
### Estrutura

- `tests/unit/`: Testes rápidos, sem I/O
- `tests/integration/`: Testes com bibliotecas reais
- `tests/e2e/`: Testes de ponta a ponta
- `tests/integration/`: Testes com bibliotecas reais e integração de adaptadores
- `tests/gui/`: Testes de unidade e integridade para widgets PyQt6
- `tests/e2e/`: Testes de ponta a ponta (instalação e fluxos do SO)

> [!NOTE]
> Testes de GUI que dependem de renderização complexa (como Shadow Effects) são ignorados automaticamente em ambientes **Headless** (CI/CD) para evitar deadlocks, mas devem ser validados localmente.

### Exemplo de Teste

Expand Down
36 changes: 26 additions & 10 deletions LLM_CONTEXT.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,12 @@ Este arquivo serve como a "Memória de Longo Prazo" para qualquer IA assistente
4. **I/O Assíncrono:** Todas as operações de processamento de PDF devem ser executadas em threads separadas para não bloquear a UI.
5. **Resiliência de UI (Boundaries):** Todas as callbacks críticas do Qt na `MainWindow` ou widgets complexos devem ser decoradas com `@safe_ui_callback` para garantir que exceções locais não derrubem o processo principal.
6. **Filosofia Senior (Obrigatório):**
- **DRY (Don't Repeat Yourself):** Reutilize código, centralize lógicas comuns nos domínios.
- **CLEAN Code:** Código legível, nomes auto-explicativos e funções com responsabilidade única.
- **SOLID:** Princípios de design para garantir escalabilidade e facilitar manutenção.
- **Centros de Verdade:** Centralize definições e lógicas críticas em locais únicos. Exemplo: `src/__init__.py` é o único centro de verdade para a versão da aplicação, validado pelo pipeline de CD.
- **DRY (Don't Repeat Yourself):** Reutilize código, centralize lógicas comuns nos domínios.
- **CLEAN Code:** Código legível, nomes auto-explicativos e funções com responsabilidade única.
- **SOLID:** Princípios de design para garantir escalabilidade e facilitar manutenção.
- **Centros de Verdade:** Centralize definições e lógicas críticas em locais únicos. Exemplo: `src/__init__.py` é o único centro de verdade para a versão da aplicação, validado pelo pipeline de CD.
- **Precisão Geométrica (AEC):** Todas as medidas visíveis ao usuário devem ser processadas em Milímetros (mm). O `GeometryService` é o mediador obrigatório entre coordenadas de PDF (Points) e a interface.
- **Identidade de Marca (UI/UX):** O branding (Solar Gold, Deep Space) e o uso proeminente da logo (`docs/brand/logo.svg`) devem ser reforçados em todos os componentes principais de interface (Top Toolbar, Splash Screen).

## 📝 Documentação e Rastreamento (Crucial)

Expand All @@ -37,6 +39,7 @@ Sempre que gerar um commit, siga este template rigorosamente:
2. **Base:** Analise o output de `git status` e `git diff`.
3. **Detalhamento:** Liste as alterações relevantes.
4. **Sincronização de Docs:** Sempre após o commit de desenvolvimento do código, realize uma verificação da documentação para registrar, compatibilizar e documentar o avanço do trabalho (ROADMAP, SPRINTS, DASHBOARD).
5. **Workflow IA-UI (AIAD):** Para tarefas de interface, siga rigorosamente o [[docs/guides/AIAD_WORKFLOW|Guide de Workflow AIAD]], utilizando loops de snapshot e validação via hot-reload.

**Formato:**

Expand All @@ -58,14 +61,27 @@ Arquivos alterados:
- **Tipagem:** Python Type Hints são OBRIGATÓRIOS em todas as funções públicas.
- **Logs:** Usar o módulo `logging` estruturado (JSON format).

## 📂 Estrutura de Diretórios
- `scripts/`: Ferramentas auxiliares (Build, Icons, Signing, UI Capture).
- `scripts/hot_reload.py`: **Ferramenta Primária de Dev**. Use para validar mudanças na GUI.
- `scripts/dev_gui_view.py` e `scripts/dev_mocks.py`: Infraestrutura de design e testes visuais (Mocks).
- `scripts/capture_concept.py`: Utilitário para capturar screenshots do mockup HTML.

- `src/domain`: Entidades puras e protocolos (Portas).
- `src/application`: Casos de uso e orquestração (ex: `UpdateService`).
- `src/infrastructure`: Implementações concretas (Adapters de Registro, Notificação e PDF).
- `src/interfaces`: UI, CLI e integração com Menu de Contexto (Setup e Uninstall Wizards).
## 🚀 Como Executar e Validar (Para LLMs)

## 🔗 Navegação e Referências
Para testar mudanças na interface ou lógica, use sempre o hot-reload, e para validar entregas use o simulador de Pipeline:

1. **Validar Design/UI:** `python scripts/hot_reload.py --mode mock`
2. **Validar Fluxo Real:** `python scripts/hot_reload.py --mode app`
3. **Capturar Referência Visual (Mockup):** `python scripts/capture_concept.py`
4. **Validar Pipeline CI/CD (Obrigatório antes de PRs):** `.\scripts\test_release_pipeline.ps1`

> [!CAUTION]
> **É estritamente proibido criar Pull Requests para `develop` ou `main` sem antes rodar o script `test_release_pipeline.ps1` e confirmar que não houve erros de `PyInstaller` ou `Inno Setup`.** Novos imports e caminhos afetam a distribuição. Verifique os artefatos `dist/fotonPDF_Setup_v*.exe` e o `zip` gerados para confirmar o sucesso.

<!-- -->

> [!IMPORTANT]
> O hot-reload abre a interface imediatamente e reinicia ao detectar mudanças. Sempre use esta ferramenta para comprovar que suas alterações não quebraram a renderização ou o comportamento da MainWindow.

- **🗺️ Mapa da Documentação:** [[docs/MAP|MAP.md]] (MOC Central)
- **🏗️ Arquitetura Detalhada:** [[docs/ARCHITECTURE|ARCHITECTURE.md]]
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ Se você deseja apenas usar o software e não é desenvolvedor, acesse:
- **Integração Nativa:** Menus organizados com prefixo `fotonPDF ▸` para PDFs.
- **Operações Inteligentes:** Girar, Juntar e Separar com **timestamps automáticos** para evitar sobrescritas.
- **Visualizador Fóton:** Janela de pré-visualização ultrarrápida (PyQt6) com suporte a abertura direta via CLI.
- **Navegação Universal:** `ModernNavBar` com transparência dinâmica, submenus colapsáveis e atalhos estilo Okular.
- **Mesa de Luz Profissional:** Visualização de páginas como objetos físicos com zoom focado no mouse e renderização Hi-Res.
- **Suporte A0/A1:** Tiling inteligente para grandes formatos de engenharia sem travar a memória.
- **Resiliência Industrial:** Infraestrutura de "Error Boundaries" que mantém o app estável mesmo sob falhas críticas de UI.
- **Estabilidade:** Distribuição otimizada em modo diretório para performance máxima.

Expand Down
File renamed without changes.
Loading