specsmith 0.2.2.dev46__tar.gz → 0.2.2.dev48__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.dev46/src/specsmith.egg-info → specsmith-0.2.2.dev48}/PKG-INFO +1 -1
  2. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/pyproject.toml +1 -1
  3. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/upgrader.py +70 -0
  4. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48/src/specsmith.egg-info}/PKG-INFO +1 -1
  5. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/LICENSE +0 -0
  6. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/README.md +0 -0
  7. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/setup.cfg +0 -0
  8. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/__init__.py +0 -0
  9. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/__main__.py +0 -0
  10. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/architect.py +0 -0
  11. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/auditor.py +0 -0
  12. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/cli.py +0 -0
  13. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/commands/__init__.py +0 -0
  14. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/compressor.py +0 -0
  15. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/config.py +0 -0
  16. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/credit_analyzer.py +0 -0
  17. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/credits.py +0 -0
  18. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/differ.py +0 -0
  19. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/doctor.py +0 -0
  20. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/executor.py +0 -0
  21. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/exporter.py +0 -0
  22. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/importer.py +0 -0
  23. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/integrations/__init__.py +0 -0
  24. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/integrations/aider.py +0 -0
  25. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/integrations/base.py +0 -0
  26. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/integrations/claude_code.py +0 -0
  27. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/integrations/copilot.py +0 -0
  28. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/integrations/cursor.py +0 -0
  29. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/integrations/gemini.py +0 -0
  30. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/integrations/warp.py +0 -0
  31. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/integrations/windsurf.py +0 -0
  32. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/ledger.py +0 -0
  33. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/plugins.py +0 -0
  34. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/releaser.py +0 -0
  35. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/requirements.py +0 -0
  36. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/scaffolder.py +0 -0
  37. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/session.py +0 -0
  38. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/agents.md.j2 +0 -0
  39. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
  40. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
  41. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/community/contributing.md.j2 +0 -0
  42. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
  43. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
  44. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/community/license-MIT.j2 +0 -0
  45. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
  46. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/community/security.md.j2 +0 -0
  47. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  48. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
  49. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
  50. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  51. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  52. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/docs/workflow.md.j2 +0 -0
  53. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/editorconfig.j2 +0 -0
  54. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/gitattributes.j2 +0 -0
  55. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/gitignore.j2 +0 -0
  56. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/go/go.mod.j2 +0 -0
  57. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/go/main.go.j2 +0 -0
  58. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  59. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  60. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  61. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  62. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  63. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/governance/workflow.md.j2 +0 -0
  64. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/js/package.json.j2 +0 -0
  65. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/ledger.md.j2 +0 -0
  66. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/python/cli.py.j2 +0 -0
  67. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/python/init.py.j2 +0 -0
  68. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
  69. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/readme.md.j2 +0 -0
  70. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
  71. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/rust/main.rs.j2 +0 -0
  72. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  73. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  74. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  75. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  76. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
  77. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
  78. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
  79. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/tools.py +0 -0
  80. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/updater.py +0 -0
  81. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/validator.py +0 -0
  82. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/vcs/__init__.py +0 -0
  83. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/vcs/base.py +0 -0
  84. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/vcs/bitbucket.py +0 -0
  85. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/vcs/github.py +0 -0
  86. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/vcs/gitlab.py +0 -0
  87. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith/vcs_commands.py +0 -0
  88. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith.egg-info/SOURCES.txt +0 -0
  89. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith.egg-info/dependency_links.txt +0 -0
  90. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith.egg-info/entry_points.txt +0 -0
  91. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith.egg-info/requires.txt +0 -0
  92. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/src/specsmith.egg-info/top_level.txt +0 -0
  93. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/tests/test_auditor.py +0 -0
  94. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/tests/test_cli.py +0 -0
  95. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/tests/test_compressor.py +0 -0
  96. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/tests/test_importer.py +0 -0
  97. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/tests/test_integrations.py +0 -0
  98. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/tests/test_scaffolder.py +0 -0
  99. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/tests/test_smoke.py +0 -0
  100. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/tests/test_tools.py +0 -0
  101. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/tests/test_validator.py +0 -0
  102. {specsmith-0.2.2.dev46 → specsmith-0.2.2.dev48}/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.dev46
3
+ Version: 0.2.2.dev48
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.dev46"
7
+ version = "0.2.2.dev48"
8
8
  description = "Forge governed project scaffolds from the Agentic AI Development Workflow Specification."
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -246,6 +246,35 @@ 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():
251
+ (root / "LEDGER.md").write_text("# Ledger\n\nNo entries yet.\n", encoding="utf-8")
252
+ synced.append("LEDGER.md (created)")
253
+
254
+ if not (root / "docs" / "ARCHITECTURE.md").exists():
255
+ try:
256
+ from specsmith.architect import generate_architecture
257
+
258
+ generate_architecture(root)
259
+ synced.append("docs/ARCHITECTURE.md (generated from scan)")
260
+ except Exception: # noqa: BLE001
261
+ arch_path = root / "docs" / "ARCHITECTURE.md"
262
+ arch_path.parent.mkdir(parents=True, exist_ok=True)
263
+ arch_path.write_text(
264
+ f"# Architecture \u2014 {config.name}\n\n[Run `specsmith architect` to populate]\n",
265
+ encoding="utf-8",
266
+ )
267
+ synced.append("docs/ARCHITECTURE.md (stub created)")
268
+
269
+ # Initialize credit tracking if not present
270
+ specsmith_dir = root / ".specsmith"
271
+ credit_budget = specsmith_dir / "credit-budget.json"
272
+ if not credit_budget.exists():
273
+ from specsmith.credits import CreditBudget, save_budget
274
+
275
+ save_budget(root, CreditBudget())
276
+ synced.append(".specsmith/credit-budget.json (created)")
277
+
249
278
  return synced
250
279
 
251
280
 
@@ -255,9 +284,13 @@ def _migrate_legacy_filenames(root: Path, result: UpgradeResult) -> None:
255
284
  Handles both case-sensitive (Linux) and case-insensitive (Windows/macOS)
256
285
  filesystems. On case-insensitive FS, uses a two-step rename via a
257
286
  temporary name to avoid conflicts.
287
+
288
+ Also updates references in AGENTS.md so the hub links stay valid.
258
289
  """
259
290
  import shutil
260
291
 
292
+ renamed: list[tuple[str, str]] = []
293
+
261
294
  for old_rel, new_rel in _LEGACY_RENAMES:
262
295
  old_path = root / old_rel
263
296
  new_path = root / new_rel
@@ -276,4 +309,41 @@ def _migrate_legacy_filenames(root: Path, result: UpgradeResult) -> None:
276
309
  shutil.move(str(old_path), str(new_path))
277
310
  else:
278
311
  continue # Both exist as truly separate files — skip
312
+ renamed.append((old_rel, new_rel))
279
313
  result.updated_files.append(f"{old_rel} → {new_rel}")
314
+
315
+ # Update references in user-owned docs that point to renamed files
316
+ if renamed:
317
+ _update_references(root, renamed, result)
318
+
319
+
320
+ def _update_references(
321
+ root: Path,
322
+ renames: list[tuple[str, str]],
323
+ result: UpgradeResult,
324
+ ) -> None:
325
+ """Rewrite old paths to new paths in AGENTS.md and other hub files.
326
+
327
+ Only performs safe string replacement of exact path references.
328
+ """
329
+ docs_to_patch = [
330
+ "AGENTS.md",
331
+ "CLAUDE.md",
332
+ "GEMINI.md",
333
+ ".warp/skills/SKILL.md",
334
+ ".cursor/rules/governance.mdc",
335
+ ".windsurfrules",
336
+ ".aider.conf.yml",
337
+ ]
338
+
339
+ for doc_name in docs_to_patch:
340
+ doc_path = root / doc_name
341
+ if not doc_path.exists():
342
+ continue
343
+ content = doc_path.read_text(encoding="utf-8")
344
+ original = content
345
+ for old_rel, new_rel in renames:
346
+ content = content.replace(old_rel, new_rel)
347
+ if content != original:
348
+ doc_path.write_text(content, encoding="utf-8")
349
+ result.updated_files.append(f"{doc_name} (references updated)")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.2.2.dev46
3
+ Version: 0.2.2.dev48
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