specfact-cli 0.37.2__tar.gz → 0.37.4__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.
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/PKG-INFO +1 -1
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/pyproject.toml +1 -1
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/__init__.py +1 -1
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/__init__.py +1 -1
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/analyze/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/auth/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/backlog/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/backlog/src/commands.py +48 -8
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/contract/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/drift/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/enforce/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/generate/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/import_cmd/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/init/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/migrate/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/module_registry/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/module_registry/src/commands.py +3 -2
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/patch_mode/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/plan/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/project/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/repro/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/sdd/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/spec/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/sync/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/upgrade/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/validate/module-package.yaml +3 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/marketplace_client.py +1 -1
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/module_discovery.py +30 -11
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/module_installer.py +22 -8
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/module_lifecycle.py +21 -18
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/module_packages.py +8 -3
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/.gitignore +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/LICENSE +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/README.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/keys/README.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/keys/module-signing-public.pem +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/mappings/node-async.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/mappings/python-async.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/mappings/speckit-default.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/prompts/shared/cli-enforcement.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/prompts/specfact.01-import.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/prompts/specfact.02-plan.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/prompts/specfact.03-review.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/prompts/specfact.04-sdd.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/prompts/specfact.05-enforce.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/prompts/specfact.06-sync.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/prompts/specfact.07-contracts.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/prompts/specfact.backlog-add.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/prompts/specfact.backlog-daily.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/prompts/specfact.backlog-refine.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/prompts/specfact.compare.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/prompts/specfact.sync-backlog.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/prompts/specfact.validate.md +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/schemas/deviation.schema.json +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/schemas/plan.schema.json +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/schemas/protocol.schema.json +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/backlog/defaults/defect_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/backlog/defaults/enabler_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/backlog/defaults/spike_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/backlog/defaults/user_story_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/backlog/field_mappings/ado_agile.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/backlog/field_mappings/ado_default.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/backlog/field_mappings/ado_kanban.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/backlog/field_mappings/ado_safe.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/backlog/field_mappings/ado_scrum.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/backlog/frameworks/safe/safe_feature_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/backlog/frameworks/scrum/user_story_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/backlog/personas/developer/developer_task_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/backlog/personas/product-owner/user_story_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/backlog/providers/ado/work_item_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/github-action.yml.j2 +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/persona/architect.md.j2 +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/persona/developer.md.j2 +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/persona/product-owner.md.j2 +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/plan.bundle.yaml.j2 +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/policies/kanban.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/policies/mixed.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/policies/safe.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/policies/scrum.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/pr-template.md.j2 +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/protocol.yaml.j2 +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/resources/templates/telemetry.yaml.example +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/__main__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/adapters/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/adapters/ado.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/adapters/backlog_base.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/adapters/base.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/adapters/github.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/adapters/openspec.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/adapters/openspec_parser.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/adapters/registry.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/adapters/speckit.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/agents/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/agents/analyze_agent.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/agents/base.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/agents/plan_agent.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/agents/registry.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/agents/sync_agent.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/analyzers/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/analyzers/ambiguity_scanner.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/analyzers/code_analyzer.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/analyzers/constitution_evidence_extractor.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/analyzers/contract_extractor.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/analyzers/control_flow_analyzer.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/analyzers/graph_analyzer.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/analyzers/relationship_mapper.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/analyzers/requirement_extractor.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/analyzers/test_pattern_extractor.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/adapters/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/adapters/base.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/adapters/local_yaml_adapter.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/ai_refiner.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/converter.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/filters.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/format_detector.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/formats/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/formats/base.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/formats/markdown_format.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/formats/structured_format.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/mappers/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/mappers/ado_mapper.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/mappers/base.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/mappers/github_mapper.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/mappers/template_config.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/backlog/template_detector.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/cli.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/analyze.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/auth.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/backlog_commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/contract_cmd.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/drift.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/enforce.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/generate.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/import_cmd.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/init.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/migrate.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/plan.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/project_cmd.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/repro.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/sdd.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/spec.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/sync.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/update.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/commands/validate.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/common/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/common/logger_setup.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/common/logging_utils.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/common/text_utils.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/common/utils.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/comparators/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/comparators/plan_comparator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/contracts/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/contracts/crosshair_props.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/contracts/module_interface.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/enrichers/constitution_enricher.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/enrichers/plan_enricher.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/generators/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/generators/contract_generator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/generators/openapi_extractor.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/generators/persona_exporter.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/generators/plan_generator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/generators/protocol_generator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/generators/report_generator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/generators/task_generator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/generators/test_to_openapi.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/generators/workflow_generator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/importers/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/importers/speckit_converter.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/importers/speckit_scanner.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/integrations/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/integrations/specmatic.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/merge/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/merge/resolver.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/migrations/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/migrations/plan_migrator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/backlog_item.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/bridge.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/capabilities.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/change.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/contract.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/deviation.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/dor_config.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/enforcement.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/module_package.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/persona_template.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/plan.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/project.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/protocol.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/quality.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/sdd.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/source_tracking.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/task.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/models/validation.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modes/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modes/detector.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modes/router.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/analyze/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/analyze/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/analyze/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/auth/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/auth/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/auth/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/backlog/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/backlog/src/adapters/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/backlog/src/adapters/ado.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/backlog/src/adapters/base.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/backlog/src/adapters/github.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/backlog/src/adapters/jira.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/backlog/src/adapters/linear.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/backlog/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/contract/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/contract/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/contract/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/drift/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/drift/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/drift/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/enforce/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/enforce/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/enforce/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/generate/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/generate/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/generate/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/import_cmd/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/import_cmd/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/import_cmd/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/init/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/init/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/init/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/migrate/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/migrate/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/migrate/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/module_io_shim.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/module_registry/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/module_registry/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/patch_mode/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/patch_mode/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/patch_mode/src/patch_mode/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/patch_mode/src/patch_mode/commands/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/patch_mode/src/patch_mode/commands/apply.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/patch_mode/src/patch_mode/pipeline/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/patch_mode/src/patch_mode/pipeline/applier.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/patch_mode/src/patch_mode/pipeline/generator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/patch_mode/src/patch_mode/pipeline/idempotency.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/plan/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/plan/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/plan/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/config/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/config/policy_config.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/config/templates.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/engine/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/engine/suggester.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/engine/validator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/main.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/models/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/models/policy_result.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/policies/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/policies/kanban.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/policies/safe.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/policies/scrum.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/registry/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/policy_engine/src/policy_engine/registry/policy_registry.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/project/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/project/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/project/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/repro/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/repro/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/repro/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/sdd/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/sdd/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/sdd/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/spec/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/spec/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/spec/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/sync/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/sync/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/sync/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/upgrade/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/upgrade/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/upgrade/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/validate/src/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/validate/src/app.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/validate/src/commands.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/parsers/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/parsers/persona_importer.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/bootstrap.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/bridge_registry.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/crypto_validator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/extension_registry.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/help_cache.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/metadata.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/module_security.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/module_state.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/registry/registry.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/resources/semgrep/async.yml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/resources/semgrep/code-quality.yml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/resources/semgrep/feature-detection.yml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/runtime.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/sync/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/sync/bridge_probe.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/sync/bridge_sync.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/sync/bridge_watch.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/sync/change_detector.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/sync/code_to_spec.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/sync/drift_detector.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/sync/repository_sync.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/sync/spec_to_code.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/sync/spec_to_tests.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/sync/watcher.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/sync/watcher_enhanced.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/telemetry.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/templates/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/templates/bridge_templates.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/templates/defaults/defect_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/templates/defaults/enabler_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/templates/defaults/spike_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/templates/defaults/user_story_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/templates/frameworks/scrum/user_story_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/templates/personas/product-owner/user_story_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/templates/providers/ado/work_item_v1.yaml +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/templates/registry.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/templates/specification_templates.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/acceptance_criteria.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/auth_tokens.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/bundle_converters.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/bundle_loader.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/code_change_detector.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/console.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/content_sanitizer.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/context_detection.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/enrichment_context.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/enrichment_parser.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/env_manager.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/feature_keys.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/git.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/github_annotations.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/ide_setup.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/incremental_check.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/metadata.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/optional_deps.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/performance.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/persona_ownership.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/progress.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/progressive_disclosure.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/prompts.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/sdd_discovery.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/source_scanner.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/startup_checks.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/structure.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/structured_io.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/suggestions.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/terminal.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/utils/yaml_utils.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/agile_validation.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/change_proposal_integration.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/cli_first_validator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/contract_validator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/fsm.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/repro_checker.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/schema.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/contract_populator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/crosshair_runner.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/crosshair_summary.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/dependency_installer.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/framework_detector.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/frameworks/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/frameworks/base.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/frameworks/django.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/frameworks/drf.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/frameworks/fastapi.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/frameworks/flask.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/harness_generator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/models.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/orchestrator.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/specmatic_runner.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/validators/sidecar/unannotated_detector.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/versioning/__init__.py +0 -0
- {specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/versioning/analyzer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specfact-cli
|
|
3
|
-
Version: 0.37.
|
|
3
|
+
Version: 0.37.4
|
|
4
4
|
Summary: The swiss knife CLI for agile DevOps teams. Keep backlog, specs, tests, and code in sync with validation and contract enforcement for new projects and long-lived codebases.
|
|
5
5
|
Project-URL: Homepage, https://github.com/nold-ai/specfact-cli
|
|
6
6
|
Project-URL: Repository, https://github.com/nold-ai/specfact-cli.git
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specfact-cli"
|
|
7
|
-
version = "0.37.
|
|
7
|
+
version = "0.37.4"
|
|
8
8
|
description = "The swiss knife CLI for agile DevOps teams. Keep backlog, specs, tests, and code in sync with validation and contract enforcement for new projects and long-lived codebases."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/analyze/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: analyze
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- analyze
|
|
5
5
|
command_help:
|
|
@@ -15,5 +15,5 @@ publisher:
|
|
|
15
15
|
description: Analyze codebase quality, contracts, and architecture signals.
|
|
16
16
|
license: Apache-2.0
|
|
17
17
|
integrity:
|
|
18
|
-
checksum: sha256:
|
|
19
|
-
signature:
|
|
18
|
+
checksum: sha256:49d908578ab91e142cff50a27d9b15fff3a30cf790597eecbea1910e38a754b6
|
|
19
|
+
signature: CqsLSUUx3DYa0a8F56/OW4QFt6TDhx1OueAwI0tYC892S7RlvaF5JEwKcUXujKD2IQRoOKUQ7d0Gdqs8Kwh2Cw==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/auth/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: auth
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- auth
|
|
5
5
|
command_help:
|
|
@@ -15,5 +15,5 @@ publisher:
|
|
|
15
15
|
description: Authenticate SpecFact with supported DevOps providers.
|
|
16
16
|
license: Apache-2.0
|
|
17
17
|
integrity:
|
|
18
|
-
checksum: sha256:
|
|
19
|
-
signature:
|
|
18
|
+
checksum: sha256:561fc420c18f9702b1cbb396cb1c0443909646ad8857f508d532d648fe812a9d
|
|
19
|
+
signature: IUFyErHdSMMRtdGCUjDZhkU6hujDv1J5IHQXKYelK4RGqeekYUFer13IeG7S1xZZ5ckmvsgF1592UsTCSV2BAA==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/backlog/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: backlog
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.2
|
|
3
3
|
commands:
|
|
4
4
|
- backlog
|
|
5
5
|
command_help:
|
|
@@ -28,5 +28,5 @@ publisher:
|
|
|
28
28
|
description: Manage backlog ceremonies, refinement, and dependency insights.
|
|
29
29
|
license: Apache-2.0
|
|
30
30
|
integrity:
|
|
31
|
-
checksum: sha256:
|
|
32
|
-
signature:
|
|
31
|
+
checksum: sha256:ef3febe90c62fa24b3da6b6b2f8a7b605c5b544db01aac10e5cfacc807bcca26
|
|
32
|
+
signature: 2b/UNbFlgRQiwJ+LrEQKyoYUi8lxeLGc4hrcTUdCinU9yXa1h6GvYpRkAkzRW8kxNNNsetphuf7hLZ3II3bNDQ==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/backlog/src/commands.py
RENAMED
|
@@ -4176,6 +4176,7 @@ def map_fields(
|
|
|
4176
4176
|
"}"
|
|
4177
4177
|
)
|
|
4178
4178
|
repo_issue_types: dict[str, str] = {}
|
|
4179
|
+
repo_issue_types_error: str | None = None
|
|
4179
4180
|
try:
|
|
4180
4181
|
issue_types_data = _github_graphql(issue_types_query, {"owner": owner, "repo": repo_name})
|
|
4181
4182
|
repository = (
|
|
@@ -4191,13 +4192,25 @@ def map_fields(
|
|
|
4191
4192
|
type_id = str(node.get("id") or "").strip()
|
|
4192
4193
|
if type_name and type_id:
|
|
4193
4194
|
repo_issue_types[type_name] = type_id
|
|
4194
|
-
except (requests.RequestException, ValueError):
|
|
4195
|
-
|
|
4195
|
+
except (requests.RequestException, ValueError) as error:
|
|
4196
|
+
repo_issue_types_error = str(error)
|
|
4196
4197
|
repo_issue_types = {}
|
|
4197
4198
|
|
|
4198
4199
|
if repo_issue_types:
|
|
4199
4200
|
discovered = ", ".join(sorted(repo_issue_types.keys()))
|
|
4200
4201
|
console.print(f"[cyan]Discovered repository issue types:[/cyan] {discovered}")
|
|
4202
|
+
else:
|
|
4203
|
+
console.print(
|
|
4204
|
+
"[red]Error:[/red] Could not discover repository issue types for this GitHub repository. "
|
|
4205
|
+
"Automatic issue Type updates require `github_issue_types.type_ids`."
|
|
4206
|
+
)
|
|
4207
|
+
if repo_issue_types_error:
|
|
4208
|
+
console.print(f"[dim]Details:[/dim] {repo_issue_types_error}")
|
|
4209
|
+
console.print(
|
|
4210
|
+
"[yellow]Hint:[/yellow] Re-authenticate with required scopes and rerun mapping: "
|
|
4211
|
+
"`specfact auth github --scopes repo,read:project,project`."
|
|
4212
|
+
)
|
|
4213
|
+
raise typer.Exit(1)
|
|
4201
4214
|
|
|
4202
4215
|
cli_option_map: dict[str, str] = {}
|
|
4203
4216
|
for entry in github_type_option:
|
|
@@ -4211,6 +4224,12 @@ def map_fields(
|
|
|
4211
4224
|
if key and value:
|
|
4212
4225
|
cli_option_map[key] = value
|
|
4213
4226
|
|
|
4227
|
+
issue_type_id_map = {
|
|
4228
|
+
issue_type: repo_issue_types.get(issue_type, "")
|
|
4229
|
+
for issue_type in ["epic", "feature", "story", "task", "bug"]
|
|
4230
|
+
if repo_issue_types.get(issue_type)
|
|
4231
|
+
}
|
|
4232
|
+
|
|
4214
4233
|
# Fast-path for fully specified non-interactive invocations.
|
|
4215
4234
|
if project_ref and (github_type_field_id or "").strip() and cli_option_map:
|
|
4216
4235
|
github_custom_mapping_file = _persist_github_custom_mapping_file(repo_issue_types)
|
|
@@ -4234,6 +4253,33 @@ def map_fields(
|
|
|
4234
4253
|
console.print(f"[green]Custom mapping:[/green] {github_custom_mapping_file}")
|
|
4235
4254
|
return
|
|
4236
4255
|
|
|
4256
|
+
if not project_ref:
|
|
4257
|
+
if cli_option_map or (github_type_field_id or "").strip():
|
|
4258
|
+
console.print(
|
|
4259
|
+
"[yellow]⚠[/yellow] GitHub ProjectV2 Type options/field-id were provided, but no ProjectV2 "
|
|
4260
|
+
"number/ID was set. Skipping ProjectV2 mapping."
|
|
4261
|
+
)
|
|
4262
|
+
github_custom_mapping_file = _persist_github_custom_mapping_file(repo_issue_types)
|
|
4263
|
+
initial_settings_update: dict[str, Any] = {
|
|
4264
|
+
"github_issue_types": {"type_ids": issue_type_id_map},
|
|
4265
|
+
# Clear stale ProjectV2 mapping when user explicitly skips ProjectV2 input.
|
|
4266
|
+
"provider_fields": {"github_project_v2": None},
|
|
4267
|
+
"field_mapping_file": ".specfact/templates/backlog/field_mappings/github_custom.yaml",
|
|
4268
|
+
}
|
|
4269
|
+
config_path = _upsert_backlog_provider_settings(
|
|
4270
|
+
"github",
|
|
4271
|
+
initial_settings_update,
|
|
4272
|
+
project_id=project_context,
|
|
4273
|
+
adapter="github",
|
|
4274
|
+
)
|
|
4275
|
+
console.print(f"[green]✓[/green] GitHub mapping saved to {config_path}")
|
|
4276
|
+
console.print(f"[green]Custom mapping:[/green] {github_custom_mapping_file}")
|
|
4277
|
+
console.print(
|
|
4278
|
+
"[dim]ProjectV2 Type field mapping skipped; repository issue types were captured "
|
|
4279
|
+
"(ProjectV2 is optional).[/dim]"
|
|
4280
|
+
)
|
|
4281
|
+
return
|
|
4282
|
+
|
|
4237
4283
|
project_id = ""
|
|
4238
4284
|
project_title = ""
|
|
4239
4285
|
fields_nodes: list[dict[str, Any]] = []
|
|
@@ -4432,12 +4478,6 @@ def map_fields(
|
|
|
4432
4478
|
if option_name and option_name in option_name_to_id:
|
|
4433
4479
|
option_map[issue_type] = option_name_to_id[option_name]
|
|
4434
4480
|
|
|
4435
|
-
issue_type_id_map = {
|
|
4436
|
-
issue_type: repo_issue_types.get(issue_type, "")
|
|
4437
|
-
for issue_type in ["epic", "feature", "story", "task", "bug"]
|
|
4438
|
-
if repo_issue_types.get(issue_type)
|
|
4439
|
-
}
|
|
4440
|
-
|
|
4441
4481
|
settings_update: dict[str, Any] = {}
|
|
4442
4482
|
if issue_type_id_map:
|
|
4443
4483
|
settings_update["github_issue_types"] = {"type_ids": issue_type_id_map}
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/contract/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: contract
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- contract
|
|
5
5
|
command_help:
|
|
@@ -15,5 +15,5 @@ publisher:
|
|
|
15
15
|
description: Validate and manage API contracts for project bundles.
|
|
16
16
|
license: Apache-2.0
|
|
17
17
|
integrity:
|
|
18
|
-
checksum: sha256:
|
|
19
|
-
signature:
|
|
18
|
+
checksum: sha256:ea7526559317a65684db0ecc8eaccd06a60dcb94361c95389e7a35cfd31279d3
|
|
19
|
+
signature: iJC2irFaSiWa9fdFjJYGpHlsyWKRNpoFmQSB+PY0ORS6y+gVHAPNGJL7iP5TFYB3I83szCWfmF+2hLeTyc1XDg==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/drift/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: drift
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- drift
|
|
5
5
|
command_help:
|
|
@@ -15,5 +15,5 @@ publisher:
|
|
|
15
15
|
description: Detect and report drift between code, plans, and specs.
|
|
16
16
|
license: Apache-2.0
|
|
17
17
|
integrity:
|
|
18
|
-
checksum: sha256:
|
|
19
|
-
signature: +
|
|
18
|
+
checksum: sha256:0bf406486ada20fa82273f62a46567a63231be00bca1aa0da335405081d868ee
|
|
19
|
+
signature: 22k+r94pdCPh7lP4UYZfvlNRlTQaSasXwzDJWE33I1Pzeq1hPRnyXBylx9x7IvdDqACLTnCIz5j6R8XKCu1WAQ==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/enforce/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: enforce
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- enforce
|
|
5
5
|
command_help:
|
|
@@ -16,5 +16,5 @@ publisher:
|
|
|
16
16
|
description: Apply governance policies and quality gates to bundles.
|
|
17
17
|
license: Apache-2.0
|
|
18
18
|
integrity:
|
|
19
|
-
checksum: sha256:
|
|
20
|
-
signature:
|
|
19
|
+
checksum: sha256:444896a5ac47c50cac848e649bb509893ba8c62b382100ccbe2b65660dca6587
|
|
20
|
+
signature: Htf9gy0P5UmGmrDky3oLyl4GgVQoVJ6514f31O1v1Butyns4o49CF6mVZMqbOBh68ToloPUxG96E/1GEzM3QDg==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/generate/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: generate
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- generate
|
|
5
5
|
command_help:
|
|
@@ -16,5 +16,5 @@ publisher:
|
|
|
16
16
|
description: Generate implementation artifacts from plans and SDD.
|
|
17
17
|
license: Apache-2.0
|
|
18
18
|
integrity:
|
|
19
|
-
checksum: sha256:
|
|
20
|
-
signature:
|
|
19
|
+
checksum: sha256:c1b01eea7f1de8e71fd61ac02caae27b10e133131683804356f01c9c6171a955
|
|
20
|
+
signature: dKokcDKA0v/xJ4SDWDvFEtCdVFScgyygdoJZlD7LgSQeucpi8csKLMW97XOaOUZCtNUsVm194EWBnIzLf70+CA==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/import_cmd/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: import_cmd
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- import
|
|
5
5
|
command_help:
|
|
@@ -15,5 +15,5 @@ publisher:
|
|
|
15
15
|
description: Import projects and requirements from code and external tools.
|
|
16
16
|
license: Apache-2.0
|
|
17
17
|
integrity:
|
|
18
|
-
checksum: sha256:
|
|
19
|
-
signature:
|
|
18
|
+
checksum: sha256:246f8402200e57947a50f61102ef8057dd75a6ad2768d359774600557daead8b
|
|
19
|
+
signature: sCgBiKEtN5r2br/6ZAYmII7XjjZ9Ru8WqqPfXXaE2shn0eQBiDxKKH/ATNBZphtYJbTfXEpQFZg3oVja4jITCg==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/init/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: init
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- init
|
|
5
5
|
command_help:
|
|
@@ -15,5 +15,5 @@ publisher:
|
|
|
15
15
|
description: Initialize SpecFact workspace and bootstrap local configuration.
|
|
16
16
|
license: Apache-2.0
|
|
17
17
|
integrity:
|
|
18
|
-
checksum: sha256:
|
|
19
|
-
signature:
|
|
18
|
+
checksum: sha256:ebd53092241acd0bf53db40a001529b98ee001244b04223cfe855d7fdcbc607d
|
|
19
|
+
signature: NrPV9fl6k7W47hi4hkbNhsS8EX0CfB8zlAFucesUwbMYHgGZl9TvfsBwObeHWh+R1eqskTUf+sxivl6lv/1mAg==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/migrate/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: migrate
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- migrate
|
|
5
5
|
command_help:
|
|
@@ -15,5 +15,5 @@ publisher:
|
|
|
15
15
|
description: Migrate project bundles across supported structure versions.
|
|
16
16
|
license: Apache-2.0
|
|
17
17
|
integrity:
|
|
18
|
-
checksum: sha256:
|
|
19
|
-
signature:
|
|
18
|
+
checksum: sha256:0173eddfed089e7979d608f44d7e3e5505567d0e32b722a56d87a59ea0a5699f
|
|
19
|
+
signature: Hoo1BBhAN24s8YpEPsWEyMPv6eL6apeBiX8VCALst5b/77ZpOCCcsSSGFUrNQMWD/L7pxDphTzKhGPP8W1t7DQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: module-registry
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.3
|
|
3
3
|
commands:
|
|
4
4
|
- module
|
|
5
5
|
command_help:
|
|
@@ -15,5 +15,5 @@ publisher:
|
|
|
15
15
|
description: 'Manage modules: search, list, show, install, and upgrade.'
|
|
16
16
|
license: Apache-2.0
|
|
17
17
|
integrity:
|
|
18
|
-
checksum: sha256:
|
|
19
|
-
signature:
|
|
18
|
+
checksum: sha256:92a3673edb39974791afcc357a1e931b6e4152d1ad7af0e4a4d722c29431b90d
|
|
19
|
+
signature: eynkV+88hx9PPGlOnB5rwWHkiEtgFe8wNIU+5I0C8PZR+WWoRIcTcvTe5TYYAyiHi6JmJZZLvrDsTIpe3K3VDQ==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/module_registry/src/commands.py
RENAMED
|
@@ -509,13 +509,14 @@ def list_modules(
|
|
|
509
509
|
),
|
|
510
510
|
) -> None:
|
|
511
511
|
"""List installed modules with trust labels and optional origin details."""
|
|
512
|
-
|
|
512
|
+
all_modules = get_modules_with_state()
|
|
513
|
+
modules = all_modules
|
|
513
514
|
if source:
|
|
514
515
|
modules = [m for m in modules if str(m.get("source", "")) == source]
|
|
515
516
|
render_modules_table(console, modules, show_origin=show_origin)
|
|
516
517
|
|
|
517
518
|
bundled = get_bundled_module_metadata()
|
|
518
|
-
installed_ids = {str(module.get("id", "")).strip() for module in
|
|
519
|
+
installed_ids = {str(module.get("id", "")).strip() for module in all_modules}
|
|
519
520
|
available = [meta for name, meta in bundled.items() if name not in installed_ids]
|
|
520
521
|
if not show_bundled_available:
|
|
521
522
|
if available:
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/patch_mode/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: patch-mode
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- patch
|
|
5
5
|
command_help:
|
|
@@ -16,5 +16,5 @@ publisher:
|
|
|
16
16
|
description: Prepare, review, and apply structured repository patches safely.
|
|
17
17
|
license: Apache-2.0
|
|
18
18
|
integrity:
|
|
19
|
-
checksum: sha256:
|
|
20
|
-
signature:
|
|
19
|
+
checksum: sha256:9f6ceb4ea1a9539cd900d63065bcd36b8681d56d58dfca6835687ba5c58d5272
|
|
20
|
+
signature: 2f8u+wSUKnC5KTIvHt/Qcor0r1J7Pv3FDhdts2OsIEHPCeXtIwoN2XU3CyRlpr+Zyg3+T++OO4Rv7akiWPK1Bw==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/plan/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: plan
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- plan
|
|
5
5
|
command_help:
|
|
@@ -16,5 +16,5 @@ publisher:
|
|
|
16
16
|
description: Create and manage implementation plans for project execution.
|
|
17
17
|
license: Apache-2.0
|
|
18
18
|
integrity:
|
|
19
|
-
checksum: sha256:
|
|
20
|
-
signature:
|
|
19
|
+
checksum: sha256:f7d992a44b0bcee0a6cc3cb4857dbe9c57a3bbe314398893f1337c8c5e4070b6
|
|
20
|
+
signature: MI5BELFxfgZNusPlP6lLKSEdRZR5MdjyOE+IsVutMJHWESmCoO9SmlzycZbHYKBdz9v2BI04kcXsy/AI4+fjDQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: policy-engine
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- policy
|
|
5
5
|
command_help:
|
|
@@ -19,8 +19,8 @@ publisher:
|
|
|
19
19
|
url: https://github.com/nold-ai/specfact-cli-modules
|
|
20
20
|
email: oss@nold.ai
|
|
21
21
|
integrity:
|
|
22
|
-
checksum: sha256:
|
|
23
|
-
signature:
|
|
22
|
+
checksum: sha256:45d56fe74e32db9713d42ea622143da1c9b4403c7b22d148ada1fda0060226cf
|
|
23
|
+
signature: q0kWPGTaqZTTnFglm8OuHqJyngGLtXnAYeKJp69R/gzzX6QIVZ11bo6mtByG4NKX9KmjXKxOI3JVXWCu3sDOAw==
|
|
24
24
|
dependencies: []
|
|
25
25
|
description: Run policy evaluations with recommendation and compliance outputs.
|
|
26
26
|
license: Apache-2.0
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/project/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: project
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- project
|
|
5
5
|
command_help:
|
|
@@ -15,5 +15,5 @@ publisher:
|
|
|
15
15
|
description: Manage project bundles, contexts, and lifecycle workflows.
|
|
16
16
|
license: Apache-2.0
|
|
17
17
|
integrity:
|
|
18
|
-
checksum: sha256:
|
|
19
|
-
signature:
|
|
18
|
+
checksum: sha256:bb6a1c0004d242fa6829975d307470f6f9b895690d4052ae6a9d7a64ec9c7a25
|
|
19
|
+
signature: HIX5WUIWEpjcIZ/lYD9bTk0HqmUXaJ68EZmiS3+IIjx3/GiQ0VcW+QtMxOpRZxYA/MnHZvIB5PdQGjOeahA/Bg==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/repro/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: repro
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- repro
|
|
5
5
|
command_help:
|
|
@@ -15,5 +15,5 @@ publisher:
|
|
|
15
15
|
description: Run reproducible validation and diagnostics workflows end-to-end.
|
|
16
16
|
license: Apache-2.0
|
|
17
17
|
integrity:
|
|
18
|
-
checksum: sha256:
|
|
19
|
-
signature:
|
|
18
|
+
checksum: sha256:b7082bc1c0ed330a20b97ce52baf93f9686854babe28d412063e05821f3fbc62
|
|
19
|
+
signature: pY7zG/pOURam2csn6HH92scnRY553QMhPnNPEkcfiau8L3pfIauaXtdgt8L27Cq3ARteT6hUK8xkUffQujYBDg==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/sdd/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: sdd
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- sdd
|
|
5
5
|
command_help:
|
|
@@ -15,5 +15,5 @@ publisher:
|
|
|
15
15
|
description: Create and validate Spec-Driven Development manifests and mappings.
|
|
16
16
|
license: Apache-2.0
|
|
17
17
|
integrity:
|
|
18
|
-
checksum: sha256:
|
|
19
|
-
signature:
|
|
18
|
+
checksum: sha256:1d5e11925f8e578dc3186baad6cf6e6beed9af2824d21967ae56440d65f36222
|
|
19
|
+
signature: rJtZAsUXpIeBkLx8Oe0LgMPKs4pSof52r0FhHAOCDaR/Y2559XAKOUcNYdBkyO1BwosCbZqvmEEf1gZzZKwLAQ==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/spec/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: spec
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- spec
|
|
5
5
|
command_help:
|
|
@@ -15,5 +15,5 @@ publisher:
|
|
|
15
15
|
description: Integrate and run API specification and contract checks.
|
|
16
16
|
license: Apache-2.0
|
|
17
17
|
integrity:
|
|
18
|
-
checksum: sha256:
|
|
19
|
-
signature:
|
|
18
|
+
checksum: sha256:f14970c58bed5647cfcdc76933f4c7af22c186ef89f74d63bb97df3a5e4a09c4
|
|
19
|
+
signature: /V0wm4tU6gKoXZ29AX9FiICdF0loq/N9OVvQyQ5ICtVarJFBQLUPeYZJup5/PJgIrhjZxDr6Ih+wLG6gZBtLAg==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/sync/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: sync
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- sync
|
|
5
5
|
command_help:
|
|
@@ -18,5 +18,5 @@ publisher:
|
|
|
18
18
|
description: Synchronize repository state with connected external systems.
|
|
19
19
|
license: Apache-2.0
|
|
20
20
|
integrity:
|
|
21
|
-
checksum: sha256:
|
|
22
|
-
signature:
|
|
21
|
+
checksum: sha256:05023a72241101dd19a9c402fcb4882e40a925d0958b95b4b13217032ad8e31b
|
|
22
|
+
signature: rovvEszsr1+/kq2yy9R1g01fjhlG38R2eIwg/aXZy789SKq9ttBkBqJ6d1U+ysXYzOUBqgc6WwcfCI1X2Il7Dg==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/upgrade/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: upgrade
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- upgrade
|
|
5
5
|
command_help:
|
|
@@ -15,5 +15,5 @@ publisher:
|
|
|
15
15
|
description: Check and apply SpecFact CLI version upgrades.
|
|
16
16
|
license: Apache-2.0
|
|
17
17
|
integrity:
|
|
18
|
-
checksum: sha256:
|
|
19
|
-
signature:
|
|
18
|
+
checksum: sha256:441c8d1d5bb5b57b809150e58911966cd1b2aec20ff88dba9985114a65a3aead
|
|
19
|
+
signature: mr1FGw1rrBbFEH812TGAxoykpSfP+VzyEMwW5Q5UGNzJgqXwXQxa5bOsVYHwTfToIttGGoFv1jDjJ4NE6b+EBg==
|
{specfact_cli-0.37.2 → specfact_cli-0.37.4}/src/specfact_cli/modules/validate/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: validate
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.1.0
|
|
3
3
|
commands:
|
|
4
4
|
- validate
|
|
5
5
|
command_help:
|
|
@@ -15,5 +15,5 @@ publisher:
|
|
|
15
15
|
description: Run schema, contract, and workflow validation suites.
|
|
16
16
|
license: Apache-2.0
|
|
17
17
|
integrity:
|
|
18
|
-
checksum: sha256:
|
|
19
|
-
signature: +
|
|
18
|
+
checksum: sha256:01252349bfc86e36138b2acb4e82e60bcaaa84b0f60dc1bfcf4ca554a02bad67
|
|
19
|
+
signature: rU1JJUw057QUVp6YaEEM0vcx+/hrciNsh2A3SlD4xhZwbPyzf9O+RvaAh99q/iAns9EzmsqMDW9IYafLXmEYDQ==
|
|
@@ -96,5 +96,5 @@ def download_module(
|
|
|
96
96
|
file_name = Path(parsed.path).name or f"{module_id.replace('/', '-')}.tar.gz"
|
|
97
97
|
target_path = target_dir / file_name
|
|
98
98
|
target_path.write_bytes(content)
|
|
99
|
-
logger.
|
|
99
|
+
logger.debug("Downloaded module '%s' to '%s'", module_id, target_path)
|
|
100
100
|
return target_path
|
|
@@ -10,11 +10,13 @@ from icontract import ensure
|
|
|
10
10
|
|
|
11
11
|
from specfact_cli.common import get_bridge_logger
|
|
12
12
|
from specfact_cli.models.module_package import ModulePackageMetadata
|
|
13
|
+
from specfact_cli.utils.prompts import print_warning
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
USER_MODULES_ROOT = Path.home() / ".specfact" / "modules"
|
|
16
17
|
MARKETPLACE_MODULES_ROOT = Path.home() / ".specfact" / "marketplace-modules"
|
|
17
18
|
CUSTOM_MODULES_ROOT = Path.home() / ".specfact" / "custom-modules"
|
|
19
|
+
_SHADOW_HINT_KEYS: set[tuple[str, str, str, str]] = set()
|
|
18
20
|
|
|
19
21
|
|
|
20
22
|
@dataclass(frozen=True)
|
|
@@ -45,7 +47,7 @@ def discover_all_modules(
|
|
|
45
47
|
|
|
46
48
|
logger = get_bridge_logger(__name__)
|
|
47
49
|
discovered: list[DiscoveredModule] = []
|
|
48
|
-
|
|
50
|
+
seen_by_name: dict[str, DiscoveredModule] = {}
|
|
49
51
|
|
|
50
52
|
effective_builtin_root = builtin_root or get_modules_root()
|
|
51
53
|
effective_project_root = get_workspace_modules_root()
|
|
@@ -87,23 +89,40 @@ def discover_all_modules(
|
|
|
87
89
|
entries = discover_package_metadata(root, source=source)
|
|
88
90
|
for package_dir, metadata in entries:
|
|
89
91
|
module_name = metadata.name
|
|
90
|
-
if module_name in
|
|
92
|
+
if module_name in seen_by_name:
|
|
93
|
+
existing = seen_by_name[module_name]
|
|
94
|
+
if source == "user" and existing.source == "project":
|
|
95
|
+
warning_key = (
|
|
96
|
+
module_name,
|
|
97
|
+
existing.source,
|
|
98
|
+
source,
|
|
99
|
+
str(existing.package_dir.resolve()),
|
|
100
|
+
)
|
|
101
|
+
if warning_key not in _SHADOW_HINT_KEYS:
|
|
102
|
+
_SHADOW_HINT_KEYS.add(warning_key)
|
|
103
|
+
print_warning(
|
|
104
|
+
f"Module '{module_name}' from project scope ({existing.package_dir}) takes precedence over "
|
|
105
|
+
f"user-scoped module ({package_dir}) in this workspace. The user copy is ignored here. "
|
|
106
|
+
f"Inspect origins with `specfact module list --show-origin`; if stale, clean user scope "
|
|
107
|
+
f"with `specfact module uninstall {module_name} --scope user`."
|
|
108
|
+
)
|
|
91
109
|
if source in {"user", "marketplace", "custom"}:
|
|
92
|
-
logger.
|
|
93
|
-
"Module '%s' from %s at '%s' is shadowed by higher-priority source.",
|
|
110
|
+
logger.debug(
|
|
111
|
+
"Module '%s' from %s at '%s' is shadowed by higher-priority source %s at '%s'.",
|
|
94
112
|
module_name,
|
|
95
113
|
source,
|
|
96
114
|
package_dir,
|
|
115
|
+
existing.source,
|
|
116
|
+
existing.package_dir,
|
|
97
117
|
)
|
|
98
118
|
continue
|
|
99
119
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
metadata=metadata,
|
|
105
|
-
source=source,
|
|
106
|
-
)
|
|
120
|
+
entry = DiscoveredModule(
|
|
121
|
+
package_dir=package_dir,
|
|
122
|
+
metadata=metadata,
|
|
123
|
+
source=source,
|
|
107
124
|
)
|
|
125
|
+
seen_by_name[module_name] = entry
|
|
126
|
+
discovered.append(entry)
|
|
108
127
|
|
|
109
128
|
return discovered
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import hashlib
|
|
6
6
|
import os
|
|
7
7
|
import shutil
|
|
8
|
+
import sys
|
|
8
9
|
import tarfile
|
|
9
10
|
import tempfile
|
|
10
11
|
from functools import lru_cache
|
|
@@ -22,6 +23,7 @@ from specfact_cli.models.module_package import ModulePackageMetadata
|
|
|
22
23
|
from specfact_cli.registry.crypto_validator import verify_checksum, verify_signature
|
|
23
24
|
from specfact_cli.registry.marketplace_client import download_module
|
|
24
25
|
from specfact_cli.registry.module_security import assert_module_allowed, ensure_publisher_trusted
|
|
26
|
+
from specfact_cli.runtime import is_debug_mode
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
USER_MODULES_ROOT = Path.home() / ".specfact" / "modules"
|
|
@@ -30,6 +32,14 @@ _IGNORED_MODULE_DIR_NAMES = {"__pycache__", ".pytest_cache", ".mypy_cache", ".ru
|
|
|
30
32
|
_IGNORED_MODULE_FILE_SUFFIXES = {".pyc", ".pyo"}
|
|
31
33
|
|
|
32
34
|
|
|
35
|
+
@beartype
|
|
36
|
+
def _integrity_debug_details_enabled() -> bool:
|
|
37
|
+
"""Return True when verbose integrity diagnostics should be shown."""
|
|
38
|
+
if is_debug_mode():
|
|
39
|
+
return True
|
|
40
|
+
return "--debug" in sys.argv[1:]
|
|
41
|
+
|
|
42
|
+
|
|
33
43
|
@beartype
|
|
34
44
|
def _bundled_public_key_path() -> Path:
|
|
35
45
|
"""Resolve default bundled public key path for module signature verification.
|
|
@@ -336,13 +346,17 @@ def verify_module_artifact(
|
|
|
336
346
|
try:
|
|
337
347
|
stable_payload = _module_artifact_payload_stable(package_dir)
|
|
338
348
|
verify_checksum(stable_payload, meta.integrity.checksum)
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
349
|
+
if _integrity_debug_details_enabled():
|
|
350
|
+
logger.debug(
|
|
351
|
+
"Module %s: checksum matched with generated-file exclusions (cache/transient files ignored)",
|
|
352
|
+
meta.name,
|
|
353
|
+
)
|
|
343
354
|
verification_payload = stable_payload
|
|
344
355
|
except ValueError:
|
|
345
|
-
|
|
356
|
+
if _integrity_debug_details_enabled():
|
|
357
|
+
logger.warning("Module %s: Integrity check failed: %s", meta.name, exc)
|
|
358
|
+
else:
|
|
359
|
+
logger.debug("Module %s: Integrity check failed: %s", meta.name, exc)
|
|
346
360
|
return False
|
|
347
361
|
|
|
348
362
|
if meta.integrity.signature:
|
|
@@ -395,7 +409,7 @@ def install_module(
|
|
|
395
409
|
manifest_path = final_path / "module-package.yaml"
|
|
396
410
|
|
|
397
411
|
if manifest_path.exists() and not reinstall:
|
|
398
|
-
logger.
|
|
412
|
+
logger.debug("Module already installed (%s)", module_name)
|
|
399
413
|
return final_path
|
|
400
414
|
|
|
401
415
|
archive_path = download_module(module_id, version=version)
|
|
@@ -467,7 +481,7 @@ def install_module(
|
|
|
467
481
|
shutil.rmtree(staged_path)
|
|
468
482
|
raise
|
|
469
483
|
|
|
470
|
-
logger.
|
|
484
|
+
logger.debug("Installed marketplace module '%s' to '%s'", module_id, final_path)
|
|
471
485
|
return final_path
|
|
472
486
|
|
|
473
487
|
|
|
@@ -505,7 +519,7 @@ def uninstall_module(
|
|
|
505
519
|
if not module_path.exists():
|
|
506
520
|
continue
|
|
507
521
|
shutil.rmtree(module_path)
|
|
508
|
-
logger.
|
|
522
|
+
logger.debug("Uninstalled module '%s' from '%s'", module_name, root)
|
|
509
523
|
return
|
|
510
524
|
|
|
511
525
|
roots_str = ", ".join(str(root) for root in candidate_roots)
|