raise-cli 3.0.0a6__tar.gz → 3.1.0a3__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.
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/.gitignore +20 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/PKG-INFO +7 -3
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/README.md +1 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/pyproject.toml +10 -3
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/_agent_session.py +33 -9
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/composite_docs.py +110 -23
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/composite_pm.py +123 -19
- raise_cli-3.1.0a3/src/raise_cli/adapters/confluence_adapter.py +262 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/confluence_client.py +1 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/confluence_config.py +101 -4
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/confluence_config_gen.py +86 -10
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/confluence_markdown.py +16 -5
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/declarative/adapter.py +2 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/filesystem.py +37 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/jira_adapter.py +169 -23
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/jira_adf.py +8 -4
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/jira_client.py +192 -5
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/ledger_aware.py +47 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/models/__init__.py +4 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/models/pm.py +38 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/protocols.py +31 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/resolve.py +53 -24
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/sync.py +41 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/agents/claude.yaml +1 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/agents/codex_plugin.py +20 -3
- raise_cli-3.1.0a3/src/raise_cli/cartridges/__init__.py +8 -0
- raise_cli-3.1.0a3/src/raise_cli/cartridges/cli.py +1082 -0
- raise_cli-3.1.0a3/src/raise_cli/cartridges/formatter.py +223 -0
- raise_cli-3.1.0a3/src/raise_cli/cartridges/server_client.py +138 -0
- raise_cli-3.1.0a3/src/raise_cli/cartridges/server_install.py +47 -0
- raise_cli-3.1.0a3/src/raise_cli/cartridges/server_models.py +92 -0
- raise_cli-3.1.0a3/src/raise_cli/cli/commands/adapter_route.py +181 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/adapter_setup.py +314 -41
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/adapters.py +2 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/backlog.py +535 -49
- raise_cli-3.1.0a3/src/raise_cli/cli/commands/connect.py +196 -0
- raise_cli-3.1.0a3/src/raise_cli/cli/commands/db.py +302 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/discover.py +22 -4
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/docs.py +83 -30
- raise_cli-3.1.0a3/src/raise_cli/cli/commands/docs_type.py +192 -0
- raise_cli-3.1.0a3/src/raise_cli/cli/commands/governance.py +194 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/graph.py +722 -41
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/init.py +235 -20
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/learn.py +12 -11
- raise_cli-3.1.0a3/src/raise_cli/cli/commands/manifest.py +122 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/mission.py +99 -13
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/pattern.py +170 -11
- raise_cli-3.1.0a3/src/raise_cli/cli/commands/project.py +486 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/release.py +11 -16
- raise_cli-3.1.0a3/src/raise_cli/cli/commands/repo.py +150 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/session.py +340 -53
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/signal.py +14 -7
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/skill.py +93 -5
- raise_cli-3.1.0a3/src/raise_cli/cli/commands/telemetry.py +455 -0
- raise_cli-3.1.0a3/src/raise_cli/cli/commands/whoami.py +75 -0
- raise_cli-3.1.0a3/src/raise_cli/cli/commands/worktree.py +291 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/extensions.py +3 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/main.py +25 -3
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/config/agents.py +2 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/config/paths.py +26 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/builder.py +127 -24
- raise_cli-3.1.0a3/src/raise_cli/context/extractors/relationships.py +381 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/extractors/structure.py +13 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/loaders/architecture.py +7 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/loaders/memory.py +8 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/loaders/symbols.py +134 -48
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/discovery/scanner.py +22 -0
- raise_cli-3.1.0a3/src/raise_cli/doctor/checks/adapters.py +375 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/doctor/checks/developer.py +98 -42
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/doctor/checks/environment.py +12 -15
- raise_cli-3.1.0a3/src/raise_cli/doctor/checks/project.py +527 -0
- raise_cli-3.1.0a3/src/raise_cli/doctor/checks/runtimes.py +81 -0
- raise_cli-3.1.0a3/src/raise_cli/doctor/checks/skills.py +133 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/doctor/protocol.py +28 -3
- raise_cli-3.1.0a3/src/raise_cli/eval/__init__.py +46 -0
- raise_cli-3.1.0a3/src/raise_cli/eval/_models.py +24 -0
- raise_cli-3.1.0a3/src/raise_cli/eval/_paths.py +7 -0
- raise_cli-3.1.0a3/src/raise_cli/eval/cli.py +157 -0
- raise_cli-3.1.0a3/src/raise_cli/eval/datasets.py +78 -0
- raise_cli-3.1.0a3/src/raise_cli/eval/gate.py +98 -0
- raise_cli-3.1.0a3/src/raise_cli/eval/harness.py +101 -0
- raise_cli-3.1.0a3/src/raise_cli/eval/metrics.py +64 -0
- raise_cli-3.1.0a3/src/raise_cli/eval/reporters/__init__.py +1 -0
- raise_cli-3.1.0a3/src/raise_cli/eval/reporters/json_report.py +27 -0
- raise_cli-3.1.0a3/src/raise_cli/eval/reporters/latex.py +44 -0
- raise_cli-3.1.0a3/src/raise_cli/eval/reporters/markdown.py +37 -0
- raise_cli-3.1.0a3/src/raise_cli/eval/stats.py +35 -0
- raise_cli-3.1.0a3/src/raise_cli/eval/tuning.py +49 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/governance/extractor.py +2 -2
- raise_cli-3.1.0a3/src/raise_cli/governance/sync.py +203 -0
- raise_cli-3.1.0a3/src/raise_cli/graph/api_graph_read_backend.py +46 -0
- raise_cli-3.1.0a3/src/raise_cli/graph/backends/__init__.py +124 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/graph/backends/api.py +87 -18
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/graph/backends/dual.py +104 -10
- raise_cli-3.1.0a3/src/raise_cli/graph/backends/kuzu.py +647 -0
- raise_cli-3.1.0a3/src/raise_cli/graph/backends/sqlite.py +495 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/graph/query_backend.py +26 -18
- raise_cli-3.1.0a3/src/raise_cli/hooks/builtin/graph_update.py +113 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hud/panels/_insights_utils.py +10 -4
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hud/panels/insights.py +4 -4
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hud/panels/missions.py +2 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hud/panels/session.py +2 -2
- raise_cli-3.1.0a3/src/raise_cli/memory/api_patterns_backend.py +74 -0
- raise_cli-3.1.0a3/src/raise_cli/memory/content_hash.py +28 -0
- raise_cli-3.1.0a3/src/raise_cli/memory/pattern_evaluator.py +238 -0
- raise_cli-3.1.0a3/src/raise_cli/memory/patterns_backend.py +525 -0
- raise_cli-3.1.0a3/src/raise_cli/memory/sync.py +630 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/memory/writer.py +8 -3
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/bootstrap.py +97 -0
- raise_cli-3.1.0a3/src/raise_cli/onboarding/cli_commands.yaml +87 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/detection.py +18 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/instructions.py +41 -181
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/manifest.py +63 -3
- raise_cli-3.1.0a3/src/raise_cli/onboarding/manifest_validate.py +102 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/memory_md.py +3 -3
- raise_cli-3.1.0a3/src/raise_cli/onboarding/merge_conventions.py +54 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/skill_manifest.py +1 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/skills.py +24 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/output/console.py +2 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/output/formatters/graph.py +2 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/output/formatters/skill.py +2 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/output/symbols.py +24 -5
- raise_cli-3.1.0a3/src/raise_cli/pipeline/_mcp_decorators.py +16 -0
- raise_cli-3.1.0a3/src/raise_cli/pipeline/api_run_store.py +57 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/mcp_server.py +4 -0
- raise_cli-3.1.0a3/src/raise_cli/pipeline/mcp_tools_backlog.py +218 -0
- raise_cli-3.1.0a3/src/raise_cli/pipeline/mcp_tools_docs.py +105 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/mcp_tools_gate.py +2 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/mcp_tools_pattern.py +6 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/mcp_tools_pipeline.py +31 -29
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/mcp_tools_session.py +46 -3
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/pipelines_base/bugfix.yaml +44 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/run_store.py +43 -41
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/project.py +4 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/framework/methodology.yaml +69 -5
- raise_cli-3.1.0a3/src/raise_cli/rai_base/governance/architecture/domain-model.md +34 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/governance/architecture/system-context.md +19 -3
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/governance/architecture/system-design.md +9 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/memory/patterns-base.jsonl +5 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/__init__.py +2 -0
- raise_cli-3.1.0a3/src/raise_cli/session/api_context_backend.py +37 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/bundle.py +119 -5
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/bundle_data.py +202 -16
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/bundle_formatters.py +90 -3
- raise_cli-3.1.0a3/src/raise_cli/session/bundle_governance.py +50 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/close.py +77 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/context_backend.py +31 -21
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/derive.py +47 -1
- raise_cli-3.1.0a3/src/raise_cli/session/donor.py +225 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/index.py +24 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/mission_binding.py +9 -6
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/state.py +9 -2
- raise_cli-3.1.0a3/src/raise_cli/skills/sync.py +220 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/__init__.py +16 -7
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-architecture-review/SKILL.md +25 -3
- raise_cli-3.1.0a3/src/raise_cli/skills_base/rai-backlog-setup/SKILL.md +242 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-bugfix-analyse/SKILL.md +6 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-bugfix-close/SKILL.md +7 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-bugfix-fix/SKILL.md +25 -1
- raise_cli-3.1.0a3/src/raise_cli/skills_base/rai-bugfix-pir/SKILL.md +302 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-bugfix-plan/SKILL.md +22 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-bugfix-review/SKILL.md +10 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-bugfix-start/SKILL.md +4 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-bugfix-triage/SKILL.md +4 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-debug/SKILL.md +8 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-discover/SKILL.md +11 -2
- raise_cli-3.1.0a3/src/raise_cli/skills_base/rai-docs-setup/SKILL.md +393 -0
- raise_cli-3.1.0a3/src/raise_cli/skills_base/rai-docs-setup-advanced/SKILL.md +386 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-docs-update/SKILL.md +3 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-doctor/SKILL.md +14 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-epic-close/SKILL.md +16 -6
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-epic-design/SKILL.md +30 -7
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-epic-docs/SKILL.md +3 -1
- raise_cli-3.1.0a3/src/raise_cli/skills_base/rai-epic-journal/SKILL.md +192 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-epic-plan/SKILL.md +16 -7
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-epic-start/SKILL.md +32 -10
- raise_cli-3.1.0a3/src/raise_cli/skills_base/rai-epic-ux-design/SKILL.md +138 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-mcp-add/SKILL.md +1 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-mcp-remove/SKILL.md +2 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-mcp-status/SKILL.md +6 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-mission-close/SKILL.md +84 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-mr-create/SKILL.md +8 -2
- raise_cli-3.1.0a3/src/raise_cli/skills_base/rai-onboard-repo/SKILL.md +398 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-problem-shape/SKILL.md +2 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-project-create/SKILL.md +14 -6
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-project-onboard/SKILL.md +8 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-quality-review/SKILL.md +14 -3
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-research/SKILL.md +2 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-session-close/SKILL.md +104 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-session-diary/SKILL.md +8 -3
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-session-start/SKILL.md +113 -37
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-skill-create/SKILL.md +3 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-skillset-manage/SKILL.md +3 -3
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-story-close/SKILL.md +57 -4
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-story-design/SKILL.md +25 -9
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-story-implement/SKILL.md +69 -7
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-story-plan/SKILL.md +18 -7
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-story-review/SKILL.md +15 -1
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-story-start/SKILL.md +60 -2
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-welcome/SKILL.md +26 -3
- raise_cli-3.1.0a3/src/raise_cli/skills_base/rai-worktree-close/SKILL.md +288 -0
- raise_cli-3.1.0a3/src/raise_cli/skills_base/rai-worktree-open/SKILL.md +325 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/storage/connection.py +48 -4
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/storage/migrate.py +107 -9
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/storage/missions.py +62 -15
- raise_cli-3.1.0a3/src/raise_cli/storage/schema.py +1062 -0
- raise_cli-3.1.0a3/src/raise_cli/storage/worktrees.py +190 -0
- raise_cli-3.1.0a3/src/raise_cli/telemetry/attribution.py +209 -0
- raise_cli-3.1.0a3/src/raise_cli/telemetry/backfill.py +170 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/telemetry/emitter.py +6 -0
- raise_cli-3.1.0a3/src/raise_cli/telemetry/session_tokens.py +249 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/viz/generator.py +86 -22
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/work_events/schemas.py +1 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/work_events/translator.py +54 -24
- raise_cli-3.0.0a6/src/raise_cli/adapters/confluence_adapter.py +0 -175
- raise_cli-3.0.0a6/src/raise_cli/cli/commands/db.py +0 -144
- raise_cli-3.0.0a6/src/raise_cli/cli/commands/telemetry.py +0 -228
- raise_cli-3.0.0a6/src/raise_cli/context/extractors/relationships.py +0 -258
- raise_cli-3.0.0a6/src/raise_cli/doctor/checks/adapters.py +0 -406
- raise_cli-3.0.0a6/src/raise_cli/doctor/checks/project.py +0 -279
- raise_cli-3.0.0a6/src/raise_cli/doctor/checks/runtimes.py +0 -69
- raise_cli-3.0.0a6/src/raise_cli/graph/backends/__init__.py +0 -69
- raise_cli-3.0.0a6/src/raise_cli/graph/backends/sqlite.py +0 -162
- raise_cli-3.0.0a6/src/raise_cli/memory/patterns_backend.py +0 -316
- raise_cli-3.0.0a6/src/raise_cli/pipeline/mcp_tools_backlog.py +0 -118
- raise_cli-3.0.0a6/src/raise_cli/rai_base/governance/architecture/domain-model.md +0 -20
- raise_cli-3.0.0a6/src/raise_cli/skills_base/rai-adapter-setup/SKILL.md +0 -125
- raise_cli-3.0.0a6/src/raise_cli/skills_base/rai-backlog-setup/SKILL.md +0 -169
- raise_cli-3.0.0a6/src/raise_cli/storage/schema.py +0 -439
- raise_cli-3.0.0a6/src/raise_cli/telemetry/session_tokens.py +0 -112
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/__main__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/_cc_session.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/backlog_config.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/confluence_discovery.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/confluence_exceptions.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/declarative/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/declarative/discovery.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/declarative/expressions.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/declarative/reference/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/declarative/reference/github.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/declarative/schema.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/filesystem_adapter.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/filesystem_docs.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/filesystem_models.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/jira_config.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/jira_config_gen.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/jira_discovery.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/jira_exceptions.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/mcp_bridge.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/models/docs.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/models/governance.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/models/health.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/pending_ops.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/registry.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/adapters/sync_ledger.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/agents/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/agents/antigravity.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/agents/codex.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/agents/copilot.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/agents/copilot_plugin.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/agents/cursor.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/agents/hermes.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/agents/roo.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/agents/windsurf.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/artifacts/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/artifacts/models.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/artifacts/render.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/artifacts/store.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/backlog/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/backlog/ledger.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/backlog/reconcile.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/backlog/scanner.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/backlog/sync.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/_resolve.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/base.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/doctor.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/drift.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/gate.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/hud.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/info.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/journal.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/mcp.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/memory.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/profile.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/schema.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/commands/skill_set.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/cli/error_handler.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/compat.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/compliance/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/compliance/controls.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/compliance/evidence.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/compliance/extractors/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/compliance/extractors/git.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/compliance/loader.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/compliance/models.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/config/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/config/agent_plugin.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/config/agent_registry.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/config/ide.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/config/settings.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/analyzers/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/analyzers/models.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/analyzers/protocol.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/analyzers/python.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/analyzers/signals.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/analyzers/typescript.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/diff.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/extractors/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/extractors/skills.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/loaders/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/loaders/components.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/loaders/documents.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/loaders/identity.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/context/loaders/missions.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/core/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/core/files.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/core/text.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/core/tools.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/discovery/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/discovery/analyzer.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/discovery/check.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/discovery/clone.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/discovery/corpus.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/discovery/drift.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/discovery/metric.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/discovery/sast.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/discovery/temporal.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/discovery/thresholds.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/docs/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/docs/migrate.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/doctor/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/doctor/checks/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/doctor/fix.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/doctor/models.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/doctor/registry.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/doctor/report.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/doctor/runner.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/engines/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/exceptions.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/ar/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/ar/bugfix_gate.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/ar/story_gate.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/builtin/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/builtin/_runner.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/builtin/coverage.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/builtin/format.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/builtin/lint.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/builtin/tests.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/builtin/types.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/drift/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/drift/_base.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/drift/auth_fan_out.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/drift/dead_public_api.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/drift/epic_close.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/drift/import_fan_in.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/drift/linter_suppression.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/drift/parallel_siblings.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/drift/post_refactor_orphan.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/drift/story_accretion.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/hook.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/models.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/protocol.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/gates/registry.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/governance/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/governance/models.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/governance/parsers/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/governance/parsers/_convert.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/governance/parsers/adr.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/governance/parsers/backlog.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/governance/parsers/constitution.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/governance/parsers/epic.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/governance/parsers/glossary.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/governance/parsers/guardrails.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/governance/parsers/prd.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/governance/parsers/roadmap.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/governance/parsers/vision.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/graph/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/graph/backends/pending.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/handlers/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hooks/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hooks/builtin/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hooks/builtin/gate_bridge.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hooks/builtin/memory.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hooks/builtin/telemetry.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hooks/emitter.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hooks/events.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hooks/protocol.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hooks/registry.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hud/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hud/app.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hud/data.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hud/hud.tcss +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hud/panels/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hud/panels/_events_utils.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hud/panels/_missions_utils.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hud/panels/events.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/hud/panels/pipeline.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/mcp/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/mcp/bridge.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/mcp/models.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/mcp/registry.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/mcp/schema.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/memory/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/memory/learning.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/memory/loader.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/memory/memory_index.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/memory/migrate_claude.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/memory/migration.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/memory/models.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/memory/push.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/claudemd.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/conventions.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/governance.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/migration.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/profile.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/profile_portability.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/skill_conflict.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/onboarding/workflows.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/output/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/output/formatters/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/output/formatters/adapters.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/output/formatters/discover.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/_mcp_instance.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/_telemetry.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/dispatch.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/engine.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/executor.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/gates.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/loader.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/mcp_tools_artifact.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/mcp_tools_graph.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/pipelines_base/epic.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/pipelines_base/hotfix.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/pipelines_base/story.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/prompt.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/templates/adversarial-ar.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/templates/adversarial-qr.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/pipeline/worktree.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/publish/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/publish/changelog.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/publish/check.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/publish/version.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/framework/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/governance/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/governance/architecture/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/governance/architecture/domain-model.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/governance/architecture/system-context.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/governance/architecture/system-design.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/governance/backlog.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/governance/guardrails.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/governance/prd.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/governance/vision.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/identity/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/identity/core.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/identity/core.yaml +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/identity/perspective.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/rai_base/memory/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/schemas/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/schemas/journal.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/schemas/session_state.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/context_env.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/doctor.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/identity.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/journal.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/measure.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/mission.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/monitor.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/prefix.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/protocols.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/registry.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/resolver.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/session/terminal.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills/locator.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills/name_checker.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills/parser.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills/scaffold.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills/schema.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills/skillsets.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills/validator.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/contract-template.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/preamble.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-epic-close/templates/retrospective.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-epic-design/templates/design.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-epic-design/templates/scope.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-epic-plan/_references/sequencing-strategies.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-epic-plan/templates/plan-section.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-epic-start/templates/brief.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-research/references/research-prompt-template.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-story-design/references/tech-design-story-v2.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/skills_base/rai-story-start/templates/story.md +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/storage/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/storage/consolidate.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/storage/counter.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/storage/schema_sum.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/telemetry/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/telemetry/phase_map.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/telemetry/schemas.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/tier/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/tier/context.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/viz/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/work_events/__init__.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/work_events/backfill.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/work_events/ref_resolver.py +0 -0
- {raise_cli-3.0.0a6 → raise_cli-3.1.0a3}/src/raise_cli/work_events/retry_queue.py +0 -0
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# Node.js
|
|
2
|
+
node_modules/
|
|
3
|
+
|
|
1
4
|
# IDE / editor directories
|
|
2
5
|
.specstory/
|
|
3
6
|
.cursor/
|
|
@@ -62,6 +65,7 @@ dev/output/
|
|
|
62
65
|
|
|
63
66
|
# RaiSE global SQLite DB (per-machine, not shared)
|
|
64
67
|
.raise/rai/raise.db
|
|
68
|
+
.raise/raise.db
|
|
65
69
|
|
|
66
70
|
# RaiSE mission migration artifacts
|
|
67
71
|
.raise/rai/missions/*.migrated
|
|
@@ -99,8 +103,8 @@ dist/
|
|
|
99
103
|
downloads/
|
|
100
104
|
eggs/
|
|
101
105
|
.eggs/
|
|
102
|
-
lib/
|
|
103
|
-
lib64/
|
|
106
|
+
/lib/
|
|
107
|
+
/lib64/
|
|
104
108
|
parts/
|
|
105
109
|
sdist/
|
|
106
110
|
var/
|
|
@@ -149,6 +153,7 @@ dmypy.json
|
|
|
149
153
|
.env
|
|
150
154
|
.env.*
|
|
151
155
|
!.env.example
|
|
156
|
+
!.env.production
|
|
152
157
|
*.pem
|
|
153
158
|
*.key
|
|
154
159
|
.pypirc
|
|
@@ -194,3 +199,16 @@ dev/transcripts/
|
|
|
194
199
|
.worktrees/
|
|
195
200
|
.venv
|
|
196
201
|
.venv
|
|
202
|
+
work/debug/
|
|
203
|
+
|
|
204
|
+
# Playwright E2E auth state (contains session cookies)
|
|
205
|
+
packages/raise-admin/e2e/.auth/
|
|
206
|
+
# Playwright test results
|
|
207
|
+
packages/raise-admin/test-results/
|
|
208
|
+
packages/raise-admin/playwright-report/
|
|
209
|
+
|
|
210
|
+
# Forge raise-jira app — generated files
|
|
211
|
+
forge/raise-jira/static/raise-app/package-lock.json
|
|
212
|
+
forge/raise-jira/static/raise-app/pnpm-workspace.yaml
|
|
213
|
+
packages/raise-cli/.raise/sync/backlog-dead-letter.jsonl
|
|
214
|
+
package-lock.json
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: raise-cli
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.1.0a3
|
|
4
4
|
Summary: RaiSE CLI - Reliable AI Software Engineering governance framework
|
|
5
5
|
Project-URL: Homepage, https://raiseframework.ai
|
|
6
6
|
Project-URL: Documentation, https://docs.raiseframework.ai
|
|
@@ -20,6 +20,7 @@ Classifier: Topic :: Software Development :: Quality Assurance
|
|
|
20
20
|
Requires-Python: >=3.12
|
|
21
21
|
Requires-Dist: atlassian-python-api>=3.41.0
|
|
22
22
|
Requires-Dist: httpx<1.0,>=0.27.0
|
|
23
|
+
Requires-Dist: kuzu>=0.11.0
|
|
23
24
|
Requires-Dist: logfire-api>=4.0
|
|
24
25
|
Requires-Dist: markdown>=3.6
|
|
25
26
|
Requires-Dist: mcp<2,>=1.26
|
|
@@ -28,7 +29,7 @@ Requires-Dist: pydantic-settings>=2.2.0
|
|
|
28
29
|
Requires-Dist: pydantic>=2.6.0
|
|
29
30
|
Requires-Dist: python-dotenv>=1.0.0
|
|
30
31
|
Requires-Dist: pyyaml>=6.0.1
|
|
31
|
-
Requires-Dist: raise-core>=3.0.
|
|
32
|
+
Requires-Dist: raise-core>=3.0.0
|
|
32
33
|
Requires-Dist: rich>=13.7.0
|
|
33
34
|
Requires-Dist: tree-sitter-javascript>=0.25.0
|
|
34
35
|
Requires-Dist: tree-sitter-language-pack>=0.13.0
|
|
@@ -41,6 +42,9 @@ Provides-Extra: atlassian
|
|
|
41
42
|
Provides-Extra: confluence
|
|
42
43
|
Provides-Extra: csharp
|
|
43
44
|
Requires-Dist: tree-sitter-c-sharp>=0.23.1; extra == 'csharp'
|
|
45
|
+
Provides-Extra: eval
|
|
46
|
+
Requires-Dist: ranx<0.4,>=0.3.20; extra == 'eval'
|
|
47
|
+
Requires-Dist: scipy>=1.10; extra == 'eval'
|
|
44
48
|
Provides-Extra: go
|
|
45
49
|
Requires-Dist: tree-sitter-go>=0.25.0; extra == 'go'
|
|
46
50
|
Provides-Extra: hud
|
|
@@ -99,7 +103,7 @@ Windows (PowerShell):
|
|
|
99
103
|
|
|
100
104
|
```powershell
|
|
101
105
|
cd your-project
|
|
102
|
-
irm https://docs.raiseframework.ai/install.ps1 | iex
|
|
106
|
+
powershell -ExecutionPolicy ByPass -c "irm https://docs.raiseframework.ai/install.ps1 | iex"
|
|
103
107
|
```
|
|
104
108
|
|
|
105
109
|
### Manual install
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "raise-cli"
|
|
3
|
-
version = "3.
|
|
3
|
+
version = "3.1.0a3"
|
|
4
4
|
description = "RaiSE CLI - Reliable AI Software Engineering governance framework"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "Emilio Osorio", email = "emilio@humansys.ai"}
|
|
@@ -21,7 +21,7 @@ classifiers = [
|
|
|
21
21
|
]
|
|
22
22
|
|
|
23
23
|
dependencies = [
|
|
24
|
-
"raise-core>=3.0.
|
|
24
|
+
"raise-core>=3.0.0",
|
|
25
25
|
"typer>=0.12.0",
|
|
26
26
|
"rich>=13.7.0",
|
|
27
27
|
"pydantic>=2.6.0",
|
|
@@ -40,6 +40,7 @@ dependencies = [
|
|
|
40
40
|
"mcp>=1.26,<2",
|
|
41
41
|
"markdown>=3.6",
|
|
42
42
|
"atlassian-python-api>=3.41.0",
|
|
43
|
+
"kuzu>=0.11.0",
|
|
43
44
|
]
|
|
44
45
|
|
|
45
46
|
[project.optional-dependencies]
|
|
@@ -60,6 +61,10 @@ go = [
|
|
|
60
61
|
hud = [
|
|
61
62
|
"textual>=0.86,<1.0",
|
|
62
63
|
]
|
|
64
|
+
eval = [
|
|
65
|
+
"ranx>=0.3.20,<0.4",
|
|
66
|
+
"scipy>=1.10",
|
|
67
|
+
]
|
|
63
68
|
# Backwards-compat aliases — atlassian-python-api is now installed by default (RAISE-1912).
|
|
64
69
|
atlassian = []
|
|
65
70
|
confluence = []
|
|
@@ -89,7 +94,7 @@ glossary = "raise_cli.governance.parsers.glossary:GlossaryParser"
|
|
|
89
94
|
[project.entry-points."rai.hooks"]
|
|
90
95
|
telemetry = "raise_cli.hooks.builtin.telemetry:TelemetryHook"
|
|
91
96
|
gate-bridge = "raise_cli.hooks.builtin.gate_bridge:GateBridgeHook"
|
|
92
|
-
|
|
97
|
+
graph-auto-update = "raise_cli.hooks.builtin.graph_update:GraphAutoUpdateHook"
|
|
93
98
|
|
|
94
99
|
[project.entry-points."rai.gates"]
|
|
95
100
|
tests = "raise_cli.gates.builtin.tests:TestGate"
|
|
@@ -107,6 +112,7 @@ drift-auth-fan-out = "raise_cli.gates.drift.auth_fan_out:AuthorizationFanOutGate
|
|
|
107
112
|
ar-story = "raise_cli.gates.ar.story_gate:ArchitectureReviewGate"
|
|
108
113
|
ar-bugfix = "raise_cli.gates.ar.bugfix_gate:BugfixArchitectureReviewGate"
|
|
109
114
|
epic-close-drift = "raise_cli.gates.drift.epic_close:EpicCloseGate"
|
|
115
|
+
eval = "raise_cli.eval.gate:EvalGate"
|
|
110
116
|
|
|
111
117
|
[project.entry-points."rai.doctor.checks"]
|
|
112
118
|
environment = "raise_cli.doctor.checks.environment:EnvironmentCheck"
|
|
@@ -114,6 +120,7 @@ project = "raise_cli.doctor.checks.project:ProjectCheck"
|
|
|
114
120
|
developer = "raise_cli.doctor.checks.developer:DeveloperCheck"
|
|
115
121
|
adapters = "raise_cli.doctor.checks.adapters:AdapterDoctorCheck"
|
|
116
122
|
runtimes = "raise_cli.doctor.checks.runtimes:RuntimesCheck"
|
|
123
|
+
skills = "raise_cli.doctor.checks.skills:SkillCommandReferenceCheck"
|
|
117
124
|
|
|
118
125
|
[project.entry-points."rai.adapters.pm"]
|
|
119
126
|
filesystem = "raise_cli.adapters.filesystem:FilesystemPMAdapter"
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Resolution order:
|
|
4
4
|
1. RAISE_AGENT_SESSION_ID (explicit, set by any runtime adapter)
|
|
5
5
|
2. RAISE_CC_SESSION_ID (Claude Code backward compat)
|
|
6
|
+
2.5. CLAUDE_CODE_SESSION_ID (CC-native; always injected into Bash tool env)
|
|
6
7
|
3. CC port discovery (CLAUDE_CODE_SSE_PORT → cc.port, unambiguous match only)
|
|
7
8
|
4. Terminal bindings (PPID ancestry → _terminal_bindings.json)
|
|
8
9
|
"""
|
|
@@ -14,6 +15,7 @@ import os
|
|
|
14
15
|
from pathlib import Path
|
|
15
16
|
|
|
16
17
|
_SESSIONS_DIR = Path(".raise") / "rai" / "sessions"
|
|
18
|
+
_CLAUDE_WORKTREES_DIR = Path(".claude") / "worktrees"
|
|
17
19
|
|
|
18
20
|
|
|
19
21
|
def discover_agent_session_id() -> str | None:
|
|
@@ -30,6 +32,10 @@ def discover_agent_session_id() -> str | None:
|
|
|
30
32
|
if cc_sid:
|
|
31
33
|
return cc_sid
|
|
32
34
|
|
|
35
|
+
native_sid = os.environ.get("CLAUDE_CODE_SESSION_ID", "").strip()
|
|
36
|
+
if native_sid:
|
|
37
|
+
return native_sid
|
|
38
|
+
|
|
33
39
|
port_sid = _discover_via_cc_port()
|
|
34
40
|
if port_sid:
|
|
35
41
|
return port_sid
|
|
@@ -65,6 +71,9 @@ def discover_agent_runtime() -> str:
|
|
|
65
71
|
if os.environ.get("RAISE_CC_SESSION_ID", "").strip():
|
|
66
72
|
return "claude_code"
|
|
67
73
|
|
|
74
|
+
if os.environ.get("CLAUDE_CODE_SESSION_ID", "").strip():
|
|
75
|
+
return "claude_code"
|
|
76
|
+
|
|
68
77
|
if _discover_via_cc_port():
|
|
69
78
|
return "claude_code"
|
|
70
79
|
|
|
@@ -86,19 +95,34 @@ def _discover_via_cc_port() -> str | None:
|
|
|
86
95
|
port = os.environ.get("CLAUDE_CODE_SSE_PORT", "").strip()
|
|
87
96
|
if not port:
|
|
88
97
|
return None
|
|
89
|
-
sessions_dir = Path.cwd() / _SESSIONS_DIR
|
|
90
|
-
if not sessions_dir.exists():
|
|
91
|
-
return None
|
|
92
98
|
matches: list[str] = []
|
|
93
|
-
for
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
+
for sessions_dir in _candidate_session_dirs(Path.cwd()):
|
|
100
|
+
for sess_dir in sessions_dir.iterdir():
|
|
101
|
+
if not sess_dir.is_dir():
|
|
102
|
+
continue
|
|
103
|
+
port_file = sess_dir / "cc.port"
|
|
104
|
+
if port_file.exists() and port_file.read_text().strip() == port:
|
|
105
|
+
matches.append(sess_dir.name)
|
|
99
106
|
return matches[0] if len(matches) == 1 else None
|
|
100
107
|
|
|
101
108
|
|
|
109
|
+
def _candidate_session_dirs(root: Path) -> list[Path]:
|
|
110
|
+
"""Return session directories relevant from an MCP server CWD."""
|
|
111
|
+
candidates: list[Path] = []
|
|
112
|
+
local_sessions = root / _SESSIONS_DIR
|
|
113
|
+
if local_sessions.exists():
|
|
114
|
+
candidates.append(local_sessions)
|
|
115
|
+
|
|
116
|
+
worktrees_root = root / _CLAUDE_WORKTREES_DIR
|
|
117
|
+
if worktrees_root.exists():
|
|
118
|
+
for worktree in sorted(worktrees_root.iterdir()):
|
|
119
|
+
sessions_dir = worktree / _SESSIONS_DIR
|
|
120
|
+
if sessions_dir.exists():
|
|
121
|
+
candidates.append(sessions_dir)
|
|
122
|
+
|
|
123
|
+
return candidates
|
|
124
|
+
|
|
125
|
+
|
|
102
126
|
def _get_parent_pid(pid: int) -> int | None:
|
|
103
127
|
"""Return the parent PID of *pid* via /proc (Linux only)."""
|
|
104
128
|
try:
|
|
@@ -12,9 +12,10 @@ S1700.6 — Retrofit with PendingOpsLog:
|
|
|
12
12
|
- Before each publish, attempt best-effort flush of existing pending ops.
|
|
13
13
|
- `pending_ops=None` preserves pre-S1700.6 behavior (backward compat).
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
- After each successful remote publish,
|
|
17
|
-
-
|
|
15
|
+
RAISE-5618 — Docs sync state in SQLite:
|
|
16
|
+
- After each successful remote publish, persist local_path → remote_id/url/updated_at in SQLite.
|
|
17
|
+
- Lazy migration imports existing .raise/sync/docs-manifest.yaml entries on first write.
|
|
18
|
+
- `project_root=None` skips sync state write (backward compat).
|
|
18
19
|
|
|
19
20
|
RAISE-1051 (S1051.7) | RAISE-1795 (S1700.6) | RAISE-3414 (S20.2)
|
|
20
21
|
"""
|
|
@@ -40,6 +41,54 @@ from raise_cli.adapters.pending_ops import PendingOpsLog
|
|
|
40
41
|
logger = logging.getLogger(__name__)
|
|
41
42
|
|
|
42
43
|
|
|
44
|
+
def migrate_docs_yaml_to_sqlite(project_root: Path) -> None:
|
|
45
|
+
"""Lazy one-time migration: import valid YAML entries to SQLite, skip stale paths.
|
|
46
|
+
|
|
47
|
+
No-op when the YAML manifest does not exist or SQLite already has entries.
|
|
48
|
+
"""
|
|
49
|
+
manifest_path = project_root / ".raise" / "sync" / "docs-manifest.yaml"
|
|
50
|
+
if not manifest_path.exists():
|
|
51
|
+
return
|
|
52
|
+
from raise_cli.storage.connection import get_project_db, get_project_id
|
|
53
|
+
from raise_cli.storage.schema import create_all
|
|
54
|
+
|
|
55
|
+
db = get_project_db(project_root)
|
|
56
|
+
create_all(db)
|
|
57
|
+
pid = get_project_id(project_root)
|
|
58
|
+
count = db.execute(
|
|
59
|
+
"SELECT COUNT(*) FROM docs_sync WHERE project_id = ?", (pid,)
|
|
60
|
+
).fetchone()[0]
|
|
61
|
+
if count > 0:
|
|
62
|
+
db.close()
|
|
63
|
+
return
|
|
64
|
+
try:
|
|
65
|
+
data: dict[str, Any] = (
|
|
66
|
+
yaml.safe_load(manifest_path.read_text(encoding="utf-8")) or {}
|
|
67
|
+
)
|
|
68
|
+
except Exception:
|
|
69
|
+
db.close()
|
|
70
|
+
return
|
|
71
|
+
for key, meta in data.items():
|
|
72
|
+
if not isinstance(meta, dict):
|
|
73
|
+
continue
|
|
74
|
+
if not Path(key).exists():
|
|
75
|
+
continue
|
|
76
|
+
db.execute(
|
|
77
|
+
"INSERT OR IGNORE INTO docs_sync"
|
|
78
|
+
" (local_path, remote_id, url, updated_at, project_id)"
|
|
79
|
+
" VALUES (?, ?, ?, ?, ?)",
|
|
80
|
+
(
|
|
81
|
+
key,
|
|
82
|
+
str(meta.get("remote_id", "")),
|
|
83
|
+
str(meta.get("url", "")),
|
|
84
|
+
str(meta.get("updated_at", "")),
|
|
85
|
+
pid,
|
|
86
|
+
),
|
|
87
|
+
)
|
|
88
|
+
db.commit()
|
|
89
|
+
db.close()
|
|
90
|
+
|
|
91
|
+
|
|
43
92
|
class CompositeDocTarget:
|
|
44
93
|
"""Delegates to multiple DocumentationTargets.
|
|
45
94
|
|
|
@@ -82,19 +131,26 @@ class CompositeDocTarget:
|
|
|
82
131
|
# S1700.6: best-effort flush of pending ops (non-blocking)
|
|
83
132
|
self._flush_pending()
|
|
84
133
|
|
|
134
|
+
# RAISE-5894: inject remote_id from docs_sync so remote adapter can PUT by ID
|
|
135
|
+
local_path = metadata.get("path")
|
|
136
|
+
if local_path:
|
|
137
|
+
stored_id = self._load_remote_id(str(local_path))
|
|
138
|
+
if stored_id:
|
|
139
|
+
metadata = {**metadata, "remote_id": stored_id}
|
|
140
|
+
|
|
85
141
|
results, failures, fs_result, remote_failed = self._publish_to_targets(
|
|
86
142
|
doc_type, content, metadata
|
|
87
143
|
)
|
|
88
144
|
|
|
89
|
-
#
|
|
145
|
+
# RAISE-5618: persist sync state to SQLite when remote publish succeeded
|
|
90
146
|
if not remote_failed and results:
|
|
91
147
|
remote_result = results[-1]
|
|
92
148
|
local_path = metadata.get("path")
|
|
93
149
|
if remote_result.success and local_path:
|
|
94
150
|
try:
|
|
95
|
-
self.
|
|
151
|
+
self._save_docs_sync(str(local_path), remote_result)
|
|
96
152
|
except Exception:
|
|
97
|
-
logger.warning("Failed to
|
|
153
|
+
logger.warning("Failed to save docs sync state", exc_info=True)
|
|
98
154
|
|
|
99
155
|
# S1700.6: queue pending op when filesystem (canonical) succeeded but remote failed
|
|
100
156
|
if (
|
|
@@ -169,25 +225,56 @@ class CompositeDocTarget:
|
|
|
169
225
|
)
|
|
170
226
|
return best
|
|
171
227
|
|
|
172
|
-
def
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
228
|
+
def _load_remote_id(self, local_path: str) -> str | None:
|
|
229
|
+
"""Return remote_id from docs_sync for local_path, or None if not found."""
|
|
230
|
+
if self._project_root is None:
|
|
231
|
+
return None
|
|
232
|
+
from raise_cli.storage.connection import get_project_db, get_project_id
|
|
233
|
+
from raise_cli.storage.schema import create_all
|
|
234
|
+
|
|
235
|
+
db = get_project_db(self._project_root)
|
|
236
|
+
create_all(db)
|
|
237
|
+
pid = get_project_id(self._project_root)
|
|
238
|
+
row = db.execute(
|
|
239
|
+
"SELECT remote_id FROM docs_sync WHERE local_path = ? AND project_id = ?",
|
|
240
|
+
(local_path, pid),
|
|
241
|
+
).fetchone()
|
|
242
|
+
db.close()
|
|
243
|
+
return row[0] if row and row[0] else None
|
|
244
|
+
|
|
245
|
+
def _save_docs_sync(self, local_path: str, remote_result: PublishResult) -> None:
|
|
246
|
+
"""Persist docs sync state to SQLite after a successful remote publish."""
|
|
176
247
|
if self._project_root is None:
|
|
177
248
|
return
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
"updated_at
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
249
|
+
from raise_cli.storage.connection import get_project_db, get_project_id
|
|
250
|
+
from raise_cli.storage.schema import create_all
|
|
251
|
+
|
|
252
|
+
self._migrate_yaml_to_sqlite()
|
|
253
|
+
db = get_project_db(self._project_root)
|
|
254
|
+
create_all(db)
|
|
255
|
+
pid = get_project_id(self._project_root)
|
|
256
|
+
db.execute(
|
|
257
|
+
"INSERT INTO docs_sync (local_path, remote_id, url, updated_at, project_id)"
|
|
258
|
+
" VALUES (?, ?, ?, ?, ?)"
|
|
259
|
+
" ON CONFLICT(local_path, project_id) DO UPDATE SET"
|
|
260
|
+
" remote_id = excluded.remote_id,"
|
|
261
|
+
" url = excluded.url,"
|
|
262
|
+
" updated_at = excluded.updated_at",
|
|
263
|
+
(
|
|
264
|
+
local_path,
|
|
265
|
+
remote_result.remote_id or "",
|
|
266
|
+
remote_result.url or "",
|
|
267
|
+
datetime.now(UTC).replace(microsecond=0).isoformat(),
|
|
268
|
+
pid,
|
|
269
|
+
),
|
|
270
|
+
)
|
|
271
|
+
db.commit()
|
|
272
|
+
db.close()
|
|
273
|
+
|
|
274
|
+
def _migrate_yaml_to_sqlite(self) -> None:
|
|
275
|
+
"""Lazy one-time migration: import valid YAML entries to SQLite, skip stale paths."""
|
|
276
|
+
if self._project_root is not None:
|
|
277
|
+
migrate_docs_yaml_to_sqlite(self._project_root)
|
|
191
278
|
|
|
192
279
|
def _flush_pending(self) -> None:
|
|
193
280
|
"""Attempt to replay pending ops against remote. Best-effort, never raises."""
|
|
@@ -12,18 +12,23 @@ Design decision D1: read-local (inverse of CompositeDocTarget which reads remote
|
|
|
12
12
|
|
|
13
13
|
from __future__ import annotations
|
|
14
14
|
|
|
15
|
+
import contextlib
|
|
15
16
|
import logging
|
|
16
17
|
from collections.abc import Callable
|
|
17
18
|
from datetime import UTC, datetime
|
|
19
|
+
from pathlib import Path
|
|
18
20
|
from typing import Any
|
|
19
21
|
from uuid import uuid4
|
|
20
22
|
|
|
21
23
|
from raise_cli.adapters.filesystem_models import BacklogItem
|
|
22
24
|
from raise_cli.adapters.models import (
|
|
23
25
|
AdapterHealth,
|
|
26
|
+
AttachmentDetail,
|
|
27
|
+
AttachmentRef,
|
|
24
28
|
BatchResult,
|
|
25
29
|
Comment,
|
|
26
30
|
CommentRef,
|
|
31
|
+
FailureDetail,
|
|
27
32
|
FieldDefinition,
|
|
28
33
|
IssueDetail,
|
|
29
34
|
IssueRef,
|
|
@@ -64,6 +69,11 @@ class CompositeBacklogAdapter:
|
|
|
64
69
|
self._ledger = ledger
|
|
65
70
|
self._pending = pending
|
|
66
71
|
|
|
72
|
+
@property
|
|
73
|
+
def remotes(self) -> list[Any]:
|
|
74
|
+
"""Remote adapters in write order."""
|
|
75
|
+
return list(self._remotes)
|
|
76
|
+
|
|
67
77
|
# -------------------------------------------------------------------
|
|
68
78
|
# Locality probe (RAISE-1877)
|
|
69
79
|
# -------------------------------------------------------------------
|
|
@@ -232,20 +242,44 @@ class CompositeBacklogAdapter:
|
|
|
232
242
|
return local_ref
|
|
233
243
|
|
|
234
244
|
def transition_issue(self, key: str, status: str) -> IssueRef:
|
|
235
|
-
"""Transition locally (when local-canonical), then
|
|
245
|
+
"""Transition locally (when local-canonical), then propagate on remotes.
|
|
246
|
+
|
|
247
|
+
Remote-native keys (no local artifact, e.g. RAISE-xxx) call the remote
|
|
248
|
+
directly and propagate errors — queuing a failed transition for replay
|
|
249
|
+
makes no sense because transitions are context-dependent (RAISE-4140).
|
|
250
|
+
|
|
251
|
+
Local-canonical keys also propagate remote errors (RAISE-4186): if Jira
|
|
252
|
+
rejects the transition, the local state is rolled back (best-effort) and
|
|
253
|
+
the exception is re-raised so the caller sees a real failure instead of
|
|
254
|
+
a false-positive success.
|
|
255
|
+
"""
|
|
236
256
|
self._flush_pending()
|
|
237
257
|
if self._local_has_key(key):
|
|
258
|
+
prev_status = self._local.get_issue(key).status
|
|
238
259
|
local_ref: IssueRef = self._local.transition_issue(key, status)
|
|
239
|
-
else:
|
|
240
|
-
local_ref = IssueRef(key=key) # remote-native
|
|
241
260
|
|
|
242
|
-
|
|
243
|
-
|
|
261
|
+
def _do_transition(remote: Any, rk: str) -> None:
|
|
262
|
+
remote.transition_issue(rk, status)
|
|
244
263
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
264
|
+
try:
|
|
265
|
+
self._write_to_remotes_keyed(
|
|
266
|
+
"transition_issue",
|
|
267
|
+
key,
|
|
268
|
+
{"status": status},
|
|
269
|
+
_do_transition,
|
|
270
|
+
propagate_errors=True,
|
|
271
|
+
)
|
|
272
|
+
except Exception:
|
|
273
|
+
with contextlib.suppress(Exception):
|
|
274
|
+
self._local.transition_issue(key, prev_status)
|
|
275
|
+
raise
|
|
276
|
+
return local_ref
|
|
277
|
+
|
|
278
|
+
# Remote-native: call directly so errors propagate to the caller.
|
|
279
|
+
remote_key = self._ledger.get(key) or key
|
|
280
|
+
for remote in self._remotes:
|
|
281
|
+
remote.transition_issue(remote_key, status)
|
|
282
|
+
return IssueRef(key=key)
|
|
249
283
|
|
|
250
284
|
def batch_transition(self, keys: list[str], status: str) -> BatchResult:
|
|
251
285
|
"""Batch transition: local-canonical via filesystem, remote-native direct to remote."""
|
|
@@ -292,6 +326,24 @@ class CompositeBacklogAdapter:
|
|
|
292
326
|
logger.warning("Remote batch_transition failed: %s", exc)
|
|
293
327
|
return merged
|
|
294
328
|
|
|
329
|
+
def batch_create(self, issues: list[IssueSpec]) -> BatchResult:
|
|
330
|
+
"""Create multiple issues with per-item fault isolation."""
|
|
331
|
+
succeeded: list[IssueRef] = []
|
|
332
|
+
failed: list[FailureDetail] = []
|
|
333
|
+
for spec in issues:
|
|
334
|
+
try:
|
|
335
|
+
ref = self.create_issue(spec.project, spec)
|
|
336
|
+
succeeded.append(ref)
|
|
337
|
+
except Exception as exc:
|
|
338
|
+
logger.warning("batch_create failed for %r: %s", spec.summary, exc)
|
|
339
|
+
failed.append(FailureDetail(key=spec.summary, error=str(exc)))
|
|
340
|
+
return BatchResult(succeeded=succeeded, failed=failed)
|
|
341
|
+
|
|
342
|
+
def remove_link(self, link_id: str) -> None:
|
|
343
|
+
"""Remove an issue link by ID — delegates to remote only (IDs are remote-native)."""
|
|
344
|
+
for remote in self._remotes:
|
|
345
|
+
remote.remove_link(link_id)
|
|
346
|
+
|
|
295
347
|
def link_to_parent(self, child_key: str, parent_key: str) -> None:
|
|
296
348
|
"""Link locally (when local-canonical), then best-effort on remotes."""
|
|
297
349
|
self._flush_pending()
|
|
@@ -322,8 +374,12 @@ class CompositeBacklogAdapter:
|
|
|
322
374
|
"link_to_parent", child_key, {"parent_key": parent_key}
|
|
323
375
|
)
|
|
324
376
|
|
|
325
|
-
def link_issues(self, source: str, target: str, link_type: str) ->
|
|
326
|
-
"""Link locally (when local-canonical), then best-effort on remotes.
|
|
377
|
+
def link_issues(self, source: str, target: str, link_type: str) -> bool:
|
|
378
|
+
"""Link locally (when local-canonical), then best-effort on remotes.
|
|
379
|
+
|
|
380
|
+
Returns True if the link was created on all remotes, False if any
|
|
381
|
+
remote failed and the operation was queued for later replay.
|
|
382
|
+
"""
|
|
327
383
|
self._flush_pending()
|
|
328
384
|
if self._local_has_key(source) and self._local_has_key(target):
|
|
329
385
|
self._local.link_issues(source, target, link_type)
|
|
@@ -334,6 +390,7 @@ class CompositeBacklogAdapter:
|
|
|
334
390
|
target if not self._local_has_key(target) else None
|
|
335
391
|
)
|
|
336
392
|
if remote_source and remote_target:
|
|
393
|
+
queued = False
|
|
337
394
|
for remote in self._remotes:
|
|
338
395
|
try:
|
|
339
396
|
remote.link_issues(remote_source, remote_target, link_type)
|
|
@@ -344,12 +401,14 @@ class CompositeBacklogAdapter:
|
|
|
344
401
|
{"target": target, "link_type": link_type},
|
|
345
402
|
)
|
|
346
403
|
logger.warning("Remote link_issues failed: %s", exc)
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
404
|
+
queued = True
|
|
405
|
+
return not queued
|
|
406
|
+
self._pending.append(
|
|
407
|
+
"link_issues",
|
|
408
|
+
source,
|
|
409
|
+
{"target": target, "link_type": link_type},
|
|
410
|
+
)
|
|
411
|
+
return False
|
|
353
412
|
|
|
354
413
|
def add_comment(self, key: str, body: str) -> CommentRef:
|
|
355
414
|
"""Comment locally (when local-canonical), then best-effort on remotes."""
|
|
@@ -372,7 +431,7 @@ class CompositeBacklogAdapter:
|
|
|
372
431
|
def get_issue(self, key: str) -> IssueDetail:
|
|
373
432
|
"""Read from local; fallback to remote for remote-native keys."""
|
|
374
433
|
try:
|
|
375
|
-
|
|
434
|
+
detail: IssueDetail = self._local.get_issue(key)
|
|
376
435
|
except (KeyError, FileNotFoundError):
|
|
377
436
|
if self._remotes:
|
|
378
437
|
logger.debug(
|
|
@@ -380,6 +439,11 @@ class CompositeBacklogAdapter:
|
|
|
380
439
|
)
|
|
381
440
|
return self._remotes[0].get_issue(key) # type: ignore[no-any-return]
|
|
382
441
|
raise
|
|
442
|
+
if detail.status == "pending" and self._remotes:
|
|
443
|
+
with contextlib.suppress(Exception):
|
|
444
|
+
remote: IssueDetail = self._remotes[0].get_issue(key)
|
|
445
|
+
return detail.model_copy(update={"status": remote.status})
|
|
446
|
+
return detail
|
|
383
447
|
|
|
384
448
|
def get_comments(
|
|
385
449
|
self, key: str, limit: int = 10, offset: int = 0, fetch_all: bool = False
|
|
@@ -452,6 +516,42 @@ class CompositeBacklogAdapter:
|
|
|
452
516
|
names=names, issue_type=issue_type
|
|
453
517
|
) # type: ignore[no-any-return]
|
|
454
518
|
|
|
519
|
+
# ── Attachments (S2503.7) ────────────────────────────────────────
|
|
520
|
+
|
|
521
|
+
def attach(
|
|
522
|
+
self, key: str, path: Path, mime_type: str | None = None
|
|
523
|
+
) -> AttachmentRef:
|
|
524
|
+
"""Delegate to primary remote; raise if no remotes."""
|
|
525
|
+
if not self._remotes:
|
|
526
|
+
raise RuntimeError("No remote adapters available for attach()")
|
|
527
|
+
return self._remotes[0].attach(key, path, mime_type) # type: ignore[no-any-return]
|
|
528
|
+
|
|
529
|
+
def get_attachments(self, key: str) -> list[AttachmentDetail]:
|
|
530
|
+
"""Delegate to primary remote; return [] if no remotes."""
|
|
531
|
+
if not self._remotes:
|
|
532
|
+
return []
|
|
533
|
+
return self._remotes[0].get_attachments(key) # type: ignore[no-any-return]
|
|
534
|
+
|
|
535
|
+
# ── Sprint (Jira-specific) — delegate to primary remote ──────────
|
|
536
|
+
|
|
537
|
+
def get_sprints(self, project_key: str, state: str | None = None) -> list[Any]:
|
|
538
|
+
"""Delegate to primary remote; raise if no remotes."""
|
|
539
|
+
if not self._remotes:
|
|
540
|
+
raise RuntimeError("No remote adapters available for get_sprints()")
|
|
541
|
+
return self._remotes[0].get_sprints(project_key, state=state) # type: ignore[no-any-return]
|
|
542
|
+
|
|
543
|
+
def assign_to_sprint(self, issue_key: str, sprint_id: int) -> None:
|
|
544
|
+
"""Delegate to primary remote; raise if no remotes."""
|
|
545
|
+
if not self._remotes:
|
|
546
|
+
raise RuntimeError("No remote adapters available for assign_to_sprint()")
|
|
547
|
+
self._remotes[0].assign_to_sprint(issue_key, sprint_id) # type: ignore[no-any-return]
|
|
548
|
+
|
|
549
|
+
def download_attachment(self, attachment_id: str) -> bytes:
|
|
550
|
+
"""Delegate to primary remote; raise if no remotes."""
|
|
551
|
+
if not self._remotes:
|
|
552
|
+
raise RuntimeError("No remote adapters available for download_attachment()")
|
|
553
|
+
return self._remotes[0].download_attachment(attachment_id) # type: ignore[no-any-return]
|
|
554
|
+
|
|
455
555
|
# -------------------------------------------------------------------
|
|
456
556
|
# Drain — replay queued pending ops (S1700.7.1)
|
|
457
557
|
# -------------------------------------------------------------------
|
|
@@ -723,6 +823,8 @@ class CompositeBacklogAdapter:
|
|
|
723
823
|
local_key: str,
|
|
724
824
|
args: dict[str, Any],
|
|
725
825
|
action: _RemoteAction,
|
|
826
|
+
*,
|
|
827
|
+
propagate_errors: bool = False,
|
|
726
828
|
) -> None:
|
|
727
829
|
"""Execute a keyed write op on all remotes using ledger for key translation.
|
|
728
830
|
|
|
@@ -762,11 +864,13 @@ class CompositeBacklogAdapter:
|
|
|
762
864
|
action(remote, remote_key)
|
|
763
865
|
completed.append(i)
|
|
764
866
|
except Exception as exc:
|
|
867
|
+
logger.warning("Remote %s failed: %s", op_name, exc)
|
|
868
|
+
if propagate_errors:
|
|
869
|
+
raise
|
|
765
870
|
self._pending.append(
|
|
766
871
|
op_name,
|
|
767
872
|
local_key,
|
|
768
873
|
args,
|
|
769
874
|
completed_remotes=completed,
|
|
770
875
|
)
|
|
771
|
-
logger.warning("Remote %s failed: %s", op_name, exc)
|
|
772
876
|
break
|