SUMD - Structured Unified Markdown Descriptor for AI-aware project documentation
Project description
SUMD
AI Cost Tracking
- ๐ค LLM usage: $7.5000 (56 commits)
- ๐ค Human dev: ~$1971 (19.7h @ $100/h, 30min dedup)
Generated on 2026-04-23 using openrouter/qwen/qwen3-coder-next
SUMD (Structured Unified Markdown Descriptor) is a semantic project descriptor format in Markdown.
It defines intent, structure, execution entry points, and the mental model of a system for both humans and LLMs.
What is SUMD?
SUMD is a lightweight structured markdown format that serves as a single source of truth for project documentation โ optimised for both human readability and LLM context injection.
Think of it as a machine-readable README: a file an AI agent can parse, reason over, and act upon.
Purpose
- Project descriptor โ defines API, CLI, workflows, endpoints, and system architecture
- AI context feed โ structured for LLM consumption: inject
SUMD.mdinto any prompt to give the model full project understanding - Lightweight manifest โ bridges the gap between README, openapi spec, and configuration files
- Automation anchor โ drives
sumd scan,sumd lint,sumd scaffold, CI pipelines
Use Cases
- Generating structured documentation from source code
- Single-file project context for ChatGPT, Claude, Gemini, or local LLMs
- LLM agent memory and tool context (via MCP server)
- Input for testql scenario scaffolding
- API and CLI contract documentation
- CI/CD workflow descriptions
- Structural project manifest
Installation
pip install sumd # stable
pip install sumd==0.2.0rc1 # latest release candidate
Developer Workflow
# health check โ verify environment
task doctor
# run tests with coverage
task test
# quality gate (CC + vallm + coverage)
task pyqual
# build + publish (runs automatically when gates pass via pyqual pipeline)
task publish
Usage
CLI Commands
# Shortcut: scan current directory (detects if workspace or single project)
sumd . # equivalent to: sumd scan . --fix
sumd /path/to/project # scan a specific directory
# Scan a workspace โ auto-generate SUMD.md for every project found
sumd scan . # skip projects that already have SUMD.md
sumd scan . --fix # overwrite existing SUMD.md
sumd reload . # shorthand: scan + refresh app.doql.less + doql sync
sumd scan . --fix --no-raw # convert sources to structured Markdown instead of raw code blocks
sumd scan . --fix --analyze # also run analysis tools (code2llm, redup, vallm)
sumd scan . --fix --analyze --tools code2llm,redup # only selected tools
sumd scan . --fix --depth 2 # limit recursive search depth (default: unlimited)
sumd scan . --fix --no-generate-doql # skip auto-generation of app.doql.less (enabled by default)
sumd scan . --fix --doql-sync # refresh app.doql.less metadata, then run `doql sync` for cache-aware rebuild
# Section profiles โ control how much is rendered in SUMD.md
sumd scan . --fix --profile minimal # core sections only (metadata, architecture, workflows, dependencies, deployment)
sumd scan . --fix --profile light # + interfaces, quality, configuration, environment, extras
sumd scan . --fix --profile rich # + code analysis, source snippets, call graph, API stubs, test contracts (default)
# Generate SUMR.md (pre-refactoring analysis report for AI-aware refactorization)
sumd scan . --profile refactor # creates SUMR.md โ use sumr alias below
sumr . # shorthand: sumr <path> โก sumd scan <path> --fix --profile refactor
# Lint / validate SUMD files
sumd lint SUMD.md # validate a single file
sumd lint --workspace . # validate all SUMD.md files in the workspace
sumd lint --workspace . --json # output JSON results
# Generate project/map.toon.yaml (static code map โ without code2llm)
sumd map ./my-project # write to project/map.toon.yaml
sumd map ./my-project --force # overwrite existing
sumd map ./my-project --stdout # print to stdout
# Generate testql scenario scaffolds from OpenAPI spec
sumd scaffold ./my-project # all scenarios (api + smoke)
sumd scaffold ./my-project --type smoke # only smoke tests
sumd scaffold ./my-project --type crud # per-resource CRUD scenarios
sumd scaffold ./my-project --force # overwrite existing files
# Run analysis tools on a single project
sumd analyze ./my-project # run all tools
sumd analyze ./my-project --tools code2llm # only code2llm
sumd analyze ./my-project --force # reinstall tools
Section Profiles
SUMD renders output in configurable profiles to trade off detail vs. token cost:
| Profile | Sections | Use case |
|---|---|---|
minimal |
Metadata, Architecture, Workflows, Dependencies, Deployment | Quick overview, CI badges |
light |
+ Interfaces, Quality, Configuration, Environment, Extras | Standard documentation |
rich |
+ Code Analysis, Source Snippets, Call Graph, API Stubs, Test Contracts | LLM context injection (default) |
refactor |
Refactoring-focused analysis โ generates SUMR.md |
AI-aware pre-refactoring report |
Python API
from sumd import parse, parse_file
from sumd.parser import validate_sumd_file
# Parse SUMD from string
document = parse(content)
# Parse SUMD from file
document = parse_file("SUMD.md")
# Validate SUMD file (markdown structure + codeblock format)
result = validate_sumd_file(Path("SUMD.md"))
# result = {"source": "SUMD.md", "markdown": [...], "codeblocks": [...], "ok": True}
if not result["ok"]:
for issue in result["markdown"] + result["codeblocks"]:
print(issue)
What is Embedded in SUMD.md?
SUMD auto-embeds the following sources from a project (when present):
| Source | Contents | markpact kind |
|---|---|---|
pyproject.toml |
metadata, deps, entry points | parsed |
Taskfile.yml |
all tasks as raw YAML | markpact:taskfile |
openapi.yaml |
full OpenAPI spec (endpoints as sections) | markpact:openapi |
testql-scenarios/** |
all .testql.toon.yaml scenario files |
markpact:testql |
app.doql.less (preferred) or .css |
DOQL styling | markpact:doql |
pyqual.yaml |
quality pipeline config | markpact:pyqual |
goal.yaml |
project intent | rendered |
.env.example |
env variables list | listed |
Dockerfile |
containerisation | listed |
docker-compose.*.yml |
services | listed |
src/**/*.py modules |
module list | listed |
package.json |
Node.js deps (dependencies + devDependencies) | listed |
project/analysis.toon.yaml |
static code analysis (CC, pipelines) | markpact:analysis |
project/project.toon.yaml |
project topology | markpact:analysis |
project/evolution.toon.yaml |
commit evolution | markpact:analysis |
project/map.toon.yaml |
module inventory, function signatures, CC metrics | markpact:analysis |
project/duplication.toon.yaml |
code duplication report | markpact:analysis |
project/validation.toon.yaml |
vallm validation results | markpact:analysis |
project/calls.toon.yaml |
call graph with hub metrics | markpact:analysis |
project/compact_flow.mmd |
compact call flow diagram | markpact:analysis |
project/calls.mmd |
full call graph | markpact:analysis |
project/flow.mmd |
execution flow | markpact:analysis |
project/context.md |
architecture analysis (code2llm) | inline markdown |
project/README.md |
analysis readme | inline markdown |
project/prompt.txt |
code2llm prompt used | markpact:analysis |
Not embedded: *.png (binary images), index.html (generated visualisation), refactor-progress.txt, testql-scenarios/ inside project/.
project/map.toon.yaml is generated by sumd map (built-in, no extra deps). Other project/ files are generated by sumd analyze (invokes code2llm, redup, vallm).
Ecosystem Architecture
SUMD is part of a three-layer system:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ SUMD (opis) โ
โ Structured Unified Markdown Descriptor โ
โ Project description, intent, architecture โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ DOQL (wykonanie) โ
โ Declarative Object Query Language โ
โ Data manipulation and execution โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Taskfile (runtime) โ
โ Task runner and workflow execution โ
โ Automation and orchestration โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- SUMD โ opis (description): Defines what the system is and how it should work
- DOQL โ wykonanie (execution): Provides the language to manipulate and execute operations
- Taskfile โ runtime: Manages the actual execution of workflows and tasks
DOQL Integration
SUMD can refresh app.doql.less metadata and optionally trigger DOQL's cache-aware rebuild.
app.doql.less refresh behaviour
When sumd scan . --fix runs (or the shorthand sumd .):
| State | Action |
|---|---|
| File missing | Generates boilerplate app.doql.less with app { }, default workflows, deploy and environment blocks |
File exists, --fix not set |
Skips โ existing content is preserved |
File exists, --fix set |
Only the app { name; version; } block is updated from pyproject.toml. All user-defined entities, interfaces, workflows, deploy and environment blocks are preserved. |
This means sumd . --fix is safe to run repeatedly โ it will not destroy your custom DOQL specification.
doql sync trigger
Add --doql-sync to run doql sync after SUMD generation:
sumd . --fix --doql-sync
Flow:
- SUMD refreshes
app.doql.lessmetadata (name/version) - DOQL reads the updated spec and compares it against
doql.lock - If nothing changed โ
โ No changes detected โ everything up to date. - If sections changed โ DOQL regenerates only the affected generators (API, web, documents, etc.)
This gives you a single command that keeps both documentation and generated code in sync, without unnecessary rebuilds.
License
Licensed under Apache-2.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sumd-0.3.26.tar.gz.
File metadata
- Download URL: sumd-0.3.26.tar.gz
- Upload date:
- Size: 60.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e279c652fbd295de980e5bbf8476b5213d3005b09847d2f4c4cc2398de0a405
|
|
| MD5 |
29849a600dc32109f0fb6dd93fadf991
|
|
| BLAKE2b-256 |
f9e03316813137ae0a14d47ea82cf55f90f9cee53cce834f7f08aa1f3c6743b9
|
File details
Details for the file sumd-0.3.26-py3-none-any.whl.
File metadata
- Download URL: sumd-0.3.26-py3-none-any.whl
- Upload date:
- Size: 66.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c5d6fddbb5f5b40ebd728931a447aa74127a858dca43d481afe5804d66cbda3
|
|
| MD5 |
70a7ac97875fd5bf733f4a29190645e8
|
|
| BLAKE2b-256 |
661041b876971ac3e083f461946092cf63be94569824f756a8118f7290577615
|