specfact-cli 0.38.1__tar.gz → 0.38.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.
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/PKG-INFO +1 -1
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/pyproject.toml +1 -1
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/__init__.py +1 -1
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/__init__.py +1 -1
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/backlog/module-package.yaml +3 -3
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/backlog/src/commands.py +71 -3
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/startup_checks.py +1 -1
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/.gitignore +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/LICENSE +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/README.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/keys/README.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/keys/module-signing-public.pem +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/mappings/node-async.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/mappings/python-async.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/mappings/speckit-default.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/prompts/shared/cli-enforcement.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/prompts/specfact.01-import.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/prompts/specfact.02-plan.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/prompts/specfact.03-review.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/prompts/specfact.04-sdd.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/prompts/specfact.05-enforce.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/prompts/specfact.06-sync.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/prompts/specfact.07-contracts.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/prompts/specfact.backlog-add.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/prompts/specfact.backlog-daily.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/prompts/specfact.backlog-refine.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/prompts/specfact.compare.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/prompts/specfact.sync-backlog.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/prompts/specfact.validate.md +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/schemas/deviation.schema.json +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/schemas/plan.schema.json +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/schemas/protocol.schema.json +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/defaults/defect_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/defaults/enabler_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/defaults/spike_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/defaults/user_story_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/field_mappings/ado_agile.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/field_mappings/ado_default.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/field_mappings/ado_kanban.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/field_mappings/ado_safe.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/field_mappings/ado_scrum.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/frameworks/safe/safe_feature_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/frameworks/scrum/user_story_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/personas/developer/developer_task_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/personas/product-owner/user_story_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/providers/ado/work_item_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/github-action.yml.j2 +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/persona/architect.md.j2 +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/persona/developer.md.j2 +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/persona/product-owner.md.j2 +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/plan.bundle.yaml.j2 +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/policies/kanban.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/policies/mixed.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/policies/safe.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/policies/scrum.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/pr-template.md.j2 +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/protocol.yaml.j2 +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/telemetry.yaml.example +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/__main__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/adapters/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/adapters/ado.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/adapters/backlog_base.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/adapters/base.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/adapters/github.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/adapters/openspec.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/adapters/openspec_parser.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/adapters/registry.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/adapters/speckit.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/agents/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/agents/analyze_agent.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/agents/base.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/agents/plan_agent.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/agents/registry.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/agents/sync_agent.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/ambiguity_scanner.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/code_analyzer.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/constitution_evidence_extractor.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/contract_extractor.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/control_flow_analyzer.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/graph_analyzer.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/relationship_mapper.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/requirement_extractor.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/test_pattern_extractor.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/adapters/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/adapters/base.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/adapters/local_yaml_adapter.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/ai_refiner.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/converter.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/filters.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/format_detector.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/formats/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/formats/base.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/formats/markdown_format.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/formats/structured_format.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/mappers/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/mappers/ado_mapper.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/mappers/base.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/mappers/github_mapper.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/mappers/template_config.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/template_detector.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/cli.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/analyze.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/auth.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/backlog_commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/contract_cmd.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/drift.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/enforce.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/generate.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/import_cmd.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/init.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/migrate.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/plan.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/project_cmd.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/repro.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/sdd.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/spec.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/sync.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/update.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/commands/validate.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/common/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/common/logger_setup.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/common/logging_utils.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/common/text_utils.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/common/utils.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/comparators/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/comparators/plan_comparator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/contracts/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/contracts/crosshair_props.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/contracts/module_interface.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/enrichers/constitution_enricher.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/enrichers/plan_enricher.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/generators/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/generators/contract_generator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/generators/openapi_extractor.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/generators/persona_exporter.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/generators/plan_generator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/generators/protocol_generator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/generators/report_generator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/generators/task_generator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/generators/test_to_openapi.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/generators/workflow_generator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/importers/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/importers/speckit_converter.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/importers/speckit_scanner.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/integrations/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/integrations/specmatic.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/merge/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/merge/resolver.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/migrations/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/migrations/plan_migrator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/backlog_item.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/bridge.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/capabilities.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/change.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/contract.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/deviation.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/dor_config.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/enforcement.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/module_package.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/persona_template.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/plan.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/project.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/protocol.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/quality.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/sdd.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/source_tracking.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/task.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/models/validation.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modes/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modes/detector.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modes/router.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/analyze/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/analyze/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/analyze/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/analyze/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/auth/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/auth/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/auth/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/auth/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/backlog/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/backlog/src/adapters/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/backlog/src/adapters/ado.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/backlog/src/adapters/base.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/backlog/src/adapters/github.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/backlog/src/adapters/jira.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/backlog/src/adapters/linear.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/backlog/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/contract/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/contract/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/contract/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/contract/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/drift/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/drift/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/drift/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/drift/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/enforce/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/enforce/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/enforce/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/enforce/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/generate/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/generate/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/generate/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/generate/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/import_cmd/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/import_cmd/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/import_cmd/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/import_cmd/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/init/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/init/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/init/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/init/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/migrate/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/migrate/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/migrate/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/migrate/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/module_io_shim.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/module_registry/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/module_registry/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/module_registry/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/module_registry/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/patch_mode/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/patch_mode/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/patch_mode/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/patch_mode/src/patch_mode/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/patch_mode/src/patch_mode/commands/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/patch_mode/src/patch_mode/commands/apply.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/patch_mode/src/patch_mode/pipeline/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/patch_mode/src/patch_mode/pipeline/applier.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/patch_mode/src/patch_mode/pipeline/generator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/patch_mode/src/patch_mode/pipeline/idempotency.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/plan/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/plan/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/plan/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/plan/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/config/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/config/policy_config.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/config/templates.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/engine/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/engine/suggester.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/engine/validator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/main.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/models/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/models/policy_result.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/policies/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/policies/kanban.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/policies/safe.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/policies/scrum.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/registry/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/policy_engine/src/policy_engine/registry/policy_registry.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/project/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/project/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/project/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/project/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/repro/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/repro/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/repro/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/repro/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/sdd/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/sdd/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/sdd/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/sdd/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/spec/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/spec/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/spec/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/spec/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/sync/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/sync/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/sync/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/sync/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/upgrade/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/upgrade/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/upgrade/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/upgrade/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/validate/module-package.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/validate/src/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/validate/src/app.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/validate/src/commands.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/parsers/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/parsers/persona_importer.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/alias_manager.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/bootstrap.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/bridge_registry.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/crypto_validator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/custom_registries.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/dependency_resolver.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/extension_registry.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/help_cache.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/marketplace_client.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/metadata.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/module_discovery.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/module_installer.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/module_lifecycle.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/module_packages.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/module_security.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/module_state.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/registry/registry.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/resources/semgrep/async.yml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/resources/semgrep/code-quality.yml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/resources/semgrep/feature-detection.yml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/runtime.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/sync/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/sync/bridge_probe.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/sync/bridge_sync.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/sync/bridge_watch.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/sync/change_detector.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/sync/code_to_spec.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/sync/drift_detector.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/sync/repository_sync.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/sync/spec_to_code.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/sync/spec_to_tests.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/sync/watcher.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/sync/watcher_enhanced.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/telemetry.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/templates/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/templates/bridge_templates.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/templates/defaults/defect_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/templates/defaults/enabler_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/templates/defaults/spike_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/templates/defaults/user_story_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/templates/frameworks/scrum/user_story_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/templates/personas/product-owner/user_story_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/templates/providers/ado/work_item_v1.yaml +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/templates/registry.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/templates/specification_templates.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/acceptance_criteria.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/auth_tokens.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/bundle_converters.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/bundle_loader.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/code_change_detector.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/console.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/content_sanitizer.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/context_detection.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/enrichment_context.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/enrichment_parser.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/env_manager.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/feature_keys.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/git.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/github_annotations.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/ide_setup.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/incremental_check.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/metadata.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/optional_deps.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/performance.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/persona_ownership.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/progress.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/progressive_disclosure.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/prompts.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/sdd_discovery.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/source_scanner.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/structure.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/structured_io.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/suggestions.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/terminal.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/utils/yaml_utils.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/agile_validation.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/change_proposal_integration.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/cli_first_validator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/contract_validator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/fsm.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/repro_checker.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/schema.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/contract_populator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/crosshair_runner.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/crosshair_summary.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/dependency_installer.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/framework_detector.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/frameworks/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/frameworks/base.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/frameworks/django.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/frameworks/drf.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/frameworks/fastapi.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/frameworks/flask.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/harness_generator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/models.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/orchestrator.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/specmatic_runner.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/validators/sidecar/unannotated_detector.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/versioning/__init__.py +0 -0
- {specfact_cli-0.38.1 → specfact_cli-0.38.2}/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.38.
|
|
3
|
+
Version: 0.38.2
|
|
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.38.
|
|
7
|
+
version = "0.38.2"
|
|
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.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/backlog/module-package.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: backlog
|
|
2
|
-
version: 0.1.
|
|
2
|
+
version: 0.1.6
|
|
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:a3b033ef35a6a95e1c40ffe28e112cb1683af5051dd813038bacf1cd76bfd7ad
|
|
32
|
+
signature: gHQkRqNpRRpxwRmFiHSHaSpq8/rwKvv1v/4Wjt8pRl0Z2VFTVF1DStb2XwgZlE0Bpg77n++G5mIl7KkM7MyGBQ==
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/modules/backlog/src/commands.py
RENAMED
|
@@ -31,6 +31,7 @@ import yaml
|
|
|
31
31
|
from beartype import beartype
|
|
32
32
|
from icontract import ensure, require
|
|
33
33
|
from rich.console import Console
|
|
34
|
+
from rich.markdown import Markdown
|
|
34
35
|
from rich.panel import Panel
|
|
35
36
|
from rich.progress import Progress, SpinnerColumn, TextColumn, TimeElapsedColumn
|
|
36
37
|
from rich.prompt import Confirm
|
|
@@ -78,6 +79,18 @@ class _BacklogCommandGroup(TyperGroup):
|
|
|
78
79
|
return sorted(commands, key=lambda name: (self._ORDER_PRIORITY.get(name, 1000), name))
|
|
79
80
|
|
|
80
81
|
|
|
82
|
+
def _is_interactive_tty() -> bool:
|
|
83
|
+
"""
|
|
84
|
+
Return True when running in an interactive TTY suitable for rich Markdown rendering.
|
|
85
|
+
|
|
86
|
+
CI and non-TTY environments should fall back to plain Markdown text to keep output machine-friendly.
|
|
87
|
+
"""
|
|
88
|
+
try:
|
|
89
|
+
return sys.stdout.isatty()
|
|
90
|
+
except Exception: # pragma: no cover - extremely defensive
|
|
91
|
+
return False
|
|
92
|
+
|
|
93
|
+
|
|
81
94
|
class _CeremonyCommandGroup(TyperGroup):
|
|
82
95
|
"""Stable ordering for backlog ceremony subcommands."""
|
|
83
96
|
|
|
@@ -1475,7 +1488,7 @@ def _build_summarize_prompt_content(
|
|
|
1475
1488
|
)
|
|
1476
1489
|
lines.append(f"- **Last updated:** {updated}")
|
|
1477
1490
|
if include_comments:
|
|
1478
|
-
body = (item.body_markdown or "").strip()
|
|
1491
|
+
body = _normalize_markdown_text((item.body_markdown or "").strip())
|
|
1479
1492
|
if body:
|
|
1480
1493
|
snippet = body[:_SUMMARIZE_BODY_TRUNCATE]
|
|
1481
1494
|
if len(body) > _SUMMARIZE_BODY_TRUNCATE:
|
|
@@ -1492,7 +1505,8 @@ def _build_summarize_prompt_content(
|
|
|
1492
1505
|
if item_comments:
|
|
1493
1506
|
lines.append("- **Comments (annotations):**")
|
|
1494
1507
|
for c in item_comments:
|
|
1495
|
-
|
|
1508
|
+
normalized_comment = _normalize_markdown_text(c)
|
|
1509
|
+
lines.append(f" - {normalized_comment}")
|
|
1496
1510
|
if item.story_points is not None:
|
|
1497
1511
|
lines.append(f"- **Story points:** {item.story_points}")
|
|
1498
1512
|
if item.priority is not None:
|
|
@@ -1506,6 +1520,57 @@ def _build_summarize_prompt_content(
|
|
|
1506
1520
|
return "\n".join(lines).strip()
|
|
1507
1521
|
|
|
1508
1522
|
|
|
1523
|
+
_HTML_TAG_RE = re.compile(r"<[A-Za-z/][^>]*>")
|
|
1524
|
+
|
|
1525
|
+
|
|
1526
|
+
@beartype
|
|
1527
|
+
@ensure(lambda result: not _HTML_TAG_RE.search(result or ""), "Normalized text must not contain raw HTML tags")
|
|
1528
|
+
def _normalize_markdown_text(text: str) -> str:
|
|
1529
|
+
"""
|
|
1530
|
+
Normalize provider-specific markup (HTML, entities) to Markdown-friendly text.
|
|
1531
|
+
|
|
1532
|
+
This is intentionally conservative: plain Markdown is left as-is, while common HTML constructs from
|
|
1533
|
+
ADO-style bodies and comments are converted to readable Markdown and stripped of tags/entities.
|
|
1534
|
+
"""
|
|
1535
|
+
if not text:
|
|
1536
|
+
return ""
|
|
1537
|
+
|
|
1538
|
+
# Fast path: if no obvious HTML markers, return as-is.
|
|
1539
|
+
if "<" not in text and "&" not in text:
|
|
1540
|
+
return text
|
|
1541
|
+
|
|
1542
|
+
from html import unescape
|
|
1543
|
+
|
|
1544
|
+
# Unescape HTML entities first so we can treat content uniformly.
|
|
1545
|
+
value = unescape(text)
|
|
1546
|
+
|
|
1547
|
+
# Replace common block/linebreak tags with newlines before stripping other tags.
|
|
1548
|
+
# Handle several variants to cover typical ADO HTML.
|
|
1549
|
+
value = re.sub(r"<\s*br\s*/?\s*>", "\n", value, flags=re.IGNORECASE)
|
|
1550
|
+
value = re.sub(r"</\s*p\s*>", "\n\n", value, flags=re.IGNORECASE)
|
|
1551
|
+
value = re.sub(r"<\s*p[^>]*>", "", value, flags=re.IGNORECASE)
|
|
1552
|
+
|
|
1553
|
+
# Turn list items into markdown bullets.
|
|
1554
|
+
value = re.sub(r"<\s*li[^>]*>", "- ", value, flags=re.IGNORECASE)
|
|
1555
|
+
value = re.sub(r"</\s*li\s*>", "\n", value, flags=re.IGNORECASE)
|
|
1556
|
+
value = re.sub(r"<\s*ul[^>]*>", "", value, flags=re.IGNORECASE)
|
|
1557
|
+
value = re.sub(r"</\s*ul\s*>", "\n", value, flags=re.IGNORECASE)
|
|
1558
|
+
value = re.sub(r"<\s*ol[^>]*>", "", value, flags=re.IGNORECASE)
|
|
1559
|
+
value = re.sub(r"</\s*ol\s*>", "\n", value, flags=re.IGNORECASE)
|
|
1560
|
+
|
|
1561
|
+
# Drop any remaining tags conservatively.
|
|
1562
|
+
value = _HTML_TAG_RE.sub("", value)
|
|
1563
|
+
|
|
1564
|
+
# Normalize whitespace: collapse excessive blank lines but keep paragraph structure.
|
|
1565
|
+
# First, normalize Windows-style newlines.
|
|
1566
|
+
value = value.replace("\r\n", "\n").replace("\r", "\n")
|
|
1567
|
+
# Collapse 3+ blank lines into 2.
|
|
1568
|
+
value = re.sub(r"\n{3,}", "\n\n", value)
|
|
1569
|
+
# Strip leading/trailing whitespace on each line.
|
|
1570
|
+
lines = [line.rstrip() for line in value.split("\n")]
|
|
1571
|
+
return "\n".join(lines).strip()
|
|
1572
|
+
|
|
1573
|
+
|
|
1509
1574
|
@beartype
|
|
1510
1575
|
def _build_refine_export_content(
|
|
1511
1576
|
adapter: str,
|
|
@@ -2996,7 +3061,10 @@ def daily(
|
|
|
2996
3061
|
Path(summarize_to).write_text(content, encoding="utf-8")
|
|
2997
3062
|
console.print(f"[dim]Summarize prompt written to {summarize_to} ({len(filtered)} item(s))[/dim]")
|
|
2998
3063
|
else:
|
|
2999
|
-
|
|
3064
|
+
if _is_interactive_tty() and not os.environ.get("CI"):
|
|
3065
|
+
console.print(Markdown(content))
|
|
3066
|
+
else:
|
|
3067
|
+
console.print(content)
|
|
3000
3068
|
return
|
|
3001
3069
|
|
|
3002
3070
|
if interactive:
|
|
@@ -372,7 +372,7 @@ def print_startup_checks(
|
|
|
372
372
|
f"IDE: [cyan]{template_result.ide}[/cyan]\n"
|
|
373
373
|
f"Location: [dim]{template_result.ide_dir}[/dim]\n\n"
|
|
374
374
|
f"{details_str}\n\n"
|
|
375
|
-
f"Run [bold]specfact init --force[/bold] to update them.",
|
|
375
|
+
f"Run [bold]specfact init ide --force[/bold] to update them.",
|
|
376
376
|
border_style="yellow",
|
|
377
377
|
)
|
|
378
378
|
)
|
|
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
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/defaults/defect_v1.yaml
RENAMED
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/defaults/enabler_v1.yaml
RENAMED
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/defaults/spike_v1.yaml
RENAMED
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/defaults/user_story_v1.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/resources/templates/backlog/field_mappings/ado_safe.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/contract_extractor.py
RENAMED
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/control_flow_analyzer.py
RENAMED
|
File without changes
|
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/relationship_mapper.py
RENAMED
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/requirement_extractor.py
RENAMED
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/analyzers/test_pattern_extractor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/adapters/local_yaml_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/formats/markdown_format.py
RENAMED
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/formats/structured_format.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/mappers/github_mapper.py
RENAMED
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/backlog/mappers/template_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/enrichers/constitution_enricher.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/generators/contract_generator.py
RENAMED
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/generators/openapi_extractor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/generators/protocol_generator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specfact_cli-0.38.1 → specfact_cli-0.38.2}/src/specfact_cli/generators/workflow_generator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|