specfact-cli 0.26.14__tar.gz → 0.26.15__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.26.14 → specfact_cli-0.26.15}/PKG-INFO +1 -1
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/pyproject.toml +1 -1
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/prompts/specfact.backlog-refine.md +26 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/__init__.py +1 -1
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/__init__.py +1 -1
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/cli.py +1 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/backlog_commands.py +83 -3
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/.gitignore +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/LICENSE.md +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/README.md +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/mappings/node-async.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/mappings/python-async.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/mappings/speckit-default.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/prompts/shared/cli-enforcement.md +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/prompts/specfact.01-import.md +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/prompts/specfact.02-plan.md +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/prompts/specfact.03-review.md +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/prompts/specfact.04-sdd.md +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/prompts/specfact.05-enforce.md +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/prompts/specfact.06-sync.md +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/prompts/specfact.07-contracts.md +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/prompts/specfact.compare.md +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/prompts/specfact.sync-backlog.md +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/prompts/specfact.validate.md +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/schemas/deviation.schema.json +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/schemas/plan.schema.json +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/schemas/protocol.schema.json +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/defaults/defect_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/defaults/enabler_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/defaults/spike_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/defaults/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/field_mappings/ado_agile.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/field_mappings/ado_default.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/field_mappings/ado_kanban.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/field_mappings/ado_safe.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/field_mappings/ado_scrum.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/frameworks/safe/safe_feature_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/frameworks/scrum/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/personas/developer/developer_task_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/personas/product-owner/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/providers/ado/work_item_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/github-action.yml.j2 +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/persona/architect.md.j2 +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/persona/developer.md.j2 +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/persona/product-owner.md.j2 +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/plan.bundle.yaml.j2 +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/pr-template.md.j2 +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/protocol.yaml.j2 +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/telemetry.yaml.example +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/__main__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/adapters/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/adapters/ado.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/adapters/backlog_base.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/adapters/base.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/adapters/github.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/adapters/openspec.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/adapters/openspec_parser.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/adapters/registry.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/adapters/speckit.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/agents/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/agents/analyze_agent.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/agents/base.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/agents/plan_agent.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/agents/registry.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/agents/sync_agent.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/ambiguity_scanner.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/code_analyzer.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/constitution_evidence_extractor.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/contract_extractor.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/control_flow_analyzer.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/graph_analyzer.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/relationship_mapper.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/requirement_extractor.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/test_pattern_extractor.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/adapters/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/adapters/base.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/adapters/local_yaml_adapter.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/ai_refiner.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/converter.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/filters.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/format_detector.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/formats/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/formats/base.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/formats/markdown_format.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/formats/structured_format.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/mappers/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/mappers/ado_mapper.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/mappers/base.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/mappers/github_mapper.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/mappers/template_config.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/template_detector.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/analyze.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/auth.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/contract_cmd.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/drift.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/enforce.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/generate.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/import_cmd.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/init.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/migrate.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/plan.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/project_cmd.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/repro.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/sdd.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/spec.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/sync.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/update.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/commands/validate.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/common/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/common/logger_setup.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/common/logging_utils.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/common/text_utils.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/common/utils.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/comparators/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/comparators/plan_comparator.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/contracts/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/contracts/crosshair_props.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/enrichers/constitution_enricher.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/enrichers/plan_enricher.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/contract_generator.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/openapi_extractor.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/persona_exporter.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/plan_generator.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/protocol_generator.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/report_generator.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/task_generator.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/test_to_openapi.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/workflow_generator.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/importers/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/importers/speckit_converter.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/importers/speckit_scanner.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/integrations/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/integrations/specmatic.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/merge/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/merge/resolver.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/migrations/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/migrations/plan_migrator.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/backlog_item.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/bridge.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/capabilities.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/change.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/contract.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/deviation.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/dor_config.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/enforcement.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/persona_template.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/plan.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/project.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/protocol.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/quality.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/sdd.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/source_tracking.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/models/task.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/modes/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/modes/detector.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/modes/router.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/parsers/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/parsers/persona_importer.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/resources/semgrep/async.yml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/resources/semgrep/code-quality.yml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/resources/semgrep/feature-detection.yml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/runtime.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/sync/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/sync/bridge_probe.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/sync/bridge_sync.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/sync/bridge_watch.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/sync/change_detector.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/sync/code_to_spec.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/sync/drift_detector.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/sync/repository_sync.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/sync/spec_to_code.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/sync/spec_to_tests.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/sync/watcher.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/sync/watcher_enhanced.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/telemetry.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/templates/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/templates/bridge_templates.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/templates/defaults/defect_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/templates/defaults/enabler_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/templates/defaults/spike_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/templates/defaults/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/templates/frameworks/scrum/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/templates/personas/product-owner/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/templates/providers/ado/work_item_v1.yaml +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/templates/registry.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/templates/specification_templates.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/acceptance_criteria.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/auth_tokens.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/bundle_loader.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/code_change_detector.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/console.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/content_sanitizer.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/context_detection.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/enrichment_context.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/enrichment_parser.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/env_manager.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/feature_keys.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/git.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/github_annotations.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/ide_setup.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/incremental_check.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/metadata.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/optional_deps.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/performance.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/progress.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/progressive_disclosure.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/prompts.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/sdd_discovery.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/source_scanner.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/startup_checks.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/structure.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/structured_io.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/suggestions.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/terminal.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/utils/yaml_utils.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/agile_validation.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/change_proposal_integration.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/cli_first_validator.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/contract_validator.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/fsm.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/repro_checker.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/schema.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/contract_populator.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/crosshair_runner.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/crosshair_summary.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/dependency_installer.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/framework_detector.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/frameworks/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/frameworks/base.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/frameworks/django.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/frameworks/drf.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/frameworks/fastapi.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/frameworks/flask.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/harness_generator.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/models.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/orchestrator.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/specmatic_runner.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/validators/sidecar/unannotated_detector.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/versioning/__init__.py +0 -0
- {specfact_cli-0.26.14 → specfact_cli-0.26.15}/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.26.
|
|
3
|
+
Version: 0.26.15
|
|
4
4
|
Summary: Brownfield-first CLI: Reverse engineer legacy Python → specs → enforced contracts. Automate legacy code documentation and prevent modernization regressions.
|
|
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.26.
|
|
7
|
+
version = "0.26.15"
|
|
8
8
|
description = "Brownfield-first CLI: Reverse engineer legacy Python → specs → enforced contracts. Automate legacy code documentation and prevent modernization regressions."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -69,6 +69,8 @@ Refine backlog items from DevOps tools (GitHub Issues, Azure DevOps, etc.) into
|
|
|
69
69
|
- Ambiguous name-only matches will prompt for explicit iteration path
|
|
70
70
|
- `--release RELEASE` - Filter by release identifier (case-insensitive)
|
|
71
71
|
- `--limit N` - Maximum number of items to process in this refinement session (caps batch size)
|
|
72
|
+
- `--ignore-refined` / `--no-ignore-refined` - When set (default), exclude already-refined items so `--limit` applies to items that need refinement. Use `--no-ignore-refined` to process the first N items in order.
|
|
73
|
+
- `--id ISSUE_ID` - Refine only this backlog item (issue or work item ID). Other items are ignored.
|
|
72
74
|
- `--persona PERSONA` - Filter templates by persona (product-owner, architect, developer)
|
|
73
75
|
- `--framework FRAMEWORK` - Filter templates by framework (agile, scrum, safe, kanban)
|
|
74
76
|
|
|
@@ -162,6 +164,30 @@ specfact backlog refine $ADAPTER \
|
|
|
162
164
|
- Use `:quit` or `:abort` to cancel the entire session gracefully
|
|
163
165
|
- Session cancellation shows summary and exits without error
|
|
164
166
|
|
|
167
|
+
### Interactive refinement (Copilot mode)
|
|
168
|
+
|
|
169
|
+
When refining backlog items in Copilot mode (e.g. after export to tmp or during a refinement session), follow this **per-story loop** so the PO and stakeholders can review and approve before any update:
|
|
170
|
+
|
|
171
|
+
1. **For each story** (one at a time):
|
|
172
|
+
- **Present** the refined story in a clear, readable format:
|
|
173
|
+
- Use headings for Title, Body, Acceptance Criteria, Metrics.
|
|
174
|
+
- Use tables or panels for structured data so it is easy to scan.
|
|
175
|
+
- **Assess specification level** so the DevOps team knows if the story is ready, under-specified, or over-specified:
|
|
176
|
+
- **Under-specified**: Missing acceptance criteria, vague scope, unclear "so that" or user value. List evidence (e.g. "No AC", "Scope could mean X or Y"). Suggest what to add.
|
|
177
|
+
- **Over-specified**: Too much implementation detail, too many sub-steps for one story, or solution prescribed instead of outcome. List evidence and suggest what to trim or split.
|
|
178
|
+
- **Fit for scope and intent**: Clear persona, capability, benefit, and testable AC; appropriate size. State briefly why it is ready (and, if DoR is in use, that DoR is satisfied).
|
|
179
|
+
- **List ambiguities** or open questions (e.g. unclear scope, missing acceptance criteria, conflicting assumptions).
|
|
180
|
+
- **Ask** the PO and other stakeholders for clarification: "Please review the refined story above. Do you want any changes? Any ambiguities to resolve? Should this story be split?"
|
|
181
|
+
- **If the user provides feedback**: Re-refine the story incorporating the feedback, then repeat from "Present" for this story.
|
|
182
|
+
- **Only when the user explicitly approves** (e.g. "looks good", "approved", "no changes"): Mark this story as done and move to the **next** story.
|
|
183
|
+
- **Do not update** the backlog item (or write to the refined file as final) until the user has approved this story.
|
|
184
|
+
|
|
185
|
+
2. **Formatting**:
|
|
186
|
+
- Use clear headings, bullet lists, and optional tables/panels so refinement sessions are easy to follow and enjoyable.
|
|
187
|
+
- Keep each story’s block self-contained so stakeholders can focus on one item at a time.
|
|
188
|
+
|
|
189
|
+
3. **Rule**: The backlog item (or exported block) must only be updated/finalized **after** the user has approved the refined content for that story. Then proceed to the next story with the same process.
|
|
190
|
+
|
|
165
191
|
### Step 3: Present Results
|
|
166
192
|
|
|
167
193
|
Display refinement results:
|
|
@@ -454,6 +454,7 @@ def cli_main() -> None:
|
|
|
454
454
|
console.print() # Empty line after banner
|
|
455
455
|
elif not is_help_or_version and not is_test_mode:
|
|
456
456
|
# Show simple version line like other CLIs (skip for help/version commands and in test mode)
|
|
457
|
+
# Printed before startup checks so users see output immediately (important with slow checks e.g. xagt)
|
|
457
458
|
print_version_line()
|
|
458
459
|
|
|
459
460
|
# Run startup checks (template validation and version check)
|
|
@@ -296,6 +296,44 @@ def _parse_refined_export_markdown(content: str) -> dict[str, dict[str, Any]]:
|
|
|
296
296
|
return result
|
|
297
297
|
|
|
298
298
|
|
|
299
|
+
@beartype
|
|
300
|
+
def _item_needs_refinement(
|
|
301
|
+
item: BacklogItem,
|
|
302
|
+
detector: TemplateDetector,
|
|
303
|
+
registry: TemplateRegistry,
|
|
304
|
+
template_id: str | None,
|
|
305
|
+
normalized_adapter: str | None,
|
|
306
|
+
normalized_framework: str | None,
|
|
307
|
+
normalized_persona: str | None,
|
|
308
|
+
) -> bool:
|
|
309
|
+
"""
|
|
310
|
+
Return True if the item needs refinement (should be processed); False if already refined (skip).
|
|
311
|
+
|
|
312
|
+
Mirrors the "already refined" skip logic used in the refine loop: checkboxes + all required
|
|
313
|
+
sections, or high confidence with no missing fields.
|
|
314
|
+
"""
|
|
315
|
+
detection_result = detector.detect_template(
|
|
316
|
+
item,
|
|
317
|
+
provider=normalized_adapter,
|
|
318
|
+
framework=normalized_framework,
|
|
319
|
+
persona=normalized_persona,
|
|
320
|
+
)
|
|
321
|
+
if detection_result.template_id:
|
|
322
|
+
target = registry.get_template(detection_result.template_id) if detection_result.template_id else None
|
|
323
|
+
if target and target.required_sections:
|
|
324
|
+
has_checkboxes = bool(
|
|
325
|
+
re.search(r"^[\s]*- \[[ x]\]", item.body_markdown or "", re.MULTILINE | re.IGNORECASE)
|
|
326
|
+
)
|
|
327
|
+
all_present = all(
|
|
328
|
+
bool(re.search(rf"^#+\s+{re.escape(s)}\s*$", item.body_markdown or "", re.MULTILINE | re.IGNORECASE))
|
|
329
|
+
for s in target.required_sections
|
|
330
|
+
)
|
|
331
|
+
if has_checkboxes and all_present and not detection_result.missing_fields:
|
|
332
|
+
return False
|
|
333
|
+
already_refined = template_id is None and detection_result.confidence >= 0.8 and not detection_result.missing_fields
|
|
334
|
+
return not already_refined
|
|
335
|
+
|
|
336
|
+
|
|
299
337
|
def _fetch_backlog_items(
|
|
300
338
|
adapter_name: str,
|
|
301
339
|
search_query: str | None = None,
|
|
@@ -424,6 +462,16 @@ def refine(
|
|
|
424
462
|
"--limit",
|
|
425
463
|
help="Maximum number of items to process in this refinement session. Use to cap batch size and avoid processing too many items at once.",
|
|
426
464
|
),
|
|
465
|
+
ignore_refined: bool = typer.Option(
|
|
466
|
+
True,
|
|
467
|
+
"--ignore-refined/--no-ignore-refined",
|
|
468
|
+
help="When set (default), exclude already-refined items from the batch so --limit applies to items that need refinement. Use --no-ignore-refined to process the first N items in order (already-refined skipped in loop).",
|
|
469
|
+
),
|
|
470
|
+
issue_id: str | None = typer.Option(
|
|
471
|
+
None,
|
|
472
|
+
"--id",
|
|
473
|
+
help="Refine only this backlog item (issue or work item ID). Other items are ignored.",
|
|
474
|
+
),
|
|
427
475
|
template_id: str | None = typer.Option(None, "--template", "-t", help="Target template ID (default: auto-detect)"),
|
|
428
476
|
auto_accept_high_confidence: bool = typer.Option(
|
|
429
477
|
False, "--auto-accept-high-confidence", help="Auto-accept refinements with confidence >= 0.85"
|
|
@@ -651,6 +699,10 @@ def refine(
|
|
|
651
699
|
init_progress.update(validate_task, description="[green]✓[/green] Configuration validated")
|
|
652
700
|
|
|
653
701
|
# Fetch backlog items with filters
|
|
702
|
+
# When ignore_refined and limit are set, fetch more candidates so we have enough after filtering
|
|
703
|
+
fetch_limit: int | None = limit
|
|
704
|
+
if ignore_refined and limit is not None and limit > 0:
|
|
705
|
+
fetch_limit = limit * 5
|
|
654
706
|
with Progress(
|
|
655
707
|
SpinnerColumn(),
|
|
656
708
|
TextColumn("[progress.description]{task.description}"),
|
|
@@ -668,7 +720,7 @@ def refine(
|
|
|
668
720
|
iteration=iteration,
|
|
669
721
|
sprint=sprint,
|
|
670
722
|
release=release,
|
|
671
|
-
limit=
|
|
723
|
+
limit=fetch_limit,
|
|
672
724
|
repo_owner=repo_owner,
|
|
673
725
|
repo_name=repo_name,
|
|
674
726
|
github_token=github_token,
|
|
@@ -706,6 +758,34 @@ def refine(
|
|
|
706
758
|
console.print("[yellow]No backlog items found.[/yellow]")
|
|
707
759
|
return
|
|
708
760
|
|
|
761
|
+
# Filter by issue ID when --id is set
|
|
762
|
+
if issue_id is not None:
|
|
763
|
+
items = [i for i in items if str(i.id) == str(issue_id)]
|
|
764
|
+
if not items:
|
|
765
|
+
console.print(
|
|
766
|
+
f"[bold red]✗[/bold red] No backlog item with id {issue_id!r} found. "
|
|
767
|
+
"Check filters and adapter configuration."
|
|
768
|
+
)
|
|
769
|
+
raise typer.Exit(1)
|
|
770
|
+
|
|
771
|
+
# When ignore_refined (default), keep only items that need refinement; then apply limit
|
|
772
|
+
if ignore_refined:
|
|
773
|
+
items = [
|
|
774
|
+
i
|
|
775
|
+
for i in items
|
|
776
|
+
if _item_needs_refinement(
|
|
777
|
+
i, detector, registry, template_id, normalized_adapter, normalized_framework, normalized_persona
|
|
778
|
+
)
|
|
779
|
+
]
|
|
780
|
+
if limit is not None and len(items) > limit:
|
|
781
|
+
items = items[:limit]
|
|
782
|
+
if ignore_refined and (limit is not None or issue_id is not None):
|
|
783
|
+
console.print(
|
|
784
|
+
f"[dim]Filtered to {len(items)} item(s) needing refinement"
|
|
785
|
+
+ (f" (limit {limit})" if limit is not None else "")
|
|
786
|
+
+ "[/dim]"
|
|
787
|
+
)
|
|
788
|
+
|
|
709
789
|
# Validate export/import flags
|
|
710
790
|
if export_to_tmp and import_from_tmp:
|
|
711
791
|
console.print("[bold red]✗[/bold red] --export-to-tmp and --import-from-tmp are mutually exclusive")
|
|
@@ -843,8 +923,8 @@ def refine(
|
|
|
843
923
|
console.print(f"[green]✓ Updated {len(updated_items)} backlog item(s)[/green]")
|
|
844
924
|
return
|
|
845
925
|
|
|
846
|
-
# Apply limit if specified
|
|
847
|
-
if limit and len(items) > limit:
|
|
926
|
+
# Apply limit if specified (when not ignore_refined; when ignore_refined we already filtered and sliced)
|
|
927
|
+
if not ignore_refined and limit is not None and len(items) > limit:
|
|
848
928
|
items = items[:limit]
|
|
849
929
|
console.print(f"[yellow]Limited to {limit} items (found {len(items)} total)[/yellow]")
|
|
850
930
|
else:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/defaults/defect_v1.yaml
RENAMED
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/defaults/enabler_v1.yaml
RENAMED
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/backlog/defaults/spike_v1.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
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/resources/templates/persona/product-owner.md.j2
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
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/ambiguity_scanner.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/contract_extractor.py
RENAMED
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/control_flow_analyzer.py
RENAMED
|
File without changes
|
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/relationship_mapper.py
RENAMED
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/requirement_extractor.py
RENAMED
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/analyzers/test_pattern_extractor.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
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/formats/markdown_format.py
RENAMED
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/formats/structured_format.py
RENAMED
|
File without changes
|
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/mappers/ado_mapper.py
RENAMED
|
File without changes
|
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/backlog/mappers/github_mapper.py
RENAMED
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/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
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/comparators/plan_comparator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/enrichers/constitution_enricher.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/contract_generator.py
RENAMED
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/openapi_extractor.py
RENAMED
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/persona_exporter.py
RENAMED
|
File without changes
|
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/protocol_generator.py
RENAMED
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/report_generator.py
RENAMED
|
File without changes
|
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/test_to_openapi.py
RENAMED
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/generators/workflow_generator.py
RENAMED
|
File without changes
|
|
File without changes
|
{specfact_cli-0.26.14 → specfact_cli-0.26.15}/src/specfact_cli/importers/speckit_converter.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
|