sumd 0.3.26__tar.gz → 0.3.28__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sumd-0.3.26 → sumd-0.3.28}/CHANGELOG.md +31 -0
- {sumd-0.3.26 → sumd-0.3.28}/PKG-INFO +6 -6
- {sumd-0.3.26 → sumd-0.3.28}/README.md +5 -5
- {sumd-0.3.26 → sumd-0.3.28}/pyproject.toml +1 -1
- {sumd-0.3.26 → sumd-0.3.28}/sumd/__init__.py +2 -2
- sumd-0.3.28/sumd/models.py +45 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/parser.py +2 -40
- {sumd-0.3.26 → sumd-0.3.28}/.gitignore +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/LICENSE +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/cli.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/extractor.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/generator.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/mcp_server.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/pipeline.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/renderer.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/__init__.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/api_stubs.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/architecture.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/base.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/call_graph.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/code_analysis.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/configuration.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/dependencies.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/deployment.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/environment.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/extras.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/interfaces.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/metadata.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/quality.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/refactor_analysis.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/source_snippets.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/test_contracts.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/sections/workflows.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/toon_parser.py +0 -0
- {sumd-0.3.26 → sumd-0.3.28}/sumd/validator.py +0 -0
|
@@ -7,6 +7,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.3.28] - 2026-04-23
|
|
11
|
+
|
|
12
|
+
### Docs
|
|
13
|
+
- Update README.md
|
|
14
|
+
|
|
15
|
+
### Other
|
|
16
|
+
- Update sumd/__init__.py
|
|
17
|
+
- Update sumd/models.py
|
|
18
|
+
- Update sumd/parser.py
|
|
19
|
+
|
|
20
|
+
## [0.3.27] - 2026-04-23
|
|
21
|
+
|
|
22
|
+
### Docs
|
|
23
|
+
- Update README.md
|
|
24
|
+
- Update docs/README.md
|
|
25
|
+
- Update project/README.md
|
|
26
|
+
- Update project/context.md
|
|
27
|
+
|
|
28
|
+
### Other
|
|
29
|
+
- Update project/analysis.toon.yaml
|
|
30
|
+
- Update project/calls.mmd
|
|
31
|
+
- Update project/calls.png
|
|
32
|
+
- Update project/calls.toon.yaml
|
|
33
|
+
- Update project/calls.yaml
|
|
34
|
+
- Update project/compact_flow.mmd
|
|
35
|
+
- Update project/compact_flow.png
|
|
36
|
+
- Update project/duplication.toon.yaml
|
|
37
|
+
- Update project/evolution.toon.yaml
|
|
38
|
+
- Update project/flow.mmd
|
|
39
|
+
- ... and 8 more files
|
|
40
|
+
|
|
10
41
|
## [0.3.26] - 2026-04-23
|
|
11
42
|
|
|
12
43
|
### Docs
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sumd
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.28
|
|
4
4
|
Summary: SUMD - Structured Unified Markdown Descriptor for AI-aware project documentation
|
|
5
5
|
Project-URL: Homepage, https://github.com/tom/statement
|
|
6
6
|
Project-URL: Repository, https://github.com/tom/statement
|
|
@@ -41,17 +41,17 @@ Description-Content-Type: text/markdown
|
|
|
41
41
|
|
|
42
42
|
## AI Cost Tracking
|
|
43
43
|
|
|
44
|
-
     
|
|
45
|
+
  
|
|
46
46
|
|
|
47
|
-
- 🤖 **LLM usage:** $7.5000 (
|
|
48
|
-
- 👤 **Human dev:** ~$
|
|
47
|
+
- 🤖 **LLM usage:** $7.5000 (58 commits)
|
|
48
|
+
- 👤 **Human dev:** ~$2071 (20.7h @ $100/h, 30min dedup)
|
|
49
49
|
|
|
50
50
|
Generated on 2026-04-23 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
51
51
|
|
|
52
52
|
---
|
|
53
53
|
|
|
54
|
-
  
|
|
55
55
|
|
|
56
56
|
**SUMD** (Structured Unified Markdown Descriptor) is a semantic project descriptor format in Markdown.
|
|
57
57
|
It defines intent, structure, execution entry points, and the mental model of a system for both humans and LLMs.
|
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
|
|
4
4
|
## AI Cost Tracking
|
|
5
5
|
|
|
6
|
-
     
|
|
7
|
+
  
|
|
8
8
|
|
|
9
|
-
- 🤖 **LLM usage:** $7.5000 (
|
|
10
|
-
- 👤 **Human dev:** ~$
|
|
9
|
+
- 🤖 **LLM usage:** $7.5000 (58 commits)
|
|
10
|
+
- 👤 **Human dev:** ~$2071 (20.7h @ $100/h, 30min dedup)
|
|
11
11
|
|
|
12
12
|
Generated on 2026-04-23 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
  
|
|
17
17
|
|
|
18
18
|
**SUMD** (Structured Unified Markdown Descriptor) is a semantic project descriptor format in Markdown.
|
|
19
19
|
It defines intent, structure, execution entry points, and the mental model of a system for both humans and LLMs.
|
|
@@ -4,10 +4,10 @@ SUMD is a semantic project descriptor format in Markdown that defines intent,
|
|
|
4
4
|
structure, execution entry points, and mental model of a system for both humans and LLMs.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
__version__ = "0.3.
|
|
7
|
+
__version__ = "0.3.28"
|
|
8
8
|
|
|
9
|
+
from sumd.models import SUMDDocument
|
|
9
10
|
from sumd.parser import (
|
|
10
|
-
SUMDDocument,
|
|
11
11
|
SUMDParser,
|
|
12
12
|
parse,
|
|
13
13
|
parse_file,
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""SUMD data models — SectionType, Section, SUMDDocument."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass, field
|
|
6
|
+
from enum import Enum
|
|
7
|
+
from typing import Any, Dict, List
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class SectionType(Enum):
|
|
11
|
+
"""SUMD section types."""
|
|
12
|
+
|
|
13
|
+
PROJECT_HEADER = "project_header"
|
|
14
|
+
METADATA = "metadata"
|
|
15
|
+
INTENT = "intent"
|
|
16
|
+
ARCHITECTURE = "architecture"
|
|
17
|
+
INTERFACES = "interfaces"
|
|
18
|
+
WORKFLOWS = "workflows"
|
|
19
|
+
CONFIGURATION = "configuration"
|
|
20
|
+
DEPENDENCIES = "dependencies"
|
|
21
|
+
DEPLOYMENT = "deployment"
|
|
22
|
+
UNKNOWN = "unknown"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@dataclass
|
|
26
|
+
class Section:
|
|
27
|
+
"""Represents a SUMD section."""
|
|
28
|
+
|
|
29
|
+
name: str
|
|
30
|
+
type: SectionType
|
|
31
|
+
content: str
|
|
32
|
+
level: int
|
|
33
|
+
subsections: List["Section"] = field(default_factory=list)
|
|
34
|
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@dataclass
|
|
38
|
+
class SUMDDocument:
|
|
39
|
+
"""Represents a parsed SUMD document."""
|
|
40
|
+
|
|
41
|
+
project_name: str
|
|
42
|
+
description: str
|
|
43
|
+
sections: List[Section] = field(default_factory=list)
|
|
44
|
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
45
|
+
raw_content: str = ""
|
|
@@ -1,48 +1,10 @@
|
|
|
1
1
|
"""SUMD Parser - Parse and validate SUMD markdown documents."""
|
|
2
2
|
|
|
3
3
|
import re
|
|
4
|
-
from dataclasses import dataclass, field
|
|
5
|
-
from enum import Enum
|
|
6
4
|
from pathlib import Path
|
|
7
|
-
from typing import
|
|
5
|
+
from typing import List, Optional
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
class SectionType(Enum):
|
|
11
|
-
"""SUMD section types."""
|
|
12
|
-
|
|
13
|
-
PROJECT_HEADER = "project_header"
|
|
14
|
-
METADATA = "metadata"
|
|
15
|
-
INTENT = "intent"
|
|
16
|
-
ARCHITECTURE = "architecture"
|
|
17
|
-
INTERFACES = "interfaces"
|
|
18
|
-
WORKFLOWS = "workflows"
|
|
19
|
-
CONFIGURATION = "configuration"
|
|
20
|
-
DEPENDENCIES = "dependencies"
|
|
21
|
-
DEPLOYMENT = "deployment"
|
|
22
|
-
UNKNOWN = "unknown"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
@dataclass
|
|
26
|
-
class Section:
|
|
27
|
-
"""Represents a SUMD section."""
|
|
28
|
-
|
|
29
|
-
name: str
|
|
30
|
-
type: SectionType
|
|
31
|
-
content: str
|
|
32
|
-
level: int
|
|
33
|
-
subsections: List["Section"] = field(default_factory=list)
|
|
34
|
-
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
@dataclass
|
|
38
|
-
class SUMDDocument:
|
|
39
|
-
"""Represents a parsed SUMD document."""
|
|
40
|
-
|
|
41
|
-
project_name: str
|
|
42
|
-
description: str
|
|
43
|
-
sections: List[Section] = field(default_factory=list)
|
|
44
|
-
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
45
|
-
raw_content: str = ""
|
|
7
|
+
from sumd.models import SUMDDocument, Section, SectionType
|
|
46
8
|
|
|
47
9
|
|
|
48
10
|
class SUMDParser:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|