specsmith 0.2.2.dev47__tar.gz → 0.2.2.dev49__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.
- {specsmith-0.2.2.dev47/src/specsmith.egg-info → specsmith-0.2.2.dev49}/PKG-INFO +1 -1
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/pyproject.toml +1 -1
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/auditor.py +18 -10
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/upgrader.py +35 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49/src/specsmith.egg-info}/PKG-INFO +1 -1
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/LICENSE +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/README.md +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/setup.cfg +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/__init__.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/__main__.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/architect.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/cli.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/compressor.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/config.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/credit_analyzer.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/credits.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/differ.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/doctor.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/executor.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/exporter.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/importer.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/integrations/__init__.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/integrations/base.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/integrations/warp.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/ledger.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/plugins.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/releaser.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/requirements.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/session.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/agents.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/contributing.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/license-MIT.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/security.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/workflow.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/editorconfig.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/go/go.mod.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/go/main.go.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/workflow.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/js/package.json.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/rust/main.rs.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/tools.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/updater.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/validator.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith.egg-info/SOURCES.txt +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith.egg-info/requires.txt +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/tests/test_auditor.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/tests/test_cli.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/tests/test_compressor.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/tests/test_importer.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/tests/test_integrations.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/tests/test_scaffolder.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/tests/test_smoke.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/tests/test_tools.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/tests/test_validator.py +0 -0
- {specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/tests/test_vcs.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specsmith"
|
|
7
|
-
version = "0.2.2.
|
|
7
|
+
version = "0.2.2.dev49"
|
|
8
8
|
description = "Forge governed project scaffolds from the Agentic AI Development Workflow Specification."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "MIT"}
|
|
@@ -79,11 +79,15 @@ def check_governance_files(root: Path) -> list[AuditResult]:
|
|
|
79
79
|
|
|
80
80
|
for f in REQUIRED_FILES:
|
|
81
81
|
path = root / f
|
|
82
|
+
found = path.exists()
|
|
83
|
+
# LEDGER.md: also check docs/LEDGER.md (some imported projects place it there)
|
|
84
|
+
if not found and f == "LEDGER.md":
|
|
85
|
+
found = (root / "docs" / "LEDGER.md").exists()
|
|
82
86
|
results.append(
|
|
83
87
|
AuditResult(
|
|
84
88
|
name=f"file-exists:{f}",
|
|
85
|
-
passed=
|
|
86
|
-
message=f"Required file {f} {'exists' if
|
|
89
|
+
passed=found,
|
|
90
|
+
message=f"Required file {f} {'exists' if found else 'MISSING'}",
|
|
87
91
|
)
|
|
88
92
|
)
|
|
89
93
|
|
|
@@ -232,16 +236,20 @@ def check_ledger_health(root: Path) -> list[AuditResult]:
|
|
|
232
236
|
"""Check ledger quality and staleness."""
|
|
233
237
|
results: list[AuditResult] = []
|
|
234
238
|
ledger_path = root / "LEDGER.md"
|
|
235
|
-
|
|
236
239
|
if not ledger_path.exists():
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
240
|
+
# Also check docs/LEDGER.md (some imported projects place it there)
|
|
241
|
+
alt = root / "docs" / "LEDGER.md"
|
|
242
|
+
if alt.exists():
|
|
243
|
+
ledger_path = alt
|
|
244
|
+
else:
|
|
245
|
+
results.append(
|
|
246
|
+
AuditResult(
|
|
247
|
+
name="ledger-exists",
|
|
248
|
+
passed=False,
|
|
249
|
+
message="LEDGER.md not found",
|
|
250
|
+
)
|
|
242
251
|
)
|
|
243
|
-
|
|
244
|
-
return results
|
|
252
|
+
return results
|
|
245
253
|
|
|
246
254
|
text = ledger_path.read_text(encoding="utf-8")
|
|
247
255
|
lines = text.splitlines()
|
|
@@ -246,6 +246,41 @@ def _sync_full(
|
|
|
246
246
|
out.write_text(tmpl.render(**ctx), encoding="utf-8")
|
|
247
247
|
synced.append(f"{output_rel} (created)")
|
|
248
248
|
|
|
249
|
+
# 6. Essential docs — create stubs only if truly missing (check alternate paths)
|
|
250
|
+
has_ledger = (root / "LEDGER.md").exists() or (root / "docs" / "LEDGER.md").exists()
|
|
251
|
+
if not has_ledger:
|
|
252
|
+
(root / "LEDGER.md").write_text("# Ledger\n\nNo entries yet.\n", encoding="utf-8")
|
|
253
|
+
synced.append("LEDGER.md (created)")
|
|
254
|
+
|
|
255
|
+
has_arch = (root / "docs" / "ARCHITECTURE.md").exists()
|
|
256
|
+
if not has_arch and (root / "docs").is_dir():
|
|
257
|
+
# Check subdirectories (e.g. docs/architecture/CPSC-RE-ARCHITECTURE.md)
|
|
258
|
+
has_arch = bool(
|
|
259
|
+
list((root / "docs").glob("**/architecture*"))
|
|
260
|
+
+ list((root / "docs").glob("**/ARCHITECTURE*"))
|
|
261
|
+
)
|
|
262
|
+
if not has_arch:
|
|
263
|
+
try:
|
|
264
|
+
from specsmith.architect import generate_architecture
|
|
265
|
+
|
|
266
|
+
generate_architecture(root)
|
|
267
|
+
synced.append("docs/ARCHITECTURE.md (generated from scan)")
|
|
268
|
+
except Exception: # noqa: BLE001
|
|
269
|
+
arch_path = root / "docs" / "ARCHITECTURE.md"
|
|
270
|
+
arch_path.parent.mkdir(parents=True, exist_ok=True)
|
|
271
|
+
arch_path.write_text(
|
|
272
|
+
f"# Architecture \u2014 {config.name}\n\n[Run `specsmith architect` to populate]\n",
|
|
273
|
+
encoding="utf-8",
|
|
274
|
+
)
|
|
275
|
+
synced.append("docs/ARCHITECTURE.md (stub created)")
|
|
276
|
+
specsmith_dir = root / ".specsmith"
|
|
277
|
+
credit_budget = specsmith_dir / "credit-budget.json"
|
|
278
|
+
if not credit_budget.exists():
|
|
279
|
+
from specsmith.credits import CreditBudget, save_budget
|
|
280
|
+
|
|
281
|
+
save_budget(root, CreditBudget())
|
|
282
|
+
synced.append(".specsmith/credit-budget.json (created)")
|
|
283
|
+
|
|
249
284
|
return synced
|
|
250
285
|
|
|
251
286
|
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/bug_report.md.j2
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/contributing.md.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/license-MIT.j2
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/security.md.j2
RENAMED
|
File without changes
|
{specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/architecture.md.j2
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/readthedocs.yaml.j2
RENAMED
|
File without changes
|
{specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/requirements.md.j2
RENAMED
|
File without changes
|
{specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/test-spec.md.j2
RENAMED
|
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
|
{specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/roles.md.j2
RENAMED
|
File without changes
|
{specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/rules.md.j2
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/workflow.md.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/python/pyproject.toml.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/scripts/setup.cmd.j2
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.2.2.dev47 → specsmith-0.2.2.dev49}/src/specsmith/templates/workflows/release.yml.j2
RENAMED
|
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
|