Explore the codebase. Question the complexity.
Skepsis helps you understand the structure of an existing project, inspect the evidence behind every finding, and make changes with confidence.
See how it works| File | Finding | Severity | Provenance | Decision |
|---|---|---|---|---|
| src/Services/OrderSync.php | Sync path branches on 14 configuration flags | high | 3 measured, 1 judged | Open |
| app/Http/Controllers/CheckoutController.php | Controller writes to three tables directly | high | 2 measured, 2 judged | Accepted |
| resources/js/cart/CartStore.js | Store mutated from nine components | medium | 4 measured | Intentional design |
| includes/hooks/fluent-forms.php | Hook callback resolved at runtime | medium | 1 measured, 1 unresolved | Open |
| src/Models/Traits/HasAddress.php | Trait used by six models with different address columns | low | 2 measured, 1 judged | Not a finding |
| database/migrations/2024_03_11_orders_index.php | Query in OrderRepository does not use the index this migration adds | low | 2 measured | Open |
Five steps, in the order you actually need them
-
Understand the project's structure and important flows
Start from a folder or from a flow like checkout and reach the same code either way. The file inventory and the architecture overview are two views of one versioned model, so you never have to reconcile them.
ArchitectureCheckoutCatalogSyncFilesapp/Http/Controllers/CheckoutController.phpServices/CatalogService.phpOrderSync.php -
Find code that is harder to change safely than necessary
Findings point at places where a small edit has wide reach, such as a controller that writes to three tables or a store that nine components mutate, so you know which edits need a wider test before you make them.
Findings27 candidateshighCheckoutController writes to 3 tablesapp/Http/Controllers/CheckoutController.phpordersorder_itemsinventorymediumStore mutated from nine componentsresources/js/cart/CartStore.jsmediumHook callback resolved at runtimeincludes/hooks/fluent-forms.php -
Inspect the source evidence and the legitimate reasons for the design
Read the exact lines a finding was built from, with what was measured kept apart from what a model judged, so you can tell a deliberate design from an accident before you touch it.
OrderSync.phplines 41 to 4641public function run(Order $order)42{43 if (config('sync.legacy_marketplace')) {44 $this->pushLegacy($order);45 }46 if (config('sync.retry_on_timeout')) {measuredBranches on 14 keys underconfig('sync.*').judgedEleven flags toggle retired integrations. -
Decide whether to simplify, investigate, accept, or defer
Mark each finding accepted, intentional design or not a finding. Route findings to whoever owns that part of the code, ten files at a time with three borrowed from a neighbouring reviewer, so nobody only reviews their own work.
Controller writes to three tables directlyhighapp/Http/Controllers/CheckoutController.phpAcceptIntentional designNot a findingRouted to Priya, 10 files, 3 borrowed from Tom -
Compare later scans to see what improved or regressed
skepsis diff 12 14lists what a later scan resolved, introduced or moved, so you can show that your change helped and catch what it disturbed.$ skepsis diff 12 14 resolved 4 introduced 1 moved 2 - src/Services/OrderSync.php resolved + app/Jobs/RetryWebhook.php introduced
then scan again
What a finding contains
Every sentence carries a provenance label, so you can see which claims were measured from source, which a model judged, and which are explanatory prose, before you act on any of them.
Sync path branches on 14 configuration flags
config('sync.*') and branches on each of them.Start on your own machine
Two commands. The first builds the project model, the second opens this UI at a local address. Nothing is uploaded.
$ skepsis scan /path/to/project scanned 1,284 files, 27 candidates, model #14 $ skepsis serve serving storefront @ 3f9a2c1 on http://localhost:4174