> LOADING LARAVEL-PROCESS-MAP v1.1.2...

Laravel Process Map

Pacote de analise estatica que mapeia os processos de negocio dentro de qualquer aplicacao Laravel -- sem nunca a executar. Le o codigo-fonte e os metadados runtime (rotas, schedule, broadcast channels) e produz um mapa do que chama o que, que models sao mutados onde, e que zonas estao automatizadas.

Overview

O Laravel Process Map e uma ferramenta de analise estatica que mapeia os processos de negocio dentro de qualquer aplicacao Laravel. Le o codigo-fonte e os metadados de runtime registados (rotas, schedule, broadcast channels) e produz um mapa, legivel por humanos e por maquinas, dos processos que consegue identificar -- quem chama o que, que models sao mutados onde, que jobs/eventos/listeners participam em cada fluxo, e que zonas do codigo parecem totalmente automatizadas em comparacao com manuais.

Para quem e

  • Developers a fazer onboarding num projecto novo -- ganham uma visao da arquitetura em minutos em vez de dias.
  • Tech leads e consultores a auditar um codebase -- veem gaps de automatizacao, bottlenecks e riscos sem instrumentar nada.
  • Documentacao -- gerar um snapshot versionado do mapa de processos e fazer commit ao repositorio.
  • Agentes de IA (v1.1+) -- expor o mapa como recurso MCP para que os agentes consigam raciocinar sobre o dominio.
PHP 8.4+ Laravel 12-13 MIT License Stable v1.0.x Pest 4 PHPStan Level 6 Read-Only MCP Ready

Como funciona

O pipeline e composto por um scanner principal, um conjunto de scanners especializados, deteccao heuristica de processos, e exporters para os tres formatos suportados.

Pipeline
text
ApplicationScanner

  AST scan (php-parser)  ->\
  Router (read-only)     -->-->  ProcessMapResult (DTOs versionados)
  Schedule (read-only)   ->/

  ProcessMapResult --+--> Naming cluster
                    +--> Automation scoring
                    +--> Bottleneck/Risk detectors

  Resultado anotado --> Json / Markdown / Mermaid exporters

Os ficheiros de codigo-fonte sao parseados via nikic/php-parser em AST. Os metadados de classe (extends, implements, traits, metodos publicos, chamadas a dispatch(), event(), Notification::send, etc.) sao recolhidos por um unico visitor e decorados por scanner.

Rotas, scheduled tasks e broadcast channels vem das APIs de runtime do Laravel (Router::getRoutes(), Schedule::events(), routes/channels.php) -- acesso so de leitura.

Um passo de clustering heuristico agrupa as classes em processos de negocio removendo verbos e sufixos tecnicos do nome da classe, e um conjunto de detectors anota cada processo com nivel de automatizacao, bottlenecks potenciais e riscos.

Instalacao

Instale como dependencia de desenvolvimento -- e uma ferramenta de developer/consulting, nao uma preocupacao de runtime.

Composer
bash
composer require digitaldev-lx/laravel-process-map --dev

Corra o comando de install para publicar a configuracao e criar a directoria de output:

Install + scan opcional
bash
php artisan process-map:install
# ou para instalar e fazer scan no mesmo passo
php artisan process-map:install --scan

O service provider e auto-descoberto via extra.laravel.providers -- nao e necessario registo manual.

Requisitos

Dependencia Versao
PHP^8.4
Laravel^12.0 || ^13.0
nikic/php-parser^5.0
symfony/finder^7.4 || ^8.0

Quick Start

Scan completo
bash
php artisan process-map:scan --all

Em storage/app/process-map/ sao gerados:

  • process-map.json -- dados estruturados completos, com schema versionado
  • process-map.md -- relatorio Markdown legivel por humanos
  • process-map.mmd -- flowchart Mermaid dos processos detectados

Resumo tipico no terminal

Output
text
Scanning application...

Scanned:
  - Models: 14
  - Controllers: 22
  - Actions: 31
  - Jobs: 9
  - Events: 12
  - Listeners: 15
  - Notifications: 8
  - Policies: 6
  - Commands: 5
  - Routes: 84

Detected processes:
  - Booking Management (automation: high)
  - Lead Management (automation: high)
  - Payment Handling (automation: medium)
  - User Onboarding (automation: low)

Outputs:
  - storage/app/process-map/process-map.json
  - storage/app/process-map/process-map.md
  - storage/app/process-map/process-map.mmd

Comandos Artisan

Comando Descricao
process-map:install [--scan] Publica config e cria a output directory. Com --scan faz tambem um scan completo.
process-map:scan [flags] Corre todos os scanners e exporters activos. Ver flags abaixo.
process-map:report [--output=...] Gera so o relatorio Markdown.
process-map:json [--output=...] Gera so o artefacto JSON.
process-map:mermaid [--output=...] Gera so o diagrama Mermaid.
process-map:mcp-install Imprime instrucoes para activar o layer MCP. Nunca edita .env ou routes/ai.php automaticamente.
process-map:mcp-status Diagnostico tabular: toggles do MCP e flags do envelope de seguranca.

Flags do process-map:scan

Flags
bash
--json                 # gera JSON
--markdown             # gera Markdown
--mermaid              # gera Mermaid
--all                  # JSON + Markdown + Mermaid
--output=path          # override da directoria de output
--no-routes            # ignora o route scanner
--no-process-detection # ignora o clustering heuristico

Sem nenhuma flag de formato, o comando usa config('process-map.exports.*').

Formatos de output

JSON

Artefacto canonico, com schema versionado (schema_version: "0.1"). Contem metadata da app, summary com totais, lista de classes descobertas, rotas, e processos detectados com componentes, bottlenecks, riscos e recomendacoes.

Excerto de process-map.json
json
{
  "schema_version": "0.1",
  "generated_at": "2026-05-04T18:00:00+00:00",
  "package": "digitaldev-lx/laravel-process-map",
  "version": "1.1.2",
  "app": {
    "name": "Example App",
    "environment": "local",
    "laravel_version": "13.0",
    "php_version": "8.4.1"
  },
  "summary": {
    "models": 14, "controllers": 22, "actions": 31,
    "jobs": 9, "events": 12, "listeners": 15,
    "notifications": 8, "policies": 6, "commands": 5,
    "routes": 84, "processes": 5
  },
  "processes": [
    {
      "name": "Lead Management",
      "entity": "Lead",
      "automation_level": "high",
      "components": {
        "models": ["App\\Models\\Lead"],
        "actions": ["App\\Actions\\CreateLeadAction"],
        "jobs": ["App\\Jobs\\SendLeadFollowUpJob"],
        "events": ["App\\Events\\LeadCreated"]
      },
      "risks": [
        "Process 'Lead Management' has no associated policy: authorisation may be missing."
      ],
      "recommendations": [
        "Add a policy for the Lead model."
      ]
    }
  ]
}

Markdown

Documento denso, single-pass, construido para que um humano (ou um LLM) consiga apreender a arquitectura numa unica leitura. Seccoes produzidas:

Seccoes do process-map.md
text
# Process Map: 
> header -- generated_at . PHP . Laravel . Schema . Package version

## Summary                  -- counts table
## Processes                -- um bloco por processo detectado
### N. 
- Entity / Automation level
#### Members                -- table: Role . Class (FQCN) . File . Notes
#### Flow                   -- trace explicito: route -> controller -> action -> job/event -> listener
#### Findings               -- linhas com Bottleneck / Risk / Recommendation

## Unattached Components    -- classes sem processo
## Routes Index             -- Method . URI . Name . Controller@method . Middleware
## Scheduled Tasks          -- Cron . Command . Description . Flags
## Broadcast Channels       -- channel name + auth callback presence

Uma fixture de 12 classes da origem a ~85 linhas / 2.6 KB. Uma aplicacao Laravel tipica de ~150 classes produz ~600-800 linhas / ~20 KB -- folgadamente dentro de qualquer context window moderno.

Mermaid

Gera um flowchart de overview e um diagrama por processo detectado:

Mermaid flowchart
text
flowchart TD
    route_0["POST leads"]
    App_Http_Controllers_LeadController["LeadController"]
    route_0 --> |HTTP::store| App_Http_Controllers_LeadController
    App_Actions_CreateLeadAction --> |dispatches| App_Jobs_SendLeadFollowUpJob
    App_Actions_CreateLeadAction --> |fires| App_Events_LeadCreated
    App_Events_LeadCreated --> |handled by| App_Listeners_SendLeadCreatedNotification
    App_Listeners_SendLeadCreatedNotification --> |sends| App_Notifications_LeadAssignedNotification

Renderizavel via Mermaid Live Editor, GitHub-flavoured Markdown ou a extensao Mermaid Preview do VS Code.

Nota: desde v1.1.1 os edge labels HTTP usam HTTP::method (e.g. |HTTP::store|). As versoes recentes do Mermaid passaram a reservar @ como marker LINK_ID, o que provocava parse errors no overview flowchart.

Desenhado para LLMs

O relatorio Markdown e o artefacto canonico para desenvolvimento assistido por IA. Faz-se drop do process-map.md em Claude Code, ChatGPT, Cursor, Aider ou qualquer outra ferramenta LLM, e fica imediatamente um mapa navegavel da aplicacao -- sem o LLM ter de fazer grep, abrir dezenas de ficheiros ou adivinhar como tudo se encaixa.

Vantagens concretas para um LLM

  1. File path em cada linha. As tabelas Members e Unattached incluem o caminho relativo de cada classe -- o LLM abre o ficheiro certo directamente em vez de fazer search.
  2. Um lugar canonico por classe. Cada classe aparece em exactamente um sitio -- ou dentro do bloco Process a que pertence ou em Unattached Components. Sem listagens duplicadas, sem tokens desperdicados.
  3. Coluna Notes densa. Factos operacionais inline: queue=reports . tries=5 . timeout=120s, channels: mail, database . queued, sync (no ShouldQueue).
  4. Trace de Flow explicito. A sequencia route -> controller -> action -> job/event -> listener -> notification e detalhada em bullet points.
  5. Clustering reference-aware. Classes que nao seguem convencao de nomenclatura sao na mesma anexadas ao processo via referencias estaticas (e.g. CreateLeadAction -> dispatches SendLeadFollowUpJob puxa o job para o bloco Lead Management).
  6. Hedge wording em findings. Bottlenecks/riscos/recomendacoes sao prefixados com Bottleneck:, Risk:, Recommendation: -- o LLM trata-os como pontos de partida para investigacao, nao como factos.
  7. Header com schema versionado. Schema 0.1 permite construir prompts reproduzeis: pinne a versao no tooling e os prompts continuam a funcionar quando o pacote for actualizado.
  8. Eficiente em tokens. ~85 linhas / 2.6 KB para 12 classes; ~600-800 linhas / 20 KB para 150. Folga para o raciocinio do LLM e tool calls.

Receita rapida -- Claude Code

Workflow tipico
bash
php artisan process-map:scan --markdown
# depois, dentro do Claude Code:
#   /add-dir storage/app/process-map
# ou colar o ficheiro:
cat storage/app/process-map/process-map.md | pbcopy

Prompt de arranque sugerido

"Usa o process-map.md como mapa arquitectural desta app. Nao faz grep a menos que eu peca -- vai buscar caminhos de ficheiros e referencias ao relatorio. Quando vires marcadores de bottleneck, risk ou recommendation, trata-os como pontos de partida para revisao mais profunda, nao como bugs confirmados."

Layer MCP (opcional)

O Laravel Process Map traz um layer MCP read-only opcional por cima do laravel/mcp. Expoe o mesmo mapa como resources, tools e prompts de MCP, para que o Claude Code (e qualquer outro cliente compativel) possa interrogar a arquitectura interactivamente, sem ter de carregar um relatorio estatico grande no prompt.

O layer esta desligado por defeito. Activa-lo nao relaxa nenhuma das garantias de seguranca: continua estrictamente read-only -- sem shell, sem SQL, sem HTTP externo, sem exposicao do .env.

Quando usar qual?

Quando precisas... Usa
Documentacao estatica versionada no repo, anexo de auditoria, ou paste rapido em prompt Markdown / JSON / Mermaid
Sessao interactiva onde o LLM escolhe o slice certo do mapa por pergunta; apps muito grandes; prompts reutilizaveis; inspeccao por processo Layer MCP

Instalacao

Activacao em 6 passos
bash
# 1. Instrucoes de install
php artisan process-map:mcp-install

# 2. Switch da flag no .env
PROCESS_MAP_MCP_ENABLED=true

# 3. Garantir que routes/ai.php existe
php artisan vendor:publish --tag=ai-routes

# 4. Registar o servidor em routes/ai.php (ver abaixo)

# 5. Produzir um mapa (o layer MCP le-o)
php artisan process-map:scan --all

# 6. Verificar
php artisan process-map:mcp-status
routes/ai.php
php
use Laravel\Mcp\Facades\Mcp;
use DigitaldevLx\LaravelProcessMap\Mcp\Servers\ProcessMapServer;

// STDIO (transport default do Claude Code)
Mcp::local('process-map', ProcessMapServer::class);

// ou HTTP (com middleware de throttle a escolha)
// Mcp::web('/mcp/process-map', ProcessMapServer::class)->middleware('throttle:mcp');

Resources (8)

URI Devolve
process-map://summaryMetadata da app, totais, schema e versao do package
process-map://processesLista compacta dos processos detectados
process-map://process/{slug}Detalhe completo de um processo (template URI)
process-map://routesTodas as rotas registadas
process-map://classesClasses descobertas agrupadas por tipo
process-map://risksRiscos consolidados em todos os processos
process-map://recommendationsRecomendacoes + hints de bottleneck
process-map://mermaidDiagrama Mermaid raw

Tools (11, todas read-only)

get_process_map_summary list_processes get_process_details get_process_components get_process_risks get_process_recommendations get_related_classes get_route_map get_mermaid_diagram refresh_process_map compare_process_maps (v1.2)

Prompts (6 templates de workflow)

audit_process refactor_process_safely document_process find_automation_opportunities generate_technical_handover prepare_mcp_tools_from_actions

Envelope de seguranca (sempre activo)

  • Read-only por design -- todas as tools tem #[IsReadOnly]
  • Sem execucao de shell, SQL ou HTTP externo
  • .env nunca e lido; chaves sensiveis (password / secret / token / api_key / authorization / bearer / credential / connection / *_password / private_key) sao redigidas para [REDACTED]
  • Output capped por response (max_response_bytes); processos e classes com tectos explicitos; graph walks com depth limit (max_related_depth ≤ 5)

Configuracao

Publicar config
bash
php artisan vendor:publish --tag=process-map-config

O ficheiro publicado vive em config/process-map.php e expoe os seguintes grupos:

config/process-map.php
php
return [
    'paths' => [
        'app' => app_path(),
        'routes' => base_path('routes'),
    ],

    'output_path' => storage_path('app/process-map'),

    'scan' => [
        'models' => true, 'controllers' => true, 'actions' => true,
        'jobs' => true, 'events' => true, 'listeners' => true,
        'notifications' => true, 'policies' => true, 'commands' => true,
        'routes' => true, 'schedule' => true, 'broadcasting' => true,
    ],

    'directories' => [
        'models' => ['app/Models'],
        'controllers' => ['app/Http/Controllers'],
        'actions' => ['app/Actions'],
        'jobs' => ['app/Jobs'],
        'events' => ['app/Events'],
        'listeners' => ['app/Listeners'],
        'notifications' => ['app/Notifications'],
        'policies' => ['app/Policies'],
        'commands' => ['app/Console/Commands'],
    ],

    'process_detection' => [
        'enabled' => true,
        'keywords' => ['create', 'update', 'delete', /* ... */],
        'business_suffixes' => ['Action', 'Job', 'Command', 'Service', 'Workflow', 'Process'],
    ],

    'exports' => [
        'json' => true, 'markdown' => true, 'mermaid' => true, 'html' => false,
    ],

    'privacy' => [
        'include_method_names' => true,
        'include_properties' => false,
        'include_docblocks' => false,
        'include_file_paths' => true,
        'redact_env_values' => true,
    ],
];

Layouts modulares (DDD, nwidart/laravel-modules)

Adicione roots adicionais em directories:

directories para apps modulares
php
'directories' => [
    'actions' => ['app/Actions', 'modules/*/Actions'],
    'models' => ['app/Models', 'modules/*/Domain/Models'],
],

Scanners disponiveis

Cada scanner pode ser desligado em config('process-map.scan.*').

Scanner Produz
ModelScannerEloquent models com table, fillable, casts, traits, soft-delete e factory flags
ControllerScannerControllers com accoes publicas, form requests, eventos despachados
ActionScannerAction classes com main entry method (handle/execute/__invoke/run), jobs despachados, eventos disparados
JobScannerJobs com ShouldQueue, $queue, $tries, $timeout, $backoff
EventScannerEvents com flags de broadcasting e traits Dispatchable / SerializesModels
ListenerScannerListeners com o evento que tratam e queue flag
NotificationScannerNotifications com canais (via()) e metodos to* de delivery
PolicyScannerPolicies divididas em abilities standard e custom, mapeadas a model
CommandScannerComandos Artisan com signature e description
RouteScannerRotas registadas com controller, methods, name, middleware, domain
ScheduleScannerTasks scheduled com cron expression, command, mutex, timezone, withoutOverlapping, onOneServer
BroadcastScannerChannels declarados via Broadcast::channel() em routes/channels.php

Deteccao de processos

O NamingConventionProcessDetector e propositadamente simples:

  1. Percorre cada DiscoveredClass de um tipo participante.
  2. Remove o sufixo de negocio (e.g. Action, Job).
  3. Remove o verbo inicial (e.g. Create, Send).
  4. Remove participios comuns (e.g. Created, Updated).
  5. Cluster pelo que sobra. Clusters com pelo menos 2 classes tornam-se um processo.

Detectors que anotam cada processo

AutomationDetector

Atribui none / low / medium / high com base nos componentes que o processo possui (jobs e schedule pesam mais que models simples).

BottleneckDetector

Sinaliza hints com hedge wording: "Notifications in 'Lead Management' may run synchronously".

RiskDetector

Sinaliza policies em falta, jobs sem $tries/$timeout, signatures destrutivas em comandos.

O output e sempre best-effort. As palavras Potential..., May indicate... sao intencionais e propagadas ao relatorio Markdown.

API programatica

Resolva o singleton ProcessMap do container:

Programmatic usage
php
use DigitaldevLx\LaravelProcessMap\ProcessMap;

$processMap = app(ProcessMap::class);

$result = $processMap->scan();          // devolve ProcessMapResult

$json = $processMap->exportJson($result, storage_path('app/snapshot.json'));
$md   = $processMap->exportMarkdown($result);   // string LLM-ready
$mmd  = $processMap->exportMermaid($result);

A string devolvida por exportMarkdown() e identica ao ficheiro escrito por process-map:report e pode ser passada directamente ao prompt de um LLM.

ProcessMapResult e um DTO tipado e readonly:

ProcessMapResult
php
$result->summary->models;        // int
$result->classes;                // list
$result->routes;                 // list
$result->processes;              // list
$result->toArray();              // array recursivamente serializado

Use cases

  • Diff entre dois snapshots em CI para detectar drift arquitectural.
  • Pipe do JSON para Backstage / TechDocs / wiki interno.
  • Feed do JSON a um LLM como contexto para prompts de code review.

Garantias de seguranca

O pacote e estrictamente read-only. Nunca:

  • Executa codigo de negocio, jobs, eventos ou notifications
  • Faz queries a base de dados
  • Faz HTTP calls
  • Escreve fora da output_path configurada
  • Expoe o conteudo do .env ou outros segredos

A analise e feita via parsing AST. Reflection e opt-in via process-map.safe_reflection.enabled e e usada apenas para metadata segura (interfaces, traits, parent class).

Um teste dedicado (tests/Unit/ReadOnlyInvariantTest.php) faz scan da propria src/ a procura de helpers proibidos (DB::, dispatch(, event(, Notification::send, Mail::send, Http::*) e falha o build se algum for introduzido.

Limitacoes

Deteccao heuristica

O clustering de processos usa convencoes de nomenclatura. Apps que nao seguem a estrutura standard do Laravel podem precisar de sufixos/keywords customizados na config.

Scope do AST

So sao inspeccionadas top-level classes. Anonymous classes, interfaces e traits sao saltadas (intencional -- nao sao enderecaveis como participantes de processo).

Lazy routes

Rotas registadas condicionalmente em runtime (apos RouteServiceProvider::boot) sao detectadas; rotas registadas via middleware ou caminhos runtime raros podem nao ser.

Schedule introspection

Depende da API Schedule::events() do Laravel. Schedules baseados em closure expoem so a cron expression e timezone.

HTML exporter

Stub em v1.0, agendado para v1.2.

Roadmap

Versao Highlights
v1.0 Static scan, exporters JSON/Markdown/Mermaid, deteccao heuristica de processos com clustering reference-aware, Markdown denso LLM-ready.
v1.1 Layer MCP read-only (laravel/mcp) -- 8 resources, 11 tools, 6 prompts. Slugs de processo no core.
v1.1.1 Bug fix do MermaidExporter: edge labels HTTP usam HTTP::method em vez de HTTP@method (versoes recentes do Mermaid reservam @ como LINK_ID).
v1.1.2 (actual) Constraint do symfony/finder alargado de ^7.0 para ^7.4 || ^8.0, permitindo instalacao limpa em Laravel 13 (que vem com componentes Symfony 8).
v1.2 Dashboard HTML, historico de snapshots, tool compare_process_maps.
v1.3 GitHub Action, scan diff entre commits, deteccao de regressao arquitectural.
v2.0 Plugin SPI para scanners e detectors customizados; potencial schema upgrade.

$ composer require digitaldev-lx/laravel-process-map --dev

Mapeie a sua aplicacao em segundos.

Consulte o repositorio para a documentacao completa, CHANGELOG, issues e contribuicoes.

> COOKIE_CONSENT_REQUIRED

Utilizamos cookies essenciais para o funcionamento do site e cookies analíticos (Google Analytics) para compreender como utiliza o nosso site. Os cookies analíticos só são ativados com o seu consentimento. Política de Privacidade