specfact-cli 0.42.2__tar.gz → 0.42.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/.gitignore +3 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/PKG-INFO +48 -161
- specfact_cli-0.42.4/README.md +219 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/pyproject.toml +6 -1
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/__init__.py +1 -1
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/__init__.py +1 -1
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/adapters/ado.py +1663 -1608
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/adapters/backlog_base.py +208 -41
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/adapters/base.py +15 -10
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/adapters/github.py +1342 -1389
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/adapters/openspec.py +199 -199
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/adapters/openspec_parser.py +53 -57
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/adapters/speckit.py +256 -279
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/agents/analyze_agent.py +46 -40
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/agents/plan_agent.py +25 -13
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/agents/registry.py +1 -0
- specfact_cli-0.42.4/src/specfact_cli/analyzers/ambiguity_scanner.py +968 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/analyzers/code_analyzer.py +856 -885
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/analyzers/constitution_evidence_extractor.py +161 -89
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/analyzers/contract_extractor.py +34 -31
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/analyzers/graph_analyzer.py +159 -150
- specfact_cli-0.42.4/src/specfact_cli/analyzers/relationship_mapper.py +429 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/analyzers/requirement_extractor.py +19 -26
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/analyzers/test_pattern_extractor.py +70 -57
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/backlog/adapters/base.py +9 -1
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/backlog/converter.py +211 -130
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/backlog/filters.py +5 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/backlog/mappers/ado_mapper.py +32 -35
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/backlog/mappers/base.py +13 -11
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/backlog/mappers/github_mapper.py +71 -54
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/cli.py +192 -183
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/__init__.py +20 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/_bundle_shim.py +13 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/common/logger_setup.py +166 -124
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/comparators/plan_comparator.py +208 -162
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/contracts/__init__.py +1 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/contracts/module_interface.py +15 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/enrichers/constitution_enricher.py +73 -58
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/enrichers/plan_enricher.py +100 -121
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/generators/contract_generator.py +77 -53
- specfact_cli-0.42.4/src/specfact_cli/generators/openapi_extractor.py +1416 -0
- specfact_cli-0.42.4/src/specfact_cli/generators/persona_exporter.py +429 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/generators/plan_generator.py +3 -2
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/generators/protocol_generator.py +5 -4
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/generators/report_generator.py +4 -2
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/generators/test_to_openapi.py +152 -100
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/generators/workflow_generator.py +12 -5
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/groups/codebase_group.py +1 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/groups/govern_group.py +1 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/groups/member_group.py +1 -1
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/groups/project_group.py +2 -1
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/groups/spec_group.py +1 -0
- specfact_cli-0.42.4/src/specfact_cli/importers/speckit_converter.py +1100 -0
- specfact_cli-0.42.4/src/specfact_cli/importers/speckit_scanner.py +716 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/integrations/specmatic.py +123 -117
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/merge/resolver.py +226 -126
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/migrations/plan_migrator.py +7 -4
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/backlog_item.py +7 -8
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/bridge.py +17 -9
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/change.py +11 -18
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/contract.py +3 -1
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/deviation.py +5 -5
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/dor_config.py +69 -47
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/enforcement.py +28 -13
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/module_package.py +3 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/persona_template.py +1 -2
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/plan.py +17 -10
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/project.py +390 -370
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/sdd.py +10 -8
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/task.py +0 -1
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modes/router.py +12 -3
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/_bundle_import.py +7 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/init/module-package.yaml +3 -3
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/init/src/commands.py +228 -167
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/init/src/first_run_selection.py +2 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/module_io_shim.py +16 -4
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/module_registry/module-package.yaml +3 -3
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/module_registry/src/commands.py +402 -229
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/upgrade/module-package.yaml +3 -3
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/upgrade/src/commands.py +94 -85
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/parsers/persona_importer.py +64 -47
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/alias_manager.py +6 -3
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/bootstrap.py +3 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/bridge_registry.py +20 -12
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/crypto_validator.py +15 -6
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/custom_registries.py +69 -38
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/extension_registry.py +8 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/help_cache.py +21 -4
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/marketplace_client.py +164 -122
- specfact_cli-0.42.4/src/specfact_cli/registry/module_discovery.py +175 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/module_grouping.py +4 -1
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/module_installer.py +336 -222
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/module_lifecycle.py +52 -24
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/module_packages.py +705 -429
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/module_security.py +15 -5
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/module_state.py +12 -6
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/registry.py +4 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/runtime.py +29 -5
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/sync/bridge_probe.py +80 -88
- specfact_cli-0.42.4/src/specfact_cli/sync/bridge_sync.py +3739 -0
- specfact_cli-0.42.4/src/specfact_cli/sync/bridge_sync_openspec_md_parse.py +71 -0
- specfact_cli-0.42.4/src/specfact_cli/sync/bridge_sync_requirement_from_proposal.py +351 -0
- specfact_cli-0.42.4/src/specfact_cli/sync/bridge_sync_requirement_helpers.py +187 -0
- specfact_cli-0.42.4/src/specfact_cli/sync/bridge_sync_tasks_from_proposal.py +315 -0
- specfact_cli-0.42.4/src/specfact_cli/sync/bridge_sync_what_changes_format.py +179 -0
- specfact_cli-0.42.4/src/specfact_cli/sync/bridge_sync_write_openspec_from_proposal.py +298 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/sync/bridge_watch.py +79 -52
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/sync/change_detector.py +5 -1
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/sync/drift_detector.py +47 -45
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/sync/repository_sync.py +19 -20
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/sync/spec_to_code.py +63 -70
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/sync/watcher.py +29 -14
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/sync/watcher_enhanced.py +40 -17
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/telemetry.py +165 -124
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/templates/registry.py +100 -106
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/templates/specification_templates.py +27 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/acceptance_criteria.py +30 -26
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/bundle_converters.py +1 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/bundle_loader.py +72 -70
- specfact_cli-0.42.4/src/specfact_cli/utils/code_change_detector.py +268 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/context_detection.py +82 -70
- specfact_cli-0.42.4/src/specfact_cli/utils/contract_predicates.py +179 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/enrichment_context.py +2 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/enrichment_parser.py +222 -227
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/env_manager.py +117 -108
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/feature_keys.py +13 -2
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/git.py +28 -45
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/github_annotations.py +163 -159
- specfact_cli-0.42.4/src/specfact_cli/utils/icontract_helpers.py +241 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/ide_setup.py +343 -184
- specfact_cli-0.42.4/src/specfact_cli/utils/incremental_check.py +480 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/optional_deps.py +44 -47
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/performance.py +31 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/persona_ownership.py +4 -1
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/progress.py +17 -4
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/progressive_disclosure.py +55 -29
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/sdd_discovery.py +52 -43
- specfact_cli-0.42.4/src/specfact_cli/utils/source_scanner.py +717 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/startup_checks.py +205 -167
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/structure.py +168 -124
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/structured_io.py +7 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/suggestions.py +12 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/terminal.py +69 -30
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/yaml_utils.py +33 -35
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validation/command_audit.py +4 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/agile_validation.py +61 -66
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/change_proposal_integration.py +219 -162
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/cli_first_validator.py +2 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/contract_validator.py +1 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/fsm.py +70 -70
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/repro_checker.py +450 -326
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/schema.py +3 -2
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/contract_populator.py +14 -4
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/crosshair_runner.py +4 -1
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/crosshair_summary.py +144 -121
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/dependency_installer.py +12 -3
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/framework_detector.py +81 -67
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/frameworks/base.py +24 -8
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/frameworks/django.py +20 -5
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/frameworks/drf.py +20 -5
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/frameworks/fastapi.py +35 -19
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/frameworks/flask.py +65 -41
- specfact_cli-0.42.4/src/specfact_cli/validators/sidecar/harness_generator.py +847 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/models.py +13 -3
- specfact_cli-0.42.4/src/specfact_cli/validators/sidecar/orchestrator.py +373 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/specmatic_runner.py +4 -1
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/unannotated_detector.py +16 -4
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/versioning/analyzer.py +50 -40
- specfact_cli-0.42.2/README.md +0 -332
- specfact_cli-0.42.2/src/specfact_cli/analyzers/ambiguity_scanner.py +0 -961
- specfact_cli-0.42.2/src/specfact_cli/analyzers/relationship_mapper.py +0 -529
- specfact_cli-0.42.2/src/specfact_cli/generators/openapi_extractor.py +0 -1249
- specfact_cli-0.42.2/src/specfact_cli/generators/persona_exporter.py +0 -369
- specfact_cli-0.42.2/src/specfact_cli/importers/speckit_converter.py +0 -1131
- specfact_cli-0.42.2/src/specfact_cli/importers/speckit_scanner.py +0 -795
- specfact_cli-0.42.2/src/specfact_cli/registry/module_discovery.py +0 -135
- specfact_cli-0.42.2/src/specfact_cli/sync/bridge_sync.py +0 -4826
- specfact_cli-0.42.2/src/specfact_cli/utils/code_change_detector.py +0 -296
- specfact_cli-0.42.2/src/specfact_cli/utils/incremental_check.py +0 -425
- specfact_cli-0.42.2/src/specfact_cli/utils/source_scanner.py +0 -597
- specfact_cli-0.42.2/src/specfact_cli/validators/sidecar/harness_generator.py +0 -773
- specfact_cli-0.42.2/src/specfact_cli/validators/sidecar/orchestrator.py +0 -447
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/LICENSE +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/keys/README.md +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/keys/module-signing-public.pem +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/mappings/node-async.yaml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/mappings/python-async.yaml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/mappings/speckit-default.yaml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/prompts/shared/cli-enforcement.md +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/prompts/specfact.01-import.md +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/prompts/specfact.02-plan.md +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/prompts/specfact.03-review.md +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/prompts/specfact.04-sdd.md +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/prompts/specfact.05-enforce.md +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/prompts/specfact.06-sync.md +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/prompts/specfact.07-contracts.md +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/prompts/specfact.compare.md +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/prompts/specfact.validate.md +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/schemas/deviation.schema.json +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/schemas/plan.schema.json +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/schemas/protocol.schema.json +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/templates/github-action.yml.j2 +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/templates/persona/architect.md.j2 +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/templates/persona/developer.md.j2 +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/templates/persona/product-owner.md.j2 +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/templates/plan.bundle.yaml.j2 +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/templates/policies/kanban.yaml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/templates/policies/mixed.yaml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/templates/policies/safe.yaml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/templates/policies/scrum.yaml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/templates/pr-template.md.j2 +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/templates/protocol.yaml.j2 +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/resources/templates/telemetry.yaml.example +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/__main__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/adapters/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/adapters/registry.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/agents/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/agents/base.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/agents/sync_agent.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/analyzers/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/analyzers/control_flow_analyzer.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/backlog/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/backlog/adapters/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/backlog/mappers/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/backlog/mappers/template_config.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/analyze.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/contract_cmd.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/drift.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/enforce.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/generate.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/import_cmd.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/init.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/migrate.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/plan.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/project_cmd.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/repro.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/sdd.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/spec.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/sync.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/update.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/commands/validate.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/common/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/common/bundle_factory.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/common/logging_utils.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/common/text_utils.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/common/utils.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/comparators/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/contracts/crosshair_props.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/generators/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/generators/task_generator.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/groups/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/importers/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/integrations/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/merge/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/migrations/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/capabilities.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/protocol.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/quality.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/source_tracking.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/models/validation.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modes/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modes/detector.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/init/src/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/init/src/app.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/module_registry/src/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/module_registry/src/app.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/upgrade/src/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/modules/upgrade/src/app.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/parsers/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/dependency_resolver.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/registry/metadata.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/resources/semgrep/async.yml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/resources/semgrep/code-quality.yml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/resources/semgrep/feature-detection.yml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/sync/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/sync/code_to_spec.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/sync/spec_to_tests.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/templates/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/templates/defaults/defect_v1.yaml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/templates/defaults/enabler_v1.yaml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/templates/defaults/spike_v1.yaml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/templates/defaults/user_story_v1.yaml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/templates/frameworks/scrum/user_story_v1.yaml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/templates/personas/product-owner/user_story_v1.yaml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/templates/providers/ado/work_item_v1.yaml +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/auth_tokens.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/console.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/content_sanitizer.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/metadata.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/utils/prompts.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validation/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/validators/sidecar/frameworks/__init__.py +0 -0
- {specfact_cli-0.42.2 → specfact_cli-0.42.4}/src/specfact_cli/versioning/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specfact-cli
|
|
3
|
-
Version: 0.42.
|
|
3
|
+
Version: 0.42.4
|
|
4
4
|
Summary: The swiss knife CLI for agile DevOps teams. Keep backlog, specs, tests, and code in sync with validation and contract enforcement for new projects and long-lived codebases.
|
|
5
5
|
Project-URL: Homepage, https://github.com/nold-ai/specfact-cli
|
|
6
6
|
Project-URL: Repository, https://github.com/nold-ai/specfact-cli.git
|
|
@@ -308,7 +308,8 @@ Description-Content-Type: text/markdown
|
|
|
308
308
|
- Module-specific deep docs are canonically owned by `specfact-cli-modules`.
|
|
309
309
|
- The live modules docs site is currently published at `https://modules.specfact.io/`.
|
|
310
310
|
|
|
311
|
-
Use this repository's docs for
|
|
311
|
+
Use this repository's docs for the overall SpecFact workflow, CLI runtime lifecycle, module registry, trust model, and command-group topology.
|
|
312
|
+
Use the modules docs site for bundle-specific deep dives, adapter details, workflow tutorials, and module-authoring guidance.
|
|
312
313
|
In short, module-specific deep docs are canonically owned by `specfact-cli-modules`.
|
|
313
314
|
|
|
314
315
|
---
|
|
@@ -328,30 +329,30 @@ pip install -U specfact-cli
|
|
|
328
329
|
### Bootstrap and IDE Setup
|
|
329
330
|
|
|
330
331
|
```bash
|
|
331
|
-
# First run: install
|
|
332
|
+
# First run: install official bundles
|
|
332
333
|
specfact init --profile solo-developer
|
|
333
334
|
|
|
334
|
-
#
|
|
335
|
+
# Alternative bundle selection
|
|
335
336
|
specfact init --install backlog,codebase
|
|
336
337
|
specfact init --install all
|
|
337
338
|
|
|
338
|
-
#
|
|
339
|
-
specfact init --profile solo-developer
|
|
340
|
-
specfact init --install backlog,codebase
|
|
341
|
-
specfact init --install all
|
|
342
|
-
|
|
343
|
-
# Configure IDE prompts/templates (interactive selector by default)
|
|
339
|
+
# IDE prompt/template setup
|
|
344
340
|
specfact init ide
|
|
345
341
|
specfact init ide --ide cursor
|
|
346
342
|
specfact init ide --ide vscode
|
|
347
343
|
```
|
|
348
344
|
|
|
345
|
+
`specfact init ide` discovers prompt resources from installed workflow modules and exports them to your IDE. If module prompt payloads are not installed yet, the CLI uses packaged fallback resources.
|
|
346
|
+
|
|
349
347
|
### Run Your First Flow
|
|
350
348
|
|
|
351
349
|
```bash
|
|
352
350
|
# Analyze an existing codebase
|
|
353
351
|
specfact code import my-project --repo .
|
|
354
352
|
|
|
353
|
+
# Snapshot current project state
|
|
354
|
+
specfact project snapshot --bundle my-project
|
|
355
|
+
|
|
355
356
|
# Validate external code without modifying source
|
|
356
357
|
specfact code validate sidecar init my-project /path/to/repo
|
|
357
358
|
specfact code validate sidecar run my-project /path/to/repo
|
|
@@ -361,9 +362,9 @@ specfact code validate sidecar run my-project /path/to/repo
|
|
|
361
362
|
|
|
362
363
|
As of `0.40.0`, flat root commands are removed. Use grouped commands:
|
|
363
364
|
|
|
364
|
-
- `specfact validate ...`
|
|
365
|
-
- `specfact plan ...`
|
|
366
|
-
- `specfact policy ...`
|
|
365
|
+
- `specfact validate ...` -> `specfact code validate ...`
|
|
366
|
+
- `specfact plan ...` -> removed; use `specfact project devops-flow` or `specfact project snapshot`
|
|
367
|
+
- `specfact policy ...` -> removed; use `specfact backlog verify-readiness`
|
|
367
368
|
|
|
368
369
|
### Backlog Bridge (60 seconds)
|
|
369
370
|
|
|
@@ -376,19 +377,18 @@ These commands require the backlog bundle to be installed first, for example via
|
|
|
376
377
|
specfact backlog init-config --force
|
|
377
378
|
specfact backlog map-fields --provider ado --ado-org <org> --ado-project "<project>"
|
|
378
379
|
|
|
379
|
-
# 2) Run
|
|
380
|
-
specfact backlog
|
|
381
|
-
specfact backlog
|
|
380
|
+
# 2) Run ceremony workflows on real backlog scope
|
|
381
|
+
specfact backlog ceremony standup ado --ado-org <org> --ado-project "<project>" --state any --assignee any --limit 5
|
|
382
|
+
specfact backlog ceremony refinement ado --ado-org <org> --ado-project "<project>" --id <work-item-id> --preview
|
|
382
383
|
|
|
383
384
|
# 3) Keep backlog + spec intent aligned (avoid silent drift)
|
|
384
385
|
specfact backlog verify-readiness --bundle <bundle-name>
|
|
385
386
|
```
|
|
386
387
|
|
|
387
|
-
|
|
388
|
-
`specfact backlog daily github --repo-owner <owner> --repo-name <repo> ...`
|
|
388
|
+
Compatibility note: `specfact backlog daily ...` and `specfact backlog refine ...` still exist, but the preferred entrypoints are `backlog ceremony standup` and `backlog ceremony refinement`.
|
|
389
389
|
|
|
390
|
-
|
|
391
|
-
-
|
|
390
|
+
For GitHub, replace adapter/org/project with:
|
|
391
|
+
`specfact backlog ceremony standup github --repo-owner <owner> --repo-name <repo> --state any --assignee any --limit 5`
|
|
392
392
|
|
|
393
393
|
**AI IDE quick start**
|
|
394
394
|
|
|
@@ -399,26 +399,9 @@ Deep dive:
|
|
|
399
399
|
|
|
400
400
|
**Next steps**
|
|
401
401
|
|
|
402
|
-
- **[
|
|
403
|
-
- **[
|
|
404
|
-
- **[
|
|
405
|
-
|
|
406
|
-
---
|
|
407
|
-
|
|
408
|
-
## Proof and Expectations
|
|
409
|
-
|
|
410
|
-
- **Typical runtime**: 2-15 minutes depending on repo size and complexity.
|
|
411
|
-
- **Checkpointing**: Progress is saved during analysis so you can resume safely.
|
|
412
|
-
- **Performance**: Optimized for large codebases with cached parsing and file hashes.
|
|
413
|
-
|
|
414
|
-
---
|
|
415
|
-
|
|
416
|
-
## Why It Matters (Plain Language)
|
|
417
|
-
|
|
418
|
-
- **Clarity**: Turn messy code into clear specs your team can trust.
|
|
419
|
-
- **Safety**: Catch risky changes early with validation and contract checks.
|
|
420
|
-
- **Sync**: Keep backlog items, specs, tests, and code aligned end to end.
|
|
421
|
-
- **Adoption**: Simple CLI, no platform lock-in, works offline.
|
|
402
|
+
- **[Core CLI docs](docs/index.md)**
|
|
403
|
+
- **[Reference: command topology](docs/reference/commands.md)**
|
|
404
|
+
- **[Canonical modules docs site](https://modules.specfact.io/)**
|
|
422
405
|
|
|
423
406
|
---
|
|
424
407
|
|
|
@@ -430,14 +413,6 @@ Deep dive:
|
|
|
430
413
|
|
|
431
414
|
---
|
|
432
415
|
|
|
433
|
-
## How It Works (High Level)
|
|
434
|
-
|
|
435
|
-
1. **Analyze**: Read code and extract specs, gaps, and risks.
|
|
436
|
-
2. **Sync**: Connect specs, backlog items, and plans in one workflow.
|
|
437
|
-
3. **Validate**: Enforce contracts and block regressions before production.
|
|
438
|
-
|
|
439
|
-
---
|
|
440
|
-
|
|
441
416
|
## The Missing Link (Coder + DevOps Bridge)
|
|
442
417
|
|
|
443
418
|
Most tools help **either** coders **or** agile teams. SpecFact does both:
|
|
@@ -455,54 +430,37 @@ Recommended command entrypoints:
|
|
|
455
430
|
What the backlog readiness and ceremony commands do in practice:
|
|
456
431
|
- Turns team agreements (DoR, DoD, flow checks) into executable checks against your real backlog data.
|
|
457
432
|
- Shows exactly what is missing per item (for example missing acceptance criteria or definition of done).
|
|
458
|
-
-
|
|
433
|
+
- Runs structured ceremony workflows directly from the CLI.
|
|
459
434
|
|
|
460
435
|
Start with:
|
|
461
436
|
- `specfact backlog ceremony standup --help`
|
|
462
437
|
- `specfact backlog verify-readiness --bundle <bundle-name>`
|
|
463
438
|
- `specfact backlog refine --help`
|
|
464
439
|
|
|
465
|
-
**Try it now**
|
|
466
|
-
|
|
467
|
-
- **Coders**: [AI IDE Workflow](docs/guides/ai-ide-workflow.md)
|
|
468
|
-
- **Agile teams**: [Agile/Scrum Workflows](docs/guides/agile-scrum-workflows.md)
|
|
469
|
-
|
|
470
440
|
---
|
|
471
441
|
|
|
472
|
-
##
|
|
473
|
-
|
|
474
|
-
**Core runtime**
|
|
475
|
-
|
|
476
|
-
- **Permanent commands**: `init`, `module`, `upgrade`
|
|
477
|
-
- **Core responsibilities**: lifecycle, registry, trust, contracts, orchestration, shared runtime utilities
|
|
478
|
-
|
|
479
|
-
**Marketplace-installed bundles**
|
|
442
|
+
## Core CLI Features
|
|
480
443
|
|
|
481
|
-
-
|
|
482
|
-
- **Ceremony**: Standup, refinement, and planning entry points.
|
|
483
|
-
- **Policy**: DoR, DoD, flow, PI readiness checks.
|
|
484
|
-
- **Patch**: Preview, apply, and write changes safely.
|
|
444
|
+
The `specfact-cli` repository owns the platform-level features that every workflow bundle depends on:
|
|
485
445
|
|
|
486
|
-
|
|
446
|
+
- `specfact init` for first-run bootstrap and IDE setup.
|
|
447
|
+
- `specfact module` for install/list/show/search/enable/disable/uninstall/upgrade lifecycle flows.
|
|
448
|
+
- `specfact upgrade` for CLI upgrades.
|
|
449
|
+
- Runtime contracts, registry bootstrapping, trust checks, logging, and shared orchestration.
|
|
450
|
+
- The grouped command surface that mounts installed bundle families under `project`, `backlog`, `code`, `spec`, and `govern`.
|
|
487
451
|
|
|
488
|
-
|
|
489
|
-
- **Backlogs**: GitHub Issues, Azure DevOps, Jira, Linear
|
|
490
|
-
- **Contracts**: Specmatic, OpenAPI
|
|
452
|
+
## Official Modules Integration
|
|
491
453
|
|
|
492
|
-
|
|
454
|
+
Official workflow behavior now ships from `nold-ai/specfact-cli-modules`.
|
|
455
|
+
The core CLI discovers those bundle packages, mounts their command groups, and enforces compatibility, trust, and lifecycle rules.
|
|
493
456
|
|
|
494
|
-
|
|
495
|
-
- [Architecture Docs Index](docs/architecture/README.md)
|
|
496
|
-
- [Architecture Implementation Status](docs/architecture/implementation-status.md)
|
|
457
|
+
Installed official bundles expose the current grouped surfaces:
|
|
497
458
|
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
`
|
|
502
|
-
|
|
503
|
-
This core docs set remains the canonical docs entry point and release-line overview for marketplace concepts.
|
|
504
|
-
Bundle-specific deep docs are canonically owned by `specfact-cli-modules` and are currently published at:
|
|
505
|
-
`https://modules.specfact.io/`.
|
|
459
|
+
- `specfact project ...`
|
|
460
|
+
- `specfact backlog ...`
|
|
461
|
+
- `specfact code ...`
|
|
462
|
+
- `specfact spec ...`
|
|
463
|
+
- `specfact govern ...`
|
|
506
464
|
|
|
507
465
|
Install examples:
|
|
508
466
|
|
|
@@ -521,16 +479,17 @@ specfact module init --scope project
|
|
|
521
479
|
specfact module init
|
|
522
480
|
```
|
|
523
481
|
|
|
524
|
-
|
|
525
|
-
|
|
482
|
+
Use this repo's docs for the current CLI/runtime release branch and the overall process of how official modules plug into the core platform.
|
|
483
|
+
Use `https://modules.specfact.io/` for the in-depth backlog, project, spec, govern, adapter, and module-authoring guides.
|
|
526
484
|
|
|
527
|
-
|
|
528
|
-
- `nold-ai/specfact-govern` pulls `nold-ai/specfact-project`
|
|
485
|
+
---
|
|
529
486
|
|
|
530
|
-
|
|
531
|
-
Use the modules docs site for bundle-specific deep guidance so bundle-only changes can ship without rebuilding the core docs release branch.
|
|
487
|
+
## How It Works (High Level)
|
|
532
488
|
|
|
533
|
-
|
|
489
|
+
1. **Bootstrap**: install the CLI and initialize the official bundles you need.
|
|
490
|
+
2. **Analyze or sync**: import code, connect backlog systems, or sync external artifacts into project bundles.
|
|
491
|
+
3. **Validate**: run spec, governance, and sidecar validation flows before implementation or release.
|
|
492
|
+
4. **Iterate safely**: use module-provided workflows while the core runtime keeps command mounting, trust, and lifecycle consistent.
|
|
534
493
|
|
|
535
494
|
## Where SpecFact Fits
|
|
536
495
|
|
|
@@ -539,75 +498,3 @@ SpecFact complements your stack rather than replacing it.
|
|
|
539
498
|
- **Spec-Kit/OpenSpec** for authoring and change tracking
|
|
540
499
|
- **Backlog tools** for planning and delivery
|
|
541
500
|
- **CI/CD** for enforcement and regression prevention
|
|
542
|
-
|
|
543
|
-
**SpecFact connects them** with adapters, policy checks, and deterministic validation.
|
|
544
|
-
|
|
545
|
-
**Integrations snapshot**: GitHub, Azure DevOps, Jira, Linear, Spec-Kit, OpenSpec, Specmatic.
|
|
546
|
-
|
|
547
|
-
- **[Integrations Overview](docs/guides/integrations-overview.md)**
|
|
548
|
-
- **[DevOps Adapter Integration](docs/guides/devops-adapter-integration.md)**
|
|
549
|
-
|
|
550
|
-
---
|
|
551
|
-
|
|
552
|
-
## Recommended Paths
|
|
553
|
-
|
|
554
|
-
- **I want a quick win**: [Getting Started](docs/getting-started/README.md)
|
|
555
|
-
- **I use an AI IDE**: [AI IDE Workflow](docs/guides/ai-ide-workflow.md)
|
|
556
|
-
- **We have a team backlog**: [Agile/Scrum Workflows](docs/guides/agile-scrum-workflows.md)
|
|
557
|
-
- **We have a long-lived codebase**: [Working With Existing Code](docs/guides/brownfield-engineer.md)
|
|
558
|
-
|
|
559
|
-
---
|
|
560
|
-
|
|
561
|
-
## Documentation Map
|
|
562
|
-
|
|
563
|
-
- **[Documentation Index](docs/README.md)**
|
|
564
|
-
- **[Command Reference](docs/reference/commands.md)**
|
|
565
|
-
- **[Backlog Refinement](docs/guides/backlog-refinement.md)**
|
|
566
|
-
- **[Backlog Dependency Analysis](docs/guides/backlog-dependency-analysis.md)**
|
|
567
|
-
- **[Backlog Delta Commands](docs/guides/backlog-delta-commands.md)**
|
|
568
|
-
- **[Policy Engine Commands](docs/guides/policy-engine-commands.md)**
|
|
569
|
-
- **[Project DevOps Flow](docs/guides/project-devops-flow.md)**
|
|
570
|
-
- **[Sidecar Validation](docs/guides/sidecar-validation.md)**
|
|
571
|
-
- **[OpenSpec Journey](docs/guides/openspec-journey.md)**
|
|
572
|
-
|
|
573
|
-
---
|
|
574
|
-
|
|
575
|
-
## Contributing
|
|
576
|
-
|
|
577
|
-
We welcome contributions. See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
578
|
-
|
|
579
|
-
```bash
|
|
580
|
-
git clone https://github.com/nold-ai/specfact-cli.git
|
|
581
|
-
cd specfact-cli
|
|
582
|
-
pip install -e ".[dev]"
|
|
583
|
-
hatch run contract-test-full
|
|
584
|
-
```
|
|
585
|
-
|
|
586
|
-
---
|
|
587
|
-
|
|
588
|
-
## License
|
|
589
|
-
|
|
590
|
-
**Apache License 2.0** - Open source and enterprise-friendly.
|
|
591
|
-
|
|
592
|
-
[Full license](LICENSE)
|
|
593
|
-
|
|
594
|
-
---
|
|
595
|
-
|
|
596
|
-
## Support
|
|
597
|
-
|
|
598
|
-
- **GitHub Discussions**: https://github.com/nold-ai/specfact-cli/discussions
|
|
599
|
-
- **GitHub Issues**: https://github.com/nold-ai/specfact-cli/issues
|
|
600
|
-
- **Email**: hello@noldai.com
|
|
601
|
-
- **Debug logs**: Run with `--debug` and check `~/.specfact/logs/specfact-debug.log`.
|
|
602
|
-
|
|
603
|
-
---
|
|
604
|
-
|
|
605
|
-
<div align="center">
|
|
606
|
-
|
|
607
|
-
**Built by [NOLD AI](https://noldai.com)**
|
|
608
|
-
|
|
609
|
-
Copyright © 2025-2026 Nold AI (Owner: Dominikus Nold)
|
|
610
|
-
|
|
611
|
-
**Trademarks**: NOLD AI (NOLDAI) is a registered trademark (wordmark) at the European Union Intellectual Property Office (EUIPO). All other trademarks mentioned in this project are the property of their respective owners. See [TRADEMARKS.md](TRADEMARKS.md) for more information.
|
|
612
|
-
|
|
613
|
-
</div>
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# SpecFact CLI
|
|
2
|
+
|
|
3
|
+
> **The "swiss knife" CLI that turns any codebase into a clear, safe, and shippable workflow.**
|
|
4
|
+
> Keep backlog, specs, tests, and code in sync so AI-assisted changes do not break production.
|
|
5
|
+
> Works for brand-new projects and long-lived codebases - even if you are new to coding.
|
|
6
|
+
|
|
7
|
+
**No API keys required. Works offline. Zero vendor lock-in.**
|
|
8
|
+
|
|
9
|
+
[](https://pypi.org/project/specfact-cli/)
|
|
10
|
+
[](https://pypi.org/project/specfact-cli/)
|
|
11
|
+
[](LICENSE)
|
|
12
|
+
[](https://github.com/nold-ai/specfact-cli)
|
|
13
|
+
|
|
14
|
+
<div align="center">
|
|
15
|
+
|
|
16
|
+
**[specfact.com](https://specfact.com)** • **[specfact.io](https://specfact.io)** • **[specfact.dev](https://specfact.dev)** • **[Documentation](https://docs.specfact.io/)** • **[Support](mailto:hello@noldai.com)**
|
|
17
|
+
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Documentation Topology
|
|
23
|
+
|
|
24
|
+
`docs.specfact.io` is the canonical docs entry point for SpecFact.
|
|
25
|
+
|
|
26
|
+
- Core CLI/runtime/platform documentation remains owned by `specfact-cli`.
|
|
27
|
+
- Module-specific deep docs are canonically owned by `specfact-cli-modules`.
|
|
28
|
+
- The live modules docs site is currently published at `https://modules.specfact.io/`.
|
|
29
|
+
|
|
30
|
+
Use this repository's docs for the overall SpecFact workflow, CLI runtime lifecycle, module registry, trust model, and command-group topology.
|
|
31
|
+
Use the modules docs site for bundle-specific deep dives, adapter details, workflow tutorials, and module-authoring guidance.
|
|
32
|
+
In short, module-specific deep docs are canonically owned by `specfact-cli-modules`.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Start Here (60 seconds)
|
|
37
|
+
|
|
38
|
+
### Install
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Zero-install (recommended)
|
|
42
|
+
uvx specfact-cli@latest
|
|
43
|
+
|
|
44
|
+
# Or install globally
|
|
45
|
+
pip install -U specfact-cli
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Bootstrap and IDE Setup
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# First run: install official bundles
|
|
52
|
+
specfact init --profile solo-developer
|
|
53
|
+
|
|
54
|
+
# Alternative bundle selection
|
|
55
|
+
specfact init --install backlog,codebase
|
|
56
|
+
specfact init --install all
|
|
57
|
+
|
|
58
|
+
# IDE prompt/template setup
|
|
59
|
+
specfact init ide
|
|
60
|
+
specfact init ide --ide cursor
|
|
61
|
+
specfact init ide --ide vscode
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`specfact init ide` discovers prompt resources from installed workflow modules and exports them to your IDE. If module prompt payloads are not installed yet, the CLI uses packaged fallback resources.
|
|
65
|
+
|
|
66
|
+
### Run Your First Flow
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# Analyze an existing codebase
|
|
70
|
+
specfact code import my-project --repo .
|
|
71
|
+
|
|
72
|
+
# Snapshot current project state
|
|
73
|
+
specfact project snapshot --bundle my-project
|
|
74
|
+
|
|
75
|
+
# Validate external code without modifying source
|
|
76
|
+
specfact code validate sidecar init my-project /path/to/repo
|
|
77
|
+
specfact code validate sidecar run my-project /path/to/repo
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Migration Note (Flat Commands Removed)
|
|
81
|
+
|
|
82
|
+
As of `0.40.0`, flat root commands are removed. Use grouped commands:
|
|
83
|
+
|
|
84
|
+
- `specfact validate ...` -> `specfact code validate ...`
|
|
85
|
+
- `specfact plan ...` -> removed; use `specfact project devops-flow` or `specfact project snapshot`
|
|
86
|
+
- `specfact policy ...` -> removed; use `specfact backlog verify-readiness`
|
|
87
|
+
|
|
88
|
+
### Backlog Bridge (60 seconds)
|
|
89
|
+
|
|
90
|
+
SpecFact's USP is closing the drift gap between **backlog -> specs -> code**.
|
|
91
|
+
These commands require the backlog bundle to be installed first, for example via
|
|
92
|
+
`specfact init --profile backlog-team` or `specfact init --install backlog`.
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# 1) Initialize backlog config + field mapping
|
|
96
|
+
specfact backlog init-config --force
|
|
97
|
+
specfact backlog map-fields --provider ado --ado-org <org> --ado-project "<project>"
|
|
98
|
+
|
|
99
|
+
# 2) Run ceremony workflows on real backlog scope
|
|
100
|
+
specfact backlog ceremony standup ado --ado-org <org> --ado-project "<project>" --state any --assignee any --limit 5
|
|
101
|
+
specfact backlog ceremony refinement ado --ado-org <org> --ado-project "<project>" --id <work-item-id> --preview
|
|
102
|
+
|
|
103
|
+
# 3) Keep backlog + spec intent aligned (avoid silent drift)
|
|
104
|
+
specfact backlog verify-readiness --bundle <bundle-name>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Compatibility note: `specfact backlog daily ...` and `specfact backlog refine ...` still exist, but the preferred entrypoints are `backlog ceremony standup` and `backlog ceremony refinement`.
|
|
108
|
+
|
|
109
|
+
For GitHub, replace adapter/org/project with:
|
|
110
|
+
`specfact backlog ceremony standup github --repo-owner <owner> --repo-name <repo> --state any --assignee any --limit 5`
|
|
111
|
+
|
|
112
|
+
**AI IDE quick start**
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
# In your IDE chat (Cursor, VS Code, Copilot, etc.)
|
|
116
|
+
/specfact.01-import my-project --repo .
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Next steps**
|
|
120
|
+
|
|
121
|
+
- **[Core CLI docs](docs/index.md)**
|
|
122
|
+
- **[Reference: command topology](docs/reference/commands.md)**
|
|
123
|
+
- **[Canonical modules docs site](https://modules.specfact.io/)**
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Who It Is For
|
|
128
|
+
|
|
129
|
+
- **Vibe coders and new builders** who want to ship fast with guardrails and confidence.
|
|
130
|
+
- **Legacy professionals** who want AI speed without lowering standards.
|
|
131
|
+
- **DevOps and engineering leaders** who need evidence and repeatable workflows.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## The Missing Link (Coder + DevOps Bridge)
|
|
136
|
+
|
|
137
|
+
Most tools help **either** coders **or** agile teams. SpecFact does both:
|
|
138
|
+
|
|
139
|
+
- **Backlog sync that is actually strong**: round-trip sync + refinement with GitHub, Azure DevOps, Jira, Linear.
|
|
140
|
+
- **Ceremony support teams can run**: standup, refinement, sprint planning, flow metrics (Scrum/Kanban/SAFe).
|
|
141
|
+
- **Policy + validation**: DoR/DoD/flow checks plus contract enforcement for production-grade stability.
|
|
142
|
+
|
|
143
|
+
Recommended command entrypoints:
|
|
144
|
+
- `specfact backlog ceremony standup ...`
|
|
145
|
+
- `specfact backlog ceremony refinement ...`
|
|
146
|
+
- `specfact backlog verify-readiness --bundle <bundle-name>`
|
|
147
|
+
- `specfact backlog analyze-deps --bundle <bundle-name>`
|
|
148
|
+
|
|
149
|
+
What the backlog readiness and ceremony commands do in practice:
|
|
150
|
+
- Turns team agreements (DoR, DoD, flow checks) into executable checks against your real backlog data.
|
|
151
|
+
- Shows exactly what is missing per item (for example missing acceptance criteria or definition of done).
|
|
152
|
+
- Runs structured ceremony workflows directly from the CLI.
|
|
153
|
+
|
|
154
|
+
Start with:
|
|
155
|
+
- `specfact backlog ceremony standup --help`
|
|
156
|
+
- `specfact backlog verify-readiness --bundle <bundle-name>`
|
|
157
|
+
- `specfact backlog refine --help`
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Core CLI Features
|
|
162
|
+
|
|
163
|
+
The `specfact-cli` repository owns the platform-level features that every workflow bundle depends on:
|
|
164
|
+
|
|
165
|
+
- `specfact init` for first-run bootstrap and IDE setup.
|
|
166
|
+
- `specfact module` for install/list/show/search/enable/disable/uninstall/upgrade lifecycle flows.
|
|
167
|
+
- `specfact upgrade` for CLI upgrades.
|
|
168
|
+
- Runtime contracts, registry bootstrapping, trust checks, logging, and shared orchestration.
|
|
169
|
+
- The grouped command surface that mounts installed bundle families under `project`, `backlog`, `code`, `spec`, and `govern`.
|
|
170
|
+
|
|
171
|
+
## Official Modules Integration
|
|
172
|
+
|
|
173
|
+
Official workflow behavior now ships from `nold-ai/specfact-cli-modules`.
|
|
174
|
+
The core CLI discovers those bundle packages, mounts their command groups, and enforces compatibility, trust, and lifecycle rules.
|
|
175
|
+
|
|
176
|
+
Installed official bundles expose the current grouped surfaces:
|
|
177
|
+
|
|
178
|
+
- `specfact project ...`
|
|
179
|
+
- `specfact backlog ...`
|
|
180
|
+
- `specfact code ...`
|
|
181
|
+
- `specfact spec ...`
|
|
182
|
+
- `specfact govern ...`
|
|
183
|
+
|
|
184
|
+
Install examples:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
specfact module install nold-ai/specfact-project
|
|
188
|
+
specfact module install nold-ai/specfact-backlog
|
|
189
|
+
specfact module install nold-ai/specfact-codebase
|
|
190
|
+
specfact module install nold-ai/specfact-spec
|
|
191
|
+
specfact module install nold-ai/specfact-govern
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
If startup warns that bundled modules are missing or outdated, run:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
specfact module init --scope project
|
|
198
|
+
specfact module init
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Use this repo's docs for the current CLI/runtime release branch and the overall process of how official modules plug into the core platform.
|
|
202
|
+
Use `https://modules.specfact.io/` for the in-depth backlog, project, spec, govern, adapter, and module-authoring guides.
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## How It Works (High Level)
|
|
207
|
+
|
|
208
|
+
1. **Bootstrap**: install the CLI and initialize the official bundles you need.
|
|
209
|
+
2. **Analyze or sync**: import code, connect backlog systems, or sync external artifacts into project bundles.
|
|
210
|
+
3. **Validate**: run spec, governance, and sidecar validation flows before implementation or release.
|
|
211
|
+
4. **Iterate safely**: use module-provided workflows while the core runtime keeps command mounting, trust, and lifecycle consistent.
|
|
212
|
+
|
|
213
|
+
## Where SpecFact Fits
|
|
214
|
+
|
|
215
|
+
SpecFact complements your stack rather than replacing it.
|
|
216
|
+
|
|
217
|
+
- **Spec-Kit/OpenSpec** for authoring and change tracking
|
|
218
|
+
- **Backlog tools** for planning and delivery
|
|
219
|
+
- **CI/CD** for enforcement and regression prevention
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specfact-cli"
|
|
7
|
-
version = "0.42.
|
|
7
|
+
version = "0.42.4"
|
|
8
8
|
description = "The swiss knife CLI for agile DevOps teams. Keep backlog, specs, tests, and code in sync with validation and contract enforcement for new projects and long-lived codebases."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -730,6 +730,11 @@ ignore = [
|
|
|
730
730
|
"B008", # typer.Option/Argument in defaults (common Typer pattern)
|
|
731
731
|
]
|
|
732
732
|
|
|
733
|
+
# shellingham must be patched before Typer imports it; remaining imports follow the try/except.
|
|
734
|
+
"src/specfact_cli/cli.py" = [
|
|
735
|
+
"E402",
|
|
736
|
+
]
|
|
737
|
+
|
|
733
738
|
[tool.ruff.lint.isort]
|
|
734
739
|
# Match isort ruff profile configuration
|
|
735
740
|
# Ruff-compatible: multi_line_output = 3, combine_as_imports = true
|