Skip to content
tooluser/vote-with-your-feet (opens in a new tab)

A clean, uv-powered Python layout let down by missing CI, type hints, and a committed production credential file.

Python★ 10 open issues
Overall score: 71 out of 100
Holding

last scored 2026-10-30 · both lenses

Readiness lenses

The same repo, two ways: how ready it is for an AI coding agent, and for a human newcomer. Switch lenses to see each one's score and checks.

How ready the repo is for an AI coding agent to read, build, and operate it.

71 / 100

80 of 144 checks passed across 6 categories.

  • Machine Orientation

    85

    Well-documented with a complete CLAUDE.md and uv support, missing only CI automation and architecture docs.

    The repository provides clear setup commands, explicit dependency management with uv.lock, and a dedicated CLAUDE.md detailing architecture, commands, and testing patterns, comfortably clearing the Solid band. However, it lacks a CI configuration file, an issue template set, and an explicit architecture document in docs/.

  • Reproducible Setup

    75

    Solid uv-based Python setup with Docker support, missing only CI workflows and a clean env template.

    The repository achieves a Solid score (75) by providing complete Astral uv dependency management with a uv.lock file, explicit Python version pinning, a Dockerfile, and docker-compose.yml. Setup and run commands are documented clearly in the README and CLAUDE.md. Minor deductions stem from missing a committed env.example template (the repo contains an un-ignored production env file instead) and lacking automated CI workflows.

  • Code Navigability

    65

    Clean conventional layout with organized modules, though type hints are entirely absent.

    Code Navigability clears the Workable band (65/100). The repository has a clean conventional Flask layout with logical file separation between routes, models, database, and templates, but lacks Python type hints on core signatures and has unknown TypeScript strictness / type definitions since it uses vanilla JS.

  • Verification Surface

    60

    Tests run cleanly with pytest and uv, but automated CI and lint integration are absent.

    Verification is workable (clearing the Workable 50–69 band) because the repository includes a complete pytest test suite runnable via `uv run pytest`, but lacks automated CI configuration in the file tree and has no automated linting/formatting commands configured in scripts. The agent can execute unit and integration tests locally, but cannot rely on CI feedback loops for push verification.

  • Agent Safety

    65

    Reasonable secret hygiene is undermined by a committed production environment file containing sensitive credentials.

    The repository provides an env.example file and gitignore coverage for environment files, but it also contains a committed .env.production file with sensitive secrets. Bounding boundaries are specified via AGENTS.md and CLAUDE.md, but the presence of committed production secrets drops the repo into the workable band.

  • Context Economy

    85

    Clean, lean layout that fits easily into context with helpful agent documentation.

    The repository has clean documentation and an efficient file layout, fitting comfortably within an agent context window with no bloated build artifacts or node_modules. Essential orientation and setup guides are present (README, CLAUDE.md, AGENTS.md), placing it in the solid 70–89 band.

  • Machine Orientation

    18 checks passed10 problems found

    • mediumRuntime versions are pinned precisely

      An agent running the wrong runtime version hits failures it cannot diagnose.

      Checked manifest: pyproject.toml; it does not show this.

      Fix: Pin the exact runtime/language version in a .nvmrc, .python-version, or engines field.

    • lowllms.txt present

      An llms.txt is the emerging machine-orientation standard — a curated map for LLMs.

      Fix: Add an llms.txt pointing at the key docs and entry points.

    • lowTopics set

      GitHub topics situate the repo's domain and stack for an agent at a glance.

      Fix: Add a few GitHub topics describing the domain and stack.

    • lowArchitecture doc

      An ARCHITECTURE doc hands an agent the module map instead of making it infer one.

      Fix: Add an ARCHITECTURE.md describing the major components and how they fit.

    • lowExamples directory

      An examples/ directory gives an agent runnable, copyable references for the API.

      Fix: Add an examples/ directory with small, runnable usage samples.

    • lowContribution conventions are written down

      A contributor guide is where an agent learns the branch, commit, and review conventions it must follow.

      Fix: Add a CONTRIBUTING.md stating the branch naming, commit format, and how a change gets reviewed.

    • lowScope and non-goals are clear

      Knowing the boundary stops an agent from building features that were deliberately excluded.

      Nothing in the snapshot shows this.

      Fix: Add a short 'Scope' or 'Non-goals' note so the project's boundaries are explicit.

    • lowKey technical decisions are explained

      An agent that doesn't know the reasoning behind a choice will cheerfully undo it.

      Checked README § Technology Stack; it does not show this.

      Fix: Note the reasoning behind major technical decisions in the docs or an ADR directory.

    • lowA change history is accessible

      An agent reading a project cold can't tell what is fresh versus legacy without a change trail.

      Nothing in the snapshot shows this.

      Fix: Keep a CHANGELOG.md noting what changed in each version or at each notable milestone.

    • lowProject maturity is stated

      Maturity tells an agent how conservative its changes must be and whether breaking an API is acceptable.

      Nothing in the snapshot shows this.

      Fix: Add a one-line status to the README: experimental, stable, maintenance-only or archived.

    • README present — An agent reconstructs what the repo is and how to work in it from the README first.
    • Agent instructions file — AGENTS.md / CLAUDE.md is the direct, machine-read channel for entry points and conventions.
    • Agent instructions stay lean — A bloated instructions file burns context and measurably hurts more than it helps.
    • Repository description set — The one-line description is the fastest orientation signal an agent reads.
    • README shows usage — A usage/example section tells an agent how the project is actually invoked.
    • README states the purpose, not just the name — An agent that can't tell what a repo is for will optimise the wrong thing. Evidence: README introduction.
    • Entry points are named — Knowing where execution begins saves an agent from guessing across the tree. Evidence: README § Running the Application.
    • Project layout is explained — A map of the tree lets an agent localise a change without reading every folder. Evidence: README § Project Structure.
    • Domain terms are defined — Undefined jargon forces an agent to infer meaning, and it infers wrong. Evidence: file tree: docs/.
    • Documentation looks current — Stale docs are worse than none — an agent trusts them and acts on fiction. Evidence: file tree: README.md.
    • The intended audience is clear — Knowing the intended use frames every decision an agent makes about the repo. Evidence: README introduction.
    • Documentation links resolve — A dead link is a dead end an agent follows before discovering it leads nowhere. Evidence: README § Deployment.
    • The stack is identifiable — An agent must know the stack before it can reason about how to change the code. Evidence: manifest: pyproject.toml.
    • A single command runs it — A single obvious run command is the fastest orientation an agent can get. Evidence: README § Running the Application.
    • Agent-specific guidance exists — General docs are written for humans; an agent benefits from its own orientation file. Evidence: file tree: AGENTS.md.
    • External service dependencies are listed — An agent can't reason about a system's dependencies it doesn't know exist. Evidence: README § Technology Stack.
    • An example shows the expected result — An example with its expected output is the cheapest way for an agent to confirm it understood the project. Evidence: README § Cast a Vote.
    • Supported platforms are stated — An agent that doesn't know the supported targets can't tell a real bug from an unsupported setup. Evidence: README § Technology Stack.
  • Reproducible Setup

    18 checks passed8 problems found

    • highSetup works from a clean clone

      Hidden setup steps are where an autonomous run silently stalls.

      Checked README § Setup; it does not show this.

      Fix: Walk the setup yourself on a clean machine and document every prerequisite and command you actually needed.

    • lowEnv template present

      A .env.example tells an agent which configuration keys it must supply to run.

      Fix: Ship a .env.example listing every required key with placeholder values.

    • lowDev container

      A .devcontainer gives an agent a one-command, fully-declared environment.

      Fix: Add a .devcontainer so the toolchain is declared, not assumed.

    • lowContainer base images are pinned

      A floating base image means the same Dockerfile builds differently over time.

      Checked file tree: Dockerfile; it does not show this.

      Fix: Pin container base images to a digest or exact version, not `latest`.

    • lowNon-idempotent steps are flagged

      An agent that reruns a non-idempotent step can silently corrupt state it relied on.

      Nothing in the snapshot shows this.

      Fix: Mark setup steps that aren't safe to rerun, or make them idempotent and say so.

    • lowTest fixtures are committed

      Tests that need data they can't get from the repo can't run in a network-isolated agent environment.

      Nothing in the snapshot shows this.

      Fix: Commit test fixtures and seed data so the suite runs without external data sources.

    • lowWhat the build produces is documented

      An agent can't verify a build whose output location and name it has to guess.

      Nothing in the snapshot shows this.

      Fix: State what the build command produces and where it lands.

    • lowThere is a way back to a clean state

      Without a clean-state command an agent debugs stale artefacts instead of the actual problem.

      Nothing in the snapshot shows this.

      Fix: Add a `clean` script or task.

    • Lockfile committed — Without a lockfile two clones can resolve different dependency trees — the build isn't reproducible.
    • Runtime / toolchain pinned — An unpinned runtime makes an agent guess the version a clean environment needs.
    • Version pins are exact — A floating pin (a bare major, or a range) still drifts between installs.
    • Container or dev-container — A Dockerfile / compose / devcontainer removes 'works on my machine' from setup.
    • README documents setup — Explicit install/setup steps are what let an agent go from clone to running.
    • Commands are exact and copyable — An agent runs commands verbatim — a described command is a command it has to reconstruct. Evidence: README § Setup.
    • External prerequisites are listed — An agent can't install what the docs never mention it needs. Evidence: README § Technology Stack.
    • Required configuration is documented — An agent that doesn't know which keys matter will run with a broken config. Evidence: README § Configuration.
    • The build looks deterministic — A build that drifts means an agent's green run today is a red run tomorrow. Evidence: manifest: pyproject.toml.
    • Setup avoids manual GUI steps — A click-only step is a wall an autonomous agent simply cannot get past. Evidence: README § Setup.
    • It runs on sensible defaults — If nothing works until everything is configured, an agent can't get a first foothold. Evidence: README § Configuration.
    • The build is self-contained — A build that reaches out to something mutable isn't reproducible across runs. Evidence: manifest: pyproject.toml.
    • Setup is reasonably bounded — A sprawling setup multiplies the places an agent's run can stall. Evidence: README § Setup.
    • A dependency lockfile is committed — Without a lockfile the same install command resolves to different versions on different runs. Evidence: file tree: uv.lock.
    • An environment template is committed — Without a template an agent has to guess which variables exist and what they mean. Evidence: file tree: env.example.
    • Setup includes a validation step — A setup that ends with no verification leaves an agent unsure whether to proceed. Evidence: README § Setup.
    • The package manager is unambiguous — Competing lockfiles make an agent pick a tool at random and produce a dependency tree nobody else has. Evidence: README § Setup.
    • Local runs cannot reach production by default — A shared config is how an agent's harmless local run ends up talking to a production database. Evidence: file tree: .env.production.
  • Code Navigability

    14 checks passed8 problems found

    • low.editorconfig present

      An .editorconfig keeps whitespace and encoding consistent, so diffs stay legible.

      Fix: Add an .editorconfig pinning indentation, charset, and final-newline.

    • lowFormatter configured

      A formatter config (Prettier/Biome/rustfmt/…) keeps style uniform across the tree.

      Fix: Add a formatter (Prettier, Biome, rustfmt, …) and commit its config.

    • lowTyped public API

      A declared `types` entry gives an agent typed signatures to anchor an edit on.

      Fix: Ship type declarations and point package.json `types`/`typings` at them.

    • lowComments explain the non-obvious

      An agent can read what code does; it can't recover the reasoning that isn't written down.

      Nothing in the snapshot shows this.

      Fix: Comment the non-obvious decisions and constraints — the context that isn't in the code itself.

    • lowError handling is consistent

      Predictable error handling lets an agent reason about failure paths without surprises.

      Nothing in the snapshot shows this.

      Fix: Adopt one error-handling pattern and apply it consistently.

    • lowFew unexplained magic values

      A magic value with no name is intent an agent has to infer and may get wrong.

      Nothing in the snapshot shows this.

      Fix: Name magic values as named constants with a brief explanation.

    • lowFormatting is automated and enforced

      Manual formatting is noise an agent generates and a human has to clean up.

      Nothing in the snapshot shows this.

      Fix: Commit a formatter config and add it to CI so formatting is automatic and consistent.

    • lowHelper scripts have a home

      Findable, well-named scripts are the tools an agent reaches for first; loose ones get missed or misused.

      Nothing in the snapshot shows this.

      Fix: Move helper scripts into a scripts/ (or tools/) directory with descriptive names.

    • Conventional source layout — A recognised src/ · lib/ · app/ layout lets an agent localise code without spelunking.
    • Naming is consistent — Consistent naming lets an agent guess where things are instead of searching. Evidence: README § Project Structure.
    • Modules have clear boundaries — Clear seams let an agent change one thing without reading everything. Evidence: README § Project Structure.
    • Little obvious dead or commented-out code — Dead code is a trap an agent wastes context understanding before discarding. Judged from the snapshot as a whole; no single section settles it.
    • Structure isn't pathologically nested — Deeply nested trees make an agent traverse more to find less. Evidence: README § Project Structure.
    • Files have a single responsibility — A focused file is one an agent can change confidently without unrelated fallout. Evidence: README § Project Structure.
    • Public boundaries are typed — Typed boundaries give an agent ground truth instead of guesses about shapes. Evidence: file tree: openapi.yaml.
    • The dependency structure is legible — A tangled dependency graph makes an agent's change ripple unpredictably. Evidence: README § Project Structure.
    • The data model is documented or inferrable — An agent editing a system whose data shapes are opaque will make changes that contradict the model. Evidence: README § Project Structure.
    • Tests are near the code they cover — Tests an agent has to hunt for are tests it won't update when it changes the source. Evidence: README § Project Structure.
    • Cross-cutting concerns are isolated — Scattered cross-cutting logic is expensive for an agent to refactor without unintended side effects. Evidence: README § Project Structure.
    • Code for a feature lives together — When a feature lives in one place, an agent's change touches one area instead of a dozen folders. Evidence: README § Project Structure.
    • Configuration is read in one place — Scattered configuration means an agent changes one setting and misses the three copies elsewhere. Evidence: README § Project Structure.
    • Each language keeps to its own area — Interleaved languages make an agent apply the wrong toolchain and conventions to a file. Evidence: README § Project Structure.
  • Verification Surface

    4 checks passed19 problems found

    • mediumTest command defined

      A `test` script is the documented, discoverable way to run the suite.

      Fix: Add a `test` script (package.json / Makefile / Taskfile) that runs the suite.

    • mediumCI configured

      Readable CI is the feedback loop an agent reads to know what 'green' means here.

      Fix: Add a CI workflow (e.g. under .github/workflows) that runs the build and tests.

    • mediumHow to run the tests is documented

      An agent can't check its own work if the way to verify is undocumented.

      Checked README § Running Tests; it does not show this.

      Fix: Document the exact command to run the test suite (and any setup it needs).

    • mediumVerification feedback is legible

      A noisy or flaky signal is one an agent can't tell apart from a real failure.

      Checked README § Running Tests; it does not show this.

      Fix: Make the test/CI output give an unambiguous pass/fail; quarantine or fix flaky tests.

    • mediumTests assert behaviour

      A test that asserts nothing turns green no matter how broken the code is.

      Checked file tree: tests/; it does not show this.

      Fix: Make tests assert expected outcomes, not just that code runs without throwing.

    • mediumType checking is a hard gate

      A type system only helps an agent if violations actually block a merge.

      Nothing in the snapshot shows this.

      Fix: Make the type checker a required CI step that fails the build — not a warning or informational run.

    • mediumKinds of tests are separated

      Separated suites let an agent get fast feedback before paying for the slow ones.

      Checked file tree: tests/; it does not show this.

      Fix: Split tests by kind into directories or scripts.

    • lowLint command defined

      A linter an agent can run catches a class of mistakes before they ship.

      Fix: Add a `lint` script and a linter config.

    • lowTask runner present

      A Makefile / Taskfile / justfile gives an agent a single index of the project's commands.

      Fix: Add a Makefile / Taskfile / justfile collecting the common commands.

    • lowTypecheck command

      A typecheck script lets an agent catch type errors before they ship.

      Fix: Add a `typecheck` script (e.g. `tsc --noEmit`).

    • lowBuild command

      A documented build command is the discoverable way for an agent to produce artifacts.

      Fix: Add a `build` script that produces the distributable.

    • lowCI mirrors the local checks

      If CI checks differ from local ones, an agent's local green is a false signal.

      Nothing in the snapshot shows this.

      Fix: Run the same lint/typecheck/test commands in CI that you run locally.

    • lowNo obviously broken tests committed

      A baseline that's already red gives an agent no trustworthy signal to check against.

      Checked file tree: tests/; it does not show this.

      Fix: Fix or remove broken/skipped tests so a green suite is meaningful.

    • lowEdge cases get some coverage

      Untested edge cases are where an agent's change silently breaks something.

      Checked file tree: tests/; it does not show this.

      Fix: Add tests for error paths and boundary conditions, not just the success case.

    • lowCI status is visible from the README

      An agent targeting a red codebase should know it's red before it starts.

      Nothing in the snapshot shows this.

      Fix: Add a CI status badge to the README linked to the latest pipeline run.

    • lowCoverage goes beyond example-driven tests

      An agent's generated code passes exactly the examples it was written to; property tests probe the edges it missed.

      Nothing in the snapshot shows this.

      Fix: Add property-based or mutation tests to at least the most critical subsystems.

    • lowTest names describe what they test

      A test named 'test_1' forces an agent to read the implementation to understand what failed.

      Checked file tree: tests/; it does not show this.

      Fix: Name tests to describe what they assert — 'given X, when Y, then Z' is a reliable pattern.

    • lowTest coverage is measured

      Measured coverage shows an agent which code has no safety net before it changes it.

      Nothing in the snapshot shows this.

      Fix: Add a coverage script or coverage configuration.

    • lowChecks run before a commit leaves

      Local hooks catch an agent's mistakes before they cost a CI run.

      Nothing in the snapshot shows this.

      Fix: Add pre-commit or git-hook configuration.

    • Tests present — Runnable tests are the ground truth an agent checks its own edits against.
    • Tests look like they cover the core — An agent trusts a green suite — a green suite that tests nothing real is a false signal. Evidence: file tree: tests/.
    • The feedback loop is reasonable — If the only check takes forever, an agent's iteration loop grinds to a halt. Evidence: README § Running Tests.
    • Tests run without elaborate setup — Tests an agent can't actually run are no feedback loop at all. Evidence: README § Running Tests.
  • Agent Safety

    11 checks passed15 problems found

    • highNo committed .env

      A tracked real .env hands secrets to anything — including an agent — that reads the repo.

      Fix: Remove the .env from history, gitignore it, and ship a .env.example instead.

    • highDestructive operations are flagged

      An agent will run an unmarked destructive command the same as any other.

      Nothing in the snapshot shows this.

      Fix: Clearly label destructive/irreversible commands and gate them behind an explicit confirmation.

    • highNo hardcoded credentials in the code

      Hardcoded credentials in the tree are a breach waiting for an agent to widen the exposure.

      Checked file tree: .env.production; it does not show this.

      Fix: Remove any hardcoded credentials and move them to environment variables or a secret store.

    • mediumSecurity policy

      A SECURITY.md is where an autonomous security agent reads this repo's rules before acting on it.

      Fix: Add a SECURITY.md stating the disclosure channel and the repo's security rules.

    • mediumLicense makes the code reusable

      Without a license an agent cannot safely copy, redistribute, or vendor any of this code.

      Fix: Add a LICENSE file with an OSI-approved license so the terms of reuse are explicit.

    • medium"Don't touch" zones are stated

      Without a no-go list an agent will happily edit the one file it shouldn't.

      Checked file tree: .gitignore; it does not show this.

      Fix: Document the off-limits paths (generated, vendored, security-sensitive) in an AGENTS.md or CODEOWNERS.

    • mediumOperations follow least privilege

      Over-broad privileges turn a small agent mistake into a large blast radius.

      Checked README § API Usage; it does not show this.

      Fix: Scope tokens and permissions to the minimum each operation needs.

    • mediumThe security policy describes this system

      A scanning agent inherits its threat model from this file; boilerplate aims it at nothing in particular.

      Nothing in the snapshot shows this.

      Fix: Rewrite SECURITY.md around this system's real assets, entry points and trust boundaries.

    • mediumUntrusted input is identified

      An agent that cannot tell trusted data from untrusted input will either miss real paths or invent them.

      Nothing in the snapshot shows this.

      Fix: Name the untrusted inputs (user uploads, webhooks, fetched content) and the boundary each one crosses.

    • mediumSchema changes are versioned migrations

      Versioned migrations are reviewable and reversible; ad-hoc schema edits are neither.

      Nothing in the snapshot shows this.

      Fix: Keep schema changes as ordered migration files and document how to apply them.

    • lowCODEOWNERS present

      CODEOWNERS marks the 'don't touch without review' zones an agent should respect.

      Fix: Add a CODEOWNERS file marking the sensitive paths.

    • lowAutomated dependency updates

      Dependabot / Renovate keeps dependencies patched without a human in the loop.

      Fix: Enable Dependabot or Renovate.

    • lowCode ownership is marked

      An agent proposing changes to an owned area needs to know who to route the review to.

      Nothing in the snapshot shows this.

      Fix: Add a CODEOWNERS file mapping paths to responsible maintainers.

    • lowThe merge gate is documented

      Without a stated gate an agent doesn't know what its change must clear to be safe to land.

      Nothing in the snapshot shows this.

      Fix: Document the required checks and reviewer rules that gate a merge, in CONTRIBUTING or the README.

    • lowDependency auditing is practiced

      An agent adding a dependency needs to know audit failures will be caught before they ship.

      Nothing in the snapshot shows this.

      Fix: Add automated dependency auditing to CI and document the command to run it locally.

    • No exposed secrets — Secret-shaped literals in tracked files are a live credential leak.
    • .gitignore covers env files — An ignore rule for .env is what keeps the next careless commit from leaking secrets.
    • .gitignore present — A .gitignore is the first guard against an agent committing secrets or build junk.
    • No prompt-injection in repo text — Repo text is untrusted input; injected instructions are an attack surface, not guidance. No repository text (README, docs, description, file names) addresses automated reviewers or tries to steer a verdict.
    • Secret handling is explained — If the safe path for secrets is unstated, an agent invents an unsafe one. Evidence: README § Configuration.
    • Side effects are bounded — A command that reaches outside the repo can do damage an agent never anticipated. Evidence: README § Setup.
    • No untrusted code executed at build — Build-time execution of remote code is a supply-chain hole an agent would walk straight into. Evidence: manifest: pyproject.toml.
    • It can run sandboxed — An agent operating safely runs sandboxed; broad host access defeats that. Evidence: README § Docker.
    • Secrets aren't printed or logged — A secret echoed into logs is a leak an agent will faithfully propagate. Judged from the snapshot as a whole; no single section settles it.
    • Findings can be validated by running the code — A security agent that cannot exercise the code has to speculate, which is how false positives get filed. Evidence: README § Running Tests.
    • Dependencies come from standard registries — Unregistered sources bypass the review and yanking that registries provide, and an agent installs them without a second look. Evidence: manifest: pyproject.toml.
  • Context Economy

    15 checks passed4 problems found

    • lowGenerated / vendored files marked

      A .gitattributes linguist marker tells tools (and agents) what to skip.

      Fix: Mark generated/vendored paths in .gitattributes (linguist-generated / linguist-vendored).

    • lowDocs aren't duplicated or contradictory

      Conflicting docs force an agent to guess which version is true.

      Checked file tree: README.md; it does not show this.

      Fix: Keep one source of truth per topic; link to it instead of duplicating.

    • lowExamples are small and focused

      Small examples teach an agent the pattern; sprawling ones bury it.

      Checked file tree: .claude/; it does not show this.

      Fix: Trim examples to the minimum that shows each idea.

    • lowThe root is concise

      A crowded root is the first thing an agent reads and the least useful.

      Checked file tree: .claude/; it does not show this.

      Fix: Group loose root files into directories and keep only essentials at the top level.

    • Dependencies not vendored in — A committed node_modules / vendor tree drowns the real signal an agent needs.
    • Build output not committed — Generated dist/ · build/ output is noise an agent has to read past.
    • No oversized source file — A single file in the hundreds of KB blows past an agent's effective context window.
    • Documentation is signal-dense — Every token of filler is context an agent spends without getting closer to the task. Evidence: file tree: README.md.
    • The tree isn't drowning in noise — A tree full of noise makes an agent work to find the few files that matter. Evidence: file tree: app/.
    • The repository is focused — A grab-bag repo forces an agent to hold far more context than the task needs. Evidence: README § Project Structure.
    • The files that matter are easy to find — If the important files are buried, an agent spends its budget locating them instead of editing them. Evidence: README § Project Structure.
    • The README is appropriately sized — An overlong README spends an agent's context before it reaches the task. Evidence: file tree: README.md.
    • Old versions aren't kept in the tree — Stale duplicates in the tree are noise an agent reads and must rule out. Evidence: file tree: .gitignore.
    • The dependency list is lean — Every dependency is more surface an agent must account for when reasoning about the repo. Evidence: manifest: pyproject.toml.
    • Large assets don't bloat the repo — Bulky assets inflate what an agent has to clone and scan for no signal gain. Evidence: file tree: votes.db.
    • There is one canonical home for the docs — Multiple doc homes force an agent to reconcile conflicting versions of the truth. Evidence: file tree: README.md.
    • Code comments don't double as an issue tracker — Inline design debates are noise an agent reads through to find the actual code logic. Judged from the snapshot as a whole; no single section settles it.
    • Reference docs live outside the code — Docs embedded only in code require an agent to read the source to answer questions that belong in a doc. Evidence: file tree: docs/.
    • Each tool is configured once — Overlapping configs make an agent guess which one wins. Evidence: manifest: pyproject.toml.

Where the grip slips

  1. mediumVerification Surface+5 pts if fixed

    Missing CI configuration

    No CI workflow configuration files exist under .github/workflows/.

    Fix: Add a GitHub Actions workflow file under .github/workflows/ci.yml to run pytest on push/PR.

  2. highAgent Safety+4 pts if fixed

    Committed environment file with live secrets

    Committed .env.production file exposes actual production secrets and configuration in the repository tree.

    Fix: Remove .env.production from version control, add it to .gitignore, and rotate any exposed secrets.

  3. lowVerification Surface+3 pts if fixed

    Missing task runner or verification scripts

    No verification scripts or task runners (like make, task, or package.json scripts) are defined for linting or quality checks.

    Fix: Add a task runner or Makefile specifying lint, test, and typecheck commands.

  4. mediumCode Navigability+3 pts if fixed

    Missing Type Annotations

    Python function and method signatures lack type annotations.

    Fix: Add type hints (PEP 484) to all function parameters and return types across models, routes, and services.

  5. lowReproducible Setup+3 pts if fixed

    Lack of automated CI verification configuration

    No CI configuration file (GitHub Actions etc.) exists in the repository for automated verification.

    Fix: Add a GitHub Actions workflow in .github/workflows/ to run `uv sync` and `uv run pytest`.

  6. lowCode Navigability+2 pts if fixed

    Root-Level Scratch Files and Duplicate Tests

    Some duplicate or loose test scripts and files exist at the root level (test_hello.py, hello.py, votes.db).

    Fix: Clean up root-level scratch files and consolidate tests exclusively within the tests/ directory.

  7. mediumReproducible Setup+2 pts if fixed

    Missing environment template and committed production environment file

    An environment template env.example was not detected, and a production env file (.env.production) is committed directly to the repo.

    Fix: Remove committed sensitive or production environment files and ensure a clean env.example template is provided.

  8. mediumMachine Orientation+1 pts if fixed

    Missing CI workflow configuration

    No CI workflow files exist under .github/workflows to automatically verify pull requests or commits.

    Fix: Add a .github/workflows/ci.yml configuration file running uv sync and uv run pytest.

  9. lowContext Economy+1 pts if fixed

    Missing llms.txt

    No llms.txt or structured token-optimized context file for agents.

    Fix: Add an llms.txt file summarizing architecture and entry points.

  10. lowMachine Orientation

    Missing architecture documentation

    No architecture document is present in the docs directory to explain deeper subsystem interactions.

    Fix: Create docs/ARCHITECTURE.md outlining data flow and blueprint routing.

Show your score

Latch badge
[![Latch score](https://latch.fyi/api/badge/c08d1c39-3c7f-4974-a95f-495294c71ebb)](https://latch.fyi/tooluser/vote-with-your-feet)

Share this analysis

https://latch.fyi/tooluser/vote-with-your-feet

Fixed some issues? Re-analyze to measure your progress →

Copy the whole report

Grab the entire verdict in one go — a Markdown block for a README or an issue, plain text, or a prompt you can paste straight into an LLM.

Was this verdict fair?

One tap helps — or tell us more.