specsmith 0.18.0.dev691__tar.gz → 0.18.0.dev692__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.18.0.dev691/src/specsmith.egg-info → specsmith-0.18.0.dev692}/PKG-INFO +1 -1
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/pyproject.toml +1 -1
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/releaser.py +44 -9
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692/src/specsmith.egg-info}/PKG-INFO +1 -1
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith.egg-info/SOURCES.txt +1 -0
- specsmith-0.18.0.dev692/tests/test_releaser.py +91 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/LICENSE +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/README.md +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/setup.cfg +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/epistemic/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/epistemic/belief.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/epistemic/certainty.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/epistemic/failure_graph.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/epistemic/py.typed +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/epistemic/recovery.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/epistemic/session.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/epistemic/stress_tester.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/epistemic/trace.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/__main__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/broker.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/chat_runner.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/cleanup.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/context_seed.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/core.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/dispatch/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/dispatch/_status.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/dispatch/dag.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/dispatch/events.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/dispatch/result.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/endpoints.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/events.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/execution_profiles.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/fallback.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/hf_leaderboard.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/hf_sync.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/indexer.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/llm_client.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/mcp.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/memory.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/model_intelligence.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/model_profiles.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/model_router.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/orchestrator.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/permissions.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/profiles.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/provider_registry.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/repl.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/router.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/rules.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/runner.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/safety.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/spawner.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/suggester.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/teams.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/token_pricing.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/tools.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/verifier.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/voice.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/approvals.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/architect.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/auditor.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/auth.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/block_export.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/channel.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/ci_manager.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/cli.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/commands/intelligence.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/commands/issues_policy.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/commands/reporting.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/compliance/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/compliance/_compat.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/compliance/checker.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/compliance/evidence.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/compliance/regulations.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/compliance/reporter.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/compressor.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/config.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/console_utils.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/context_orchestrator.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/context_window.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/credit_analyzer.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/credits.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/dashboard.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/datasources/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/datasources/base.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/datasources/citations.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/datasources/fpd.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/datasources/odp.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/datasources/patentsview.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/datasources/pfw.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/datasources/ppubs.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/datasources/ptab.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/differ.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/doctor.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/drive.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/editor.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/efficiency.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/epistemic/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/epistemic/belief.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/epistemic/certainty.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/epistemic/failure_graph.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/epistemic/recovery.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/epistemic/stress_tester.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/esdb/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/esdb/_license.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/esdb/bridge.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/esdb/sqlite_store.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/esdb_sweep.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/esdb_writer.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/eval/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/eval/builtins.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/eval/runner.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/executor.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/exporter.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/governance_logic.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/governance_store.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/governance_yaml.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/governed_pr.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/app.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/main_window.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/session_tab.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/theme.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/widgets/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/widgets/chat_view.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/widgets/input_bar.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/widgets/provider_bar.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/widgets/token_meter.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/widgets/tool_panel.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/widgets/update_checker.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/worker.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/history_search.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/importer.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/instinct.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/integrations/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/integrations/agent_skill.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/integrations/base.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/integrations/codity.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/issue_reporter.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/languages.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/ledger.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/local_model.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/mcp_generator.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/mcp_server.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m002_agents_slim.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m003_compliance_init.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m006_session_governance.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m007_yaml_first.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m008_esdb_full_coverage.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m009_esdb_first.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m010_post_esdb_cleanup.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/runner.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/ollama_cmds.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/patent.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/paths.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/phase.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/plugins.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/policy.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/profiles.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/project_metrics.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/quality_report.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/rate_limits.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/recover.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/requirements.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/requirements_parser.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/retrieval.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/risk.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/safe_write.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/serve.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/session.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/session_init.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/session_store.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/ai_agents.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/cloud.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/corporate.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/cross_platform.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/data_engineering.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/devops.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/docs.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/embedded.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/governance.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/hardware.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/mobile.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/platform_engineering.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/productivity.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/software_engineering.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/specsmith_skills.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/ssh.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills/web_backend.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/skills_builder.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/sync.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/agents.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/community/contributing.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/community/license-MIT.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/community/security.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/editorconfig.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/go/go.mod.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/go/main.go.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/js/package.json.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/rust/main.rs.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/tool_installer.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/toolrules.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/tools.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/trace.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/transcripts.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/updater.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/upgrader.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/validator.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/wi_store.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/wireframes.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/workspace.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith.egg-info/requires.txt +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_CMD_001.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_agent_profiles.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_agent_run_feedback.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_agent_runner_ready.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_ai_client.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_ai_intelligence.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_architect_interview.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_architect_v2.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_architecture.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_auditor.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_benchmark_harness.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_channel.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_chat_diff_decision.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_chat_runner_openai_compat.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_chat_stdin_protocol.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_cleanup_cmd.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_cli.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_cli_regressions.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_cli_workflows_history_drive.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_compliance.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_compliance_governance.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_compressor.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_deprecation_registry.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_dispatch.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_dual_write.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_e2e_nexus.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_efficiency.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_endpoints_cli.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_endpoints_store.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_epistemic.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_esdb_backend_switch.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_esdb_enforcement.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_esdb_integration.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_esdb_license.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_esdb_sqlite.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_esdb_status_integrity.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_esdb_status_output.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_esdb_sweep.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_esdb_verify_chain_cli.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_esdb_writer.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_fallback_chain.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_golden_path.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_importer.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_init_modes.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_integrations.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_integrations_codity.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_intelligence.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_issue_policy_features.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_issue_reporter.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_issues_263_264.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_local_model.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_markdown_deprecation.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_mcp_client.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_mcp_server.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_migration_direction.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_model_router.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_new_modules.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_nexus.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_parallel_agents.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_permissions.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_phase1_4_new.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_phase34_completion.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_project_metrics.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_quality_report.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_rate_limits.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_repl.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_repl_extended.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_reporting_commands.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_req_248_262.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_req_358_359.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_resume_command.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_scaffolder.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_schema_migrations.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_skill_marketplace.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_skills_mcp.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_smoke.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_sqlite_parity.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_suggester.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_token_cost.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_tools.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_trace_vault_esdb.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_typing_guardrails.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_validator.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_vcs.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_warp_parity.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_warp_parity_followup.py +0 -0
- {specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/tests/test_wi_lifecycle.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.18.0.
|
|
3
|
+
Version: 0.18.0.dev692
|
|
4
4
|
Summary: AEE governance toolkit for AI-assisted development — session preflight gates, multi-agent dispatch, requirements↔test traceability, ESDB persistence, MCP server, and skills for Warp, Cursor, Claude Code, Copilot, Windsurf, and Aider.
|
|
5
5
|
Author: Layer1Labs Silicon, Inc.
|
|
6
6
|
License-Expression: MIT
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specsmith"
|
|
7
|
-
version = "0.18.0.
|
|
7
|
+
version = "0.18.0.dev692"
|
|
8
8
|
description = "AEE governance toolkit for AI-assisted development — session preflight gates, multi-agent dispatch, requirements↔test traceability, ESDB persistence, MCP server, and skills for Warp, Cursor, Claude Code, Copilot, Windsurf, and Aider."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -71,22 +71,57 @@ def bump_version(root: Path, new_version: str) -> list[str]:
|
|
|
71
71
|
return updated
|
|
72
72
|
|
|
73
73
|
|
|
74
|
+
# Context tokens that mark a *legitimate* "--pre specsmith" reference rather
|
|
75
|
+
# than a stale stable-install instruction. The dev/pre-release channel is a
|
|
76
|
+
# supported feature (see channel.py and docs/site/releasing.md), so docs that
|
|
77
|
+
# describe it -- and explicit prohibitions ("NEVER run pip install --pre
|
|
78
|
+
# specsmith") -- must not be flagged. Only a reference that recommends
|
|
79
|
+
# installing the *stable* package with the pre-release flag is stale.
|
|
80
|
+
_PRE_OK_CONTEXT: tuple[str, ...] = ("dev", "pre-release", "prerelease", "never", "badge")
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def _has_stale_pre_flag(content: str) -> bool:
|
|
84
|
+
"""Return True if *content* has a stale ``--pre specsmith`` install hint.
|
|
85
|
+
|
|
86
|
+
The scan is line-aware and tracks the nearest Markdown heading so a
|
|
87
|
+
legitimate ``--pre specsmith`` reference inside a dev/pre-release section or
|
|
88
|
+
a prohibition line is ignored. An occurrence is only treated as stale when
|
|
89
|
+
neither its line nor the enclosing section carries a :data:`_PRE_OK_CONTEXT`
|
|
90
|
+
token.
|
|
91
|
+
"""
|
|
92
|
+
current_heading = ""
|
|
93
|
+
for line in content.splitlines():
|
|
94
|
+
stripped = line.lstrip()
|
|
95
|
+
if stripped.startswith("#"):
|
|
96
|
+
current_heading = stripped
|
|
97
|
+
if "--pre specsmith" not in line:
|
|
98
|
+
continue
|
|
99
|
+
context = f"{line} {current_heading}".lower()
|
|
100
|
+
if any(token in context for token in _PRE_OK_CONTEXT):
|
|
101
|
+
continue
|
|
102
|
+
return True
|
|
103
|
+
return False
|
|
104
|
+
|
|
105
|
+
|
|
74
106
|
def scan_stale_refs(root: Path, current_version: str) -> list[str]:
|
|
75
|
-
"""Scan docs for stale version references.
|
|
107
|
+
"""Scan docs for stale version references.
|
|
108
|
+
|
|
109
|
+
The ``--pre specsmith`` check is context-aware (see
|
|
110
|
+
:func:`_has_stale_pre_flag`) so the supported dev/pre-release channel docs
|
|
111
|
+
and prohibitions do not produce false positives; only stale *stable*-install
|
|
112
|
+
hints are reported.
|
|
113
|
+
"""
|
|
76
114
|
issues: list[str] = []
|
|
77
115
|
scan_dirs = [root / "docs" / "site", root]
|
|
78
|
-
scan_patterns = [
|
|
79
|
-
(r"--pre specsmith", "stale --pre flag"),
|
|
80
|
-
(r"0\.1\.0a\d+", "alpha version reference"),
|
|
81
|
-
]
|
|
82
116
|
|
|
83
117
|
for scan_dir in scan_dirs:
|
|
84
118
|
for md_file in scan_dir.glob("*.md"):
|
|
85
119
|
content = md_file.read_text(encoding="utf-8")
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
120
|
+
rel = md_file.relative_to(root)
|
|
121
|
+
if _has_stale_pre_flag(content):
|
|
122
|
+
issues.append(f"{rel}: stale --pre flag")
|
|
123
|
+
if re.search(r"0\.1\.0a\d+", content):
|
|
124
|
+
issues.append(f"{rel}: alpha version reference")
|
|
90
125
|
|
|
91
126
|
# Check classifier
|
|
92
127
|
pyproject = root / "pyproject.toml"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.18.0.
|
|
3
|
+
Version: 0.18.0.dev692
|
|
4
4
|
Summary: AEE governance toolkit for AI-assisted development — session preflight gates, multi-agent dispatch, requirements↔test traceability, ESDB persistence, MCP server, and skills for Warp, Cursor, Claude Code, Copilot, Windsurf, and Aider.
|
|
5
5
|
Author: Layer1Labs Silicon, Inc.
|
|
6
6
|
License-Expression: MIT
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2026 Layer1Labs Silicon, Inc. All rights reserved.
|
|
3
|
+
"""Tests for the release-tooling stale-reference scanner (REQ-050).
|
|
4
|
+
|
|
5
|
+
These cover the context-aware ``--pre specsmith`` check so the supported
|
|
6
|
+
dev/pre-release channel docs and explicit prohibitions are not reported as
|
|
7
|
+
stale, while genuine stable-install hints still are.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
from specsmith.releaser import _has_stale_pre_flag, scan_stale_refs
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _write(path: Path, text: str) -> None:
|
|
16
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
17
|
+
path.write_text(text, encoding="utf-8")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_dev_channel_pre_reference_not_flagged(tmp_path: Path) -> None:
|
|
21
|
+
"""A dev-docs note mapping dev docs to the pre-release install is legitimate."""
|
|
22
|
+
_write(
|
|
23
|
+
tmp_path / "docs" / "site" / "index.md",
|
|
24
|
+
"# Docs\n\n**Dev (latest):** matches `pip install --pre specsmith`\n",
|
|
25
|
+
)
|
|
26
|
+
assert scan_stale_refs(tmp_path, "0.18.0") == []
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def test_dev_release_section_pre_reference_not_flagged(tmp_path: Path) -> None:
|
|
30
|
+
"""An install hint under a 'Dev Releases' heading is legitimate dev-channel docs."""
|
|
31
|
+
_write(
|
|
32
|
+
tmp_path / "docs" / "site" / "releasing.md",
|
|
33
|
+
"## Dev Releases (develop branch)\n\nInstall: `pip install --pre specsmith`\n",
|
|
34
|
+
)
|
|
35
|
+
assert scan_stale_refs(tmp_path, "0.18.0") == []
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def test_prohibition_pre_reference_not_flagged(tmp_path: Path) -> None:
|
|
39
|
+
"""A prohibition must not be read as a stale install hint."""
|
|
40
|
+
_write(
|
|
41
|
+
tmp_path / "AGENTS.md",
|
|
42
|
+
"## Install policy\n\n- NEVER run `pip install --pre specsmith` in any environment.\n",
|
|
43
|
+
)
|
|
44
|
+
assert scan_stale_refs(tmp_path, "0.18.0") == []
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def test_stale_stable_install_hint_is_flagged(tmp_path: Path) -> None:
|
|
48
|
+
"""Recommending --pre for a normal install under a neutral heading is stale."""
|
|
49
|
+
_write(
|
|
50
|
+
tmp_path / "docs" / "site" / "getting-started.md",
|
|
51
|
+
"## Quick Start\n\nInstall specsmith: `pip install --pre specsmith`\n",
|
|
52
|
+
)
|
|
53
|
+
rel = Path("docs") / "site" / "getting-started.md"
|
|
54
|
+
assert scan_stale_refs(tmp_path, "0.18.0") == [f"{rel}: stale --pre flag"]
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def test_alpha_version_reference_flagged(tmp_path: Path) -> None:
|
|
58
|
+
"""The narrow 0.1.0aN alpha pattern is still reported."""
|
|
59
|
+
_write(tmp_path / "README.md", "# x\n\nsee 0.1.0a3 builds\n")
|
|
60
|
+
assert scan_stale_refs(tmp_path, "0.18.0") == ["README.md: alpha version reference"]
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def test_alpha_classifier_flagged(tmp_path: Path) -> None:
|
|
64
|
+
"""A '3 - Alpha' classifier in pyproject.toml is still reported."""
|
|
65
|
+
(tmp_path / "pyproject.toml").write_text(
|
|
66
|
+
'[project]\nclassifiers = ["Development Status :: 3 - Alpha"]\n',
|
|
67
|
+
encoding="utf-8",
|
|
68
|
+
)
|
|
69
|
+
assert "pyproject.toml: classifier still says Alpha" in scan_stale_refs(tmp_path, "0.18.0")
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def test_clean_docs_no_issues(tmp_path: Path) -> None:
|
|
73
|
+
"""Stable install instructions and a non-alpha classifier produce no issues."""
|
|
74
|
+
_write(tmp_path / "docs" / "site" / "index.md", "# Docs\n\n`pip install specsmith`\n")
|
|
75
|
+
(tmp_path / "pyproject.toml").write_text(
|
|
76
|
+
'[project]\nclassifiers = ["Development Status :: 5 - Production/Stable"]\n',
|
|
77
|
+
encoding="utf-8",
|
|
78
|
+
)
|
|
79
|
+
assert scan_stale_refs(tmp_path, "0.18.0") == []
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def test_has_stale_pre_flag_unit() -> None:
|
|
83
|
+
"""Direct checks of the line+heading-aware helper."""
|
|
84
|
+
# Neutral install hint with no qualifying context -> stale.
|
|
85
|
+
assert _has_stale_pre_flag("Install: `pip install --pre specsmith`") is True
|
|
86
|
+
# Heading context marks the section as dev -> legitimate.
|
|
87
|
+
assert _has_stale_pre_flag("## Dev Releases\nrun `pip install --pre specsmith`") is False
|
|
88
|
+
# Prohibition -> legitimate.
|
|
89
|
+
assert _has_stale_pre_flag("NEVER `pip install --pre specsmith`") is False
|
|
90
|
+
# No pre-release flag at all.
|
|
91
|
+
assert _has_stale_pre_flag("`pip install specsmith`") is False
|
|
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.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/dispatch/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/dispatch/dispatcher.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/execution_profiles.py
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.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/model_intelligence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/agent/provider_registry.py
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
|
|
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.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/datasources/patentsview.py
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
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/epistemic/failure_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/epistemic/stress_tester.py
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
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/widgets/provider_bar.py
RENAMED
|
File without changes
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/widgets/token_meter.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/gui/widgets/update_checker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/integrations/agent_skill.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/integrations/claude_code.py
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
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m001_governance_yaml.py
RENAMED
|
File without changes
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m002_agents_slim.py
RENAMED
|
File without changes
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m003_compliance_init.py
RENAMED
|
File without changes
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m004_ledger_esdb.py
RENAMED
|
File without changes
|
{specsmith-0.18.0.dev691 → specsmith-0.18.0.dev692}/src/specsmith/migrations/m005_agent_run_tool.py
RENAMED
|
File without changes
|
|
File without changes
|