mirror of
https://github.com/github/spec-kit.git
synced 2026-07-03 12:28:06 +08:00
* feat: add bundled lean preset with minimal workflow commands Add a lean preset that overrides the 5 core workflow commands (specify, plan, tasks, implement, constitution) with minimal prompts that produce exactly one artifact each — no extension hooks, no scripts, no git branching, no templates. Bundled preset infrastructure: - Add _locate_bundled_preset() mirroring _locate_bundled_extension() - Update 'specify init --preset' to try bundled -> catalog fallback - Update 'specify preset add' to try bundled -> catalog fallback - Add bundled guard in download_pack() for presets without download URLs - Add lean to presets/catalog.json with 'bundled: true' marker - Add lean to pyproject.toml force-include for wheel packaging - Align error messages with bundled extension error pattern Tests: 15 new tests (TestLeanPreset + TestBundledPresetLocator) * refactor: address review — clean up unused imports, strengthen test assertions - Remove unused MagicMock import and cache_dir setup in download test - Assert 'bundled' and 'reinstall' in CLI error output (not just exit code) - Mock catalog in missing-locally test for deterministic bundled error path - Fix test versions to satisfy updated speckit_version >=0.6.0 requirement * refactor: address review — fix constitution paths, add REINSTALL_COMMAND to presets.py - Fix constitution path to .specify/memory/constitution.md in plan, tasks, implement commands (matching core command convention) - Include REINSTALL_COMMAND in download_pack() bundled guard for consistent recovery instructions across bundled extensions and presets * refactor: address review — explicit feature_directory paths, ZIP cleanup in finally - Prefix spec.md/plan.md/tasks.md with <feature_directory>/ in plan, tasks, and implement commands so the agent doesn't operate on repo root by mistake - Move ZIP unlink into finally block in init --preset path so cleanup runs even when install_from_zip raises (matching preset_add pattern) * refactor: address review — replace Unicode em dashes with ASCII, fix grammar - Replace all Unicode em dashes with ASCII hyphens in preset.yml and catalog.json to avoid decode errors on non-UTF-8 environments - Fix grammar: 'store it in tasks.md' -> 'store them in tasks.md' * refactor: address review - align task format between tasks and implement - Remove undefined [P] marker from implement (lean uses sequential execution) - Clarify checkbox update: 'change - [ ] to - [x]' instead of ambiguous '[X]' - Simplify implement to execute tasks in order without parallel complexity * refactor: address review - parse frontmatter instead of raw substring search - Use CommandRegistrar.parse_frontmatter() to check for scripts/agent_scripts keys in YAML frontmatter instead of brittle 'scripts:' substring search
73 lines
2.3 KiB
TOML
73 lines
2.3 KiB
TOML
[project]
|
|
name = "specify-cli"
|
|
version = "0.6.1.dev0"
|
|
description = "Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD)."
|
|
requires-python = ">=3.11"
|
|
dependencies = [
|
|
"typer>=0.24.0",
|
|
"click>=8.2.1",
|
|
"rich",
|
|
"platformdirs",
|
|
"readchar",
|
|
"pyyaml>=6.0",
|
|
"packaging>=23.0",
|
|
"pathspec>=0.12.0",
|
|
"json5>=0.13.0",
|
|
]
|
|
|
|
[project.scripts]
|
|
specify = "specify_cli:main"
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src/specify_cli"]
|
|
|
|
[tool.hatch.build.targets.wheel.force-include]
|
|
# Bundle core assets so `specify init` works without network access (air-gapped / enterprise)
|
|
# Page templates (exclude commands/ — bundled separately below to avoid duplication)
|
|
"templates/agent-file-template.md" = "specify_cli/core_pack/templates/agent-file-template.md"
|
|
"templates/checklist-template.md" = "specify_cli/core_pack/templates/checklist-template.md"
|
|
"templates/constitution-template.md" = "specify_cli/core_pack/templates/constitution-template.md"
|
|
"templates/plan-template.md" = "specify_cli/core_pack/templates/plan-template.md"
|
|
"templates/spec-template.md" = "specify_cli/core_pack/templates/spec-template.md"
|
|
"templates/tasks-template.md" = "specify_cli/core_pack/templates/tasks-template.md"
|
|
"templates/vscode-settings.json" = "specify_cli/core_pack/templates/vscode-settings.json"
|
|
# Command templates
|
|
"templates/commands" = "specify_cli/core_pack/commands"
|
|
"scripts/bash" = "specify_cli/core_pack/scripts/bash"
|
|
"scripts/powershell" = "specify_cli/core_pack/scripts/powershell"
|
|
# Bundled extensions (installable via `specify extension add <name>`)
|
|
"extensions/git" = "specify_cli/core_pack/extensions/git"
|
|
# Bundled presets (installable via `specify preset add <name>` or `specify init --preset <name>`)
|
|
"presets/lean" = "specify_cli/core_pack/presets/lean"
|
|
|
|
[project.optional-dependencies]
|
|
test = [
|
|
"pytest>=7.0",
|
|
"pytest-cov>=4.0",
|
|
]
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
python_files = ["test_*.py"]
|
|
python_classes = ["Test*"]
|
|
python_functions = ["test_*"]
|
|
addopts = [
|
|
"-v",
|
|
"--strict-markers",
|
|
"--tb=short",
|
|
]
|
|
|
|
[tool.coverage.run]
|
|
source = ["src"]
|
|
omit = ["*/tests/*", "*/__pycache__/*"]
|
|
|
|
[tool.coverage.report]
|
|
precision = 2
|
|
show_missing = true
|
|
skip_covered = false
|
|
|