lanternspec 0.1.0__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.
Files changed (134) hide show
  1. lanternspec-0.1.0/LICENSE +21 -0
  2. lanternspec-0.1.0/PKG-INFO +260 -0
  3. lanternspec-0.1.0/README.md +245 -0
  4. lanternspec-0.1.0/pyproject.toml +68 -0
  5. lanternspec-0.1.0/setup.cfg +4 -0
  6. lanternspec-0.1.0/src/lanternspec/__init__.py +8 -0
  7. lanternspec-0.1.0/src/lanternspec/__main__.py +3 -0
  8. lanternspec-0.1.0/src/lanternspec/check/__init__.py +4 -0
  9. lanternspec-0.1.0/src/lanternspec/check/check_docs.py +468 -0
  10. lanternspec-0.1.0/src/lanternspec/check/doctor.py +113 -0
  11. lanternspec-0.1.0/src/lanternspec/check/githooks.py +284 -0
  12. lanternspec-0.1.0/src/lanternspec/check/legacy.py +116 -0
  13. lanternspec-0.1.0/src/lanternspec/check/templates.py +505 -0
  14. lanternspec-0.1.0/src/lanternspec/cli/__init__.py +53 -0
  15. lanternspec-0.1.0/src/lanternspec/cli/check.py +184 -0
  16. lanternspec-0.1.0/src/lanternspec/cli/common.py +31 -0
  17. lanternspec-0.1.0/src/lanternspec/cli/core.py +252 -0
  18. lanternspec-0.1.0/src/lanternspec/cli/learn.py +164 -0
  19. lanternspec-0.1.0/src/lanternspec/cli/report.py +124 -0
  20. lanternspec-0.1.0/src/lanternspec/cli/tools.py +116 -0
  21. lanternspec-0.1.0/src/lanternspec/cli/work.py +441 -0
  22. lanternspec-0.1.0/src/lanternspec/core/__init__.py +5 -0
  23. lanternspec-0.1.0/src/lanternspec/core/enums.py +457 -0
  24. lanternspec-0.1.0/src/lanternspec/core/frontmatter.py +150 -0
  25. lanternspec-0.1.0/src/lanternspec/core/links.py +100 -0
  26. lanternspec-0.1.0/src/lanternspec/core/meta.py +82 -0
  27. lanternspec-0.1.0/src/lanternspec/core/new_id.py +74 -0
  28. lanternspec-0.1.0/src/lanternspec/core/principles.py +457 -0
  29. lanternspec-0.1.0/src/lanternspec/core/profile.py +524 -0
  30. lanternspec-0.1.0/src/lanternspec/core/project.py +226 -0
  31. lanternspec-0.1.0/src/lanternspec/core/state.py +51 -0
  32. lanternspec-0.1.0/src/lanternspec/core/taskfile.py +163 -0
  33. lanternspec-0.1.0/src/lanternspec/core/templating.py +133 -0
  34. lanternspec-0.1.0/src/lanternspec/learn/__init__.py +4 -0
  35. lanternspec-0.1.0/src/lanternspec/learn/debt.py +411 -0
  36. lanternspec-0.1.0/src/lanternspec/learn/knowledge/__init__.py +67 -0
  37. lanternspec-0.1.0/src/lanternspec/learn/knowledge/drafts.py +75 -0
  38. lanternspec-0.1.0/src/lanternspec/learn/knowledge/mcp_server.py +123 -0
  39. lanternspec-0.1.0/src/lanternspec/learn/knowledge/notion.py +157 -0
  40. lanternspec-0.1.0/src/lanternspec/learn/knowledge/obsidian.py +118 -0
  41. lanternspec-0.1.0/src/lanternspec/report/__init__.py +6 -0
  42. lanternspec-0.1.0/src/lanternspec/report/doc_map.py +181 -0
  43. lanternspec-0.1.0/src/lanternspec/report/evaluate.py +174 -0
  44. lanternspec-0.1.0/src/lanternspec/report/harness.py +127 -0
  45. lanternspec-0.1.0/src/lanternspec/report/principles_doc.py +134 -0
  46. lanternspec-0.1.0/src/lanternspec/report/scan.py +299 -0
  47. lanternspec-0.1.0/src/lanternspec/report/status.py +75 -0
  48. lanternspec-0.1.0/src/lanternspec/report/views.py +352 -0
  49. lanternspec-0.1.0/src/lanternspec/resources/__init__.py +23 -0
  50. lanternspec-0.1.0/src/lanternspec/resources/agents/AGENTS.md +55 -0
  51. lanternspec-0.1.0/src/lanternspec/resources/principles/conventions/go.yaml +53 -0
  52. lanternspec-0.1.0/src/lanternspec/resources/principles/conventions/python.yaml +82 -0
  53. lanternspec-0.1.0/src/lanternspec/resources/principles/conventions/rust.yaml +60 -0
  54. lanternspec-0.1.0/src/lanternspec/resources/principles/conventions/swift.yaml +59 -0
  55. lanternspec-0.1.0/src/lanternspec/resources/principles/conventions/typescript.yaml +83 -0
  56. lanternspec-0.1.0/src/lanternspec/resources/principles/principles.yaml +189 -0
  57. lanternspec-0.1.0/src/lanternspec/resources/skills/l-adr/SKILL.md +30 -0
  58. lanternspec-0.1.0/src/lanternspec/resources/skills/l-build/SKILL.md +100 -0
  59. lanternspec-0.1.0/src/lanternspec/resources/skills/l-check/SKILL.md +30 -0
  60. lanternspec-0.1.0/src/lanternspec/resources/skills/l-design/SKILL.md +78 -0
  61. lanternspec-0.1.0/src/lanternspec/resources/skills/l-idea/SKILL.md +52 -0
  62. lanternspec-0.1.0/src/lanternspec/resources/skills/l-init/SKILL.md +116 -0
  63. lanternspec-0.1.0/src/lanternspec/resources/skills/l-learn/SKILL.md +87 -0
  64. lanternspec-0.1.0/src/lanternspec/resources/skills/l-map/SKILL.md +20 -0
  65. lanternspec-0.1.0/src/lanternspec/resources/skills/l-plan/SKILL.md +79 -0
  66. lanternspec-0.1.0/src/lanternspec/resources/skills/l-report/SKILL.md +44 -0
  67. lanternspec-0.1.0/src/lanternspec/resources/skills/l-sync/SKILL.md +42 -0
  68. lanternspec-0.1.0/src/lanternspec/resources/skills/l-task/SKILL.md +46 -0
  69. lanternspec-0.1.0/src/lanternspec/resources/skills/l-template/SKILL.md +61 -0
  70. lanternspec-0.1.0/src/lanternspec/resources/templates/ADR.md +45 -0
  71. lanternspec-0.1.0/src/lanternspec/resources/templates/API.md +34 -0
  72. lanternspec-0.1.0/src/lanternspec/resources/templates/_meta/enums.yaml +188 -0
  73. lanternspec-0.1.0/src/lanternspec/resources/templates//352/260/234/353/260/234/353/254/270/354/204/234 MOC.md" +26 -0
  74. lanternspec-0.1.0/src/lanternspec/resources/templates//352/270/260/353/212/245 /353/252/251/353/241/235.md" +30 -0
  75. lanternspec-0.1.0/src/lanternspec/resources/templates//352/270/260/353/241/235.md +45 -0
  76. lanternspec-0.1.0/src/lanternspec/resources/templates//352/270/260/354/241/264 /353/254/270/354/204/234 /354/247/200/353/217/204.md" +31 -0
  77. lanternspec-0.1.0/src/lanternspec/resources/templates//352/270/260/355/232/215.md +59 -0
  78. lanternspec-0.1.0/src/lanternspec/resources/templates//353/215/260/354/235/264/355/204/260.md +38 -0
  79. lanternspec-0.1.0/src/lanternspec/resources/templates//353/260/260/355/217/254.md +45 -0
  80. lanternspec-0.1.0/src/lanternspec/resources/templates//353/266/200/354/261/204 /354/271/264/353/223/234.md" +46 -0
  81. lanternspec-0.1.0/src/lanternspec/resources/templates//354/204/234/353/262/204 /353/260/260/355/217/254 /302/267 /354/232/264/354/230/201.md" +33 -0
  82. lanternspec-0.1.0/src/lanternspec/resources/templates//354/204/244/352/263/204.md +61 -0
  83. lanternspec-0.1.0/src/lanternspec/resources/templates//354/204/270/354/205/230 /352/270/260/353/241/235.md" +27 -0
  84. lanternspec-0.1.0/src/lanternspec/resources/templates//354/213/234/354/212/244/355/205/234 /352/265/254/354/241/260.md" +41 -0
  85. lanternspec-0.1.0/src/lanternspec/resources/templates//354/225/204/353/212/224 /352/270/260/354/210/240.md" +25 -0
  86. lanternspec-0.1.0/src/lanternspec/resources/templates//354/225/204/354/235/264/353/224/224/354/226/264.md +44 -0
  87. lanternspec-0.1.0/src/lanternspec/resources/templates//354/227/255/353/237/211 /354/271/264/353/223/234.md" +42 -0
  88. lanternspec-0.1.0/src/lanternspec/resources/templates//354/236/221/354/227/205 /353/213/250/354/234/204 /352/270/260/353/241/235.md" +27 -0
  89. lanternspec-0.1.0/src/lanternspec/resources/templates//355/224/204/353/241/234/354/240/235/355/212/270 /354/240/225/354/235/230/354/204/234.md" +50 -0
  90. lanternspec-0.1.0/src/lanternspec/resources/templates//355/224/214/353/236/253/355/217/274 /354/227/260/353/217/231.md" +45 -0
  91. lanternspec-0.1.0/src/lanternspec/resources/templates//355/225/240 /354/235/274.md" +33 -0
  92. lanternspec-0.1.0/src/lanternspec/resources/templates//355/230/221/354/227/205 /352/267/234/354/271/231.md" +35 -0
  93. lanternspec-0.1.0/src/lanternspec/resources/templates//355/231/224/353/251/264.md +36 -0
  94. lanternspec-0.1.0/src/lanternspec/resources/templates//355/232/214/354/235/230/353/241/235.md +33 -0
  95. lanternspec-0.1.0/src/lanternspec/tools/__init__.py +37 -0
  96. lanternspec-0.1.0/src/lanternspec/tools/agent_hooks.py +293 -0
  97. lanternspec-0.1.0/src/lanternspec/tools/antigravity.py +124 -0
  98. lanternspec-0.1.0/src/lanternspec/tools/base.py +149 -0
  99. lanternspec-0.1.0/src/lanternspec/tools/claude.py +132 -0
  100. lanternspec-0.1.0/src/lanternspec/tools/close.py +43 -0
  101. lanternspec-0.1.0/src/lanternspec/tools/codex.py +73 -0
  102. lanternspec-0.1.0/src/lanternspec/tools/docs_mode.py +200 -0
  103. lanternspec-0.1.0/src/lanternspec/tools/install.py +232 -0
  104. lanternspec-0.1.0/src/lanternspec/tools/rules.py +65 -0
  105. lanternspec-0.1.0/src/lanternspec/tools/runlog.py +107 -0
  106. lanternspec-0.1.0/src/lanternspec/tools/skills.py +160 -0
  107. lanternspec-0.1.0/src/lanternspec/work/__init__.py +6 -0
  108. lanternspec-0.1.0/src/lanternspec/work/branches.py +299 -0
  109. lanternspec-0.1.0/src/lanternspec/work/dbml.py +629 -0
  110. lanternspec-0.1.0/src/lanternspec/work/epic_rules.py +173 -0
  111. lanternspec-0.1.0/src/lanternspec/work/ideas.py +108 -0
  112. lanternspec-0.1.0/src/lanternspec/work/pack.py +102 -0
  113. lanternspec-0.1.0/src/lanternspec/work/progress.py +195 -0
  114. lanternspec-0.1.0/src/lanternspec/work/scaffold.py +373 -0
  115. lanternspec-0.1.0/src/lanternspec/work/screen.py +165 -0
  116. lanternspec-0.1.0/src/lanternspec/work/stages.py +62 -0
  117. lanternspec-0.1.0/src/lanternspec/work/tasks.py +284 -0
  118. lanternspec-0.1.0/src/lanternspec.egg-info/PKG-INFO +260 -0
  119. lanternspec-0.1.0/src/lanternspec.egg-info/SOURCES.txt +132 -0
  120. lanternspec-0.1.0/src/lanternspec.egg-info/dependency_links.txt +1 -0
  121. lanternspec-0.1.0/src/lanternspec.egg-info/entry_points.txt +2 -0
  122. lanternspec-0.1.0/src/lanternspec.egg-info/requires.txt +1 -0
  123. lanternspec-0.1.0/src/lanternspec.egg-info/top_level.txt +1 -0
  124. lanternspec-0.1.0/tests/test_checks.py +185 -0
  125. lanternspec-0.1.0/tests/test_core.py +164 -0
  126. lanternspec-0.1.0/tests/test_enums_single_source.py +78 -0
  127. lanternspec-0.1.0/tests/test_git.py +250 -0
  128. lanternspec-0.1.0/tests/test_install_and_aux.py +425 -0
  129. lanternspec-0.1.0/tests/test_later_features.py +400 -0
  130. lanternspec-0.1.0/tests/test_learning_line.py +105 -0
  131. lanternspec-0.1.0/tests/test_principles.py +113 -0
  132. lanternspec-0.1.0/tests/test_principles_data.py +56 -0
  133. lanternspec-0.1.0/tests/test_skill_commands.py +69 -0
  134. lanternspec-0.1.0/tests/test_work_line.py +249 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jihyeok Jeong
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,260 @@
1
+ Metadata-Version: 2.4
2
+ Name: lanternspec
3
+ Version: 0.1.0
4
+ Summary: Spec-driven development for agentic software engineering
5
+ Author: Jihyeok Jeong
6
+ License-Expression: MIT
7
+ Project-URL: Repository, https://github.com/Jungjihyuk/LanternSpec
8
+ Project-URL: Issues, https://github.com/Jungjihyuk/LanternSpec/issues
9
+ Keywords: spec-driven-development,claude-code,codex,antigravity-cli,agent-skills
10
+ Requires-Python: >=3.12
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+ Requires-Dist: PyYAML>=6.0
14
+ Dynamic: license-file
15
+
16
+ <div align="center">
17
+
18
+ <img src="https://raw.githubusercontent.com/Jungjihyuk/LanternSpec/main/assets/Banner.png" alt="LanternSpec — Illuminate the unknown. Show the path taken. Spec-Driven Development for Agentic Software Engineering." width="100%">
19
+
20
+ <a href="https://github.com/Jungjihyuk/LanternSpec/blob/main/CHANGELOG.md"><img src="https://img.shields.io/badge/release-v0.1.0-007ec6" alt="release v0.1.0"></a>
21
+ <a href="https://github.com/Jungjihyuk/LanternSpec"><img src="https://img.shields.io/github/stars/Jungjihyuk/LanternSpec?style=social" alt="GitHub Stars"></a>
22
+ <a href="https://github.com/Jungjihyuk/LanternSpec/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-97ca00" alt="license MIT"></a>
23
+ <img src="https://img.shields.io/badge/python-3.12%2B-007ec6" alt="python 3.12+">
24
+
25
+ **English** · [한국어](https://github.com/Jungjihyuk/LanternSpec/blob/main/README.ko.md)
26
+
27
+ [Install](#install) · [Quick start](#quick-start) · [Compared with other SDD tools](#compared-with-other-sdd-tools) · [Skills](#flow-and-skills) · [CLI](#cli-at-a-glance)
28
+
29
+ </div>
30
+
31
+ ---
32
+
33
+ Hand the work to an AI agent and still be able to follow what was built, why, and how — all the way through.
34
+
35
+ - 📄 **Leaves familiar documents** — idea → plan → design → tasks → code, in the document formats teams already know
36
+ - 🏮 **Illuminates the unknown** — compares the technologies the AI used with your own knowledge base and tells you what to review and what to learn
37
+ - 📈 **Shows the path taken** — kanban, timeline and understanding-debt views, all readable in Obsidian
38
+
39
+ > **Language note:** the documents, skills and CLI messages LanternSpec produces are currently in **Korean**.
40
+
41
+ ## Compared with other SDD tools
42
+
43
+ | | [Spec Kit](https://github.com/github/spec-kit) | [OpenSpec](https://github.com/Fission-AI/OpenSpec) | 🏮 **LanternSpec** |
44
+ |---|---|---|---|
45
+ | Flow | constitution → specify → plan → tasks → implement → converge | explore → propose → apply → archive | idea → plan → design → tasks → build (+ learn · report) |
46
+ | Documents | spec · plan · tasks per feature | proposal · requirements · design · tasks folder per change | 24 familiar document templates (plan, design, tasks, log …) |
47
+ | When done | repeat implementation until converged | merge requirements into specs and archive | merge into the "current state" docs after approval, then archive |
48
+ | Strengths | swap processes via extensions, presets and workflows; bug-fix and idea-assessment extensions | lightweight, no enforced phases, brownfield-first, cross-repo planning (beta) | compares unfamiliar tech with your knowledge base (understanding debt), progress reports, picks design principles for you |
49
+ | AI tools | many coding agents | 30+ | Claude Code · Codex · Antigravity |
50
+ | Install | Python 3.11+ · uv | single binary · npm · Homebrew | Python 3.12+ · uv |
51
+ | Document language | English (README in several languages) | English | Korean |
52
+
53
+ ## Install
54
+
55
+ Requirements: Python 3.12+ · git · [uv](https://docs.astral.sh/uv/)
56
+
57
+ ```bash
58
+ uv tool install lanternspec # installs the lantern command
59
+ cd my-project
60
+ lantern install # installs skills, rules and hooks into this project (Claude Code by default)
61
+ ```
62
+
63
+ Then call `/l-init` inside your AI tool (`$l-init` in Codex).
64
+
65
+ - **Using several AI tools:** `lantern install --tools claude,codex,antigravity`
66
+ - **Skills live in your project:** they are written straight into the project, not installed as a plugin. So they are called without a prefix (`/l-init`) and shared with your team through git.
67
+ - **When a new version comes out:** `uv tool upgrade lanternspec` → `lantern upgrade`
68
+
69
+ ## Quick start
70
+
71
+ ```
72
+ /l-init answer 7 questions → lantern.yaml · docs/ · draft project definition · design principles
73
+ /l-idea dark mode support record an idea right away → 1. 아이디어/IDEA-001
74
+ /l-plan IDEA-001 what and why, with acceptance criteria → 2. 작업/W-001 …/기획.md
75
+ /l-design W-001 how — only the structure, screens and data that change; a person approves
76
+ /l-task W-001 an ordered task list
77
+ /l-build W-001 implement → test → one commit per task, report with evidence → merge into the current state
78
+ /l-report kanban · timeline · debt · a three-line status report
79
+ ```
80
+
81
+ `lantern` numbers every document in order.
82
+
83
+ | ID | Meaning |
84
+ |---|---|
85
+ | `IDEA-001` | idea #1 |
86
+ | `W-001` | work item #1 (one bundle from plan to build) |
87
+ | `W-001-T02` | the 2nd task of work item #1 |
88
+ | `D-001` · `ADR-001` | debt card · decision record |
89
+
90
+ ### Commands for checking where you are
91
+
92
+ | Command | When to use it |
93
+ |---|---|
94
+ | `lantern status` | when you pick the work back up — shows the work in progress, the next task and open questions in three lines |
95
+ | `lantern doctor` | right after installing, or when something feels off — checks that install, settings and folders match `lantern.yaml` |
96
+ | `lantern --help` | when you forget a command — options per command with `lantern <command> --help` |
97
+
98
+ ## Flow and skills
99
+
100
+ ```mermaid
101
+ flowchart LR
102
+ S["⚙️ /l-init"] --> I
103
+ subgraph W["🛠 Work flow"]
104
+ I["💡 /l-idea"] --> P["📋 /l-plan"] --> D["📐 /l-design"] --> T["✅ /l-task"] --> B["🔨 /l-build"]
105
+ end
106
+ P & D & B -.unfamiliar tech.-> L["🧭 /l-learn"]
107
+ B -->|merge when done| C["📘 3. Current state"]
108
+ W & L --> R["📊 /l-report"]
109
+ ```
110
+
111
+ | Skill | What it does | What it leaves |
112
+ |---|---|---|
113
+ | `/l-init` | sets up the document structure and design principles from 7 questions (new or existing · team size · screens · server · knowledge base · design tool · project kind) | `lantern.yaml`, `docs/`, project definition, MOC, design principles |
114
+ | `/l-idea` | records a thought from the conversation, as said and as summarised | `1. 아이디어/IDEA-001 …` |
115
+ | `/l-plan` | what and why — a work folder and acceptance criteria | `2. 작업/W-001 …/기획.md` |
116
+ | `/l-design` | how — only the structure, screens and data (DBML) that change, behind an approval gate | `설계.md`, `화면/`, ADR |
117
+ | `/l-task` | an ordered task list (size · acceptance criteria · dependencies) | `할 일.md` |
118
+ | `/l-build` | implement → test → one commit per task, report **with evidence**, merge into the current state when done | code, `기록.md` |
119
+ | `/l-learn` | compares unfamiliar tech with your knowledge base → 🟢 · 🟡 · 🔴, debt cards and draft study notes | `📒 부채/카드/D-001 …` |
120
+ | `/l-report` | kanban · timeline · domain · traceability · debt · docs-vs-code status + a three-line report | `4. 운영 기록/보고/현황.md` |
121
+ | `/l-template` | create, refine and migrate templates (without losing content) | `0. 템플릿/…` |
122
+ | `/l-check` | format check (required sections · values · links · versions · IDs · length) | — |
123
+ | `/l-sync` | finds where documents and code disagree and brings them back in line | — |
124
+ | `/l-map` | updates the MOC (document map) | `개발문서 MOC.md` |
125
+ | `/l-adr` | records decisions that are hard to reverse | `규칙 · 결정 기록/ADR-001 …` |
126
+
127
+ ### How it works
128
+ - **Scripts handle the format, the AI writes the content.** Numbering, files, folders, checks and status changes all go through the `lantern` command; the AI only writes content.
129
+ - **Every document starts from a template.** The AI fills in the template's `{{blanks}}`; changing the section structure is flagged immediately.
130
+ - **Every skill ends the same way.** A skill that changed documents runs `lantern close <skill>`: check → update the map → log the run.
131
+ - **Show before writing.** Designs and changes to the current state are summarised and approved first (`/l-idea` is the only exception).
132
+ - **Your knowledge base is read-only.** Notes are written only after you approve.
133
+
134
+ ## Document structure
135
+
136
+ Documents are stored in one folder per work item, and the MOC (document map) collects them by stage. Folder and file names are Korean.
137
+
138
+ ```
139
+ docs/
140
+ ├─ 개발문서 MOC.md document map + view by stage (lantern map rewrites the marked part)
141
+ ├─ 0. 템플릿/ templates you refine over time · _meta/enums.yaml (the single source of status and kind names)
142
+ ├─ 1. 아이디어/ ideas
143
+ ├─ 2. 작업/W-001 …/ plan · design · tasks · log — the only place edited while working
144
+ │ └─ 보관/ archive
145
+ ├─ 3. 현재 상태/ what the system looks like now — updated only when work is done, after approval
146
+ ├─ 4. 운영 기록/ reports · session logs · (teams of 2+) meeting notes
147
+ ├─ 5. 기존 문서/ (existing projects) original documents, kept unchanged
148
+ └─ 📒 부채/ understanding debt — one card per debt
149
+ ```
150
+
151
+ Which documents you get depends on your `/l-init` answers (`lantern.yaml`; check with `lantern profile docs`).
152
+
153
+ - A mobile app adds deployment and platform-integration documents.
154
+ - A team of two or more adds collaboration rules and meeting notes.
155
+
156
+ If you don't want documents on the remote, use `lantern docs-mode local`. Documents then live only on a `docs-local` branch in the same repository, and pushing that branch is blocked.
157
+
158
+ ## Supported AI tools
159
+
160
+ | Tool | Skills | Rules | Agent hooks | MCP (`--mcp`) |
161
+ |---|---|---|---|---|
162
+ | Claude Code | `.claude/skills` | `CLAUDE.md` → `@AGENTS.md` | `.claude/settings.json` | `.mcp.json` |
163
+ | Codex | `.agents/skills` (`$l-…`) | `AGENTS.md` | `.codex/hooks.json` | `.codex/config.toml` |
164
+ | Antigravity CLI (`agy`) | `.agents/skills` | `AGENTS.md` | `.agents/hooks.json` (no save-before-compaction — there is no compaction hook) | `.agents/plugins/lanternspec/` |
165
+
166
+ - **Rules live in `AGENTS.md`.** LanternSpec manages only the `<!-- lanternspec:start -->` block inside it and leaves everything outside the block alone.
167
+ - **Codex and Antigravity share the skills folder.** When you use both, skill bodies say `/l-build`, and `AGENTS.md` tells Codex to use `$` instead.
168
+
169
+ ## Keeping documents and code in line
170
+
171
+ git and AI tools already have **hooks**: they run a script at set moments (just before a commit, right after a file is written, and so on).
172
+
173
+ LanternSpec connects its checks to those hooks, so `lantern` checks at every stage that documents and code still match. The checks are done by a script, not by the AI, so they always apply the same rules.
174
+
175
+ | Stage | What it does | Example |
176
+ |---|---|---|
177
+ | While talking to the AI | shows where things stand when a session starts, and checks the format as soon as the AI writes a document | warns right away when the AI deletes a required section of a plan |
178
+ | Just before a commit | looks at what the commit contains and checks that the records that should go with it are there | warns when the database structure changed but the work log doesn't mention it |
179
+ | After the commit message | checks that the message says which task the commit belongs to | warns when the message has no task ID (e.g. `[W-001-T02]` = the 2nd task of work item #1) |
180
+ | Just before a push | checks that nothing that must stay local is being pushed | blocks pushing the documents branch you chose to keep off the remote |
181
+ | After pushing to GitHub | runs the same checks again on GitHub, whoever pushed (CI) | marks the run failed if document format, lint, type checks or tests break |
182
+ | On demand | scans past commits and lists where documents and code drifted apart (`lantern scan`) | documents not reviewed for a while although their code changed |
183
+
184
+ - **Warnings by default.** Work is never blocked. To make the commit checks blocking, set `git.hooks` to `block` in `lantern.yaml`.
185
+ - **Hard-to-undo mistakes are always blocked.** For example, pushing documents you chose to keep off the remote is blocked regardless of settings.
186
+
187
+ ```bash
188
+ lantern hooks install # turns on the commit and push checks (/l-init asks before installing)
189
+ lantern install --ci # also checks on GitHub (turn off with --no-ci)
190
+ ```
191
+
192
+ ## Managing unfamiliar tech — knowledge base and understanding debt
193
+
194
+ When the AI uses a technology you don't know, LanternSpec compares it with the notes in your knowledge base and sorts it into three groups.
195
+
196
+ - 🟢 you have a note → links the note
197
+ - 🟡 you have a note but asked again → tells you what to review
198
+ - 🔴 no note yet → suggests a draft study note
199
+
200
+ Anything you don't understand yet is kept as a debt card, and every time you ask about it again the count goes up.
201
+
202
+ | Knowledge base (`knowledge.type`) | How | Writing |
203
+ |---|---|---|
204
+ | `obsidian` · `folder` | reads Markdown files directly | creates notes after approval (drafts only with `propose_only`) |
205
+ | `notion` | planned | — |
206
+
207
+ Every knowledge base supports the same four actions: search · read · propose · write. The CLI (`lantern knowledge …`) and the MCP server (`lantern mcp`) use the same functions.
208
+
209
+ There are three kinds of debt.
210
+
211
+ | Kind | Meaning |
212
+ |---|---|
213
+ | 🧠 Understanding | you follow it when it's explained, but it isn't yours yet. Reopened if you ask again after resolving it |
214
+ | 🛠 Competency | you understand it but haven't done it yourself. Practised with exercises (`lantern debt promote`) |
215
+ | 🧱 Technical | debt left in the code (technical debt) |
216
+
217
+ ## Design principles and ways of working
218
+
219
+ ### Design principles and code conventions
220
+ Picks design principles and code conventions from a table, based on the project kind chosen in `/l-init` and the measured size (lines of code · team size).
221
+
222
+ - Languages: Python · TypeScript · Swift · Rust · Go
223
+ - The essentials go into `AGENTS.md`; the full explanation goes into `개발 원칙.md` (design principles).
224
+ - In existing projects, lint and format settings already in use are recorded, never changed.
225
+ - When the code grows past a size boundary, `lantern doctor` asks whether to raise the principles one level.
226
+ - See the result with `lantern principles show`; run lint and type checks with `lantern lint`
227
+
228
+ ### How the AI works
229
+ `lantern harness suggest` looks at code size, work in progress, whether tests exist and past runs, and recommends one of three modes.
230
+
231
+ - **Harness:** small loops inside one task. The default for small projects
232
+ - **Loop:** reruns the whole work item until the acceptance tests pass
233
+ - **Graph:** splits independent work items into worktrees so several agents work at the same time
234
+
235
+ ### Evaluation
236
+ `lantern eval` uses the run log to compare cost (time · tool calls) and results (format errors at wrap-up) per skill, model and setting.
237
+
238
+ ### Design tools
239
+ Claude Design, Figma and Canva through each tool's MCP.
240
+ Import mockups with `lantern screen import`; `lantern screen compare` finds where the built screen differs from the mockup.
241
+
242
+ ## CLI at a glance
243
+
244
+ ```text
245
+ setup install [--tools] [--mcp] [--ci|--no-ci] · upgrade · doctor · harness suggest
246
+ profile profile show|docs|write|set · principles show|detect · enums list|rename
247
+ documents scaffold init [--plan] | work | doc | idea | adr | meeting | custom · new-id · map · meta get|set
248
+ checks check [--changed] [--epic W-012] · lint · check-dbml · dbml render|from-sql|diff
249
+ work task next [--all]|start|done|ac|list|estimate · task add [--parallel] · pack · screen import|compare
250
+ work branch|start|list|finish|archive|stage · design approve · unit-log add · idea find|status
251
+ learning knowledge search|read|propose|write|areas · debt find|new|ask|resolve|promote|practice|known|status|list · mcp
252
+ reports report [--views] [--summary] · status · scan [--tests] · sync adopt · eval
253
+ templates template list|lint|level|bump|outdated|diff|usage|new|migrate · legacy adopt|todos
254
+ git hooks install|uninstall|status · docs-mode local|shared
255
+ wrap-up close <skill>
256
+ ```
257
+
258
+ ## License
259
+
260
+ [MIT](https://github.com/Jungjihyuk/LanternSpec/blob/main/LICENSE)
@@ -0,0 +1,245 @@
1
+ <div align="center">
2
+
3
+ <img src="https://raw.githubusercontent.com/Jungjihyuk/LanternSpec/main/assets/Banner.png" alt="LanternSpec — Illuminate the unknown. Show the path taken. Spec-Driven Development for Agentic Software Engineering." width="100%">
4
+
5
+ <a href="https://github.com/Jungjihyuk/LanternSpec/blob/main/CHANGELOG.md"><img src="https://img.shields.io/badge/release-v0.1.0-007ec6" alt="release v0.1.0"></a>
6
+ <a href="https://github.com/Jungjihyuk/LanternSpec"><img src="https://img.shields.io/github/stars/Jungjihyuk/LanternSpec?style=social" alt="GitHub Stars"></a>
7
+ <a href="https://github.com/Jungjihyuk/LanternSpec/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-97ca00" alt="license MIT"></a>
8
+ <img src="https://img.shields.io/badge/python-3.12%2B-007ec6" alt="python 3.12+">
9
+
10
+ **English** · [한국어](https://github.com/Jungjihyuk/LanternSpec/blob/main/README.ko.md)
11
+
12
+ [Install](#install) · [Quick start](#quick-start) · [Compared with other SDD tools](#compared-with-other-sdd-tools) · [Skills](#flow-and-skills) · [CLI](#cli-at-a-glance)
13
+
14
+ </div>
15
+
16
+ ---
17
+
18
+ Hand the work to an AI agent and still be able to follow what was built, why, and how — all the way through.
19
+
20
+ - 📄 **Leaves familiar documents** — idea → plan → design → tasks → code, in the document formats teams already know
21
+ - 🏮 **Illuminates the unknown** — compares the technologies the AI used with your own knowledge base and tells you what to review and what to learn
22
+ - 📈 **Shows the path taken** — kanban, timeline and understanding-debt views, all readable in Obsidian
23
+
24
+ > **Language note:** the documents, skills and CLI messages LanternSpec produces are currently in **Korean**.
25
+
26
+ ## Compared with other SDD tools
27
+
28
+ | | [Spec Kit](https://github.com/github/spec-kit) | [OpenSpec](https://github.com/Fission-AI/OpenSpec) | 🏮 **LanternSpec** |
29
+ |---|---|---|---|
30
+ | Flow | constitution → specify → plan → tasks → implement → converge | explore → propose → apply → archive | idea → plan → design → tasks → build (+ learn · report) |
31
+ | Documents | spec · plan · tasks per feature | proposal · requirements · design · tasks folder per change | 24 familiar document templates (plan, design, tasks, log …) |
32
+ | When done | repeat implementation until converged | merge requirements into specs and archive | merge into the "current state" docs after approval, then archive |
33
+ | Strengths | swap processes via extensions, presets and workflows; bug-fix and idea-assessment extensions | lightweight, no enforced phases, brownfield-first, cross-repo planning (beta) | compares unfamiliar tech with your knowledge base (understanding debt), progress reports, picks design principles for you |
34
+ | AI tools | many coding agents | 30+ | Claude Code · Codex · Antigravity |
35
+ | Install | Python 3.11+ · uv | single binary · npm · Homebrew | Python 3.12+ · uv |
36
+ | Document language | English (README in several languages) | English | Korean |
37
+
38
+ ## Install
39
+
40
+ Requirements: Python 3.12+ · git · [uv](https://docs.astral.sh/uv/)
41
+
42
+ ```bash
43
+ uv tool install lanternspec # installs the lantern command
44
+ cd my-project
45
+ lantern install # installs skills, rules and hooks into this project (Claude Code by default)
46
+ ```
47
+
48
+ Then call `/l-init` inside your AI tool (`$l-init` in Codex).
49
+
50
+ - **Using several AI tools:** `lantern install --tools claude,codex,antigravity`
51
+ - **Skills live in your project:** they are written straight into the project, not installed as a plugin. So they are called without a prefix (`/l-init`) and shared with your team through git.
52
+ - **When a new version comes out:** `uv tool upgrade lanternspec` → `lantern upgrade`
53
+
54
+ ## Quick start
55
+
56
+ ```
57
+ /l-init answer 7 questions → lantern.yaml · docs/ · draft project definition · design principles
58
+ /l-idea dark mode support record an idea right away → 1. 아이디어/IDEA-001
59
+ /l-plan IDEA-001 what and why, with acceptance criteria → 2. 작업/W-001 …/기획.md
60
+ /l-design W-001 how — only the structure, screens and data that change; a person approves
61
+ /l-task W-001 an ordered task list
62
+ /l-build W-001 implement → test → one commit per task, report with evidence → merge into the current state
63
+ /l-report kanban · timeline · debt · a three-line status report
64
+ ```
65
+
66
+ `lantern` numbers every document in order.
67
+
68
+ | ID | Meaning |
69
+ |---|---|
70
+ | `IDEA-001` | idea #1 |
71
+ | `W-001` | work item #1 (one bundle from plan to build) |
72
+ | `W-001-T02` | the 2nd task of work item #1 |
73
+ | `D-001` · `ADR-001` | debt card · decision record |
74
+
75
+ ### Commands for checking where you are
76
+
77
+ | Command | When to use it |
78
+ |---|---|
79
+ | `lantern status` | when you pick the work back up — shows the work in progress, the next task and open questions in three lines |
80
+ | `lantern doctor` | right after installing, or when something feels off — checks that install, settings and folders match `lantern.yaml` |
81
+ | `lantern --help` | when you forget a command — options per command with `lantern <command> --help` |
82
+
83
+ ## Flow and skills
84
+
85
+ ```mermaid
86
+ flowchart LR
87
+ S["⚙️ /l-init"] --> I
88
+ subgraph W["🛠 Work flow"]
89
+ I["💡 /l-idea"] --> P["📋 /l-plan"] --> D["📐 /l-design"] --> T["✅ /l-task"] --> B["🔨 /l-build"]
90
+ end
91
+ P & D & B -.unfamiliar tech.-> L["🧭 /l-learn"]
92
+ B -->|merge when done| C["📘 3. Current state"]
93
+ W & L --> R["📊 /l-report"]
94
+ ```
95
+
96
+ | Skill | What it does | What it leaves |
97
+ |---|---|---|
98
+ | `/l-init` | sets up the document structure and design principles from 7 questions (new or existing · team size · screens · server · knowledge base · design tool · project kind) | `lantern.yaml`, `docs/`, project definition, MOC, design principles |
99
+ | `/l-idea` | records a thought from the conversation, as said and as summarised | `1. 아이디어/IDEA-001 …` |
100
+ | `/l-plan` | what and why — a work folder and acceptance criteria | `2. 작업/W-001 …/기획.md` |
101
+ | `/l-design` | how — only the structure, screens and data (DBML) that change, behind an approval gate | `설계.md`, `화면/`, ADR |
102
+ | `/l-task` | an ordered task list (size · acceptance criteria · dependencies) | `할 일.md` |
103
+ | `/l-build` | implement → test → one commit per task, report **with evidence**, merge into the current state when done | code, `기록.md` |
104
+ | `/l-learn` | compares unfamiliar tech with your knowledge base → 🟢 · 🟡 · 🔴, debt cards and draft study notes | `📒 부채/카드/D-001 …` |
105
+ | `/l-report` | kanban · timeline · domain · traceability · debt · docs-vs-code status + a three-line report | `4. 운영 기록/보고/현황.md` |
106
+ | `/l-template` | create, refine and migrate templates (without losing content) | `0. 템플릿/…` |
107
+ | `/l-check` | format check (required sections · values · links · versions · IDs · length) | — |
108
+ | `/l-sync` | finds where documents and code disagree and brings them back in line | — |
109
+ | `/l-map` | updates the MOC (document map) | `개발문서 MOC.md` |
110
+ | `/l-adr` | records decisions that are hard to reverse | `규칙 · 결정 기록/ADR-001 …` |
111
+
112
+ ### How it works
113
+ - **Scripts handle the format, the AI writes the content.** Numbering, files, folders, checks and status changes all go through the `lantern` command; the AI only writes content.
114
+ - **Every document starts from a template.** The AI fills in the template's `{{blanks}}`; changing the section structure is flagged immediately.
115
+ - **Every skill ends the same way.** A skill that changed documents runs `lantern close <skill>`: check → update the map → log the run.
116
+ - **Show before writing.** Designs and changes to the current state are summarised and approved first (`/l-idea` is the only exception).
117
+ - **Your knowledge base is read-only.** Notes are written only after you approve.
118
+
119
+ ## Document structure
120
+
121
+ Documents are stored in one folder per work item, and the MOC (document map) collects them by stage. Folder and file names are Korean.
122
+
123
+ ```
124
+ docs/
125
+ ├─ 개발문서 MOC.md document map + view by stage (lantern map rewrites the marked part)
126
+ ├─ 0. 템플릿/ templates you refine over time · _meta/enums.yaml (the single source of status and kind names)
127
+ ├─ 1. 아이디어/ ideas
128
+ ├─ 2. 작업/W-001 …/ plan · design · tasks · log — the only place edited while working
129
+ │ └─ 보관/ archive
130
+ ├─ 3. 현재 상태/ what the system looks like now — updated only when work is done, after approval
131
+ ├─ 4. 운영 기록/ reports · session logs · (teams of 2+) meeting notes
132
+ ├─ 5. 기존 문서/ (existing projects) original documents, kept unchanged
133
+ └─ 📒 부채/ understanding debt — one card per debt
134
+ ```
135
+
136
+ Which documents you get depends on your `/l-init` answers (`lantern.yaml`; check with `lantern profile docs`).
137
+
138
+ - A mobile app adds deployment and platform-integration documents.
139
+ - A team of two or more adds collaboration rules and meeting notes.
140
+
141
+ If you don't want documents on the remote, use `lantern docs-mode local`. Documents then live only on a `docs-local` branch in the same repository, and pushing that branch is blocked.
142
+
143
+ ## Supported AI tools
144
+
145
+ | Tool | Skills | Rules | Agent hooks | MCP (`--mcp`) |
146
+ |---|---|---|---|---|
147
+ | Claude Code | `.claude/skills` | `CLAUDE.md` → `@AGENTS.md` | `.claude/settings.json` | `.mcp.json` |
148
+ | Codex | `.agents/skills` (`$l-…`) | `AGENTS.md` | `.codex/hooks.json` | `.codex/config.toml` |
149
+ | Antigravity CLI (`agy`) | `.agents/skills` | `AGENTS.md` | `.agents/hooks.json` (no save-before-compaction — there is no compaction hook) | `.agents/plugins/lanternspec/` |
150
+
151
+ - **Rules live in `AGENTS.md`.** LanternSpec manages only the `<!-- lanternspec:start -->` block inside it and leaves everything outside the block alone.
152
+ - **Codex and Antigravity share the skills folder.** When you use both, skill bodies say `/l-build`, and `AGENTS.md` tells Codex to use `$` instead.
153
+
154
+ ## Keeping documents and code in line
155
+
156
+ git and AI tools already have **hooks**: they run a script at set moments (just before a commit, right after a file is written, and so on).
157
+
158
+ LanternSpec connects its checks to those hooks, so `lantern` checks at every stage that documents and code still match. The checks are done by a script, not by the AI, so they always apply the same rules.
159
+
160
+ | Stage | What it does | Example |
161
+ |---|---|---|
162
+ | While talking to the AI | shows where things stand when a session starts, and checks the format as soon as the AI writes a document | warns right away when the AI deletes a required section of a plan |
163
+ | Just before a commit | looks at what the commit contains and checks that the records that should go with it are there | warns when the database structure changed but the work log doesn't mention it |
164
+ | After the commit message | checks that the message says which task the commit belongs to | warns when the message has no task ID (e.g. `[W-001-T02]` = the 2nd task of work item #1) |
165
+ | Just before a push | checks that nothing that must stay local is being pushed | blocks pushing the documents branch you chose to keep off the remote |
166
+ | After pushing to GitHub | runs the same checks again on GitHub, whoever pushed (CI) | marks the run failed if document format, lint, type checks or tests break |
167
+ | On demand | scans past commits and lists where documents and code drifted apart (`lantern scan`) | documents not reviewed for a while although their code changed |
168
+
169
+ - **Warnings by default.** Work is never blocked. To make the commit checks blocking, set `git.hooks` to `block` in `lantern.yaml`.
170
+ - **Hard-to-undo mistakes are always blocked.** For example, pushing documents you chose to keep off the remote is blocked regardless of settings.
171
+
172
+ ```bash
173
+ lantern hooks install # turns on the commit and push checks (/l-init asks before installing)
174
+ lantern install --ci # also checks on GitHub (turn off with --no-ci)
175
+ ```
176
+
177
+ ## Managing unfamiliar tech — knowledge base and understanding debt
178
+
179
+ When the AI uses a technology you don't know, LanternSpec compares it with the notes in your knowledge base and sorts it into three groups.
180
+
181
+ - 🟢 you have a note → links the note
182
+ - 🟡 you have a note but asked again → tells you what to review
183
+ - 🔴 no note yet → suggests a draft study note
184
+
185
+ Anything you don't understand yet is kept as a debt card, and every time you ask about it again the count goes up.
186
+
187
+ | Knowledge base (`knowledge.type`) | How | Writing |
188
+ |---|---|---|
189
+ | `obsidian` · `folder` | reads Markdown files directly | creates notes after approval (drafts only with `propose_only`) |
190
+ | `notion` | planned | — |
191
+
192
+ Every knowledge base supports the same four actions: search · read · propose · write. The CLI (`lantern knowledge …`) and the MCP server (`lantern mcp`) use the same functions.
193
+
194
+ There are three kinds of debt.
195
+
196
+ | Kind | Meaning |
197
+ |---|---|
198
+ | 🧠 Understanding | you follow it when it's explained, but it isn't yours yet. Reopened if you ask again after resolving it |
199
+ | 🛠 Competency | you understand it but haven't done it yourself. Practised with exercises (`lantern debt promote`) |
200
+ | 🧱 Technical | debt left in the code (technical debt) |
201
+
202
+ ## Design principles and ways of working
203
+
204
+ ### Design principles and code conventions
205
+ Picks design principles and code conventions from a table, based on the project kind chosen in `/l-init` and the measured size (lines of code · team size).
206
+
207
+ - Languages: Python · TypeScript · Swift · Rust · Go
208
+ - The essentials go into `AGENTS.md`; the full explanation goes into `개발 원칙.md` (design principles).
209
+ - In existing projects, lint and format settings already in use are recorded, never changed.
210
+ - When the code grows past a size boundary, `lantern doctor` asks whether to raise the principles one level.
211
+ - See the result with `lantern principles show`; run lint and type checks with `lantern lint`
212
+
213
+ ### How the AI works
214
+ `lantern harness suggest` looks at code size, work in progress, whether tests exist and past runs, and recommends one of three modes.
215
+
216
+ - **Harness:** small loops inside one task. The default for small projects
217
+ - **Loop:** reruns the whole work item until the acceptance tests pass
218
+ - **Graph:** splits independent work items into worktrees so several agents work at the same time
219
+
220
+ ### Evaluation
221
+ `lantern eval` uses the run log to compare cost (time · tool calls) and results (format errors at wrap-up) per skill, model and setting.
222
+
223
+ ### Design tools
224
+ Claude Design, Figma and Canva through each tool's MCP.
225
+ Import mockups with `lantern screen import`; `lantern screen compare` finds where the built screen differs from the mockup.
226
+
227
+ ## CLI at a glance
228
+
229
+ ```text
230
+ setup install [--tools] [--mcp] [--ci|--no-ci] · upgrade · doctor · harness suggest
231
+ profile profile show|docs|write|set · principles show|detect · enums list|rename
232
+ documents scaffold init [--plan] | work | doc | idea | adr | meeting | custom · new-id · map · meta get|set
233
+ checks check [--changed] [--epic W-012] · lint · check-dbml · dbml render|from-sql|diff
234
+ work task next [--all]|start|done|ac|list|estimate · task add [--parallel] · pack · screen import|compare
235
+ work branch|start|list|finish|archive|stage · design approve · unit-log add · idea find|status
236
+ learning knowledge search|read|propose|write|areas · debt find|new|ask|resolve|promote|practice|known|status|list · mcp
237
+ reports report [--views] [--summary] · status · scan [--tests] · sync adopt · eval
238
+ templates template list|lint|level|bump|outdated|diff|usage|new|migrate · legacy adopt|todos
239
+ git hooks install|uninstall|status · docs-mode local|shared
240
+ wrap-up close <skill>
241
+ ```
242
+
243
+ ## License
244
+
245
+ [MIT](https://github.com/Jungjihyuk/LanternSpec/blob/main/LICENSE)
@@ -0,0 +1,68 @@
1
+ [build-system]
2
+ requires = ["setuptools>=77"] # license = "MIT" (SPDX 표기)는 77부터
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "lanternspec"
7
+ version = "0.1.0"
8
+ description = "Spec-driven development for agentic software engineering"
9
+ readme = "README.md"
10
+ requires-python = ">=3.12"
11
+ license = "MIT"
12
+ license-files = ["LICENSE"]
13
+ authors = [{ name = "Jihyeok Jeong" }]
14
+ dependencies = ["PyYAML>=6.0"]
15
+ keywords = ["spec-driven-development", "claude-code", "codex", "antigravity-cli", "agent-skills"]
16
+
17
+ [dependency-groups]
18
+ # 개발 도구 — `uv run`이 자동으로 설치한다
19
+ dev = ["pytest>=7", "ruff>=0.17", "pyright>=1.1.400"]
20
+
21
+ [project.urls]
22
+ Repository = "https://github.com/Jungjihyuk/LanternSpec"
23
+ Issues = "https://github.com/Jungjihyuk/LanternSpec/issues"
24
+
25
+ [project.scripts]
26
+ lantern = "lanternspec.cli:main"
27
+
28
+ [tool.setuptools.packages.find]
29
+ where = ["src"]
30
+
31
+ [tool.setuptools.package-data]
32
+ lanternspec = ["resources/**/*", "resources/**/.*"]
33
+
34
+ [tool.setuptools.exclude-package-data]
35
+ lanternspec = ["**/__pycache__/*", "**/*.pyc"] # 위 resources/**/* 에 캐시가 섞이지 않게
36
+
37
+ [tool.pytest.ini_options]
38
+ testpaths = ["tests", "src/lanternspec"]
39
+ addopts = "--doctest-modules" # docstring Example도 테스트로 돌린다
40
+
41
+ [tool.ruff]
42
+ target-version = "py312"
43
+ line-length = 140
44
+ src = ["src", "tests"]
45
+
46
+ [tool.ruff.lint]
47
+ # F pyflakes · E/W pycodestyle · I import 정렬(isort) · B 흔한 버그(bugbear) · UP 최신 문법(pyupgrade)
48
+ # ANN 타입 힌트 · D docstring
49
+ select = ["F", "E", "W", "I", "B", "UP", "ANN", "D"]
50
+ ignore = [
51
+ "E741", # 줄을 도는 변수 l — 코드 전반에 쓰여 있어 따로 정리할 때까지 둔다
52
+ "ANN401", # Any — YAML · JSON처럼 모양이 정해지지 않은 데이터에는 Any가 맞다
53
+ ]
54
+
55
+ [tool.ruff.lint.pydocstyle]
56
+ convention = "google"
57
+
58
+ [tool.ruff.lint.per-file-ignores]
59
+ # docstring 규칙(AGENTS.md 2장)은 적용을 마친 파일에만 검사한다 — 그룹을 적용할 때마다 여기서 뺀다
60
+ "!src/lanternspec/{core/enums.py,core/principles.py,report/principles_doc.py,work/progress.py}" = ["D"]
61
+ "tests/**" = ["ANN"] # 테스트 함수는 pytest가 부르므로 타입 힌트를 요구하지 않는다
62
+
63
+ [tool.pyright]
64
+ include = ["src"]
65
+ pythonVersion = "3.12"
66
+ typeCheckingMode = "standard"
67
+ venvPath = "."
68
+ venv = ".venv"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,8 @@
1
+ """LanternSpec — 모르는 것은 밝히고, 걸어온 길은 보여 준다."""
2
+
3
+ from importlib.metadata import PackageNotFoundError, version
4
+
5
+ try:
6
+ __version__ = version("lanternspec") # 버전의 유일한 출처는 pyproject.toml — 설치할 때 옮겨 적힌 값을 읽는다
7
+ except PackageNotFoundError: # 설치하지 않고 소스 폴더를 바로 불러 쓸 때
8
+ __version__ = "0+unknown"
@@ -0,0 +1,3 @@
1
+ from lanternspec.cli import main
2
+
3
+ raise SystemExit(main())
@@ -0,0 +1,4 @@
1
+ """검사와 양식 관리 — 양식 검사(check_docs) · git hook · doctor · 템플릿 버전(templates) · 기존 문서(legacy).
2
+
3
+ 여기를 고치는 이유: "맞다 · 틀리다"의 기준이나 양식 관리 규칙이 바뀔 때.
4
+ """