specsmith 0.2.2.dev48__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.
Files changed (102) hide show
  1. {specsmith-0.2.2.dev48/src/specsmith.egg-info → specsmith-0.2.2.dev49}/PKG-INFO +1 -1
  2. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/pyproject.toml +1 -1
  3. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/auditor.py +18 -10
  4. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/upgrader.py +11 -5
  5. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49/src/specsmith.egg-info}/PKG-INFO +1 -1
  6. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/LICENSE +0 -0
  7. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/README.md +0 -0
  8. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/setup.cfg +0 -0
  9. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/__init__.py +0 -0
  10. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/__main__.py +0 -0
  11. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/architect.py +0 -0
  12. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/cli.py +0 -0
  13. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/commands/__init__.py +0 -0
  14. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/compressor.py +0 -0
  15. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/config.py +0 -0
  16. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/credit_analyzer.py +0 -0
  17. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/credits.py +0 -0
  18. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/differ.py +0 -0
  19. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/doctor.py +0 -0
  20. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/executor.py +0 -0
  21. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/exporter.py +0 -0
  22. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/importer.py +0 -0
  23. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/integrations/__init__.py +0 -0
  24. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/integrations/aider.py +0 -0
  25. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/integrations/base.py +0 -0
  26. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/integrations/claude_code.py +0 -0
  27. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/integrations/copilot.py +0 -0
  28. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/integrations/cursor.py +0 -0
  29. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/integrations/gemini.py +0 -0
  30. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/integrations/warp.py +0 -0
  31. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/integrations/windsurf.py +0 -0
  32. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/ledger.py +0 -0
  33. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/plugins.py +0 -0
  34. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/releaser.py +0 -0
  35. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/requirements.py +0 -0
  36. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/scaffolder.py +0 -0
  37. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/session.py +0 -0
  38. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/agents.md.j2 +0 -0
  39. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
  40. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
  41. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/contributing.md.j2 +0 -0
  42. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
  43. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
  44. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/license-MIT.j2 +0 -0
  45. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
  46. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/community/security.md.j2 +0 -0
  47. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  48. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
  49. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
  50. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  51. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  52. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/docs/workflow.md.j2 +0 -0
  53. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/editorconfig.j2 +0 -0
  54. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/gitattributes.j2 +0 -0
  55. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/gitignore.j2 +0 -0
  56. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/go/go.mod.j2 +0 -0
  57. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/go/main.go.j2 +0 -0
  58. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  59. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  60. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  61. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  62. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  63. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/governance/workflow.md.j2 +0 -0
  64. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/js/package.json.j2 +0 -0
  65. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/ledger.md.j2 +0 -0
  66. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/python/cli.py.j2 +0 -0
  67. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/python/init.py.j2 +0 -0
  68. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
  69. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/readme.md.j2 +0 -0
  70. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
  71. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/rust/main.rs.j2 +0 -0
  72. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  73. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  74. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  75. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  76. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
  77. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
  78. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
  79. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/tools.py +0 -0
  80. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/updater.py +0 -0
  81. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/validator.py +0 -0
  82. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/vcs/__init__.py +0 -0
  83. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/vcs/base.py +0 -0
  84. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/vcs/bitbucket.py +0 -0
  85. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/vcs/github.py +0 -0
  86. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/vcs/gitlab.py +0 -0
  87. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith/vcs_commands.py +0 -0
  88. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith.egg-info/SOURCES.txt +0 -0
  89. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith.egg-info/dependency_links.txt +0 -0
  90. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith.egg-info/entry_points.txt +0 -0
  91. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith.egg-info/requires.txt +0 -0
  92. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/src/specsmith.egg-info/top_level.txt +0 -0
  93. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/tests/test_auditor.py +0 -0
  94. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/tests/test_cli.py +0 -0
  95. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/tests/test_compressor.py +0 -0
  96. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/tests/test_importer.py +0 -0
  97. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/tests/test_integrations.py +0 -0
  98. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/tests/test_scaffolder.py +0 -0
  99. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/tests/test_smoke.py +0 -0
  100. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/tests/test_tools.py +0 -0
  101. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/tests/test_validator.py +0 -0
  102. {specsmith-0.2.2.dev48 → specsmith-0.2.2.dev49}/tests/test_vcs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.2.2.dev48
3
+ Version: 0.2.2.dev49
4
4
  Summary: Forge governed project scaffolds from the Agentic AI Development Workflow Specification.
5
5
  Author: BitConcepts
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "specsmith"
7
- version = "0.2.2.dev48"
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=path.exists(),
86
- message=f"Required file {f} {'exists' if path.exists() else 'MISSING'}",
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
- results.append(
238
- AuditResult(
239
- name="ledger-exists",
240
- passed=False,
241
- message="LEDGER.md not found",
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,12 +246,20 @@ 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 if missing (these are needed for audit to pass)
250
- if not (root / "LEDGER.md").exists():
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:
251
252
  (root / "LEDGER.md").write_text("# Ledger\n\nNo entries yet.\n", encoding="utf-8")
252
253
  synced.append("LEDGER.md (created)")
253
254
 
254
- if not (root / "docs" / "ARCHITECTURE.md").exists():
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:
255
263
  try:
256
264
  from specsmith.architect import generate_architecture
257
265
 
@@ -265,8 +273,6 @@ def _sync_full(
265
273
  encoding="utf-8",
266
274
  )
267
275
  synced.append("docs/ARCHITECTURE.md (stub created)")
268
-
269
- # Initialize credit tracking if not present
270
276
  specsmith_dir = root / ".specsmith"
271
277
  credit_budget = specsmith_dir / "credit-budget.json"
272
278
  if not credit_budget.exists():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.2.2.dev48
3
+ Version: 0.2.2.dev49
4
4
  Summary: Forge governed project scaffolds from the Agentic AI Development Workflow Specification.
5
5
  Author: BitConcepts
6
6
  License: MIT
File without changes