specfact-cli 0.26.17__tar.gz → 0.28.0__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.17 → specfact_cli-0.28.0}/.gitignore +18 -7
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/PKG-INFO +104 -234
- specfact_cli-0.28.0/README.md +226 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/pyproject.toml +35 -6
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/__init__.py +1 -1
- specfact_cli-0.28.0/src/specfact_cli/__init__.py +13 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/analyzers/graph_analyzer.py +6 -6
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/cli.py +177 -72
- specfact_cli-0.28.0/src/specfact_cli/commands/analyze.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/auth.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/backlog_commands.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/contract_cmd.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/drift.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/enforce.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/generate.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/import_cmd.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/init.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/migrate.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/plan.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/project_cmd.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/repro.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/sdd.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/spec.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/sync.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/update.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/commands/validate.py +6 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/generators/persona_exporter.py +1 -1
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/merge/resolver.py +1 -1
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/plan.py +4 -1
- specfact_cli-0.28.0/src/specfact_cli/modules/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/analyze/module-package.yaml +10 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/analyze/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/analyze/src/app.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/auth/module-package.yaml +10 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/auth/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/auth/src/app.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/backlog/module-package.yaml +10 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/backlog/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/backlog/src/app.py +6 -0
- specfact_cli-0.26.17/src/specfact_cli/commands/backlog_commands.py → specfact_cli-0.28.0/src/specfact_cli/modules/backlog/src/commands.py +4 -2
- specfact_cli-0.28.0/src/specfact_cli/modules/contract/module-package.yaml +10 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/contract/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/contract/src/app.py +6 -0
- specfact_cli-0.26.17/src/specfact_cli/commands/contract_cmd.py → specfact_cli-0.28.0/src/specfact_cli/modules/contract/src/commands.py +6 -3
- specfact_cli-0.28.0/src/specfact_cli/modules/drift/module-package.yaml +10 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/drift/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/drift/src/app.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/enforce/module-package.yaml +11 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/enforce/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/enforce/src/app.py +6 -0
- specfact_cli-0.26.17/src/specfact_cli/commands/enforce.py → specfact_cli-0.28.0/src/specfact_cli/modules/enforce/src/commands.py +1 -1
- specfact_cli-0.28.0/src/specfact_cli/modules/generate/module-package.yaml +11 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/generate/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/generate/src/app.py +6 -0
- specfact_cli-0.26.17/src/specfact_cli/commands/generate.py → specfact_cli-0.28.0/src/specfact_cli/modules/generate/src/commands.py +1 -1
- specfact_cli-0.28.0/src/specfact_cli/modules/import_cmd/module-package.yaml +10 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/import_cmd/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/import_cmd/src/app.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/init/module-package.yaml +10 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/init/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/init/src/app.py +6 -0
- specfact_cli-0.26.17/src/specfact_cli/commands/init.py → specfact_cli-0.28.0/src/specfact_cli/modules/init/src/commands.py +30 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/migrate/module-package.yaml +10 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/migrate/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/migrate/src/app.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/plan/module-package.yaml +11 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/plan/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/plan/src/app.py +6 -0
- specfact_cli-0.26.17/src/specfact_cli/commands/plan.py → specfact_cli-0.28.0/src/specfact_cli/modules/plan/src/commands.py +41 -24
- specfact_cli-0.28.0/src/specfact_cli/modules/project/module-package.yaml +10 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/project/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/project/src/app.py +6 -0
- specfact_cli-0.26.17/src/specfact_cli/commands/project_cmd.py → specfact_cli-0.28.0/src/specfact_cli/modules/project/src/commands.py +6 -9
- specfact_cli-0.28.0/src/specfact_cli/modules/repro/module-package.yaml +10 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/repro/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/repro/src/app.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/sdd/module-package.yaml +10 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/sdd/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/sdd/src/app.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/spec/module-package.yaml +10 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/spec/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/spec/src/app.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/sync/module-package.yaml +12 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/sync/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/sync/src/app.py +6 -0
- specfact_cli-0.26.17/src/specfact_cli/commands/sync.py → specfact_cli-0.28.0/src/specfact_cli/modules/sync/src/commands.py +96 -9
- specfact_cli-0.28.0/src/specfact_cli/modules/upgrade/module-package.yaml +10 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/upgrade/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/upgrade/src/app.py +6 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/validate/module-package.yaml +10 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/validate/src/__init__.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/modules/validate/src/app.py +6 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/parsers/persona_importer.py +2 -2
- specfact_cli-0.28.0/src/specfact_cli/registry/__init__.py +12 -0
- specfact_cli-0.28.0/src/specfact_cli/registry/bootstrap.py +16 -0
- specfact_cli-0.28.0/src/specfact_cli/registry/help_cache.py +141 -0
- specfact_cli-0.28.0/src/specfact_cli/registry/metadata.py +19 -0
- specfact_cli-0.28.0/src/specfact_cli/registry/module_packages.py +232 -0
- specfact_cli-0.28.0/src/specfact_cli/registry/module_state.py +60 -0
- specfact_cli-0.28.0/src/specfact_cli/registry/registry.py +115 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/git.py +3 -3
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/ide_setup.py +1 -0
- specfact_cli-0.28.0/src/specfact_cli/utils/persona_ownership.py +34 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/source_scanner.py +14 -11
- specfact_cli-0.26.17/README.md +0 -356
- specfact_cli-0.26.17/src/specfact_cli/__init__.py +0 -14
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/LICENSE.md +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/mappings/node-async.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/mappings/python-async.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/mappings/speckit-default.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/prompts/shared/cli-enforcement.md +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/prompts/specfact.01-import.md +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/prompts/specfact.02-plan.md +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/prompts/specfact.03-review.md +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/prompts/specfact.04-sdd.md +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/prompts/specfact.05-enforce.md +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/prompts/specfact.06-sync.md +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/prompts/specfact.07-contracts.md +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/prompts/specfact.backlog-daily.md +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/prompts/specfact.backlog-refine.md +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/prompts/specfact.compare.md +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/prompts/specfact.sync-backlog.md +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/prompts/specfact.validate.md +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/schemas/deviation.schema.json +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/schemas/plan.schema.json +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/schemas/protocol.schema.json +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/backlog/defaults/defect_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/backlog/defaults/enabler_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/backlog/defaults/spike_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/backlog/defaults/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/backlog/field_mappings/ado_agile.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/backlog/field_mappings/ado_default.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/backlog/field_mappings/ado_kanban.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/backlog/field_mappings/ado_safe.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/backlog/field_mappings/ado_scrum.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/backlog/frameworks/safe/safe_feature_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/backlog/frameworks/scrum/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/backlog/personas/developer/developer_task_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/backlog/personas/product-owner/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/backlog/providers/ado/work_item_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/github-action.yml.j2 +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/persona/architect.md.j2 +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/persona/developer.md.j2 +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/persona/product-owner.md.j2 +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/plan.bundle.yaml.j2 +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/pr-template.md.j2 +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/protocol.yaml.j2 +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/resources/templates/telemetry.yaml.example +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/__main__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/adapters/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/adapters/ado.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/adapters/backlog_base.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/adapters/base.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/adapters/github.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/adapters/openspec.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/adapters/openspec_parser.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/adapters/registry.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/adapters/speckit.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/agents/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/agents/analyze_agent.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/agents/base.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/agents/plan_agent.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/agents/registry.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/agents/sync_agent.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/analyzers/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/analyzers/ambiguity_scanner.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/analyzers/code_analyzer.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/analyzers/constitution_evidence_extractor.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/analyzers/contract_extractor.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/analyzers/control_flow_analyzer.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/analyzers/relationship_mapper.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/analyzers/requirement_extractor.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/analyzers/test_pattern_extractor.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/adapters/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/adapters/base.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/adapters/local_yaml_adapter.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/ai_refiner.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/converter.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/filters.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/format_detector.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/formats/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/formats/base.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/formats/markdown_format.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/formats/structured_format.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/mappers/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/mappers/ado_mapper.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/mappers/base.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/mappers/github_mapper.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/mappers/template_config.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/backlog/template_detector.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/commands/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/common/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/common/logger_setup.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/common/logging_utils.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/common/text_utils.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/common/utils.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/comparators/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/comparators/plan_comparator.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/contracts/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/contracts/crosshair_props.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/enrichers/constitution_enricher.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/enrichers/plan_enricher.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/generators/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/generators/contract_generator.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/generators/openapi_extractor.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/generators/plan_generator.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/generators/protocol_generator.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/generators/report_generator.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/generators/task_generator.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/generators/test_to_openapi.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/generators/workflow_generator.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/importers/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/importers/speckit_converter.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/importers/speckit_scanner.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/integrations/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/integrations/specmatic.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/merge/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/migrations/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/migrations/plan_migrator.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/backlog_item.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/bridge.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/capabilities.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/change.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/contract.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/deviation.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/dor_config.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/enforcement.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/persona_template.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/project.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/protocol.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/quality.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/sdd.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/source_tracking.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/models/task.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/modes/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/modes/detector.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/modes/router.py +0 -0
- /specfact_cli-0.26.17/src/specfact_cli/commands/analyze.py → /specfact_cli-0.28.0/src/specfact_cli/modules/analyze/src/commands.py +0 -0
- /specfact_cli-0.26.17/src/specfact_cli/commands/auth.py → /specfact_cli-0.28.0/src/specfact_cli/modules/auth/src/commands.py +0 -0
- /specfact_cli-0.26.17/src/specfact_cli/commands/drift.py → /specfact_cli-0.28.0/src/specfact_cli/modules/drift/src/commands.py +0 -0
- /specfact_cli-0.26.17/src/specfact_cli/commands/import_cmd.py → /specfact_cli-0.28.0/src/specfact_cli/modules/import_cmd/src/commands.py +0 -0
- /specfact_cli-0.26.17/src/specfact_cli/commands/migrate.py → /specfact_cli-0.28.0/src/specfact_cli/modules/migrate/src/commands.py +0 -0
- /specfact_cli-0.26.17/src/specfact_cli/commands/repro.py → /specfact_cli-0.28.0/src/specfact_cli/modules/repro/src/commands.py +0 -0
- /specfact_cli-0.26.17/src/specfact_cli/commands/sdd.py → /specfact_cli-0.28.0/src/specfact_cli/modules/sdd/src/commands.py +0 -0
- /specfact_cli-0.26.17/src/specfact_cli/commands/spec.py → /specfact_cli-0.28.0/src/specfact_cli/modules/spec/src/commands.py +0 -0
- /specfact_cli-0.26.17/src/specfact_cli/commands/update.py → /specfact_cli-0.28.0/src/specfact_cli/modules/upgrade/src/commands.py +0 -0
- /specfact_cli-0.26.17/src/specfact_cli/commands/validate.py → /specfact_cli-0.28.0/src/specfact_cli/modules/validate/src/commands.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/parsers/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/resources/semgrep/async.yml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/resources/semgrep/code-quality.yml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/resources/semgrep/feature-detection.yml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/runtime.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/sync/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/sync/bridge_probe.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/sync/bridge_sync.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/sync/bridge_watch.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/sync/change_detector.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/sync/code_to_spec.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/sync/drift_detector.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/sync/repository_sync.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/sync/spec_to_code.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/sync/spec_to_tests.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/sync/watcher.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/sync/watcher_enhanced.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/telemetry.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/templates/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/templates/bridge_templates.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/templates/defaults/defect_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/templates/defaults/enabler_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/templates/defaults/spike_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/templates/defaults/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/templates/frameworks/scrum/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/templates/personas/product-owner/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/templates/providers/ado/work_item_v1.yaml +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/templates/registry.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/templates/specification_templates.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/acceptance_criteria.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/auth_tokens.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/bundle_loader.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/code_change_detector.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/console.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/content_sanitizer.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/context_detection.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/enrichment_context.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/enrichment_parser.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/env_manager.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/feature_keys.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/github_annotations.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/incremental_check.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/metadata.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/optional_deps.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/performance.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/progress.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/progressive_disclosure.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/prompts.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/sdd_discovery.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/startup_checks.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/structure.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/structured_io.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/suggestions.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/terminal.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/utils/yaml_utils.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/agile_validation.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/change_proposal_integration.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/cli_first_validator.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/contract_validator.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/fsm.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/repro_checker.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/schema.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/contract_populator.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/crosshair_runner.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/crosshair_summary.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/dependency_installer.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/framework_detector.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/frameworks/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/frameworks/base.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/frameworks/django.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/frameworks/drf.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/frameworks/fastapi.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/frameworks/flask.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/harness_generator.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/models.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/orchestrator.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/specmatic_runner.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/validators/sidecar/unannotated_detector.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/versioning/__init__.py +0 -0
- {specfact_cli-0.26.17 → specfact_cli-0.28.0}/src/specfact_cli/versioning/analyzer.py +0 -0
|
@@ -95,15 +95,21 @@ docs/internal/
|
|
|
95
95
|
|
|
96
96
|
# Ignore .specify artifacts
|
|
97
97
|
.specify/
|
|
98
|
-
.cursor/commands/speckit
|
|
98
|
+
.cursor/commands/speckit.*.md
|
|
99
99
|
/specs/
|
|
100
100
|
|
|
101
|
-
# Include openspec/specs/ directory
|
|
102
|
-
!openspec/
|
|
103
|
-
|
|
104
101
|
# Ignore specfact-cli prompt templates
|
|
105
|
-
.cursor/commands/specfact
|
|
106
|
-
.
|
|
102
|
+
.cursor/commands/specfact.*.md
|
|
103
|
+
.cursor/commands/opsx-*.md
|
|
104
|
+
|
|
105
|
+
.cursor/skills/openspec-*/
|
|
106
|
+
|
|
107
|
+
.github/prompts/specfact.*.md
|
|
108
|
+
.github/prompts/opsx-*.md
|
|
109
|
+
|
|
110
|
+
.claude/commands/opsx/
|
|
111
|
+
.claude/skills/openspec-*/
|
|
112
|
+
!.claude/skills/openspec-workflows/
|
|
107
113
|
|
|
108
114
|
# Semgrep rules (generated from tools/semgrep/ - source rules are versioned)
|
|
109
115
|
.semgrep/
|
|
@@ -127,4 +133,9 @@ findings.json
|
|
|
127
133
|
answers.json
|
|
128
134
|
questions.json
|
|
129
135
|
docs/project-plans/
|
|
130
|
-
harness_contracts.py
|
|
136
|
+
harness_contracts.py
|
|
137
|
+
|
|
138
|
+
# semgrep artifacts
|
|
139
|
+
lang.json
|
|
140
|
+
Language.ml
|
|
141
|
+
Language.mli
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specfact-cli
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.28.0
|
|
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
|
|
7
7
|
Project-URL: Documentation, https://github.com/nold-ai/specfact-cli#readme
|
|
@@ -211,7 +211,7 @@ License: Apache License
|
|
|
211
211
|
See the License for the specific language governing permissions and
|
|
212
212
|
limitations under the License.
|
|
213
213
|
License-File: LICENSE.md
|
|
214
|
-
Keywords:
|
|
214
|
+
Keywords: agile,backlog,beartype,ceremonies,cli,contract-driven-development,contracts,crosshair,devops,existing-code,icontract,kanban,legacy,modernization,policy-as-code,property-based-testing,safe,scrum,specfact,specs,tdd,validation
|
|
215
215
|
Classifier: Development Status :: 4 - Beta
|
|
216
216
|
Classifier: Intended Audience :: Developers
|
|
217
217
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
@@ -278,319 +278,194 @@ Description-Content-Type: text/markdown
|
|
|
278
278
|
|
|
279
279
|
# SpecFact CLI
|
|
280
280
|
|
|
281
|
-
> **
|
|
282
|
-
>
|
|
281
|
+
> **The "swiss knife" CLI that turns any codebase into a clear, safe, and shippable workflow.**
|
|
282
|
+
> Keep backlog, specs, tests, and code in sync so AI-assisted changes do not break production.
|
|
283
|
+
> Works for brand-new projects and long-lived codebases - even if you are new to coding.
|
|
283
284
|
|
|
284
285
|
**No API keys required. Works offline. Zero vendor lock-in.**
|
|
285
286
|
|
|
286
|
-
[](https://pypi.org/project/specfact-cli/)
|
|
287
|
+
[](https://pypi.org/project/specfact-cli/)
|
|
287
288
|
[](https://pypi.org/project/specfact-cli/)
|
|
288
289
|
[](LICENSE.md)
|
|
289
|
-
[](https://github.com/nold-ai/specfact-cli)
|
|
290
291
|
|
|
291
292
|
<div align="center">
|
|
292
293
|
|
|
293
|
-
**[
|
|
294
|
+
**[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)**
|
|
294
295
|
|
|
295
296
|
</div>
|
|
296
297
|
|
|
297
|
-
## 🌐 SpecFact Domains
|
|
298
|
-
|
|
299
|
-
- **[specfact.com](https://specfact.com)** - Commercial landing page (marketing, pricing, enterprise)
|
|
300
|
-
- **[specfact.io](https://specfact.io)** - Product ecosystem hub (CLI reference, integrations, changelog, product docs)
|
|
301
|
-
- **[specfact.dev](https://specfact.dev)** - Developer community (tutorials, guides, blog, community content) ⭐ **For developers**
|
|
302
|
-
- **[docs.specfact.io](https://docs.specfact.io/)** - Complete online documentation
|
|
303
|
-
|
|
304
|
-
---
|
|
305
|
-
|
|
306
|
-
## What is SpecFact?
|
|
307
|
-
|
|
308
|
-
**SpecFact CLI analyzes your existing Python code** to automatically extract specifications, find missing tests and contracts, and enforce them to prevent bugs during modernization.
|
|
309
|
-
|
|
310
|
-
**Perfect for:** Teams modernizing legacy Python systems who can't afford production bugs during migration.
|
|
311
|
-
|
|
312
|
-
### Why SpecFact?
|
|
313
|
-
|
|
314
|
-
AI coding assistants are powerful but unpredictable when requirements live in chat history. SpecFact adds a **brownfield-first analysis workflow** that understands existing code, extracts specs automatically, and enforces them as runtime contracts, giving you deterministic, reviewable outputs.
|
|
315
|
-
|
|
316
|
-
**Key outcomes:**
|
|
317
|
-
|
|
318
|
-
- **Understand legacy code** in minutes, not weeks (automatic spec extraction)
|
|
319
|
-
- **Find gaps** in tests, contracts, and documentation automatically
|
|
320
|
-
- **Prevent regressions** with runtime contract enforcement during modernization
|
|
321
|
-
- **Works with the tools you already use**: VS Code, Cursor, GitHub Actions, pre-commit hooks
|
|
322
|
-
- **No API keys required** - Works completely offline
|
|
323
|
-
|
|
324
298
|
---
|
|
325
299
|
|
|
326
|
-
##
|
|
300
|
+
## Start Here (60 seconds)
|
|
327
301
|
|
|
328
|
-
###
|
|
302
|
+
### Install
|
|
329
303
|
|
|
330
304
|
```bash
|
|
331
|
-
# Zero-install (recommended
|
|
305
|
+
# Zero-install (recommended)
|
|
332
306
|
uvx specfact-cli@latest
|
|
333
307
|
|
|
334
308
|
# Or install globally
|
|
335
309
|
pip install -U specfact-cli
|
|
336
310
|
```
|
|
337
311
|
|
|
338
|
-
###
|
|
339
|
-
|
|
340
|
-
**Set up slash commands in your IDE (Cursor, VS Code, Copilot, etc.):**
|
|
312
|
+
### Initialize IDE Integration (optional but recommended)
|
|
341
313
|
|
|
342
314
|
```bash
|
|
343
|
-
# Auto-detect IDE and initialize
|
|
344
315
|
specfact init
|
|
345
|
-
|
|
346
|
-
# Or specify IDE explicitly
|
|
347
316
|
specfact init --ide cursor
|
|
348
317
|
specfact init --ide vscode
|
|
349
|
-
|
|
350
|
-
# Install required packages for contract enhancement
|
|
351
|
-
specfact init --ide cursor --install-deps
|
|
352
318
|
```
|
|
353
319
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
- Copies prompt templates to your IDE
|
|
357
|
-
- Makes slash commands available in your IDE's AI chat
|
|
358
|
-
- Optionally installs required packages (`beartype`, `icontract`, `crosshair-tool`, `pytest`)
|
|
359
|
-
|
|
360
|
-
### Step 3: Run Your First Analysis
|
|
361
|
-
|
|
362
|
-
**In your IDE's AI chat, use the slash command:**
|
|
363
|
-
|
|
364
|
-
```bash
|
|
365
|
-
# In IDE chat (Cursor, VS Code, Copilot, etc.)
|
|
366
|
-
/specfact.01-import my-project --repo .
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
**Or use the CLI directly:**
|
|
320
|
+
### Run Your First Flow
|
|
370
321
|
|
|
371
322
|
```bash
|
|
372
|
-
# Analyze
|
|
323
|
+
# Analyze an existing codebase
|
|
373
324
|
specfact import from-code my-project --repo .
|
|
374
325
|
|
|
375
|
-
#
|
|
326
|
+
# Validate external code without modifying source
|
|
376
327
|
specfact validate sidecar init my-project /path/to/repo
|
|
377
328
|
specfact validate sidecar run my-project /path/to/repo
|
|
378
329
|
```
|
|
379
330
|
|
|
380
|
-
|
|
331
|
+
**AI IDE quick start**
|
|
381
332
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
333
|
+
```bash
|
|
334
|
+
# In your IDE chat (Cursor, VS Code, Copilot, etc.)
|
|
335
|
+
/specfact.01-import my-project --repo .
|
|
336
|
+
```
|
|
385
337
|
|
|
386
|
-
**
|
|
338
|
+
**Next steps**
|
|
387
339
|
|
|
388
|
-
|
|
389
|
-
|
|
340
|
+
- **[Getting Started](docs/getting-started/README.md)**
|
|
341
|
+
- **[AI IDE Workflow](docs/guides/ai-ide-workflow.md)**
|
|
342
|
+
- **[Command Chains](docs/guides/command-chains.md)**
|
|
390
343
|
|
|
391
344
|
---
|
|
392
345
|
|
|
393
|
-
##
|
|
394
|
-
|
|
395
|
-
### New to SpecFact?
|
|
396
|
-
|
|
397
|
-
**Primary Goal**: Analyze legacy Python → find gaps → enforce contracts
|
|
398
|
-
|
|
399
|
-
1. **[Getting Started](docs/getting-started/README.md)** - Install and run your first command
|
|
400
|
-
2. **[Command Chains Reference](docs/guides/command-chains.md)** ⭐ **NEW** - Complete workflows from start to finish
|
|
401
|
-
3. **[Common Tasks Quick Reference](docs/guides/common-tasks.md)** ⭐ **NEW** - Quick answers to "How do I X?"
|
|
402
|
-
4. **[Modernizing Legacy Code?](docs/guides/brownfield-engineer.md)** ⭐ - Brownfield-first guide
|
|
403
|
-
5. **[The Brownfield Journey](docs/guides/brownfield-journey.md)** ⭐ - Complete modernization workflow
|
|
404
|
-
|
|
405
|
-
**Time**: < 10 minutes | **Result**: Running your first brownfield analysis
|
|
406
|
-
|
|
407
|
-
### Using AI IDEs? (Cursor, Copilot, Claude)
|
|
346
|
+
## Proof and Expectations
|
|
408
347
|
|
|
409
|
-
**
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
### Working with a Team?
|
|
414
|
-
|
|
415
|
-
**Primary Goal**: Enable team collaboration with role-based workflows
|
|
416
|
-
|
|
417
|
-
👉 **[Agile/Scrum Workflows](docs/guides/agile-scrum-workflows.md)** ⭐ - Persona-based team collaboration
|
|
418
|
-
|
|
419
|
-
### Need Integrations?
|
|
420
|
-
|
|
421
|
-
**Primary Goal**: Integrate with Spec-Kit, OpenSpec, Specmatic, or DevOps tools
|
|
422
|
-
|
|
423
|
-
👉 **[Integrations Overview](docs/guides/integrations-overview.md)** ⭐ **NEW** - Complete guide to all integrations
|
|
348
|
+
- **Typical runtime**: 2-15 minutes depending on repo size and complexity.
|
|
349
|
+
- **Checkpointing**: Progress is saved during analysis so you can resume safely.
|
|
350
|
+
- **Performance**: Optimized for large codebases with cached parsing and file hashes.
|
|
424
351
|
|
|
425
352
|
---
|
|
426
353
|
|
|
427
|
-
##
|
|
428
|
-
|
|
429
|
-
### 🔍 Code Analysis
|
|
430
|
-
|
|
431
|
-
- **Reverse engineer** legacy code into documented specs
|
|
432
|
-
- **Find gaps** in tests, contracts, and documentation
|
|
433
|
-
- **Works with** any Python project (no special setup required)
|
|
434
|
-
|
|
435
|
-
👉 **[Command Chains](docs/guides/command-chains.md)** - See complete workflows
|
|
436
|
-
|
|
437
|
-
### 🛡️ Contract Enforcement
|
|
438
|
-
|
|
439
|
-
- **Prevent regressions** with runtime contract validation
|
|
440
|
-
- **CI/CD integration** - Block bad code from merging
|
|
441
|
-
- **Works offline** - No cloud required
|
|
442
|
-
- **Sidecar validation** - Validate external codebases without modifying source code
|
|
443
|
-
|
|
444
|
-
👉 **[Command Reference](docs/reference/commands.md)** - All enforcement commands
|
|
445
|
-
👉 **[Sidecar Validation Guide](docs/guides/sidecar-validation.md)** - Validate external codebases
|
|
446
|
-
|
|
447
|
-
### 👥 Team Collaboration
|
|
448
|
-
|
|
449
|
-
- **Role-based workflows** - Product Owners, Architects, Developers work in parallel
|
|
450
|
-
- **Markdown-based** - No YAML editing required
|
|
451
|
-
- **Agile/scrum ready** - DoR checklists, story points, dependencies
|
|
452
|
-
- **Backlog standardization** 🆕 - Template-driven refinement with persona/framework filtering
|
|
453
|
-
- **Sprint/iteration filtering** 🆕 - Filter by sprint, release, iteration for agile workflows
|
|
454
|
-
- **Interactive field mapping** 🆕 - Discover and map Azure DevOps fields with arrow-key navigation
|
|
455
|
-
- **Azure DevOps integration** 🆕 - Full support for ADO work items with automatic token resolution
|
|
354
|
+
## Why It Matters (Plain Language)
|
|
456
355
|
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
### 🔌 Integrations
|
|
462
|
-
|
|
463
|
-
- **VS Code, Cursor** - Catch bugs before you commit
|
|
464
|
-
- **GitHub Actions** - Automated quality gates
|
|
465
|
-
- **AI IDEs** - Generate prompts for fixing gaps
|
|
466
|
-
- **DevOps tools** - Sync with GitHub Issues, Azure DevOps, Linear, Jira
|
|
467
|
-
- **Backlog Refinement** 🆕 - AI-assisted template-driven refinement for standardizing work items
|
|
468
|
-
- **Azure DevOps field mapping** 🆕 - Interactive field discovery and mapping for custom ADO process templates
|
|
469
|
-
- **Spec-Kit, OpenSpec, Specmatic** - Works with your existing tools
|
|
470
|
-
|
|
471
|
-
👉 **[Integrations Overview](docs/guides/integrations-overview.md)** - All integration options
|
|
472
|
-
👉 **[Backlog Refinement Guide](docs/guides/backlog-refinement.md)** 🆕 **NEW** - Template-driven backlog standardization
|
|
473
|
-
👉 **[Custom Field Mapping](docs/guides/custom-field-mapping.md)** 🆕 **NEW** - Interactive ADO field mapping
|
|
356
|
+
- **Clarity**: Turn messy code into clear specs your team can trust.
|
|
357
|
+
- **Safety**: Catch risky changes early with validation and contract checks.
|
|
358
|
+
- **Sync**: Keep backlog items, specs, tests, and code aligned end to end.
|
|
359
|
+
- **Adoption**: Simple CLI, no platform lock-in, works offline.
|
|
474
360
|
|
|
475
361
|
---
|
|
476
362
|
|
|
477
|
-
##
|
|
478
|
-
|
|
479
|
-
### 1. Modernizing Legacy Code ⭐ **Most Common**
|
|
480
|
-
|
|
481
|
-
**Problem:** Existing codebase with no specs or outdated documentation
|
|
482
|
-
|
|
483
|
-
👉 **[Brownfield Modernization Guide](docs/guides/brownfield-engineer.md)** - Complete walkthrough
|
|
484
|
-
|
|
485
|
-
### 1.5. Validating External Codebases (Sidecar Validation) 🆕
|
|
486
|
-
|
|
487
|
-
**Problem:** Need to validate third-party libraries or legacy codebases without modifying source code
|
|
363
|
+
## Who It Is For
|
|
488
364
|
|
|
489
|
-
|
|
365
|
+
- **Vibe coders and new builders** who want to ship fast with guardrails and confidence.
|
|
366
|
+
- **Legacy professionals** who want AI speed without lowering standards.
|
|
367
|
+
- **DevOps and engineering leaders** who need evidence and repeatable workflows.
|
|
490
368
|
|
|
491
|
-
|
|
369
|
+
---
|
|
492
370
|
|
|
493
|
-
|
|
371
|
+
## How It Works (High Level)
|
|
494
372
|
|
|
495
|
-
|
|
373
|
+
1. **Analyze**: Read code and extract specs, gaps, and risks.
|
|
374
|
+
2. **Sync**: Connect specs, backlog items, and plans in one workflow.
|
|
375
|
+
3. **Validate**: Enforce contracts and block regressions before production.
|
|
496
376
|
|
|
497
|
-
|
|
377
|
+
---
|
|
498
378
|
|
|
499
|
-
|
|
379
|
+
## The Missing Link (Coder + DevOps Bridge)
|
|
500
380
|
|
|
501
|
-
|
|
381
|
+
Most tools help **either** coders **or** agile teams. SpecFact does both:
|
|
502
382
|
|
|
503
|
-
|
|
383
|
+
- **Backlog sync that is actually strong**: round-trip sync + refinement with GitHub, Azure DevOps, Jira, Linear.
|
|
384
|
+
- **Ceremony support teams can run**: standup, refinement, sprint planning, flow metrics (Scrum/Kanban/SAFe).
|
|
385
|
+
- **Policy + validation**: DoR/DoD/flow checks plus contract enforcement for production-grade stability.
|
|
504
386
|
|
|
505
|
-
**
|
|
387
|
+
**Try it now**
|
|
506
388
|
|
|
507
|
-
|
|
389
|
+
- **Coders**: [AI IDE Workflow](docs/guides/ai-ide-workflow.md)
|
|
390
|
+
- **Agile teams**: [Agile/Scrum Workflows](docs/guides/agile-scrum-workflows.md)
|
|
508
391
|
|
|
509
392
|
---
|
|
510
393
|
|
|
511
|
-
##
|
|
394
|
+
## Modules and Capabilities
|
|
512
395
|
|
|
513
|
-
|
|
396
|
+
**Core modules**
|
|
514
397
|
|
|
515
|
-
- **
|
|
516
|
-
- **
|
|
517
|
-
- **
|
|
398
|
+
- **Analyze**: Extract specs and plans from existing code.
|
|
399
|
+
- **Validate**: Enforce contracts, run reproducible checks, and block regressions.
|
|
400
|
+
- **Report**: CI/CD summaries and evidence outputs.
|
|
518
401
|
|
|
519
|
-
|
|
402
|
+
**Agile DevOps modules**
|
|
520
403
|
|
|
521
|
-
- **
|
|
522
|
-
- **
|
|
523
|
-
- **
|
|
404
|
+
- **Backlog**: Refinement, dependency analysis, sprint summaries, risk rollups.
|
|
405
|
+
- **Ceremony**: Standup, refinement, and planning entry points.
|
|
406
|
+
- **Policy**: DoR, DoD, flow, PI readiness checks.
|
|
407
|
+
- **Patch**: Preview, apply, and write changes safely.
|
|
524
408
|
|
|
525
|
-
|
|
409
|
+
**Adapters and bridges**
|
|
526
410
|
|
|
527
|
-
- **
|
|
528
|
-
- **
|
|
529
|
-
- **
|
|
530
|
-
- **[Sidecar Validation](docs/guides/sidecar-validation.md)** 🆕 - Validate external codebases without modifying source
|
|
531
|
-
- **[Use Cases](docs/guides/use-cases.md)** - Common scenarios
|
|
411
|
+
- **Specs**: Spec-Kit and OpenSpec
|
|
412
|
+
- **Backlogs**: GitHub Issues, Azure DevOps, Jira, Linear
|
|
413
|
+
- **Contracts**: Specmatic, OpenAPI
|
|
532
414
|
|
|
533
|
-
|
|
415
|
+
---
|
|
534
416
|
|
|
535
|
-
|
|
536
|
-
- **[OpenSpec Journey](docs/guides/openspec-journey.md)** - OpenSpec integration
|
|
537
|
-
- **[Specmatic Integration](docs/guides/specmatic-integration.md)** - API contract testing
|
|
538
|
-
- **[DevOps Adapter Integration](docs/guides/devops-adapter-integration.md)** - GitHub Issues, Azure DevOps, Linear, Jira
|
|
539
|
-
- **[Backlog Refinement](docs/guides/backlog-refinement.md)** 🆕 **NEW** - AI-assisted template-driven backlog standardization
|
|
540
|
-
- **[Custom Field Mapping](docs/guides/custom-field-mapping.md)** 🆕 **NEW** - Interactive Azure DevOps field mapping
|
|
417
|
+
## Developer Note: Command Layout
|
|
541
418
|
|
|
542
|
-
|
|
543
|
-
|
|
419
|
+
- Primary command implementations live in `src/specfact_cli/modules/<module>/src/commands.py`.
|
|
420
|
+
- Legacy imports from `src/specfact_cli/commands/*.py` are compatibility shims and only guarantee `app` re-exports.
|
|
421
|
+
- Preferred imports for module code:
|
|
422
|
+
- `from specfact_cli.modules.<module>.src.commands import app`
|
|
423
|
+
- `from specfact_cli.modules.<module>.src.commands import <symbol>`
|
|
424
|
+
- Shim deprecation timeline:
|
|
425
|
+
- Legacy shim usage is deprecated for non-`app` symbols now.
|
|
426
|
+
- Shim removal is planned no earlier than `v0.30` (or the next major migration window).
|
|
544
427
|
|
|
545
428
|
---
|
|
546
429
|
|
|
547
|
-
##
|
|
430
|
+
## Where SpecFact Fits
|
|
548
431
|
|
|
549
|
-
|
|
432
|
+
SpecFact complements your stack rather than replacing it.
|
|
550
433
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
| **OpenSpec** | Specification anchoring, change tracking, cross-repo workflows | **Code analysis**, contract enforcement, DevOps integration |
|
|
555
|
-
| **Traditional Testing** | Manual test writing, code review | **Automated gap detection**, contract-first validation, CI/CD gates |
|
|
434
|
+
- **Spec-Kit/OpenSpec** for authoring and change tracking
|
|
435
|
+
- **Backlog tools** for planning and delivery
|
|
436
|
+
- **CI/CD** for enforcement and regression prevention
|
|
556
437
|
|
|
557
|
-
**
|
|
438
|
+
**SpecFact connects them** with adapters, policy checks, and deterministic validation.
|
|
558
439
|
|
|
559
|
-
|
|
560
|
-
- ✅ **Runtime enforcement** - Contracts prevent regressions automatically
|
|
561
|
-
- ✅ **Formal verification** - CrossHair symbolic execution (not just LLM suggestions)
|
|
562
|
-
- ✅ **Team collaboration** - Role-based workflows for agile/scrum teams
|
|
563
|
-
- ✅ **Works offline** - No API keys, no cloud, zero vendor lock-in
|
|
440
|
+
**Integrations snapshot**: GitHub, Azure DevOps, Jira, Linear, Spec-Kit, OpenSpec, Specmatic.
|
|
564
441
|
|
|
565
|
-
|
|
442
|
+
- **[Integrations Overview](docs/guides/integrations-overview.md)**
|
|
443
|
+
- **[DevOps Adapter Integration](docs/guides/devops-adapter-integration.md)**
|
|
566
444
|
|
|
567
445
|
---
|
|
568
446
|
|
|
569
|
-
##
|
|
570
|
-
|
|
571
|
-
### Works with Your Existing Tools
|
|
447
|
+
## Recommended Paths
|
|
572
448
|
|
|
573
|
-
-
|
|
574
|
-
-
|
|
575
|
-
-
|
|
449
|
+
- **I want a quick win**: [Getting Started](docs/getting-started/README.md)
|
|
450
|
+
- **I use an AI IDE**: [AI IDE Workflow](docs/guides/ai-ide-workflow.md)
|
|
451
|
+
- **We have a team backlog**: [Agile/Scrum Workflows](docs/guides/agile-scrum-workflows.md)
|
|
452
|
+
- **We have a long-lived codebase**: [Working With Existing Code](docs/guides/brownfield-engineer.md)
|
|
576
453
|
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
- ✅ **Role-based workflows** - Product Owners, Architects, Developers work in parallel
|
|
580
|
-
- ✅ **Markdown-based** - No YAML editing, human-readable conflicts
|
|
581
|
-
- ✅ **Agile/scrum ready** - DoR checklists, story points, sprint planning
|
|
454
|
+
---
|
|
582
455
|
|
|
583
|
-
|
|
456
|
+
## Documentation Map
|
|
584
457
|
|
|
585
|
-
-
|
|
586
|
-
-
|
|
587
|
-
-
|
|
458
|
+
- **[Documentation Index](docs/README.md)**
|
|
459
|
+
- **[Command Reference](docs/reference/commands.md)**
|
|
460
|
+
- **[Backlog Refinement](docs/guides/backlog-refinement.md)**
|
|
461
|
+
- **[Sidecar Validation](docs/guides/sidecar-validation.md)**
|
|
462
|
+
- **[OpenSpec Journey](docs/guides/openspec-journey.md)**
|
|
588
463
|
|
|
589
464
|
---
|
|
590
465
|
|
|
591
466
|
## Contributing
|
|
592
467
|
|
|
593
|
-
We welcome contributions
|
|
468
|
+
We welcome contributions. See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
594
469
|
|
|
595
470
|
```bash
|
|
596
471
|
git clone https://github.com/nold-ai/specfact-cli.git
|
|
@@ -603,11 +478,7 @@ hatch run contract-test-full
|
|
|
603
478
|
|
|
604
479
|
## License
|
|
605
480
|
|
|
606
|
-
**Apache License 2.0** - Open source and enterprise-friendly
|
|
607
|
-
|
|
608
|
-
- ✅ Free to use for any purpose (commercial or non-commercial)
|
|
609
|
-
- ✅ Modify and distribute as needed
|
|
610
|
-
- ✅ Enterprise-friendly with explicit patent grant
|
|
481
|
+
**Apache License 2.0** - Open source and enterprise-friendly.
|
|
611
482
|
|
|
612
483
|
[Full license](LICENSE.md)
|
|
613
484
|
|
|
@@ -615,17 +486,16 @@ hatch run contract-test-full
|
|
|
615
486
|
|
|
616
487
|
## Support
|
|
617
488
|
|
|
618
|
-
-
|
|
619
|
-
-
|
|
620
|
-
-
|
|
621
|
-
-
|
|
622
|
-
- 🌐 **Learn more:** [specfact.com](https://specfact.com) • [specfact.io](https://specfact.io) • [specfact.dev](https://specfact.dev)
|
|
489
|
+
- **GitHub Discussions**: https://github.com/nold-ai/specfact-cli/discussions
|
|
490
|
+
- **GitHub Issues**: https://github.com/nold-ai/specfact-cli/issues
|
|
491
|
+
- **Email**: hello@noldai.com
|
|
492
|
+
- **Debug logs**: Run with `--debug` and check `~/.specfact/logs/specfact-debug.log`.
|
|
623
493
|
|
|
624
494
|
---
|
|
625
495
|
|
|
626
496
|
<div align="center">
|
|
627
497
|
|
|
628
|
-
**Built
|
|
498
|
+
**Built by [NOLD AI](https://noldai.com)**
|
|
629
499
|
|
|
630
500
|
Copyright © 2025-2026 Nold AI (Owner: Dominikus Nold)
|
|
631
501
|
|