# SATE Audit Report v0

**Project:** `/home/amari/projects/wudd_core`
**Generated:** 2026-05-23T16:39:05.528Z
**Schema:** 1 (SATE_AUDIT_REPORT_V0)

## Laravel Version Resolution
- **Resolved:** 11.47.0
- **Confidence:** HIGH
- **Authority Source:** RUNTIME
- **SATE Mode:** FULL_DETERMINISTIC

Per-source values:
  - declared: 11.0.0
  - locked: 11.47.0
  - installed: (none)
  - runtime: 11.47.0

**Drift findings:**
  - `LARAVEL_VERSION_DRIFT_DECLARED`: composer.json declares 11.0.0 but runtime reports 11.47.0 (declared constraint is looser than installed)

## Surface Enumeration
**Application surfaces** (what SATE audits):
- Total: 2305
- Proof-ready: 2058
- Blocked: 247

**Test corpus** (what MANUAL stage gates — different counter):
- Test files on disk: 731
- MANUAL tests discovered: 0
- Files scanned during MANUAL discovery: 0

> APPLICATION SURFACES and TEST CORPUS are different counters — per MANUAL_STAGE_CONTRACT v1 they must not be folded. App surfaces are what SATE audits; test corpus is what MANUAL gates.

```
MANUAL_INPUT_SCOPE:
  source: discoverPhpTestFiles
  files_total: 0
  files_considered: 0
  tests_discovered: 0 (extracted test blocks; many files contain no tests)
```

## MANUAL Stage Verdict (v1 — SAFETY + QUALITY independent)
> SAFETY and QUALITY are INDEPENDENT gates per MANUAL_STAGE_CONTRACT v1. Never folded.

| Gate | Spec | Pass files |
|---|---|---:|
| SAFETY | v1 (refiner/validator.js) | 477 |
| QUALITY | v1 (v1, enabled=true) | 599 |
| KB_ELIGIBLE | binary v1 (YES if QUALITY passes; LIMITED reserved for v2) | 448 |
| RUNNER allowlist | file-level | 1 |

## Tier Classification (God Mode)
| Tier | Count |
|---|---:|
| A | 253 |
| B | 40 |
| C | 1633 |
| FRAGILE | 132 |
| QUARANTINED | 0 |
| UNCLASSIFIED | 0 |

## Refusal Ledger
> Each refusal cites the specific signal that triggered it. No mystery refusals.

Total blocked surfaces: 247

| Reason | Count | Example surface |
|---|---:|---|
| `NO_EXPLICIT_RETURN` | 246 | `App\Console\Commands\CheckDeliveryAuditTable@handle` |
| `FRAMEWORK_IMPLICIT_ONLY` | 1 | `App\Livewire\ControlRoomHeader@periodDaysForKey` |

## Dead-Code Triage
Total triaged: 1777

| Bucket | Count | Action | Example |
|---|---:|---|---|
| DELETE | 965 | Remove | `App\Domains\Decisions\Services\ExecutiveBriefService@__construct` |
| WIRE | 0 | Suggest binding | — |
| PROMOTE | 0 | Suggest promotion path | — |
| DEFER | 812 | Flag, recheck next audit | `App\Domains\Analytics\Policy\AnalyticsPolicy@allowEquity` |

*Excluded 528 framework entry points from triage — see "Framework Entry Points" section below.*

## Framework Entry Points
Framework entry points are invoked by Laravel's runtime (schedulers, queue workers, HTTP kernel, event dispatcher, Filament/Livewire lifecycles, etc.). They have zero direct PHP callers by design — excluded from dead-code triage so the DEFER bucket reflects truly uncertain surfaces, not framework hooks.

Total excluded from dead-code triage: 528

| Kind | Count |
|---|---:|
| policy | 244 |
| console_command | 137 |
| queued_job | 94 |
| form_request | 41 |
| event_listener | 11 |
| livewire_component | 1 |

## Duplication Map
Total clusters: 253; surfaces in clusters: 865

| Cluster | Canonical | Duplicates |
|---|---|---|
| cluster_001 | `App\Console\Commands\AddUserToCompany@handle` | `App\Console\Commands\BackfillMissingPlanInvoices@handle` |
| cluster_002 | `App\Console\Commands\ApplyLatestImport@handle` | `App\Console\Commands\DryRunLatestImport@handle` |
| cluster_003 | `App\Console\Commands\AuditTrailManagement@handle` | `App\Console\Commands\MetricsAuditCommand@handle` |
| cluster_004 | `App\Console\Commands\BackfillPlanInvoice@handle` | `App\Console\Commands\SeedTomatoSitesSettings@handle` |
| cluster_005 | `App\Console\Commands\CheckZohoIntegrationHealth@handle` | `App\Http\Controllers\ImportPreviewController@index`, `App\Listeners\BroadcastDatabaseNotification@broadcastOn`, `App\Listeners\BroadcastDatabaseNotification@broadcastWith` |
| cluster_006 | `App\Console\Commands\EnableHireReadinessCommand@handle` | `App\Console\Commands\Occasions\BackfillManagerNotices@handle` |
| cluster_007 | `App\Console\Commands\ExpireFrozenCompanyCancellationPoints@handle` | `App\Console\Commands\ReconcileTapOrphans@handle` |
| cluster_008 | `App\Console\Commands\ExpireTrialsCommand@handle` | `App\Console\Commands\NotifyTrialEndingSoonCommand@handle` |
| cluster_009 | `App\Console\Commands\FixOrderVendorPosRecords@handle` | `App\Console\Commands\OcrAnalyticsReport@handle`, `App\Console\Commands\TestPoReferences@handle`, `App\Services\FcmService@__construct`, `App\Services\PushService@__construct`, `App\Services\SalesCommissionService@__construct`, `App\Services\TurnstileService@__construct`, `App\Services\ZohoBooksService@__construct`, `App\Support\Media\SupplierPathGenerator@__construct` |
| cluster_010 | `App\Console\Commands\GenerateApiToken@handle` | `App\Console\Commands\UserCheckEmail@handle` |
| cluster_011 | `App\Console\Commands\HelpSelfTest@handle` | `App\Console\Commands\WidgetsCacheCommand@handle`, `App\Console\Commands\WidgetsClearCommand@handle`, `App\Console\Commands\WuddCacheRefresh@handle` |
| cluster_012 | `App\Console\Commands\MetricsComputeCommand@handle` | `App\Console\Commands\MetricsRecomputeRangeCommand@handle`, `App\Console\Commands\MetricsRefreshTodayCommand@handle`, `App\Domains\Metrics\Commands\ComputeDayCommand@handle`, `App\Domains\Metrics\Commands\ComputeRangeCommand@handle`, `App\Domains\Metrics\Commands\RefreshTodayCommand@handle` |
| cluster_013 | `App\Console\Commands\MonitorStuckCheckouts@handle` | `App\Console\Commands\MonitorStuckOrders@handle` |
| cluster_014 | `App\Console\Commands\Occasions\AutoSeedLocalOccasions@handle` | `App\Console\Commands\SeedDemoAvatars@handle` |
| cluster_015 | `App\Console\Commands\Occasions\CleanupOldEvents@handle` | `App\Console\Commands\PruneAutomationHistory@handle` |
| cluster_016 | `App\Console\Commands\Occasions\QueueDailyPersonal@handle` | `App\Console\Commands\Occasions\QueueHolidays@handle`, `App\Console\Commands\Occasions\QueueWeeklyDigests@handle` |
| cluster_017 | `App\Console\Commands\PopulateDocumentFieldIndex@handle` | `App\Console\Commands\ThreadsMigrateLegacyFields@handle` |
| cluster_018 | `App\Console\Commands\ReconcileOrderInvoices@handle` | `App\Console\Commands\ReconcileSubscriptions@handle`, `App\Console\Commands\ScanZohoSideDrift@handle` |
| cluster_019 | `App\Console\Commands\TestInvoicePayments@handle` | `App\Console\Commands\TestWalletAdvances@handle` |
| cluster_020 | `App\Domains\Decisions\ExecutiveBriefService@__construct` | `App\Domains\Decisions\Services\ExecutiveBriefService@__construct` |

*+ 233 more clusters in the JSON report.*

## Coverage Gaps
Coverage rate: 19.2%; total gaps: 1663

Top gaps by domain (full list in JSON):

| Domain | Gaps | Example surface |
|---|---:|---|
| Services | 584 | `App\Domains\Decisions\ExecutiveBriefService@weeklyBrief` |
| Other | 497 | `App\Domains\Analytics\Policy\AnalyticsPolicy@allowEquity` |
| Controllers | 389 | `App\Http\Controllers\Account\MembershipStatusController@hasActiveMembership` |
| Console Commands | 115 | `App\Console\Commands\AccrueGatewayFeesDaily@handle` |
| Jobs | 41 | `App\Domains\Metrics\Jobs\ComputeFactsRangeJob@handle` |
| Models | 24 | `App\Models\Group@updateGroupWithMessage` |
| Listeners | 12 | `App\Listeners\AlertOpsOnChargebackCreated@handle` |
| Notifications | 1 | `App\Support\Notifications\NotificationSender@sendForSubscriptionEvent` |

## Candidates (require human decision)
| Source | Count |
|---|---:|
| Dead-code | 1777 |
| Duplication | 612 |
| Coverage gaps | 1663 |
| **Total** | **4052** |

Submit decisions via:
```bash
node public/sate.js review-queue --run-id <runId> --candidates <candidates.json>
node public/sate.js submit-decision --run-id <runId> --candidate-id <id> --decision APPROVE|REJECT|DEFER
```

## Governance History
> Decisions are append-only per CORE_FREEZE. No retroactive mutation.

Total decisions on record: 0
| Decision | Count |
|---|---:|
| APPROVE | 0 |
| REJECT | 0 |
| DEFER | 0 |
| OTHER | 0 |

## Version Pins
Every KB-derived fact carries: `learned_under: { safety_gate: v1, quality_gate: v1, manual_contract: v1 }`

## Runner Allowlist Reference
- Path: `.ai/manual/approved-tests.json`
- Approved test files: 1
- RUNNER enforcement is file-level. Per MANUAL_STAGE_CONTRACT v1, requested PHPUnit tests must be in this allowlist or RUNNER aborts.
