GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - semcod/testless: Analyze test value, coverage, duplication, and generate LLM planfiles

BranchesTags
Open more actions menu

Latest commit

 

History

41 Commits
41 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
.governance
.governance
 
 
.idea
.idea
 
 
docs
docs
 
 
project
project
 
 
src/testless
src/testless
 
 
tests
tests
 
 
.coveragerc
.coveragerc
 
 
.gitignore
.gitignore
 
 
.nojekyll
.nojekyll
 
 
AGENTS.md
AGENTS.md
 
 
CHANGELOG.md
CHANGELOG.md
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
VERSION
VERSION
 
 
app.doql.less
app.doql.less
 
 
goal.yaml
goal.yaml
 
 
index.html
index.html
 
 
local.dev.txt
local.dev.txt
 
 
pyproject.toml
pyproject.toml
 
 
uv.lock
uv.lock
 
 

Repository files navigation

testless

AI Cost Tracking

PyPI Version Python License AI Cost Human Time Model

  • šŸ¤– LLM usage: $0.6101 (11 commits)
  • šŸ‘¤ Human dev: ~$700 (7.0h @ $100/h, 30min dedup)

Generated on 2026-07-06 using openrouter/qwen/qwen3-coder-next


testless is a Python package that sits as an analytical layer on top of your existing test suite. It analyses test value, coverage overlap, duplication, and missing gaps, then generates LLM-ready planfile tickets that describe exactly what to remove, refactor, or add.


Features

Command What it does
testless scan Run pytest with --cov-context=test and collect metadata
testless duplicates Detect duplicate tests (coverage + AST + fixture overlap)
testless missing Suggest smoke, e2e, contract, and TestQL tests
testless planfiles Generate YAML planfile tickets for an LLM
testless doctor Answer questions: "what to remove?", "what to add?"

Quick Start

pip install testless
# or with uv:
uv add --dev testless

# 1. Scan your project
testless scan

# 2. Find duplicate tests (threshold: 85 % similarity)
testless duplicates --min-overlap 0.85

# 3. Find missing smoke / service / e2e tests
testless missing --services src/myapp

# 4. Generate LLM planfiles
testless planfiles --out .planfiles/ --with-prompts

# 5. Ask doctor questions
testless doctor "which tests should I remove?"

Configuration

Create a .testless.yml in your project root:

packages:
  - myapp

test_dirs:
  - tests

min_duplicate_score: 0.85
planfiles_dir: .planfiles
coverage_dir: .coverage_data

pytest_args:
  - --tb=short

Planfile format

Each generated ticket is a self-contained YAML file that an LLM can act on:

version: "1"
kind: duplicate
id: "DUP-3A7F2C"
title: "Remove duplicate test: test_health_ok vs test_health_status_200"
goal: "Reduce test suite redundancy without losing unique coverage"
context:
  test_a: tests/api/test_health.py::test_health_ok
  test_b: tests/api/test_health.py::test_health_status_200
evidence:
  - description: "score=0.93, coverage_overlap=0.95"
    score: 0.93
impact:
  risk: low
  expected_gains:
    - shorter test run time
    - reduced maintenance burden
tasks:
  - description: Compare test_health_ok and test_health_status_200 manually
  - description: Remove the weaker/less descriptive test
  - description: Run suite and verify no coverage regression
acceptance_criteria:
  - No decrease in unique line coverage
  - All remaining tests pass
llm_hints:
  style: minimal change
  safe_refactor: true

Architecture

src/testless/
ā”œā”€ā”€ cli.py                  # Click CLI
ā”œā”€ā”€ config.py               # .testless.yml loader
ā”œā”€ā”€ models/
│   ā”œā”€ā”€ planfile.py         # Pydantic Planfile model
│   ā”œā”€ā”€ findings.py         # Finding models
│   └── coverage_map.py     # CoverageMap model
ā”œā”€ā”€ collect/
│   ā”œā”€ā”€ pytest_runner.py    # Run pytest, collect metadata
│   ā”œā”€ā”€ coverage_loader.py  # Parse coverage.json contexts
│   ā”œā”€ā”€ fixture_index.py    # AST-based fixture indexer
│   └── endpoint_inventory.py  # HTTP endpoint/service scanner
ā”œā”€ā”€ analyze/
│   ā”œā”€ā”€ duplicate_tests.py  # Duplicate detection
│   ā”œā”€ā”€ dead_tests.py       # Dead test detection
│   ā”œā”€ā”€ missing_tests.py    # Missing test suggestions
│   ā”œā”€ā”€ service_risk.py     # Service risk scoring
│   └── refactor_candidates.py  # Refactor detection
ā”œā”€ā”€ suggest/
│   ā”œā”€ā”€ smoke.py            # Smoke test templates
│   ā”œā”€ā”€ e2e.py              # E2E test templates
│   ā”œā”€ā”€ service_tests.py    # Service contract templates
│   └── testql.py           # TestQL stub generator
ā”œā”€ā”€ tickets/
│   ā”œā”€ā”€ builder.py          # Build Planfile from findings
│   ā”œā”€ā”€ serializer.py       # Write planfiles to disk
│   └── prompts.py          # Attach LLM prompts
└── reporters/
    ā”œā”€ā”€ console.py          # Coloured terminal output
    ā”œā”€ā”€ markdown.py         # Markdown report
    └── json.py             # JSON report

License

Licensed under Apache-2.0.

About

Analyze test value, coverage, duplication, and generate LLM planfiles

semcod.github.io/testless/

Topics

analysiscoveragellmplanfilepythonsemcodtesting

Resources

Readme
Apache-2.0 license
Activity
Custom properties

Stars

0 stars

Watchers

0 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800Ɨ600. No cookies required.