Kitchen Report

Leaf · Version 01a1c524-8990-7e18-ac12-42284f15d3df

Checked: 2026-11-10T15:45:15.591Z · Report generation 2

Status: complete · Analysis: live

Kitchen Report · Stage 1 of 2: Source check

Source check ✓ 2026-11-10T11:07:59.334Z

Kitchen Report · Stage 2 of 2

Buyer headline scores

Features found in source

All promised features found 98 / 100

31.5 of 32 checked features (98%); 0 couldn't be verified; partial features count half.

Security screening

Good, small improvements suggested 82 / 100

3 security issue(s) found; serious issues reduce this score most. No scan guarantees safety.

Setup files

Some setup steps missing 57 / 100

Present: README, run entry point, App specification or AGENTS. Missing: environment example, known install command. Static check in .; code was not executed. Checks README, environment example, install and run scripts, app specification or AGENTS, confirmed How to run it (confirmed) and run manifest (absent). The app was not executed.

Dependency & license health

Not checked

Not checked

Dependency and license evidence has not been checked.

Not reviewed by AI (1)

These files are too big or are one very long line, so the AI review skipped them. The rest of the report is complete. If a file matters to you, look at it yourself.

The AI read 36 of 54 source files.

What you get

App specification source review: 31.5 of 32 features found in source (98%)

Found: 31; Partly: 1; Missing: 0; Couldn't verify: 0

Actual run verification: Not tested. Source review does not prove the app works. Dependency warnings permit publishing; harmful content and unresolved rights or license blockers prevent it. Checks do not guarantee safety.

Findings

Archive entry paths passed to unzip without full sanitization

Medium — could affect users in some situations; plan a fix.

A crafted EPUB could cause unzip to read entries outside the intended archive path or trigger unexpected unzip behavior, potentially exposing local files or crashing the importer.

Fix hint: Validate the resolved path stays within the archive root and reject absolute or traversal paths before invoking unzip; consider a native ZIP reader instead of shelling out.

open · Review finding

ai-security · Sources/ReaderCore/EPUBImporter.swift

Unpinned third-party Python dependencies installed during local voice setup

Medium — could affect users in some situations; plan a fix.

Users who run Kokoro setup download and execute a large Python dependency tree from the network; a compromised package or index could run arbitrary code on the user's Mac.

Fix hint: Pin and verify the requirements file hash or use a lockfile with hashes; document the trust boundary and consider sandboxing the worker process.

open · Review finding

ai-security · Sources/Leaf/Resources/LocalKokoro.requirements.txt

Model refresh network call lacks explicit timeout handling

Low — limited impact; fix during routine maintenance.

If OpenRouter is slow or unreachable, the settings UI can remain in a loading state and the user cannot easily recover.

Fix hint: Add a timeout and cancellation to the model refresh request and surface failures without blocking the settings UI.

open · Review finding

ai-security · Sources/Leaf/SpeechSettings.swift

Platform check: macOS selected but no macOS project found

Low — an improvement hint for the developer, with no confirmed user harm.

Fix hint: Review the platforms in your listing Basics. This information does not affect the score or publication.

open · Review finding

platform-check ·

For developers: code quality

Improvement hints only; excluded from buyer headline scores.

Code cleanliness: 77 / 100 (AI maintainability review). Architecture: 79 / 100 (AI structure review). Test presence: 0 test files (presence signal only). Coverage: Not checked.

ReaderModel is a large god-object mixing import, speech, bookmarks, lookup and persistence; splitting would aid review.

Sources/Leaf/ReaderModel.swift

CloudNarrator cache and chunk queueing are subtle; a brief comment on eviction and lookahead policy would help.

Sources/Leaf/CloudNarrator.swift

EPUBImporter shells out to /usr/bin/unzip; document the sandbox/availability assumption for packaged builds.

Sources/ReaderCore/EPUBImporter.swift

Source coverage: Sampled. Build not run by CookThisApp.