specsmith 0.16.1.dev605__tar.gz → 0.16.2__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.16.1.dev605/src/specsmith.egg-info → specsmith-0.16.2}/PKG-INFO +4 -2
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/README.md +3 -1
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/pyproject.toml +1 -1
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/__init__.py +1 -1
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/auditor.py +13 -3
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/sync.py +5 -2
- {specsmith-0.16.1.dev605 → specsmith-0.16.2/src/specsmith.egg-info}/PKG-INFO +4 -2
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_auditor.py +49 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/LICENSE +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/setup.cfg +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/epistemic/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/epistemic/belief.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/epistemic/certainty.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/epistemic/failure_graph.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/epistemic/py.typed +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/epistemic/recovery.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/epistemic/session.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/epistemic/stress_tester.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/epistemic/trace.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/__main__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/broker.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/chat_runner.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/cleanup.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/context_seed.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/core.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/dispatch/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/dispatch/_status.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/dispatch/dag.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/dispatch/events.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/dispatch/result.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/endpoints.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/events.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/execution_profiles.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/fallback.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/hf_leaderboard.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/hf_sync.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/indexer.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/llm_client.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/mcp.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/memory.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/model_intelligence.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/model_profiles.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/orchestrator.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/permissions.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/profiles.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/provider_registry.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/repl.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/router.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/rules.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/runner.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/safety.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/spawner.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/suggester.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/teams.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/tools.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/verifier.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/agent/voice.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/approvals.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/architect.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/auth.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/block_export.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/channel.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/ci_manager.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/cli.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/commands/intelligence.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/commands/issues_policy.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/commands/reporting.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/compliance/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/compliance/_compat.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/compliance/checker.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/compliance/evidence.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/compliance/regulations.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/compliance/reporter.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/compressor.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/config.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/console_utils.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/context_orchestrator.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/context_window.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/credit_analyzer.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/credits.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/dashboard.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/datasources/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/datasources/base.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/datasources/citations.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/datasources/fpd.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/datasources/odp.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/datasources/patentsview.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/datasources/pfw.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/datasources/ppubs.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/datasources/ptab.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/differ.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/doctor.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/drive.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/editor.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/epistemic/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/epistemic/belief.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/epistemic/certainty.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/epistemic/failure_graph.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/epistemic/recovery.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/epistemic/stress_tester.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/esdb/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/esdb/_license.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/esdb/bridge.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/esdb/sqlite_store.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/eval/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/eval/builtins.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/eval/runner.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/executor.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/exporter.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/governance_logic.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/governance_store.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/governance_yaml.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/governed_pr.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/gui/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/gui/app.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/gui/main_window.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/gui/session_tab.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/gui/theme.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/gui/widgets/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/gui/widgets/chat_view.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/gui/widgets/input_bar.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/gui/widgets/provider_bar.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/gui/widgets/token_meter.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/gui/widgets/tool_panel.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/gui/widgets/update_checker.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/gui/worker.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/history_search.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/importer.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/instinct.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/integrations/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/integrations/agent_skill.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/integrations/base.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/integrations/codity.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/issue_reporter.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/languages.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/ledger.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/mcp_generator.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/mcp_server.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/migrations/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/migrations/m002_agents_slim.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/migrations/m003_compliance_init.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/migrations/m006_session_governance.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/migrations/runner.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/ollama_cmds.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/patent.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/paths.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/phase.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/plugins.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/policy.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/profiles.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/rate_limits.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/recover.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/releaser.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/requirements.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/requirements_parser.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/retrieval.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/risk.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/safe_write.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/serve.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/session.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/session_init.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/session_store.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/ai_agents.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/cloud.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/corporate.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/cross_platform.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/data_engineering.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/devops.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/docs.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/embedded.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/governance.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/hardware.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/mobile.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/platform_engineering.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/productivity.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/software_engineering.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/specsmith_skills.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/ssh.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills/web_backend.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/skills_builder.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/agents.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/community/contributing.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/community/license-MIT.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/community/security.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/editorconfig.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/go/go.mod.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/go/main.go.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/js/package.json.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/rust/main.rs.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/tool_installer.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/toolrules.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/tools.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/trace.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/transcripts.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/updater.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/upgrader.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/validator.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/wi_store.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/wireframes.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/workspace.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith.egg-info/SOURCES.txt +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith.egg-info/requires.txt +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_CMD_001.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_agent_profiles.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_agent_run_feedback.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_agent_runner_ready.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_ai_client.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_ai_intelligence.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_architecture.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_channel.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_chat_diff_decision.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_chat_runner_openai_compat.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_chat_stdin_protocol.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_cli.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_cli_regressions.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_cli_workflows_history_drive.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_compliance.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_compliance_governance.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_compressor.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_dispatch.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_e2e_nexus.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_endpoints_cli.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_endpoints_store.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_epistemic.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_esdb_enforcement.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_esdb_license.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_esdb_sqlite.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_esdb_verify_chain_cli.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_fallback_chain.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_golden_path.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_importer.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_init_modes.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_integrations.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_integrations_codity.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_intelligence.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_issue_policy_features.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_issue_reporter.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_mcp_client.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_mcp_server.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_new_modules.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_nexus.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_permissions.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_phase1_4_new.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_phase34_completion.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_rate_limits.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_reporting_commands.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_req_248_262.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_req_358_359.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_scaffolder.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_schema_migrations.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_skill_marketplace.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_skills_mcp.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_smoke.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_suggester.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_tools.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_typing_guardrails.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_validator.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_vcs.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_warp_parity.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_warp_parity_followup.py +0 -0
- {specsmith-0.16.1.dev605 → specsmith-0.16.2}/tests/test_wi_lifecycle.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.2
|
|
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
|
|
@@ -126,6 +126,8 @@ We ran a [multi-condition benchmark](https://specsmith.readthedocs.io/en/stable/
|
|
|
126
126
|
|
|
127
127
|
See the [full benchmark report](https://specsmith.readthedocs.io/en/stable/efficiency-benchmark/) and [model comparison (gpt-4o-mini vs gpt-5.5)](https://specsmith.readthedocs.io/en/stable/model-comparison/).
|
|
128
128
|
|
|
129
|
+
**v0.16.2** — bugfix release: resolved all 6 open CodeQL alerts (Protocol stub `py/ineffectual-statement`, dead-init `py/multiple-definition`; benchmark demo project excluded from scan); fixed `audit industrial_artifacts` false positive on Windows when `canopen_eds` entries are plain strings instead of dicts (closes #257).
|
|
130
|
+
|
|
129
131
|
**v0.16.1** — governance efficiency benchmark suite (12 conditions, 3 tasks, gpt-4o-mini + gpt-5.5 comparison); cross-model comparison report; real OpenAI agent harness; CI matrix job. Also includes the v0.16.0 stabilisation milestone: 20+ CLI commands, ESDB SQLite backend, chronomemory 0.2.0, Python 3.10–3.13 × Ubuntu + Windows green, 1 607 tests passing.
|
|
130
132
|
|
|
131
133
|
specsmith ships a full compliance and auditability layer aligned to the EU AI Act (2024/1689) and the NIST AI Risk Management Framework 1.0. Every agent action is cryptographically sealed, every AI-generated output is disclosed, context windows are GPU-aware, and compliance settings are configurable per-session and per-project.
|
|
@@ -475,7 +477,7 @@ Every preflight response includes a mandatory `ai_disclosure` block:
|
|
|
475
477
|
"governance_gated": true,
|
|
476
478
|
"provider": "ollama",
|
|
477
479
|
"model": "qwen2.5:14b",
|
|
478
|
-
"spec_version": "0.16.
|
|
480
|
+
"spec_version": "0.16.2"
|
|
479
481
|
}
|
|
480
482
|
}
|
|
481
483
|
```
|
|
@@ -48,6 +48,8 @@ We ran a [multi-condition benchmark](https://specsmith.readthedocs.io/en/stable/
|
|
|
48
48
|
|
|
49
49
|
See the [full benchmark report](https://specsmith.readthedocs.io/en/stable/efficiency-benchmark/) and [model comparison (gpt-4o-mini vs gpt-5.5)](https://specsmith.readthedocs.io/en/stable/model-comparison/).
|
|
50
50
|
|
|
51
|
+
**v0.16.2** — bugfix release: resolved all 6 open CodeQL alerts (Protocol stub `py/ineffectual-statement`, dead-init `py/multiple-definition`; benchmark demo project excluded from scan); fixed `audit industrial_artifacts` false positive on Windows when `canopen_eds` entries are plain strings instead of dicts (closes #257).
|
|
52
|
+
|
|
51
53
|
**v0.16.1** — governance efficiency benchmark suite (12 conditions, 3 tasks, gpt-4o-mini + gpt-5.5 comparison); cross-model comparison report; real OpenAI agent harness; CI matrix job. Also includes the v0.16.0 stabilisation milestone: 20+ CLI commands, ESDB SQLite backend, chronomemory 0.2.0, Python 3.10–3.13 × Ubuntu + Windows green, 1 607 tests passing.
|
|
52
54
|
|
|
53
55
|
specsmith ships a full compliance and auditability layer aligned to the EU AI Act (2024/1689) and the NIST AI Risk Management Framework 1.0. Every agent action is cryptographically sealed, every AI-generated output is disclosed, context windows are GPU-aware, and compliance settings are configurable per-session and per-project.
|
|
@@ -397,7 +399,7 @@ Every preflight response includes a mandatory `ai_disclosure` block:
|
|
|
397
399
|
"governance_gated": true,
|
|
398
400
|
"provider": "ollama",
|
|
399
401
|
"model": "qwen2.5:14b",
|
|
400
|
-
"spec_version": "0.16.
|
|
402
|
+
"spec_version": "0.16.2"
|
|
401
403
|
}
|
|
402
404
|
}
|
|
403
405
|
```
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specsmith"
|
|
7
|
-
version = "0.16.
|
|
7
|
+
version = "0.16.2"
|
|
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"
|
|
@@ -8,4 +8,4 @@ from importlib.metadata import version as _pkg_version
|
|
|
8
8
|
try:
|
|
9
9
|
__version__: str = _pkg_version("specsmith")
|
|
10
10
|
except PackageNotFoundError: # running from source without install
|
|
11
|
-
__version__ = "0.16.
|
|
11
|
+
__version__ = "0.16.2" # fallback: keep in sync with pyproject.toml
|
|
@@ -1132,9 +1132,19 @@ def check_industrial_artifacts(root: Path) -> list[AuditResult]:
|
|
|
1132
1132
|
declared_eds = declared.get("canopen_eds", []) or []
|
|
1133
1133
|
# Normalise declared paths to forward slashes and lowercase so they match
|
|
1134
1134
|
# on Windows where YAML uses '/' but Path.relative_to() returns '\\' (#251).
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1135
|
+
# canopen_eds entries may be plain strings ("path/to/file.eds") or dicts
|
|
1136
|
+
# ({path: "path/to/file.eds", device: "..."}). Handle both to avoid false
|
|
1137
|
+
# positives when users use the simpler string form (#257).
|
|
1138
|
+
declared_paths: set[str] = set()
|
|
1139
|
+
for e in declared_eds:
|
|
1140
|
+
if isinstance(e, dict):
|
|
1141
|
+
_p = e.get("path", "")
|
|
1142
|
+
elif isinstance(e, str):
|
|
1143
|
+
_p = e
|
|
1144
|
+
else:
|
|
1145
|
+
_p = str(e)
|
|
1146
|
+
if _p:
|
|
1147
|
+
declared_paths.add(_p.replace("\\", "/").lower())
|
|
1138
1148
|
|
|
1139
1149
|
# Scan for .eds and .xdd files — respect scan_exclude_dirs and
|
|
1140
1150
|
# scan_exclude_patterns from scaffold.yml (#175).
|
|
@@ -602,8 +602,11 @@ def auto_migrate_if_needed(root: Path) -> dict[str, int]:
|
|
|
602
602
|
return {}
|
|
603
603
|
|
|
604
604
|
class _MigratableStore(Protocol):
|
|
605
|
-
def record_count(self) -> int:
|
|
606
|
-
|
|
605
|
+
def record_count(self) -> int:
|
|
606
|
+
pass # noqa: E704
|
|
607
|
+
|
|
608
|
+
def migrate_from_json(self, specsmith_dir: Path) -> dict[str, int] | Any:
|
|
609
|
+
pass # noqa: E704
|
|
607
610
|
|
|
608
611
|
try:
|
|
609
612
|
with open_default_store(root, warn=False) as store:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.2
|
|
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
|
|
@@ -126,6 +126,8 @@ We ran a [multi-condition benchmark](https://specsmith.readthedocs.io/en/stable/
|
|
|
126
126
|
|
|
127
127
|
See the [full benchmark report](https://specsmith.readthedocs.io/en/stable/efficiency-benchmark/) and [model comparison (gpt-4o-mini vs gpt-5.5)](https://specsmith.readthedocs.io/en/stable/model-comparison/).
|
|
128
128
|
|
|
129
|
+
**v0.16.2** — bugfix release: resolved all 6 open CodeQL alerts (Protocol stub `py/ineffectual-statement`, dead-init `py/multiple-definition`; benchmark demo project excluded from scan); fixed `audit industrial_artifacts` false positive on Windows when `canopen_eds` entries are plain strings instead of dicts (closes #257).
|
|
130
|
+
|
|
129
131
|
**v0.16.1** — governance efficiency benchmark suite (12 conditions, 3 tasks, gpt-4o-mini + gpt-5.5 comparison); cross-model comparison report; real OpenAI agent harness; CI matrix job. Also includes the v0.16.0 stabilisation milestone: 20+ CLI commands, ESDB SQLite backend, chronomemory 0.2.0, Python 3.10–3.13 × Ubuntu + Windows green, 1 607 tests passing.
|
|
130
132
|
|
|
131
133
|
specsmith ships a full compliance and auditability layer aligned to the EU AI Act (2024/1689) and the NIST AI Risk Management Framework 1.0. Every agent action is cryptographically sealed, every AI-generated output is disclosed, context windows are GPU-aware, and compliance settings are configurable per-session and per-project.
|
|
@@ -475,7 +477,7 @@ Every preflight response includes a mandatory `ai_disclosure` block:
|
|
|
475
477
|
"governance_gated": true,
|
|
476
478
|
"provider": "ollama",
|
|
477
479
|
"model": "qwen2.5:14b",
|
|
478
|
-
"spec_version": "0.16.
|
|
480
|
+
"spec_version": "0.16.2"
|
|
479
481
|
}
|
|
480
482
|
}
|
|
481
483
|
```
|
|
@@ -90,6 +90,10 @@ class TestAuditDetectsIssues:
|
|
|
90
90
|
|
|
91
91
|
|
|
92
92
|
def test_industrial_artifacts_normalizes_windows_declared_paths(tmp_path: Path) -> None:
|
|
93
|
+
# Simulate a Windows user who put a single backslash path in scaffold.yml.
|
|
94
|
+
# YAML plain scalars treat backslash as literal, so the parsed value is
|
|
95
|
+
# "hardware\device.eds" (one backslash) which must normalise to the posix
|
|
96
|
+
# found path "hardware/device.eds".
|
|
93
97
|
(tmp_path / "scaffold.yml").write_text(
|
|
94
98
|
"name: test\n"
|
|
95
99
|
"type: cli-python\n"
|
|
@@ -106,6 +110,51 @@ def test_industrial_artifacts_normalizes_windows_declared_paths(tmp_path: Path)
|
|
|
106
110
|
assert any(r.name == "industrial-artifacts" and r.passed for r in results)
|
|
107
111
|
|
|
108
112
|
|
|
113
|
+
def test_industrial_artifacts_plain_string_entries_no_false_positive(tmp_path: Path) -> None:
|
|
114
|
+
"""Regression test for #257: plain string canopen_eds entries must not be
|
|
115
|
+
treated as undeclared even though they pass isinstance(e, dict) == False."""
|
|
116
|
+
(tmp_path / "scaffold.yml").write_text(
|
|
117
|
+
"name: test\n"
|
|
118
|
+
"type: cli-python\n"
|
|
119
|
+
"industrial_artifacts:\n"
|
|
120
|
+
" canopen_eds:\n"
|
|
121
|
+
" - application/canopen/device.eds\n"
|
|
122
|
+
" - application/canopen/device.xdd\n",
|
|
123
|
+
encoding="utf-8",
|
|
124
|
+
)
|
|
125
|
+
can_dir = tmp_path / "application" / "canopen"
|
|
126
|
+
can_dir.mkdir(parents=True)
|
|
127
|
+
(can_dir / "device.eds").write_text("EDS", encoding="utf-8")
|
|
128
|
+
(can_dir / "device.xdd").write_text("XDD", encoding="utf-8")
|
|
129
|
+
|
|
130
|
+
results = check_industrial_artifacts(tmp_path)
|
|
131
|
+
assert results
|
|
132
|
+
assert any(r.name == "industrial-artifacts" and r.passed for r in results), (
|
|
133
|
+
f"Expected pass but got: {[r.message for r in results]}"
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def test_industrial_artifacts_mixed_string_and_dict_entries(tmp_path: Path) -> None:
|
|
138
|
+
"""Mixed plain-string and dict entries should both be recognised (#257)."""
|
|
139
|
+
(tmp_path / "scaffold.yml").write_text(
|
|
140
|
+
"name: test\n"
|
|
141
|
+
"type: cli-python\n"
|
|
142
|
+
"industrial_artifacts:\n"
|
|
143
|
+
" canopen_eds:\n"
|
|
144
|
+
" - application/canopen/a.eds\n"
|
|
145
|
+
" - path: application/canopen/b.eds\n"
|
|
146
|
+
" device: MyDevice\n",
|
|
147
|
+
encoding="utf-8",
|
|
148
|
+
)
|
|
149
|
+
can_dir = tmp_path / "application" / "canopen"
|
|
150
|
+
can_dir.mkdir(parents=True)
|
|
151
|
+
(can_dir / "a.eds").write_text("EDS", encoding="utf-8")
|
|
152
|
+
(can_dir / "b.eds").write_text("EDS", encoding="utf-8")
|
|
153
|
+
|
|
154
|
+
results = check_industrial_artifacts(tmp_path)
|
|
155
|
+
assert any(r.name == "industrial-artifacts" and r.passed for r in results)
|
|
156
|
+
|
|
157
|
+
|
|
109
158
|
# ---------------------------------------------------------------------------
|
|
110
159
|
# Regression: issue #183 — letter-suffix TEST IDs in req trace
|
|
111
160
|
# ---------------------------------------------------------------------------
|
|
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
|
|
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
|
|
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
|
|
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.16.1.dev605 → specsmith-0.16.2}/src/specsmith/migrations/m001_governance_yaml.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/migrations/m003_compliance_init.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/migrations/m005_agent_run_tool.py
RENAMED
|
File without changes
|
{specsmith-0.16.1.dev605 → specsmith-0.16.2}/src/specsmith/migrations/m006_session_governance.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
|