PHP code example of robertogallea / laravel-necromancer
1. Go to this page and download the library: Download robertogallea/laravel-necromancer library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
robertogallea / laravel-necromancer example snippets
#[Necromancer(domain: 'orders', flow: 'order-cancellation', risk: Risk::High)]
final class CancelOrder
{
public function handle(Order $order, User $actor): Order { /* ... */ }
}
Route::post('/billing/cancel', [SubscriptionController::class, 'cancel'])
->withNecromancer(
domain: 'billing',
flow: 'subscription-cancellation',
capability: 'subscription.cancel',
summary: 'Cancels an active subscription.',
risk: 'high',
externalServices: ['stripe'],
adrs: ['docs/adr/004-subscription-cancellation.md'],
);
// Group position, before or after any other group attribute
Route::withNecromancer(domain: 'billing')->prefix('billing')->group(/* ... */);
Route::prefix('billing')->withNecromancer(domain: 'billing')->group(/* ... */);
// Resource and singleton registrations
Route::resource('posts', PostController::class)->withNecromancer(domain: 'blog');
Route::singleton('profile', ProfileController::class)->withNecromancer(domain: 'account');
Route::post('/billing/cancel', [SubscriptionController::class, 'cancel'])
->metadata([
'necromancer' => [
'domain' => 'billing',
'risk' => 'high',
'external_services' => ['stripe'],
],
]);
use LaravelNecromancer\Attributes\Necromancer;
use LaravelNecromancer\Metadata\Risk;
#[Necromancer(domain: 'billing', capability: 'invoice.send', risk: Risk::High, externalServices: ['stripe'])]
final class SendInvoiceEmail implements ShouldQueue
{
// ...
}
#[Necromancer(domain: 'billing', risk: Risk::Low)]
final class SubscriptionController
{
#[Necromancer(capability: 'subscription.cancel', risk: Risk::High)]
public function cancel(): RedirectResponse { /* ... */ }
}
#[Necromancer(domain: 'security', risk: Risk::High)]
final class EnsureTwoFactorIsEnabled
{
// ...
}
'annotations' => [
'gates:ability:edit-post' => [
'domain' => 'content',
'risk' => 'low',
],
'middleware:group:web:App\\Http\\Middleware\\EnsureTwoFactorIsEnabled' => [
'capability' => 'security.two-factor',
],
],
'inference' => [
'critic' => [
'enabled' => true, // set to false to disable the critic entirely
],
],
return [
// Artifact exclusions — supports wildcard patterns for routes and glob patterns for tests
'exclude' => [
'routes' => ['horizon.*', 'telescope.*', 'debugbar.*'], // matched against the route NAME
'route_uris' => ['up', 'livewire-*', '_inertia/devtools*'], // matched against the route URI (works for unnamed routes such as Laravel's /up health check)
'models' => [],
'tests' => [], // glob patterns matched against relative file paths, e.g. 'tests/Fixtures/*'
],
// Test discovery roots — override the default tests/Unit and tests/Feature scan paths
'tests' => [
'roots' => [
// ['path' => base_path('tests/Unit'), 'type' => 'unit'],
// ['path' => base_path('tests/Feature'), 'type' => 'feature'],
],
],
// Output paths (defaults shown)
'output' => [
'manifest' => base_path('necromancer.json'),
'context' => base_path('NECROMANCER.md'),
'graph' => base_path('necromancer-graph'),
],
// OKF Knowledge Bundle output directory (necromancer:okf)
'okf' => [
'output' => base_path('okf'),
// Whether necromancer:generate announces a Knowledge Bundle's
// presence when one exists at the paths below.
'announce_in_context' => true,
// AI enrichment (necromancer:okf-enrich)
'enrichment' => [
'output' => base_path('okf-enriched'),
'cache' => storage_path('app/necromancer/okf-enrichment-cache'),
'provider' => null,
'model' => null,
'prompt_version' => '1',
'privacy_policy' => 'excludes-source-framework-config-adr-bodies',
],
],
// Laravel Boost integration
'boost' => [
'context_path' => base_path('.ai/guidelines/necromancer.md'),
],
// Route metadata (Laravel 13.17+ Route::metadata()) — the namespace key Necromancer reads
'route_metadata' => [
'namespace' => 'necromancer',
],
// Exact-ID annotation mappings for non-reflectable artifacts (closures, test
// files, gates, scheduled tasks) and registration-specific overrides for
// reflectable ones. Keys MUST be exact canonical Artifact IDs — no wildcards.
'annotations' => [
// 'jobs:App\\Jobs\\SendInvoice' => [
// 'domain' => 'billing',
// 'capability' => 'invoice.send',
// 'risk' => 'high',
// ],
],
];
bash
php artisan vendor:publish --tag=necromancer-config
bash
php artisan necromancer:scan
bash
php artisan necromancer:scan --only=routes,models
php artisan necromancer:scan --only=observers,scheduled_tasks,gates
bash
php artisan necromancer:map
bash
php artisan necromancer:audit
bash
php artisan necromancer:doctor
bash
php artisan necromancer:doctor --json
php artisan necromancer:doctor --min-score=80 # exit 1 when score < 80 (CI use)
php artisan necromancer:doctor --only=route-clarity # score a single dimension
bash
php artisan necromancer:generate
bash
php artisan necromancer:generate --only=routes,models
php artisan necromancer:generate --only=observers,scheduled_tasks
php artisan necromancer:generate --only=gates,middleware,mailables
bash
php artisan necromancer:generate --except=listeners
php artisan necromancer:generate --except=listeners,validation_rules,service_providers
bash
php artisan necromancer:generate --paths=app/Models,app/Http/Controllers/Admin
php artisan necromancer:generate --only=models --paths=app/Models
bash
php artisan necromancer:generate --force
bash
php artisan necromancer:generate --output=.ai/context/app.md
bash
php artisan necromancer:ask # interactive prompt
php artisan necromancer:ask "..." --provider=anthropic # provider override
php artisan necromancer:ask "..." --model=claude-sonnet-4-5 # model override
bash
php artisan necromancer:inspect-payload
bash
php artisan necromancer:inspect-payload --privacy
bash
php artisan necromancer:infer
bash
php artisan necromancer:prompt "Where is tenant isolation enforced?"
You are analyzing MyApp, a Laravel 13 application.
Use the following source-grounded manifest entries:
- app/Http/Middleware/SetTenant.php:15-61
- app/Models/Project.php:12-44
- app/Http/Requests/CreateProjectRequest.php:1-38
Question:
Where is tenant isolation enforced?
Rules:
- Only answer from cited sources.
- Mention missing evidence.
- Do not assume runtime behavior not shown in code/tests.
bash
php artisan necromancer:prompt "authentication" --no-ai # skip AI reformulation
php artisan necromancer:prompt "billing" --top=5 # limit to 5 citations
php artisan necromancer:prompt "auth" --output=prompt.txt # write to file
php artisan necromancer:prompt # interactive question prompt
bash
php artisan necromancer:benchmark
bash
php artisan necromancer:okf
bash
php artisan necromancer:okf --allow-stale # export anyway, e.g. in a throwaway CI check
php artisan necromancer:okf --allow-partial # export a deliberately narrow bundle
php artisan necromancer:okf --output=dist/okf # write elsewhere
bash
php artisan necromancer:okf-enrich
bash
php artisan necromancer:okf-enrich --refresh # bypass the cache, re-enrich every concept
php artisan necromancer:okf-enrich --provider=anthropic --model=claude-sonnet-4-6
php artisan necromancer:okf-enrich --output=dist/okf-enriched
php artisan necromancer:okf-enrich --allow-stale --allow-partial
bash
php artisan necromancer:graph