specfact-cli 0.26.16__tar.gz → 0.27.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.16 → specfact_cli-0.27.0}/.gitignore +14 -7
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/PKG-INFO +94 -237
- specfact_cli-0.27.0/README.md +213 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/pyproject.toml +30 -4
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/__init__.py +1 -1
- specfact_cli-0.27.0/src/specfact_cli/__init__.py +13 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/analyzers/ambiguity_scanner.py +5 -9
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/cli.py +177 -72
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/backlog_commands.py +126 -53
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/init.py +30 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/plan.py +12 -8
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/sync.py +9 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/generators/report_generator.py +2 -2
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/merge/resolver.py +8 -8
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/bridge.py +2 -2
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/change.py +2 -2
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/contract.py +2 -2
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/deviation.py +3 -3
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/enforcement.py +3 -3
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/persona_template.py +2 -2
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/project.py +2 -2
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/task.py +3 -3
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/modes/detector.py +2 -2
- specfact_cli-0.27.0/src/specfact_cli/modules/__init__.py +1 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/analyze/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/analyze/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/auth/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/auth/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/backlog/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/backlog/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/contract/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/contract/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/drift/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/drift/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/enforce/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/enforce/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/generate/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/generate/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/import_cmd/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/import_cmd/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/init/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/init/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/migrate/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/migrate/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/plan/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/plan/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/project/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/project/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/repro/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/repro/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/sdd/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/sdd/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/spec/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/spec/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/sync/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/sync/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/upgrade/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/upgrade/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/validate/module-package.yaml +10 -0
- specfact_cli-0.27.0/src/specfact_cli/modules/validate/src/app.py +6 -0
- specfact_cli-0.27.0/src/specfact_cli/registry/__init__.py +12 -0
- specfact_cli-0.27.0/src/specfact_cli/registry/bootstrap.py +16 -0
- specfact_cli-0.27.0/src/specfact_cli/registry/help_cache.py +141 -0
- specfact_cli-0.27.0/src/specfact_cli/registry/metadata.py +19 -0
- specfact_cli-0.27.0/src/specfact_cli/registry/module_packages.py +232 -0
- specfact_cli-0.27.0/src/specfact_cli/registry/module_state.py +60 -0
- specfact_cli-0.27.0/src/specfact_cli/registry/registry.py +101 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/runtime.py +2 -2
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/env_manager.py +2 -2
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/ide_setup.py +1 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/structured_io.py +2 -2
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/crosshair_summary.py +2 -2
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/frameworks/django.py +3 -6
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/frameworks/fastapi.py +3 -6
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/frameworks/flask.py +3 -6
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/models.py +2 -2
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/versioning/analyzer.py +2 -2
- specfact_cli-0.26.16/README.md +0 -356
- specfact_cli-0.26.16/src/specfact_cli/__init__.py +0 -14
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/LICENSE.md +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/mappings/node-async.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/mappings/python-async.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/mappings/speckit-default.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/prompts/shared/cli-enforcement.md +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/prompts/specfact.01-import.md +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/prompts/specfact.02-plan.md +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/prompts/specfact.03-review.md +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/prompts/specfact.04-sdd.md +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/prompts/specfact.05-enforce.md +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/prompts/specfact.06-sync.md +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/prompts/specfact.07-contracts.md +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/prompts/specfact.backlog-daily.md +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/prompts/specfact.backlog-refine.md +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/prompts/specfact.compare.md +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/prompts/specfact.sync-backlog.md +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/prompts/specfact.validate.md +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/schemas/deviation.schema.json +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/schemas/plan.schema.json +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/schemas/protocol.schema.json +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/backlog/defaults/defect_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/backlog/defaults/enabler_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/backlog/defaults/spike_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/backlog/defaults/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/backlog/field_mappings/ado_agile.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/backlog/field_mappings/ado_default.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/backlog/field_mappings/ado_kanban.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/backlog/field_mappings/ado_safe.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/backlog/field_mappings/ado_scrum.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/backlog/frameworks/safe/safe_feature_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/backlog/frameworks/scrum/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/backlog/personas/developer/developer_task_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/backlog/personas/product-owner/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/backlog/providers/ado/work_item_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/github-action.yml.j2 +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/persona/architect.md.j2 +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/persona/developer.md.j2 +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/persona/product-owner.md.j2 +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/plan.bundle.yaml.j2 +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/pr-template.md.j2 +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/protocol.yaml.j2 +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/resources/templates/telemetry.yaml.example +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/__main__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/adapters/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/adapters/ado.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/adapters/backlog_base.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/adapters/base.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/adapters/github.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/adapters/openspec.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/adapters/openspec_parser.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/adapters/registry.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/adapters/speckit.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/agents/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/agents/analyze_agent.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/agents/base.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/agents/plan_agent.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/agents/registry.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/agents/sync_agent.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/analyzers/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/analyzers/code_analyzer.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/analyzers/constitution_evidence_extractor.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/analyzers/contract_extractor.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/analyzers/control_flow_analyzer.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/analyzers/graph_analyzer.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/analyzers/relationship_mapper.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/analyzers/requirement_extractor.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/analyzers/test_pattern_extractor.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/adapters/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/adapters/base.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/adapters/local_yaml_adapter.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/ai_refiner.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/converter.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/filters.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/format_detector.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/formats/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/formats/base.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/formats/markdown_format.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/formats/structured_format.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/mappers/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/mappers/ado_mapper.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/mappers/base.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/mappers/github_mapper.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/mappers/template_config.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/backlog/template_detector.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/analyze.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/auth.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/contract_cmd.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/drift.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/enforce.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/generate.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/import_cmd.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/migrate.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/project_cmd.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/repro.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/sdd.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/spec.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/update.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/commands/validate.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/common/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/common/logger_setup.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/common/logging_utils.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/common/text_utils.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/common/utils.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/comparators/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/comparators/plan_comparator.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/contracts/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/contracts/crosshair_props.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/enrichers/constitution_enricher.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/enrichers/plan_enricher.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/generators/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/generators/contract_generator.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/generators/openapi_extractor.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/generators/persona_exporter.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/generators/plan_generator.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/generators/protocol_generator.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/generators/task_generator.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/generators/test_to_openapi.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/generators/workflow_generator.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/importers/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/importers/speckit_converter.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/importers/speckit_scanner.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/integrations/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/integrations/specmatic.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/merge/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/migrations/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/migrations/plan_migrator.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/backlog_item.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/capabilities.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/dor_config.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/plan.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/protocol.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/quality.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/sdd.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/models/source_tracking.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/modes/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/modes/router.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/parsers/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/parsers/persona_importer.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/resources/semgrep/async.yml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/resources/semgrep/code-quality.yml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/resources/semgrep/feature-detection.yml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/sync/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/sync/bridge_probe.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/sync/bridge_sync.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/sync/bridge_watch.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/sync/change_detector.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/sync/code_to_spec.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/sync/drift_detector.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/sync/repository_sync.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/sync/spec_to_code.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/sync/spec_to_tests.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/sync/watcher.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/sync/watcher_enhanced.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/telemetry.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/templates/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/templates/bridge_templates.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/templates/defaults/defect_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/templates/defaults/enabler_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/templates/defaults/spike_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/templates/defaults/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/templates/frameworks/scrum/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/templates/personas/product-owner/user_story_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/templates/providers/ado/work_item_v1.yaml +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/templates/registry.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/templates/specification_templates.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/acceptance_criteria.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/auth_tokens.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/bundle_loader.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/code_change_detector.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/console.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/content_sanitizer.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/context_detection.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/enrichment_context.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/enrichment_parser.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/feature_keys.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/git.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/github_annotations.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/incremental_check.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/metadata.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/optional_deps.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/performance.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/progress.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/progressive_disclosure.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/prompts.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/sdd_discovery.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/source_scanner.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/startup_checks.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/structure.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/suggestions.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/terminal.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/utils/yaml_utils.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/agile_validation.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/change_proposal_integration.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/cli_first_validator.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/contract_validator.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/fsm.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/repro_checker.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/schema.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/contract_populator.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/crosshair_runner.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/dependency_installer.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/framework_detector.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/frameworks/__init__.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/frameworks/base.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/frameworks/drf.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/harness_generator.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/orchestrator.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/specmatic_runner.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/validators/sidecar/unannotated_detector.py +0 -0
- {specfact_cli-0.26.16 → specfact_cli-0.27.0}/src/specfact_cli/versioning/__init__.py +0 -0
|
@@ -95,15 +95,17 @@ 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
|
|
107
109
|
|
|
108
110
|
# Semgrep rules (generated from tools/semgrep/ - source rules are versioned)
|
|
109
111
|
.semgrep/
|
|
@@ -127,4 +129,9 @@ findings.json
|
|
|
127
129
|
answers.json
|
|
128
130
|
questions.json
|
|
129
131
|
docs/project-plans/
|
|
130
|
-
harness_contracts.py
|
|
132
|
+
harness_contracts.py
|
|
133
|
+
|
|
134
|
+
# semgrep artifacts
|
|
135
|
+
lang.json
|
|
136
|
+
Language.ml
|
|
137
|
+
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.27.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,181 @@ 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
|
-
```
|
|
353
|
-
|
|
354
|
-
**What this does:**
|
|
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
318
|
```
|
|
368
319
|
|
|
369
|
-
|
|
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)
|
|
408
|
-
|
|
409
|
-
**Primary Goal**: Let SpecFact find gaps, use your AI IDE to fix them
|
|
346
|
+
## Proof and Expectations
|
|
410
347
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
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
|
|
456
|
-
|
|
457
|
-
👉 **[Agile/Scrum Workflows](docs/guides/agile-scrum-workflows.md)** - Team collaboration guide
|
|
458
|
-
👉 **[Backlog Refinement](docs/guides/backlog-refinement.md)** 🆕 - Standardize backlog items with templates
|
|
459
|
-
👉 **[Custom Field Mapping](docs/guides/custom-field-mapping.md)** 🆕 - Map ADO fields interactively
|
|
460
|
-
|
|
461
|
-
### 🔌 Integrations
|
|
354
|
+
## Why It Matters (Plain Language)
|
|
462
355
|
|
|
463
|
-
- **
|
|
464
|
-
- **
|
|
465
|
-
- **
|
|
466
|
-
- **
|
|
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
|
|
363
|
+
## Who It Is For
|
|
484
364
|
|
|
485
|
-
|
|
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.
|
|
486
368
|
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
👉 **[Sidecar Validation Guide](docs/guides/sidecar-validation.md)** - Validate external codebases with contract testing
|
|
490
|
-
|
|
491
|
-
### 2. Working with a Team
|
|
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
|
|
532
|
-
|
|
533
|
-
### Integration Guides
|
|
534
|
-
|
|
535
|
-
- **[Spec-Kit Journey](docs/guides/speckit-journey.md)** - From Spec-Kit to SpecFact
|
|
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
|
|
541
|
-
|
|
542
|
-
👉 **[Full Documentation Index](docs/README.md)** - Browse all documentation
|
|
543
|
-
👉 **[Online Documentation](https://docs.specfact.io/)** - Complete documentation site
|
|
411
|
+
- **Specs**: Spec-Kit and OpenSpec
|
|
412
|
+
- **Backlogs**: GitHub Issues, Azure DevOps, Jira, Linear
|
|
413
|
+
- **Contracts**: Specmatic, OpenAPI
|
|
544
414
|
|
|
545
415
|
---
|
|
546
416
|
|
|
547
|
-
##
|
|
417
|
+
## Where SpecFact Fits
|
|
548
418
|
|
|
549
|
-
|
|
419
|
+
SpecFact complements your stack rather than replacing it.
|
|
550
420
|
|
|
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 |
|
|
421
|
+
- **Spec-Kit/OpenSpec** for authoring and change tracking
|
|
422
|
+
- **Backlog tools** for planning and delivery
|
|
423
|
+
- **CI/CD** for enforcement and regression prevention
|
|
556
424
|
|
|
557
|
-
**
|
|
425
|
+
**SpecFact connects them** with adapters, policy checks, and deterministic validation.
|
|
558
426
|
|
|
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
|
|
427
|
+
**Integrations snapshot**: GitHub, Azure DevOps, Jira, Linear, Spec-Kit, OpenSpec, Specmatic.
|
|
564
428
|
|
|
565
|
-
|
|
429
|
+
- **[Integrations Overview](docs/guides/integrations-overview.md)**
|
|
430
|
+
- **[DevOps Adapter Integration](docs/guides/devops-adapter-integration.md)**
|
|
566
431
|
|
|
567
432
|
---
|
|
568
433
|
|
|
569
|
-
##
|
|
570
|
-
|
|
571
|
-
### Works with Your Existing Tools
|
|
434
|
+
## Recommended Paths
|
|
572
435
|
|
|
573
|
-
-
|
|
574
|
-
-
|
|
575
|
-
-
|
|
436
|
+
- **I want a quick win**: [Getting Started](docs/getting-started/README.md)
|
|
437
|
+
- **I use an AI IDE**: [AI IDE Workflow](docs/guides/ai-ide-workflow.md)
|
|
438
|
+
- **We have a team backlog**: [Agile/Scrum Workflows](docs/guides/agile-scrum-workflows.md)
|
|
439
|
+
- **We have a long-lived codebase**: [Working With Existing Code](docs/guides/brownfield-engineer.md)
|
|
576
440
|
|
|
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
|
|
441
|
+
---
|
|
582
442
|
|
|
583
|
-
|
|
443
|
+
## Documentation Map
|
|
584
444
|
|
|
585
|
-
-
|
|
586
|
-
-
|
|
587
|
-
-
|
|
445
|
+
- **[Documentation Index](docs/README.md)**
|
|
446
|
+
- **[Command Reference](docs/reference/commands.md)**
|
|
447
|
+
- **[Backlog Refinement](docs/guides/backlog-refinement.md)**
|
|
448
|
+
- **[Sidecar Validation](docs/guides/sidecar-validation.md)**
|
|
449
|
+
- **[OpenSpec Journey](docs/guides/openspec-journey.md)**
|
|
588
450
|
|
|
589
451
|
---
|
|
590
452
|
|
|
591
453
|
## Contributing
|
|
592
454
|
|
|
593
|
-
We welcome contributions
|
|
455
|
+
We welcome contributions. See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
594
456
|
|
|
595
457
|
```bash
|
|
596
458
|
git clone https://github.com/nold-ai/specfact-cli.git
|
|
@@ -603,11 +465,7 @@ hatch run contract-test-full
|
|
|
603
465
|
|
|
604
466
|
## License
|
|
605
467
|
|
|
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
|
|
468
|
+
**Apache License 2.0** - Open source and enterprise-friendly.
|
|
611
469
|
|
|
612
470
|
[Full license](LICENSE.md)
|
|
613
471
|
|
|
@@ -615,17 +473,16 @@ hatch run contract-test-full
|
|
|
615
473
|
|
|
616
474
|
## Support
|
|
617
475
|
|
|
618
|
-
-
|
|
619
|
-
-
|
|
620
|
-
-
|
|
621
|
-
-
|
|
622
|
-
- 🌐 **Learn more:** [specfact.com](https://specfact.com) • [specfact.io](https://specfact.io) • [specfact.dev](https://specfact.dev)
|
|
476
|
+
- **GitHub Discussions**: https://github.com/nold-ai/specfact-cli/discussions
|
|
477
|
+
- **GitHub Issues**: https://github.com/nold-ai/specfact-cli/issues
|
|
478
|
+
- **Email**: hello@noldai.com
|
|
479
|
+
- **Debug logs**: Run with `--debug` and check `~/.specfact/logs/specfact-debug.log`.
|
|
623
480
|
|
|
624
481
|
---
|
|
625
482
|
|
|
626
483
|
<div align="center">
|
|
627
484
|
|
|
628
|
-
**Built
|
|
485
|
+
**Built by [NOLD AI](https://noldai.com)**
|
|
629
486
|
|
|
630
487
|
Copyright © 2025-2026 Nold AI (Owner: Dominikus Nold)
|
|
631
488
|
|