sauron-cli 1.2.0 → 1.3.0
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.
- package/.agents/rules/memory.md +156 -0
- package/.agents/skills/wiki/SKILL.md +172 -0
- package/.aider.instructions.md +152 -0
- package/.cursor/rules/sauron-memory.mdc +157 -0
- package/.genesis/prompts/prompt-onboarding-inteligente.md +45 -0
- package/.genesis/prompts/prompt-sauron-vs-openspec-arquitetura.md +106 -0
- package/.github/workflows/ci.yml +27 -0
- package/.sauron/.manifest.json +2 -1
- package/.sauron/wiki/history/implementacao-scanner-inteligente.md +29 -0
- package/.sauron/wiki/history/reestruturacao-arquitetural-core.md +29 -0
- package/.sauron/wiki/history/resiliencia-caminho-templates.md +29 -0
- package/.sauron/wiki/standards/typescript.rules.md +21 -0
- package/.sauron/wiki/summary.json +81 -0
- package/.windsurfrules +160 -0
- package/55ea973d-e255-4f08-a313-a5d68243bd2d.png +0 -0
- package/Evolu/303/247/303/243o Arquitetural do Sauron CLI.md" +97 -0
- package/OpenSpec-main/.actrc +1 -0
- package/OpenSpec-main/.changeset/README.md +97 -0
- package/OpenSpec-main/.changeset/config.json +15 -0
- package/OpenSpec-main/.coderabbit.yaml +11 -0
- package/OpenSpec-main/.devcontainer/README.md +92 -0
- package/OpenSpec-main/.devcontainer/devcontainer.json +68 -0
- package/OpenSpec-main/.github/CODEOWNERS +2 -0
- package/OpenSpec-main/.github/workflows/README.md +20 -0
- package/OpenSpec-main/.github/workflows/ci.yml +346 -0
- package/OpenSpec-main/.github/workflows/release-prepare.yml +60 -0
- package/OpenSpec-main/CHANGELOG.md +594 -0
- package/OpenSpec-main/LICENSE +22 -0
- package/OpenSpec-main/MAINTAINERS.md +17 -0
- package/OpenSpec-main/README.md +206 -0
- package/OpenSpec-main/README_OLD.md +475 -0
- package/OpenSpec-main/assets/openspec_bg.png +0 -0
- package/OpenSpec-main/assets/openspec_dashboard.png +0 -0
- package/OpenSpec-main/assets/openspec_pixel_dark.svg +89 -0
- package/OpenSpec-main/assets/openspec_pixel_light.svg +89 -0
- package/OpenSpec-main/bin/openspec.js +5 -0
- package/OpenSpec-main/build.js +31 -0
- package/OpenSpec-main/eslint.config.js +42 -0
- package/OpenSpec-main/flake.lock +27 -0
- package/OpenSpec-main/flake.nix +114 -0
- package/OpenSpec-main/openspec/changes/IMPLEMENTATION_ORDER.md +68 -0
- package/OpenSpec-main/openspec/changes/add-artifact-regeneration-support/proposal.md +136 -0
- package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/proposal.md +93 -0
- package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/change-creation/spec.md +15 -0
- package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/change-stacking-workflow/spec.md +65 -0
- package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/cli-change/spec.md +27 -0
- package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/openspec-conventions/spec.md +29 -0
- package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/tasks.md +39 -0
- package/OpenSpec-main/openspec/changes/add-global-install-scope/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/add-global-install-scope/design.md +161 -0
- package/OpenSpec-main/openspec/changes/add-global-install-scope/proposal.md +101 -0
- package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/ai-tool-paths/spec.md +35 -0
- package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-config/spec.md +21 -0
- package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-init/spec.md +28 -0
- package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-update/spec.md +34 -0
- package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/command-generation/spec.md +22 -0
- package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/global-config/spec.md +24 -0
- package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/installation-scope/spec.md +71 -0
- package/OpenSpec-main/openspec/changes/add-global-install-scope/tasks.md +61 -0
- package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/proposal.md +45 -0
- package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/specs/developer-qa-workflow/spec.md +49 -0
- package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/proposal.md +111 -0
- package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/specs/cli-init/spec.md +121 -0
- package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/specs/cli-update/spec.md +48 -0
- package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/tasks.md +53 -0
- package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/design.md +86 -0
- package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/proposal.md +29 -0
- package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/specs/cli-update/spec.md +59 -0
- package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/tasks.md +20 -0
- package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/proposal.md +20 -0
- package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/specs/cli-list/spec.md +69 -0
- package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/tasks.md +26 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/design.md +64 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/proposal.md +18 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/tasks.md +25 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/design.md +104 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/proposal.md +30 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/specs/cli-init/spec.md +148 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/tasks.md +38 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/proposal.md +24 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/specs/openspec-conventions/spec.md +120 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/tasks.md +38 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/proposal.md +13 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/specs/openspec-docs/README.md +472 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/tasks.md +9 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/proposal.md +15 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/specs/cli-archive/spec.md +111 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/tasks.md +44 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/proposal.md +19 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/specs/cli-diff/spec.md +77 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/tasks.md +23 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/design.md +56 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/proposal.md +17 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/specs/cli-change/spec.md +48 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/specs/cli-list/spec.md +12 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/tasks.md +34 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/proposal.md +20 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-change/spec.md +23 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-show/spec.md +83 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-spec/spec.md +23 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/tasks.md +142 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/proposal.md +13 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/specs/cli-archive/spec.md +191 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/tasks.md +57 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/design.md +45 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/proposal.md +19 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/specs/cli-spec/spec.md +43 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/tasks.md +22 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/design.md +104 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/proposal.md +22 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/specs/cli-archive/spec.md +18 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/specs/cli-diff/spec.md +12 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/tasks.md +59 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/proposal.md +93 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/cli-archive/spec.md +48 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/cli-diff/spec.md +45 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/openspec-conventions/spec.md +101 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/tasks.md +55 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/design.md +19 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/proposal.md +67 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/specs/cli-list/spec.md +57 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/specs/openspec-conventions/spec.md +23 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/tasks.md +27 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/proposal.md +20 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-change/spec.md +22 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-spec/spec.md +23 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-validate/spec.md +149 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/tasks.md +81 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/proposal.md +40 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/specs/cli-update/spec.md +23 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/tasks.md +21 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/proposal.md +25 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/specs/cli-validate/spec.md +55 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/tasks.md +21 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/proposal.md +36 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/specs/openspec-conventions/spec.md +192 -0
- package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/tasks.md +19 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/proposal.md +38 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/specs/cli-view/spec.md +109 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/tasks.md +47 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/proposal.md +28 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/specs/cli-init/spec.md +71 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/specs/cli-update/spec.md +41 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/tasks.md +17 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/proposal.md +35 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/specs/cli-init/spec.md +45 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/tasks.md +16 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/proposal.md +119 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/specs/cli-init/spec.md +21 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/specs/cli-update/spec.md +22 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/tasks.md +20 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-cli-e2e-plan/proposal.md +19 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-cli-e2e-plan/tasks.md +9 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-deterministic-tests/proposal.md +78 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-deterministic-tests/tasks.md +25 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/proposal.md +13 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/specs/cli-init/spec.md +92 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/tasks.md +12 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-remove-diff-command/proposal.md +81 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-remove-diff-command/tasks.md +37 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/proposal.md +25 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/specs/cli-view/spec.md +9 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/tasks.md +8 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/proposal.md +29 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/cli-init/spec.md +40 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/cli-update/spec.md +22 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/openspec-conventions/spec.md +27 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/tasks.md +22 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/design.md +130 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/proposal.md +117 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/tasks.md +69 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/proposal.md +19 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/specs/cli-validate/spec.md +9 -0
- package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/tasks.md +11 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/proposal.md +25 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/specs/cli-init/spec.md +56 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/specs/cli-update/spec.md +41 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/tasks.md +19 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/proposal.md +25 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/specs/cli-init/spec.md +48 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/specs/cli-update/spec.md +48 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/tasks.md +30 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/proposal.md +17 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/specs/cli-init/spec.md +43 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/specs/cli-update/spec.md +27 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/tasks.md +15 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/proposal.md +12 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/specs/cli-init/spec.md +39 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/tasks.md +17 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/proposal.md +17 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/specs/cli-init/spec.md +42 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/specs/cli-update/spec.md +27 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/tasks.md +17 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/proposal.md +12 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/specs/cli-validate/spec.md +39 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/tasks.md +12 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/proposal.md +12 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/specs/docs-agent-instructions/spec.md +33 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/tasks.md +11 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-slim-root-agents-file/proposal.md +13 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-slim-root-agents-file/tasks.md +15 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/proposal.md +14 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/specs/cli-init/spec.md +10 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/tasks.md +8 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/proposal.md +15 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/specs/cli-init/spec.md +32 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/specs/cli-update/spec.md +10 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/tasks.md +11 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-release-automation/proposal.md +49 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-release-automation/tasks.md +12 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/proposal.md +17 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/specs/cli-update/spec.md +32 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/tasks.md +15 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/proposal.md +15 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/specs/cli-init/spec.md +97 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/tasks.md +19 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/proposal.md +13 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/specs/cli-init/spec.md +67 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/tasks.md +7 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/proposal.md +12 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/specs/cli-init/spec.md +54 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/specs/cli-update/spec.md +54 -0
- package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/tasks.md +11 -0
- package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/design.md +525 -0
- package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/proposal.md +29 -0
- package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/specs/cli-completion/spec.md +300 -0
- package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/tasks.md +81 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/design.md +105 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/proposal.md +20 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/specs/global-config/spec.md +76 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/tasks.md +26 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/design.md +89 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/proposal.md +60 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/specs/cli-config/spec.md +213 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/tasks.md +28 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/proposal.md +15 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/specs/cli-completion/spec.md +328 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/tasks.md +49 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/design.md +197 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/proposal.md +18 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/specs/artifact-graph/spec.md +103 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/tasks.md +61 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/design.md +74 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/proposal.md +45 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/specs/change-creation/spec.md +63 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/tasks.md +30 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/design.md +112 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/proposal.md +33 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/specs/cli-artifact-workflow/spec.md +153 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/tasks.md +48 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/design.md +149 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/proposal.md +20 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/specs/instruction-loader/spec.md +70 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/tasks.md +13 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/design.md +129 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/proposal.md +20 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/specs/artifact-graph/spec.md +49 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/tasks.md +32 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/design.md +151 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/proposal.md +101 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/specs/cli-artifact-workflow/spec.md +109 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/specs/cli-view/spec.md +60 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/tasks.md +25 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/proposal.md +11 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-init/spec.md +105 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-update/spec.md +92 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/tasks.md +12 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/proposal.md +13 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-init/spec.md +105 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-update/spec.md +92 -0
- package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/tasks.md +13 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-agent-schema-selection/proposal.md +26 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-agent-schema-selection/tasks.md +32 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/design.md +147 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/proposal.md +29 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/specs/cli-artifact-workflow/spec.md +98 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/tasks.md +29 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/design.md +77 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/proposal.md +32 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/specs/specs-sync-skill/spec.md +67 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/tasks.md +40 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/proposal.md +138 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/specs/cli-artifact-workflow/spec.md +60 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/tasks.md +35 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/design.md +84 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/proposal.md +28 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/specs/opsx-archive-skill/spec.md +122 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/tasks.md +23 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/design.md +94 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/proposal.md +25 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/specs/nix-flake-support/spec.md +79 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/tasks.md +65 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/design.md +117 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/proposal.md +23 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/specs/flake-update-script/spec.md +93 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/tasks.md +55 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/design.md +175 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/proposal.md +37 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/specs/global-config/spec.md +21 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/specs/telemetry/spec.md +116 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/tasks.md +47 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/proposal.md +16 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/specs/cli-init/spec.md +75 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/specs/cli-update/spec.md +56 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/tasks.md +6 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/design.md +206 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/proposal.md +21 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/specs/ci-nix-validation/spec.md +104 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/tasks.md +49 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/README.md +3 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/design.md +70 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/proposal.md +32 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/specs/no-changes.md +9 -0
- package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/tasks.md +22 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/proposal.md +20 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/specs/cli-feedback/spec.md +188 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/tasks.md +30 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/design.md +115 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/proposal.md +27 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/specs/opsx-onboard-skill/spec.md +162 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/tasks.md +21 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/design.md +96 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/proposal.md +48 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/specs/opsx-verify-skill/spec.md +190 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/tasks.md +15 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/design.md +193 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/proposal.md +32 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/specs/cli-init/spec.md +176 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/specs/legacy-cleanup/spec.md +158 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/tasks.md +67 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/design.md +144 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/proposal.md +36 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/ai-tool-paths/spec.md +63 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/cli-artifact-workflow/spec.md +60 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/command-generation/spec.md +98 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/tasks.md +55 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/design.md +665 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/proposal.md +774 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/config-loading/spec.md +119 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/context-injection/spec.md +51 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/rules-injection/spec.md +99 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/schema-resolution/spec.md +83 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/tasks.md +72 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/design.md +117 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/proposal.md +167 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/specs/schema-resolution/spec.md +88 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/tasks.md +28 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/design.md +113 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/proposal.md +55 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-fork-command/spec.md +66 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-init-command/spec.md +71 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-validate-command/spec.md +86 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-which-command/spec.md +65 -0
- package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/tasks.md +67 -0
- package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/README.md +3 -0
- package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/design.md +85 -0
- package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/proposal.md +38 -0
- package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/specs/ai-tool-paths/spec.md +12 -0
- package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/specs/cli-init/spec.md +37 -0
- package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/tasks.md +22 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/design.md +208 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/proposal.md +142 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/specs/openspec-conventions/spec.md +29 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/specs/workspace-foundation/spec.md +199 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/tasks.md +56 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/design.md +356 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/proposal.md +128 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/cli-artifact-workflow/spec.md +24 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/workspace-foundation/spec.md +35 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/workspace-links/spec.md +356 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/tasks.md +121 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/design.md +266 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/proposal.md +65 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/specs/workspace-foundation/spec.md +76 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/specs/workspace-open/spec.md +199 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/tasks.md +89 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/design.md +242 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/proposal.md +78 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/artifact-graph/spec.md +36 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/change-creation/spec.md +42 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-artifact-workflow/spec.md +100 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-config/spec.md +55 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-update/spec.md +21 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/openspec-conventions/spec.md +32 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/schema-resolution/spec.md +25 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/workspace-change-planning/spec.md +67 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/workspace-links/spec.md +163 -0
- package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/tasks.md +133 -0
- package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/design.md +48 -0
- package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/proposal.md +26 -0
- package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/specs/command-generation/spec.md +63 -0
- package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/tasks.md +19 -0
- package/OpenSpec-main/openspec/changes/graceful-status-no-changes/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/graceful-status-no-changes/design.md +38 -0
- package/OpenSpec-main/openspec/changes/graceful-status-no-changes/proposal.md +25 -0
- package/OpenSpec-main/openspec/changes/graceful-status-no-changes/specs/graceful-status-empty/spec.md +27 -0
- package/OpenSpec-main/openspec/changes/graceful-status-no-changes/tasks.md +16 -0
- package/OpenSpec-main/openspec/changes/schema-alias-support/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/schema-alias-support/proposal.md +28 -0
- package/OpenSpec-main/openspec/changes/simplify-skill-installation/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/simplify-skill-installation/design.md +288 -0
- package/OpenSpec-main/openspec/changes/simplify-skill-installation/proposal.md +202 -0
- package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/cli-init/spec.md +199 -0
- package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/cli-update/spec.md +177 -0
- package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/profiles/spec.md +142 -0
- package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/propose-workflow/spec.md +42 -0
- package/OpenSpec-main/openspec/changes/simplify-skill-installation/tasks.md +132 -0
- package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/design.md +149 -0
- package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/proposal.md +47 -0
- package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/specs/template-artifact-pipeline/spec.md +89 -0
- package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/tasks.md +41 -0
- package/OpenSpec-main/openspec/changes/workspace-agent-guidance/.openspec.yaml +2 -0
- package/OpenSpec-main/openspec/changes/workspace-agent-guidance/proposal.md +100 -0
- package/OpenSpec-main/openspec/changes/workspace-apply-repo-slice/proposal.md +58 -0
- package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/HISTORICAL_DIRECTION.md +511 -0
- package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/POC_REFERENCE_GUIDE.md +266 -0
- package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/README.md +107 -0
- package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/START_HERE.md +105 -0
- package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/proposal.md +62 -0
- package/OpenSpec-main/openspec/changes/workspace-verify-and-archive/proposal.md +57 -0
- package/OpenSpec-main/openspec/config.yaml +36 -0
- package/OpenSpec-main/openspec/explorations/explore-workflow-ux.md +116 -0
- package/OpenSpec-main/openspec/explorations/workspace-architecture.md +857 -0
- package/OpenSpec-main/openspec/explorations/workspace-roadmap.md +367 -0
- package/OpenSpec-main/openspec/explorations/workspace-user-journeys.md +2259 -0
- package/OpenSpec-main/openspec/explorations/workspace-ux-simplification.md +491 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/.initiative.yaml +27 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/README.md +33 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/decisions.md +204 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/direction.md +447 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/questions.md +23 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/roadmap.md +759 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/tasks.md +308 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/evidence.md +154 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/plan.md +90 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/tasks.md +44 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/evidence.md +68 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/plan.md +80 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/tasks.md +23 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/evidence.md +43 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/plan.md +85 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/tasks.md +17 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/evidence.md +77 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/plan.md +198 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/tasks.md +14 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/evidence.md +99 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/plan.md +236 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/tasks.md +21 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/evidence.md +97 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/plan.md +333 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/tasks.md +29 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/evidence.md +97 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/plan.md +184 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/tasks.md +27 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/evidence.md +239 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/plan.md +279 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/tasks.md +22 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/decision-review.md +64 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/evidence.md +106 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/plan.md +141 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/tasks.md +22 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/10-let-workspaces-open-initiatives/plan.md +430 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/10-let-workspaces-open-initiatives/tasks.md +43 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/notes.md +289 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/plan.md +39 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/tasks.md +8 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/evidence.md +45 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/plan.md +150 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/tasks.md +23 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/evidence.md +25 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/plan.md +98 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/tasks.md +25 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/14-workspaces-beta-guide-split/plan.md +37 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/14-workspaces-beta-guide-split/tasks.md +9 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/evidence.md +140 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/plan.md +344 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/tasks.md +39 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/16-add-escalation-ux/plan.md +26 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/16-add-escalation-ux/tasks.md +7 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/17-harden-team-shared-coordination/plan.md +25 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/17-harden-team-shared-coordination/tasks.md +7 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/evidence.md +397 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/plan.md +180 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/tasks.md +28 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/19-review-workspace-beta-compatibility-before-public-release/plan.md +62 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/19-review-workspace-beta-compatibility-before-public-release/tasks.md +16 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/evidence.md +47 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/plan.md +90 -0
- package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/tasks.md +18 -0
- package/OpenSpec-main/openspec/specs/ai-tool-paths/spec.md +63 -0
- package/OpenSpec-main/openspec/specs/artifact-graph/spec.md +165 -0
- package/OpenSpec-main/openspec/specs/change-creation/spec.md +108 -0
- package/OpenSpec-main/openspec/specs/ci-nix-validation/spec.md +107 -0
- package/OpenSpec-main/openspec/specs/cli-archive/spec.md +210 -0
- package/OpenSpec-main/openspec/specs/cli-artifact-workflow/spec.md +398 -0
- package/OpenSpec-main/openspec/specs/cli-change/spec.md +92 -0
- package/OpenSpec-main/openspec/specs/cli-completion/spec.md +432 -0
- package/OpenSpec-main/openspec/specs/cli-config/spec.md +318 -0
- package/OpenSpec-main/openspec/specs/cli-feedback/spec.md +193 -0
- package/OpenSpec-main/openspec/specs/cli-init/spec.md +269 -0
- package/OpenSpec-main/openspec/specs/cli-list/spec.md +103 -0
- package/OpenSpec-main/openspec/specs/cli-show/spec.md +86 -0
- package/OpenSpec-main/openspec/specs/cli-spec/spec.md +88 -0
- package/OpenSpec-main/openspec/specs/cli-update/spec.md +229 -0
- package/OpenSpec-main/openspec/specs/cli-validate/spec.md +219 -0
- package/OpenSpec-main/openspec/specs/cli-view/spec.md +129 -0
- package/OpenSpec-main/openspec/specs/command-generation/spec.md +97 -0
- package/OpenSpec-main/openspec/specs/config-loading/spec.md +122 -0
- package/OpenSpec-main/openspec/specs/context-injection/spec.md +53 -0
- package/OpenSpec-main/openspec/specs/docs-agent-instructions/spec.md +62 -0
- package/OpenSpec-main/openspec/specs/global-config/spec.md +101 -0
- package/OpenSpec-main/openspec/specs/instruction-loader/spec.md +70 -0
- package/OpenSpec-main/openspec/specs/legacy-cleanup/spec.md +163 -0
- package/OpenSpec-main/openspec/specs/openspec-conventions/spec.md +556 -0
- package/OpenSpec-main/openspec/specs/opsx-archive-skill/spec.md +128 -0
- package/OpenSpec-main/openspec/specs/opsx-onboard-skill/spec.md +167 -0
- package/OpenSpec-main/openspec/specs/opsx-verify-skill/spec.md +189 -0
- package/OpenSpec-main/openspec/specs/rules-injection/spec.md +102 -0
- package/OpenSpec-main/openspec/specs/schema-fork-command/spec.md +71 -0
- package/OpenSpec-main/openspec/specs/schema-init-command/spec.md +76 -0
- package/OpenSpec-main/openspec/specs/schema-resolution/spec.md +201 -0
- package/OpenSpec-main/openspec/specs/schema-validate-command/spec.md +91 -0
- package/OpenSpec-main/openspec/specs/schema-which-command/spec.md +70 -0
- package/OpenSpec-main/openspec/specs/specs-sync-skill/spec.md +72 -0
- package/OpenSpec-main/openspec/specs/telemetry/spec.md +122 -0
- package/OpenSpec-main/openspec/specs/workspace-change-planning/spec.md +71 -0
- package/OpenSpec-main/openspec/specs/workspace-foundation/spec.md +279 -0
- package/OpenSpec-main/openspec/specs/workspace-links/spec.md +529 -0
- package/OpenSpec-main/openspec/specs/workspace-open/spec.md +205 -0
- package/OpenSpec-main/openspec-parallel-merge-plan.md +98 -0
- package/OpenSpec-main/package-lock.json +4978 -0
- package/OpenSpec-main/package.json +84 -0
- package/OpenSpec-main/pnpm-lock.yaml +3187 -0
- package/OpenSpec-main/schemas/spec-driven/schema.yaml +153 -0
- package/OpenSpec-main/schemas/spec-driven/templates/design.md +19 -0
- package/OpenSpec-main/schemas/spec-driven/templates/proposal.md +23 -0
- package/OpenSpec-main/schemas/spec-driven/templates/spec.md +8 -0
- package/OpenSpec-main/schemas/spec-driven/templates/tasks.md +9 -0
- package/OpenSpec-main/schemas/workspace-planning/schema.yaml +72 -0
- package/OpenSpec-main/schemas/workspace-planning/templates/design.md +33 -0
- package/OpenSpec-main/schemas/workspace-planning/templates/proposal.md +28 -0
- package/OpenSpec-main/schemas/workspace-planning/templates/spec.md +9 -0
- package/OpenSpec-main/schemas/workspace-planning/templates/tasks.md +15 -0
- package/OpenSpec-main/scripts/README.md +37 -0
- package/OpenSpec-main/scripts/pack-version-check.mjs +111 -0
- package/OpenSpec-main/scripts/postinstall.js +83 -0
- package/OpenSpec-main/scripts/test-postinstall.sh +57 -0
- package/OpenSpec-main/scripts/update-flake.sh +128 -0
- package/OpenSpec-main/test/cli-e2e/basic.test.ts +205 -0
- package/OpenSpec-main/test/commands/artifact-workflow.test.ts +1063 -0
- package/OpenSpec-main/test/commands/change-initiative-link.test.ts +532 -0
- package/OpenSpec-main/test/commands/change.interactive-show.test.ts +45 -0
- package/OpenSpec-main/test/commands/change.interactive-validate.test.ts +48 -0
- package/OpenSpec-main/test/commands/completion.test.ts +278 -0
- package/OpenSpec-main/test/commands/config-profile.test.ts +532 -0
- package/OpenSpec-main/test/commands/config.test.ts +285 -0
- package/OpenSpec-main/test/commands/context-store.test.ts +692 -0
- package/OpenSpec-main/test/commands/feedback.test.ts +429 -0
- package/OpenSpec-main/test/commands/initiative.test.ts +907 -0
- package/OpenSpec-main/test/commands/schema.test.ts +467 -0
- package/OpenSpec-main/test/commands/show.test.ts +123 -0
- package/OpenSpec-main/test/commands/spec.interactive-show.test.ts +44 -0
- package/OpenSpec-main/test/commands/spec.interactive-validate.test.ts +44 -0
- package/OpenSpec-main/test/commands/spec.test.ts +324 -0
- package/OpenSpec-main/test/commands/validate.enriched-output.test.ts +49 -0
- package/OpenSpec-main/test/commands/validate.test.ts +147 -0
- package/OpenSpec-main/test/commands/workspace-initiative-open.test.ts +638 -0
- package/OpenSpec-main/test/commands/workspace-open.test.ts +123 -0
- package/OpenSpec-main/test/commands/workspace.interactive.test.ts +696 -0
- package/OpenSpec-main/test/commands/workspace.test.ts +1812 -0
- package/OpenSpec-main/test/core/archive.test.ts +869 -0
- package/OpenSpec-main/test/core/artifact-graph/graph.test.ts +268 -0
- package/OpenSpec-main/test/core/artifact-graph/instruction-loader.test.ts +609 -0
- package/OpenSpec-main/test/core/artifact-graph/outputs.test.ts +175 -0
- package/OpenSpec-main/test/core/artifact-graph/resolver.test.ts +651 -0
- package/OpenSpec-main/test/core/artifact-graph/schema.test.ts +207 -0
- package/OpenSpec-main/test/core/artifact-graph/state.test.ts +174 -0
- package/OpenSpec-main/test/core/artifact-graph/workflow.integration.test.ts +182 -0
- package/OpenSpec-main/test/core/available-tools.test.ts +167 -0
- package/OpenSpec-main/test/core/collections/initiatives/operations.test.ts +342 -0
- package/OpenSpec-main/test/core/collections/initiatives/resolution.test.ts +21 -0
- package/OpenSpec-main/test/core/collections/initiatives/schema.test.ts +201 -0
- package/OpenSpec-main/test/core/collections/initiatives/templates.test.ts +74 -0
- package/OpenSpec-main/test/core/collections/runtime.test.ts +214 -0
- package/OpenSpec-main/test/core/command-generation/adapters.test.ts +710 -0
- package/OpenSpec-main/test/core/command-generation/generator.test.ts +110 -0
- package/OpenSpec-main/test/core/command-generation/registry.test.ts +108 -0
- package/OpenSpec-main/test/core/command-generation/types.test.ts +79 -0
- package/OpenSpec-main/test/core/commands/change-command.list.test.ts +76 -0
- package/OpenSpec-main/test/core/commands/change-command.show-validate.test.ts +111 -0
- package/OpenSpec-main/test/core/completions/command-registry.test.ts +201 -0
- package/OpenSpec-main/test/core/completions/completion-provider.test.ts +288 -0
- package/OpenSpec-main/test/core/completions/generators/bash-generator.test.ts +586 -0
- package/OpenSpec-main/test/core/completions/generators/fish-generator.test.ts +549 -0
- package/OpenSpec-main/test/core/completions/generators/powershell-generator.test.ts +621 -0
- package/OpenSpec-main/test/core/completions/generators/zsh-generator.test.ts +425 -0
- package/OpenSpec-main/test/core/completions/installers/bash-installer.test.ts +484 -0
- package/OpenSpec-main/test/core/completions/installers/fish-installer.test.ts +321 -0
- package/OpenSpec-main/test/core/completions/installers/powershell-installer.test.ts +824 -0
- package/OpenSpec-main/test/core/completions/installers/zsh-installer.test.ts +750 -0
- package/OpenSpec-main/test/core/config-schema.test.ts +340 -0
- package/OpenSpec-main/test/core/context-store/foundation.test.ts +364 -0
- package/OpenSpec-main/test/core/context-store/registry.test.ts +599 -0
- package/OpenSpec-main/test/core/converters/json-converter.test.ts +184 -0
- package/OpenSpec-main/test/core/global-config.test.ts +371 -0
- package/OpenSpec-main/test/core/init.test.ts +786 -0
- package/OpenSpec-main/test/core/legacy-cleanup.test.ts +1162 -0
- package/OpenSpec-main/test/core/list.test.ts +165 -0
- package/OpenSpec-main/test/core/migration.test.ts +150 -0
- package/OpenSpec-main/test/core/parsers/change-parser.test.ts +52 -0
- package/OpenSpec-main/test/core/parsers/markdown-parser.test.ts +355 -0
- package/OpenSpec-main/test/core/parsers/requirement-blocks.test.ts +46 -0
- package/OpenSpec-main/test/core/planning-home.test.ts +120 -0
- package/OpenSpec-main/test/core/profile-sync-drift.test.ts +92 -0
- package/OpenSpec-main/test/core/profiles.test.ts +63 -0
- package/OpenSpec-main/test/core/project-config.test.ts +610 -0
- package/OpenSpec-main/test/core/shared/skill-generation.test.ts +301 -0
- package/OpenSpec-main/test/core/shared/tool-detection.test.ts +333 -0
- package/OpenSpec-main/test/core/templates/skill-templates-parity.test.ts +172 -0
- package/OpenSpec-main/test/core/update.test.ts +1810 -0
- package/OpenSpec-main/test/core/validation.enriched-messages.test.ts +74 -0
- package/OpenSpec-main/test/core/validation.test.ts +680 -0
- package/OpenSpec-main/test/core/view.test.ts +129 -0
- package/OpenSpec-main/test/core/workspace/foundation.test.ts +694 -0
- package/OpenSpec-main/test/core/workspace/legacy-state.test.ts +221 -0
- package/OpenSpec-main/test/core/workspace/skills.test.ts +69 -0
- package/OpenSpec-main/test/fixtures/tmp-init/openspec/changes/c1/proposal.md +7 -0
- package/OpenSpec-main/test/fixtures/tmp-init/openspec/changes/c1/specs/alpha/spec.md +8 -0
- package/OpenSpec-main/test/fixtures/tmp-init/openspec/specs/alpha/spec.md +12 -0
- package/OpenSpec-main/test/helpers/path-env.ts +26 -0
- package/OpenSpec-main/test/helpers/run-cli.ts +150 -0
- package/OpenSpec-main/test/prompts/searchable-multi-select.test.ts +220 -0
- package/OpenSpec-main/test/specs/source-specs-normalization.test.ts +63 -0
- package/OpenSpec-main/test/telemetry/config.test.ts +298 -0
- package/OpenSpec-main/test/telemetry/index.test.ts +219 -0
- package/OpenSpec-main/test/utils/change-metadata.test.ts +368 -0
- package/OpenSpec-main/test/utils/change-utils.test.ts +201 -0
- package/OpenSpec-main/test/utils/command-references.test.ts +83 -0
- package/OpenSpec-main/test/utils/file-system.test.ts +322 -0
- package/OpenSpec-main/test/utils/interactive.test.ts +125 -0
- package/OpenSpec-main/test/utils/marker-updates.test.ts +448 -0
- package/OpenSpec-main/test/utils/shell-detection.test.ts +185 -0
- package/OpenSpec-main/vitest.config.ts +47 -0
- package/OpenSpec-main/vitest.setup.ts +15 -0
- package/README.md +37 -4
- package/Scanner CLI Inteligente para Projetos.md +433 -0
- package/dist/index.js +1178 -139
- package/package.json +1 -1
- package/templates/wiki-recipes/nextjs.rules.md +21 -0
- package/templates/wiki-recipes/postgresql.rules.md +20 -0
- package/templates/wiki-recipes/react.rules.md +18 -0
- package/templates/wiki-recipes/tailwindcss.rules.md +18 -0
- package/templates/wiki-recipes/typescript.rules.md +21 -0
|
@@ -0,0 +1,2259 @@
|
|
|
1
|
+
# Workspace User Journeys
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
This document describes the exact user experience for OpenSpec across:
|
|
6
|
+
|
|
7
|
+
1. Single-repo projects
|
|
8
|
+
2. Monorepos
|
|
9
|
+
3. Large monorepos that behave like many repos
|
|
10
|
+
4. True multi-repo initiatives
|
|
11
|
+
|
|
12
|
+
It is intentionally UX-first. The goal is to define:
|
|
13
|
+
|
|
14
|
+
- Where the user starts
|
|
15
|
+
- What commands they run
|
|
16
|
+
- What the agent sees
|
|
17
|
+
- Where artifacts are stored
|
|
18
|
+
- How OpenSpec decides which specs to read
|
|
19
|
+
- How OpenSpec behaves when roots are missing, ambiguous, or partially available
|
|
20
|
+
|
|
21
|
+
This is a proposed UX model, not an implementation spec.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## The Core Mental Model
|
|
26
|
+
|
|
27
|
+
Users should not need one mental model for repos and a separate mental model for monorepos.
|
|
28
|
+
|
|
29
|
+
OpenSpec should operate on **scopes**.
|
|
30
|
+
|
|
31
|
+
A scope is an owned planning and implementation boundary. Depending on the codebase, a scope may be:
|
|
32
|
+
|
|
33
|
+
- an entire repo
|
|
34
|
+
- a package or app inside a monorepo
|
|
35
|
+
- a service inside a monorepo
|
|
36
|
+
- a shared contracts area
|
|
37
|
+
- another explicitly owned domain
|
|
38
|
+
|
|
39
|
+
The user experience should be:
|
|
40
|
+
|
|
41
|
+
- Pick the thing you want to change
|
|
42
|
+
- Confirm which scopes are involved
|
|
43
|
+
- OpenSpec reads only the relevant specs
|
|
44
|
+
- OpenSpec stores each artifact in the owning place
|
|
45
|
+
- If the work spans multiple owning places, OpenSpec creates a neutral coordination workspace
|
|
46
|
+
|
|
47
|
+
### Durable Objects
|
|
48
|
+
|
|
49
|
+
There are three different durable objects:
|
|
50
|
+
|
|
51
|
+
1. **Spec**
|
|
52
|
+
A canonical behavior contract. Always stored in the owning scope.
|
|
53
|
+
|
|
54
|
+
2. **Change**
|
|
55
|
+
A repo-local or scope-local planning artifact. Stored with the owner of the implementation/spec delta.
|
|
56
|
+
|
|
57
|
+
3. **Initiative**
|
|
58
|
+
A cross-scope coordination artifact. Only needed when work spans multiple owning roots. Stored in a neutral coordination workspace.
|
|
59
|
+
|
|
60
|
+
The key rule is:
|
|
61
|
+
|
|
62
|
+
> Canonical specs never move into the coordination workspace.
|
|
63
|
+
|
|
64
|
+
The workspace coordinates. Owner roots remain canonical.
|
|
65
|
+
|
|
66
|
+
### Cross-Boundary Specs
|
|
67
|
+
|
|
68
|
+
Some behaviors are true across multiple scopes, apps, or repos:
|
|
69
|
+
|
|
70
|
+
- checkout behavior shared by web, iOS, Android, and backend
|
|
71
|
+
- auth/session rules shared by app clients and API services
|
|
72
|
+
- billing rules shared by invoices, payments, and reporting
|
|
73
|
+
- privacy or audit guarantees shared across many systems
|
|
74
|
+
|
|
75
|
+
These are not just "references between local specs." They are first-class shared contracts.
|
|
76
|
+
|
|
77
|
+
OpenSpec should model them explicitly as:
|
|
78
|
+
|
|
79
|
+
1. **Canonical shared contract**
|
|
80
|
+
A spec that defines what must be true across boundaries.
|
|
81
|
+
|
|
82
|
+
2. **Local implementation specs**
|
|
83
|
+
Per-scope specs describing how each owner satisfies that contract locally.
|
|
84
|
+
|
|
85
|
+
3. **Initiative**
|
|
86
|
+
A change or project to update the contract and its implementations together.
|
|
87
|
+
|
|
88
|
+
The first-principles rule is:
|
|
89
|
+
|
|
90
|
+
> A cross-boundary spec may have many consumers, but it must still have one canonical owner.
|
|
91
|
+
|
|
92
|
+
If there is no owner yet, the shared behavior can live temporarily as an initiative note during exploration, but OpenSpec should not promote it into a canonical spec until ownership is explicit.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## UX Principles
|
|
97
|
+
|
|
98
|
+
### 1. Same top-level workflow everywhere
|
|
99
|
+
|
|
100
|
+
Users should still recognize the existing OpenSpec workflow:
|
|
101
|
+
|
|
102
|
+
- `openspec init`
|
|
103
|
+
- `openspec update`
|
|
104
|
+
- `/opsx:explore`
|
|
105
|
+
- `/opsx:propose`
|
|
106
|
+
- `/opsx:apply`
|
|
107
|
+
- `/opsx:archive`
|
|
108
|
+
|
|
109
|
+
The new behavior is that OpenSpec may ask:
|
|
110
|
+
|
|
111
|
+
- "Which scope does this affect?"
|
|
112
|
+
- "Does this span multiple owning roots?"
|
|
113
|
+
- "Should I create a coordination workspace?"
|
|
114
|
+
|
|
115
|
+
### 2. No required upfront workspace registration
|
|
116
|
+
|
|
117
|
+
Users should not have to pre-register all repos or modules just in case.
|
|
118
|
+
|
|
119
|
+
OpenSpec should support:
|
|
120
|
+
|
|
121
|
+
- ad hoc discovery
|
|
122
|
+
- one-time local linking
|
|
123
|
+
- optional saved workspaces later
|
|
124
|
+
|
|
125
|
+
### 3. Cross-root planning must have a neutral home
|
|
126
|
+
|
|
127
|
+
If a change spans multiple repos, the planning artifact should not be forced into one repo.
|
|
128
|
+
|
|
129
|
+
Instead, OpenSpec should create a neutral coordination workspace for the initiative.
|
|
130
|
+
|
|
131
|
+
### 4. Canonical storage follows ownership
|
|
132
|
+
|
|
133
|
+
- Shared contract spec lives in the contract-owning scope
|
|
134
|
+
- Web-specific spec lives in the web-owning scope
|
|
135
|
+
- iOS-specific spec lives in the iOS-owning scope
|
|
136
|
+
- Repo-local code tasks live in the repo-local change
|
|
137
|
+
|
|
138
|
+
### 5. References are informational
|
|
139
|
+
|
|
140
|
+
Cross-scope or cross-repo `references` should initially be documentation-only.
|
|
141
|
+
|
|
142
|
+
OpenSpec may surface them to users and agents, but should not require them to resolve or validate across roots in the first version.
|
|
143
|
+
|
|
144
|
+
### 6. Shared contracts need explicit ownership
|
|
145
|
+
|
|
146
|
+
When the user describes behavior that spans multiple boundaries, OpenSpec should help them decide whether they are creating:
|
|
147
|
+
|
|
148
|
+
- a local spec
|
|
149
|
+
- a shared contract
|
|
150
|
+
- an initiative note that is not yet canonical
|
|
151
|
+
|
|
152
|
+
If the work is a real long-lived contract, OpenSpec should prompt for a canonical owner rather than burying it in whichever repo the user happened to be standing in.
|
|
153
|
+
|
|
154
|
+
### 7. Do not force "shared ownership" as implicit co-ownership
|
|
155
|
+
|
|
156
|
+
OpenSpec should help teams create **shared contract ownership**, not ambiguous co-ownership.
|
|
157
|
+
|
|
158
|
+
That means:
|
|
159
|
+
|
|
160
|
+
- one scope or repo owns the canonical shared contract
|
|
161
|
+
- other scopes consume and reference it
|
|
162
|
+
- coordination workspace can summarize it
|
|
163
|
+
- ownership and review routes stay legible
|
|
164
|
+
|
|
165
|
+
### 8. Use the current repo only as a starting point, not as truth
|
|
166
|
+
|
|
167
|
+
When a user starts in `web-client` and describes a checkout behavior spanning web, iOS, Android, and backend, OpenSpec should treat the current cwd as a clue about likely consumers, not as proof that `web-client` should own the shared contract.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Terms
|
|
172
|
+
|
|
173
|
+
### Project
|
|
174
|
+
|
|
175
|
+
A single OpenSpec root where canonical specs and changes can live.
|
|
176
|
+
|
|
177
|
+
In practice a project may be:
|
|
178
|
+
|
|
179
|
+
- a repo root with `openspec/`
|
|
180
|
+
- a monorepo root with one `openspec/`
|
|
181
|
+
- a nested owned scope if OpenSpec later supports nested roots
|
|
182
|
+
|
|
183
|
+
### Scope
|
|
184
|
+
|
|
185
|
+
A logical boundary inside or across projects. Scopes are what users pick during planning.
|
|
186
|
+
|
|
187
|
+
Examples:
|
|
188
|
+
|
|
189
|
+
- `repo`
|
|
190
|
+
- `contracts/checkout`
|
|
191
|
+
- `apps/web`
|
|
192
|
+
- `services/billing`
|
|
193
|
+
- `mobile/ios`
|
|
194
|
+
|
|
195
|
+
### Coordination Workspace
|
|
196
|
+
|
|
197
|
+
A neutral directory used only for cross-root coordination. It stores initiative-level planning data and agent workspace instructions.
|
|
198
|
+
|
|
199
|
+
Example:
|
|
200
|
+
|
|
201
|
+
```text
|
|
202
|
+
~/work/openspec-workspaces/add-3ds/
|
|
203
|
+
.openspec-workspace/
|
|
204
|
+
workspace.yaml
|
|
205
|
+
initiative.md
|
|
206
|
+
links.yaml
|
|
207
|
+
agents/
|
|
208
|
+
claude.md
|
|
209
|
+
codex.md
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
This coordination workspace may exist in two modes:
|
|
213
|
+
|
|
214
|
+
1. **Personal coordination workspace**
|
|
215
|
+
A local directory used by one person for ad hoc or exploratory cross-root planning.
|
|
216
|
+
|
|
217
|
+
2. **Shared coordination workspace**
|
|
218
|
+
A committed coordination repo or shared workspace used by a team or multiple teams.
|
|
219
|
+
|
|
220
|
+
The UX should support both without changing the core mental model.
|
|
221
|
+
|
|
222
|
+
### Owning Root
|
|
223
|
+
|
|
224
|
+
The repo or scope that canonically owns a spec, codebase area, or repo-local change.
|
|
225
|
+
|
|
226
|
+
### Shared Contract Owner
|
|
227
|
+
|
|
228
|
+
The scope or repo that canonically owns a cross-boundary spec.
|
|
229
|
+
|
|
230
|
+
This may be:
|
|
231
|
+
|
|
232
|
+
- an existing shared contracts area inside a monorepo
|
|
233
|
+
- an existing backend/API contract owner
|
|
234
|
+
- a dedicated contracts repo
|
|
235
|
+
- a new shared scope created as part of the planning flow
|
|
236
|
+
|
|
237
|
+
This should not be an accidental consequence of where the user started the agent.
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Recommended File Shapes
|
|
242
|
+
|
|
243
|
+
### Single repo
|
|
244
|
+
|
|
245
|
+
```text
|
|
246
|
+
repo/
|
|
247
|
+
openspec/
|
|
248
|
+
specs/
|
|
249
|
+
changes/
|
|
250
|
+
config.yaml
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Monorepo
|
|
254
|
+
|
|
255
|
+
```text
|
|
256
|
+
monorepo/
|
|
257
|
+
openspec/
|
|
258
|
+
specs/
|
|
259
|
+
changes/
|
|
260
|
+
config.yaml
|
|
261
|
+
apps/
|
|
262
|
+
web/
|
|
263
|
+
admin/
|
|
264
|
+
services/
|
|
265
|
+
billing/
|
|
266
|
+
packages/
|
|
267
|
+
contracts/
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
Optional scope markers:
|
|
271
|
+
|
|
272
|
+
```text
|
|
273
|
+
monorepo/
|
|
274
|
+
apps/web/openspec.scope.yaml
|
|
275
|
+
services/billing/openspec.scope.yaml
|
|
276
|
+
packages/contracts/openspec.scope.yaml
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### Multi-repo with coordination workspace
|
|
280
|
+
|
|
281
|
+
```text
|
|
282
|
+
~/work/
|
|
283
|
+
contracts/
|
|
284
|
+
openspec/
|
|
285
|
+
web-client/
|
|
286
|
+
openspec/
|
|
287
|
+
ios-client/
|
|
288
|
+
openspec/
|
|
289
|
+
openspec-workspaces/
|
|
290
|
+
add-3ds/
|
|
291
|
+
.openspec-workspace/
|
|
292
|
+
workspace.yaml
|
|
293
|
+
initiative.md
|
|
294
|
+
links.yaml
|
|
295
|
+
agents/
|
|
296
|
+
claude.md
|
|
297
|
+
codex.md
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Discovery Model
|
|
303
|
+
|
|
304
|
+
OpenSpec needs to answer two separate questions:
|
|
305
|
+
|
|
306
|
+
1. What scopes are involved?
|
|
307
|
+
2. Where are they on disk right now?
|
|
308
|
+
|
|
309
|
+
These are not the same problem.
|
|
310
|
+
|
|
311
|
+
### Scope discovery
|
|
312
|
+
|
|
313
|
+
OpenSpec discovers candidate scopes from:
|
|
314
|
+
|
|
315
|
+
- the current repo root
|
|
316
|
+
- `openspec/specs/**`
|
|
317
|
+
- optional scope marker files
|
|
318
|
+
- previous initiative metadata
|
|
319
|
+
- explicit user selection
|
|
320
|
+
|
|
321
|
+
### Root resolution
|
|
322
|
+
|
|
323
|
+
For multi-repo work, durable identifiers should not be raw paths.
|
|
324
|
+
|
|
325
|
+
Stable project identifiers should look like:
|
|
326
|
+
|
|
327
|
+
- `github.com/Fission-AI/web-client`
|
|
328
|
+
- `github.com/Fission-AI/contracts`
|
|
329
|
+
|
|
330
|
+
User shorthand may be accepted:
|
|
331
|
+
|
|
332
|
+
- `Fission-AI/web-client`
|
|
333
|
+
- `fission/web-client`
|
|
334
|
+
|
|
335
|
+
OpenSpec resolves these to local paths using this order:
|
|
336
|
+
|
|
337
|
+
1. explicit path passed for this run
|
|
338
|
+
2. saved local OpenSpec registry
|
|
339
|
+
3. local git remote scanning
|
|
340
|
+
4. user prompt
|
|
341
|
+
|
|
342
|
+
Relative paths like `../web-client` may be used as temporary hints for a single run, but should not be the durable identifier.
|
|
343
|
+
|
|
344
|
+
### Shared manifest vs local overlay
|
|
345
|
+
|
|
346
|
+
For team use, OpenSpec should separate:
|
|
347
|
+
|
|
348
|
+
1. **Shared coordination state**
|
|
349
|
+
Stable information that can be committed and shared with teammates.
|
|
350
|
+
|
|
351
|
+
2. **Local resolution state**
|
|
352
|
+
Machine-specific path mappings and local availability.
|
|
353
|
+
|
|
354
|
+
#### Shared coordination state should include
|
|
355
|
+
|
|
356
|
+
- initiative ID and summary
|
|
357
|
+
- stable project identifiers
|
|
358
|
+
- selected scopes
|
|
359
|
+
- linked repo-local change IDs
|
|
360
|
+
- ownership metadata
|
|
361
|
+
- rollout or sequencing notes
|
|
362
|
+
- unresolved-but-known participating projects
|
|
363
|
+
|
|
364
|
+
#### Local resolution state should include
|
|
365
|
+
|
|
366
|
+
- local filesystem paths for project identifiers
|
|
367
|
+
- local repo availability
|
|
368
|
+
- local preferred clone among multiple matches
|
|
369
|
+
- machine-specific agent attachment hints
|
|
370
|
+
|
|
371
|
+
This separation is critical for a cohesive team story.
|
|
372
|
+
|
|
373
|
+
Without it, coordination workspaces become either:
|
|
374
|
+
|
|
375
|
+
- too local to share, or
|
|
376
|
+
- polluted with machine-specific paths that break for teammates
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## Team Collaboration Model
|
|
381
|
+
|
|
382
|
+
This section describes how the same UX should scale from one person to a large org.
|
|
383
|
+
|
|
384
|
+
### Smallest unit: one user, one machine
|
|
385
|
+
|
|
386
|
+
The user may create a local coordination workspace and keep everything local.
|
|
387
|
+
|
|
388
|
+
This is fine for:
|
|
389
|
+
|
|
390
|
+
- one-off cross-repo exploration
|
|
391
|
+
- private planning before sharing
|
|
392
|
+
- trying out a multi-repo idea
|
|
393
|
+
|
|
394
|
+
### Team unit: shared initiative
|
|
395
|
+
|
|
396
|
+
Once cross-repo work becomes collaborative, the coordination workspace should be shareable and committed.
|
|
397
|
+
|
|
398
|
+
That means:
|
|
399
|
+
|
|
400
|
+
- initiative metadata is committed
|
|
401
|
+
- ownership decisions are committed
|
|
402
|
+
- linked changes are committed
|
|
403
|
+
- local paths are not committed
|
|
404
|
+
|
|
405
|
+
### Cross-team unit: sponsored initiative
|
|
406
|
+
|
|
407
|
+
When work spans teams, the initiative needs a clear coordination owner even if specs and code remain distributed.
|
|
408
|
+
|
|
409
|
+
This is not the same as canonical spec ownership.
|
|
410
|
+
|
|
411
|
+
There are now two distinct responsibilities:
|
|
412
|
+
|
|
413
|
+
1. **Shared contract owner**
|
|
414
|
+
Owns the canonical cross-boundary spec.
|
|
415
|
+
|
|
416
|
+
2. **Initiative sponsor/driver**
|
|
417
|
+
Owns the coordination process for the current change.
|
|
418
|
+
|
|
419
|
+
These may be the same team, but they do not have to be.
|
|
420
|
+
|
|
421
|
+
Examples:
|
|
422
|
+
|
|
423
|
+
- Platform team sponsors rollout, auth team owns canonical auth contract
|
|
424
|
+
- Payments team sponsors initiative, contracts repo owns canonical checkout contract
|
|
425
|
+
- Mobile platform team sponsors app-wide migration, backend team owns API contract
|
|
426
|
+
|
|
427
|
+
### What we should tell teams
|
|
428
|
+
|
|
429
|
+
OpenSpec should communicate this clearly:
|
|
430
|
+
|
|
431
|
+
> If the work is collaborative, treat the coordination workspace as a lightweight shared planning repo or committed workspace. Commit stable initiative metadata there, and keep machine-specific repo path mappings local.
|
|
432
|
+
|
|
433
|
+
This gives a clean answer to:
|
|
434
|
+
|
|
435
|
+
- how do we share the cross-repo plan?
|
|
436
|
+
- how do teammates open the same initiative?
|
|
437
|
+
- how do people with different local clone layouts work on the same initiative?
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
## Ownership Decision Model
|
|
442
|
+
|
|
443
|
+
This section answers a key product question:
|
|
444
|
+
|
|
445
|
+
> How should a team or agent decide where a shared cross-boundary spec belongs?
|
|
446
|
+
|
|
447
|
+
### First-principles heuristic
|
|
448
|
+
|
|
449
|
+
OpenSpec should help teams choose the owner that can most credibly do all of the following:
|
|
450
|
+
|
|
451
|
+
1. define the guarantee
|
|
452
|
+
2. review and approve changes to that guarantee
|
|
453
|
+
3. communicate the guarantee to consumers
|
|
454
|
+
4. absorb the coordination cost when the guarantee changes
|
|
455
|
+
|
|
456
|
+
The owner is not necessarily:
|
|
457
|
+
|
|
458
|
+
- the team that started the change
|
|
459
|
+
- the frontend team
|
|
460
|
+
- the backend team
|
|
461
|
+
- the repo with the most code
|
|
462
|
+
|
|
463
|
+
The owner is the boundary where the contract is most stable and most authoritative.
|
|
464
|
+
|
|
465
|
+
### Ownership decision questions
|
|
466
|
+
|
|
467
|
+
When OpenSpec detects a likely shared contract, it should ask or infer from these questions:
|
|
468
|
+
|
|
469
|
+
1. Is this behavior meant to be true across multiple scopes for the long term?
|
|
470
|
+
2. Is it an external contract, an internal product rule, or an implementation detail?
|
|
471
|
+
3. Which team or scope can approve changes to this contract?
|
|
472
|
+
4. Which owner would consumers naturally look to as the source of truth?
|
|
473
|
+
5. Does a shared contract area already exist?
|
|
474
|
+
6. Will this contract likely outlive the current initiative?
|
|
475
|
+
|
|
476
|
+
### Recommended outcomes
|
|
477
|
+
|
|
478
|
+
#### Outcome A: Existing owner already exists
|
|
479
|
+
|
|
480
|
+
Example:
|
|
481
|
+
|
|
482
|
+
- `packages/contracts/checkout` already exists in a monorepo
|
|
483
|
+
- `contracts` repo already exists in multi-repo environment
|
|
484
|
+
|
|
485
|
+
OpenSpec should default to that existing owner.
|
|
486
|
+
|
|
487
|
+
#### Outcome B: Shared contract belongs in an existing domain owner
|
|
488
|
+
|
|
489
|
+
Example:
|
|
490
|
+
|
|
491
|
+
- an API request/response contract belongs with the API/backend owner
|
|
492
|
+
- a shared auth token contract belongs with the auth platform owner
|
|
493
|
+
|
|
494
|
+
OpenSpec should suggest that existing domain owner if there is no dedicated shared area.
|
|
495
|
+
|
|
496
|
+
#### Outcome C: A new shared contract scope should be created
|
|
497
|
+
|
|
498
|
+
Example:
|
|
499
|
+
|
|
500
|
+
- checkout behavior is shared across several clients and services
|
|
501
|
+
- no existing shared owner exists
|
|
502
|
+
- this will likely recur and needs long-term governance
|
|
503
|
+
|
|
504
|
+
OpenSpec should help create a new shared contract scope.
|
|
505
|
+
|
|
506
|
+
#### Outcome D: Keep it as initiative-only for now
|
|
507
|
+
|
|
508
|
+
Example:
|
|
509
|
+
|
|
510
|
+
- the team is still exploring
|
|
511
|
+
- the boundary is unclear
|
|
512
|
+
- no one can yet answer who should own the canonical guarantee
|
|
513
|
+
|
|
514
|
+
OpenSpec should allow the behavior to remain in initiative notes temporarily and explicitly mark it as non-canonical until ownership is chosen.
|
|
515
|
+
|
|
516
|
+
### What OpenSpec should suggest by default
|
|
517
|
+
|
|
518
|
+
#### For monorepos
|
|
519
|
+
|
|
520
|
+
Default suggestion order:
|
|
521
|
+
|
|
522
|
+
1. existing shared contract scope inside the monorepo
|
|
523
|
+
2. existing domain/platform owner
|
|
524
|
+
3. create a new shared scope inside the monorepo
|
|
525
|
+
4. keep as initiative-only until clarified
|
|
526
|
+
|
|
527
|
+
#### For multi-repo environments
|
|
528
|
+
|
|
529
|
+
Default suggestion order:
|
|
530
|
+
|
|
531
|
+
1. existing contracts/shared-specs repo
|
|
532
|
+
2. existing domain/platform repo that already owns the stable contract
|
|
533
|
+
3. create a dedicated shared contracts repo or scope
|
|
534
|
+
4. keep as initiative-only until clarified
|
|
535
|
+
|
|
536
|
+
### What OpenSpec should not do
|
|
537
|
+
|
|
538
|
+
OpenSpec should not:
|
|
539
|
+
|
|
540
|
+
- silently assign ownership to the repo where the user started
|
|
541
|
+
- duplicate the canonical shared spec across all consumers
|
|
542
|
+
- call something canonical when no owner was chosen
|
|
543
|
+
- force teams into a central admin setup before they can plan
|
|
544
|
+
|
|
545
|
+
---
|
|
546
|
+
|
|
547
|
+
## Shared Contract Creation UX
|
|
548
|
+
|
|
549
|
+
When the user describes a likely cross-boundary behavior, OpenSpec should treat this as a first-class planning moment.
|
|
550
|
+
|
|
551
|
+
### Detection cues
|
|
552
|
+
|
|
553
|
+
Signals that a shared contract may be needed:
|
|
554
|
+
|
|
555
|
+
- request mentions multiple platforms or repos
|
|
556
|
+
- request mentions "shared", "common", "contract", "same behavior", "consistent across"
|
|
557
|
+
- selected scopes include clients plus backend
|
|
558
|
+
- no existing spec cleanly owns the described behavior
|
|
559
|
+
|
|
560
|
+
### Prompt shape
|
|
561
|
+
|
|
562
|
+
During `/opsx:propose` or `/opsx:explore`, OpenSpec should ask something like:
|
|
563
|
+
|
|
564
|
+
```text
|
|
565
|
+
This looks like behavior shared across multiple scopes:
|
|
566
|
+
- web
|
|
567
|
+
- iOS
|
|
568
|
+
- Android
|
|
569
|
+
- backend
|
|
570
|
+
|
|
571
|
+
What kind of artifact is this?
|
|
572
|
+
- A local change within one scope
|
|
573
|
+
- A shared contract that multiple scopes must follow
|
|
574
|
+
- An initiative note for now; ownership is not clear yet
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
If the user chooses shared contract:
|
|
578
|
+
|
|
579
|
+
```text
|
|
580
|
+
Where should the canonical shared contract live?
|
|
581
|
+
- Existing shared contracts scope
|
|
582
|
+
- Existing domain owner
|
|
583
|
+
- Create a new shared contract scope
|
|
584
|
+
- Decide later and keep this initiative-only for now
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
### Creating a new shared contract scope
|
|
588
|
+
|
|
589
|
+
If the user chooses "create a new shared contract scope," OpenSpec should guide them.
|
|
590
|
+
|
|
591
|
+
#### Monorepo
|
|
592
|
+
|
|
593
|
+
Prompt feel:
|
|
594
|
+
|
|
595
|
+
```text
|
|
596
|
+
Suggested new shared scopes:
|
|
597
|
+
- openspec/specs/contracts/checkout
|
|
598
|
+
- openspec/specs/shared/checkout
|
|
599
|
+
- packages/contracts/checkout
|
|
600
|
+
|
|
601
|
+
Who should own review for this contract?
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
OpenSpec then:
|
|
605
|
+
|
|
606
|
+
1. creates the canonical shared spec in the chosen shared scope
|
|
607
|
+
2. records selected consumers
|
|
608
|
+
3. generates local references in consumer changes/specs if appropriate
|
|
609
|
+
|
|
610
|
+
#### Multi-repo
|
|
611
|
+
|
|
612
|
+
Prompt feel:
|
|
613
|
+
|
|
614
|
+
```text
|
|
615
|
+
No shared contract owner exists yet.
|
|
616
|
+
|
|
617
|
+
Choose where the canonical contract should live:
|
|
618
|
+
- Create it in an existing contracts repo
|
|
619
|
+
- Create a new shared contracts repo later; keep initiative-only for now
|
|
620
|
+
- Assign it to an existing domain owner repo
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
OpenSpec should avoid auto-creating a brand-new repo. It can scaffold the plan and record the decision, but repo creation may be organizationally sensitive and usually belongs outside the CLI.
|
|
624
|
+
|
|
625
|
+
### Temporary initiative-only mode
|
|
626
|
+
|
|
627
|
+
If ownership is unclear, OpenSpec should support:
|
|
628
|
+
|
|
629
|
+
- storing the shared behavior in the initiative workspace as a draft note
|
|
630
|
+
- marking it explicitly as non-canonical
|
|
631
|
+
- reminding users to promote it into a canonical shared contract before long-term adoption
|
|
632
|
+
|
|
633
|
+
This is important because many teams discover the need for a shared contract while exploring, before they know how to govern it.
|
|
634
|
+
|
|
635
|
+
---
|
|
636
|
+
|
|
637
|
+
## Cohesive UX Across Team Size
|
|
638
|
+
|
|
639
|
+
The product should feel like one system, not three separate features.
|
|
640
|
+
|
|
641
|
+
### The invariant workflow
|
|
642
|
+
|
|
643
|
+
No matter the setting, the user experience should always reduce to this:
|
|
644
|
+
|
|
645
|
+
1. Start where you are
|
|
646
|
+
2. Describe the work
|
|
647
|
+
3. Confirm the affected scopes
|
|
648
|
+
4. Let OpenSpec determine whether this is:
|
|
649
|
+
- local only
|
|
650
|
+
- multi-scope in one root
|
|
651
|
+
- cross-root coordination
|
|
652
|
+
5. OpenSpec creates artifacts in the right places
|
|
653
|
+
6. OpenSpec tells the user where to continue planning and where to implement
|
|
654
|
+
|
|
655
|
+
### What changes by scale
|
|
656
|
+
|
|
657
|
+
#### Solo / single repo
|
|
658
|
+
|
|
659
|
+
- entry point: repo root
|
|
660
|
+
- shareability: not relevant
|
|
661
|
+
- local-only storage is fine
|
|
662
|
+
|
|
663
|
+
#### Solo / ad hoc multi-repo
|
|
664
|
+
|
|
665
|
+
- entry point: local coordination workspace
|
|
666
|
+
- shareability: optional
|
|
667
|
+
- local path mappings are sufficient
|
|
668
|
+
|
|
669
|
+
#### Team / collaborative multi-repo
|
|
670
|
+
|
|
671
|
+
- entry point: shared coordination repo/workspace
|
|
672
|
+
- shareability: required
|
|
673
|
+
- stable manifest committed, local paths private
|
|
674
|
+
|
|
675
|
+
#### Large org / cross-team initiative
|
|
676
|
+
|
|
677
|
+
- entry point: shared coordination repo/workspace
|
|
678
|
+
- sponsor/driver is explicit
|
|
679
|
+
- shared contract ownership is explicit
|
|
680
|
+
- some participating teams may only resolve a subset of roots locally
|
|
681
|
+
|
|
682
|
+
### What should remain consistent
|
|
683
|
+
|
|
684
|
+
These things should not change with org size:
|
|
685
|
+
|
|
686
|
+
- canonical specs live with owners
|
|
687
|
+
- local code changes live with owners
|
|
688
|
+
- shared contracts need one canonical owner
|
|
689
|
+
- coordination data is not the canonical spec source
|
|
690
|
+
- local machine paths are never the durable identifier
|
|
691
|
+
- implementation may still happen root-by-root even if planning is coordinated
|
|
692
|
+
|
|
693
|
+
If these invariants hold, the UX remains coherent across solo, team, and org-wide usage.
|
|
694
|
+
|
|
695
|
+
---
|
|
696
|
+
|
|
697
|
+
## Agent Access Model
|
|
698
|
+
|
|
699
|
+
Cross-root UX only works if the agent can actually see the relevant roots.
|
|
700
|
+
|
|
701
|
+
OpenSpec should support three agent capability levels.
|
|
702
|
+
|
|
703
|
+
### Level 1: Strong multi-root support
|
|
704
|
+
|
|
705
|
+
The tool can explicitly attach multiple directories to one session.
|
|
706
|
+
|
|
707
|
+
Desired UX:
|
|
708
|
+
|
|
709
|
+
- User opens the coordination workspace
|
|
710
|
+
- OpenSpec tells the user exactly which roots to attach
|
|
711
|
+
- Agent reads from all attached roots
|
|
712
|
+
|
|
713
|
+
### Level 2: Single cwd but filesystem access to linked roots
|
|
714
|
+
|
|
715
|
+
The tool runs from one working directory but can still read sibling absolute paths if the environment permits it.
|
|
716
|
+
|
|
717
|
+
Desired UX:
|
|
718
|
+
|
|
719
|
+
- User opens the coordination workspace
|
|
720
|
+
- OpenSpec writes agent-readable absolute paths into the workspace instructions
|
|
721
|
+
- Agent can read those roots directly
|
|
722
|
+
|
|
723
|
+
### Level 3: Practically single-root
|
|
724
|
+
|
|
725
|
+
The tool can only reliably operate within one repo at a time.
|
|
726
|
+
|
|
727
|
+
Desired UX:
|
|
728
|
+
|
|
729
|
+
- Coordination workspace is used for planning only
|
|
730
|
+
- OpenSpec guides the user into repo-local implementation sessions afterward
|
|
731
|
+
- `/opsx:apply` runs in each repo separately
|
|
732
|
+
|
|
733
|
+
This must be treated as a first-class case, not a fallback afterthought.
|
|
734
|
+
|
|
735
|
+
---
|
|
736
|
+
|
|
737
|
+
## Current OpenSpec Flow To Preserve
|
|
738
|
+
|
|
739
|
+
Today the flow is:
|
|
740
|
+
|
|
741
|
+
1. User enters a repo
|
|
742
|
+
2. User runs `openspec init`
|
|
743
|
+
3. User opens an agent in that repo
|
|
744
|
+
4. User runs `/opsx:explore` or `/opsx:propose`
|
|
745
|
+
5. OpenSpec stores changes in `openspec/changes/<change>/`
|
|
746
|
+
6. `/opsx:apply` implements within that repo
|
|
747
|
+
|
|
748
|
+
That should remain the exact feel for single-repo work.
|
|
749
|
+
|
|
750
|
+
The only extension is:
|
|
751
|
+
|
|
752
|
+
- if OpenSpec detects a cross-root initiative, it explicitly upgrades the workflow into a coordination workspace flow
|
|
753
|
+
|
|
754
|
+
---
|
|
755
|
+
|
|
756
|
+
## Journey 1: Single Repo, Standard OpenSpec Project
|
|
757
|
+
|
|
758
|
+
### Starting state
|
|
759
|
+
|
|
760
|
+
The user has one repo:
|
|
761
|
+
|
|
762
|
+
```text
|
|
763
|
+
~/work/acme-app/
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
They enter the repo:
|
|
767
|
+
|
|
768
|
+
```bash
|
|
769
|
+
cd ~/work/acme-app
|
|
770
|
+
```
|
|
771
|
+
|
|
772
|
+
They initialize OpenSpec:
|
|
773
|
+
|
|
774
|
+
```bash
|
|
775
|
+
openspec init
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
OpenSpec creates:
|
|
779
|
+
|
|
780
|
+
```text
|
|
781
|
+
openspec/
|
|
782
|
+
specs/
|
|
783
|
+
changes/
|
|
784
|
+
config.yaml
|
|
785
|
+
```
|
|
786
|
+
|
|
787
|
+
They open Claude, Codex, Cursor, or another agent inside this repo.
|
|
788
|
+
|
|
789
|
+
### Planning
|
|
790
|
+
|
|
791
|
+
The user types:
|
|
792
|
+
|
|
793
|
+
```text
|
|
794
|
+
/opsx:propose add-dark-mode
|
|
795
|
+
```
|
|
796
|
+
|
|
797
|
+
OpenSpec should:
|
|
798
|
+
|
|
799
|
+
1. detect a single local project
|
|
800
|
+
2. detect a single default scope: the repo
|
|
801
|
+
3. create one repo-local change
|
|
802
|
+
4. read only local project config and local specs
|
|
803
|
+
5. generate local planning artifacts
|
|
804
|
+
|
|
805
|
+
Output feel:
|
|
806
|
+
|
|
807
|
+
```text
|
|
808
|
+
Created openspec/changes/add-dark-mode/
|
|
809
|
+
Using scope: repo
|
|
810
|
+
|
|
811
|
+
Generated:
|
|
812
|
+
- proposal.md
|
|
813
|
+
- specs/ui/spec.md
|
|
814
|
+
- design.md
|
|
815
|
+
- tasks.md
|
|
816
|
+
|
|
817
|
+
Ready for implementation with /opsx:apply
|
|
818
|
+
```
|
|
819
|
+
|
|
820
|
+
### Implementation
|
|
821
|
+
|
|
822
|
+
The user types:
|
|
823
|
+
|
|
824
|
+
```text
|
|
825
|
+
/opsx:apply
|
|
826
|
+
```
|
|
827
|
+
|
|
828
|
+
OpenSpec reads:
|
|
829
|
+
|
|
830
|
+
- proposal
|
|
831
|
+
- specs
|
|
832
|
+
- design
|
|
833
|
+
- tasks
|
|
834
|
+
|
|
835
|
+
Only from this repo.
|
|
836
|
+
|
|
837
|
+
### Archival
|
|
838
|
+
|
|
839
|
+
The user types:
|
|
840
|
+
|
|
841
|
+
```text
|
|
842
|
+
/opsx:archive
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
OpenSpec archives the change in this repo, as today.
|
|
846
|
+
|
|
847
|
+
### Storage outcome
|
|
848
|
+
|
|
849
|
+
- Spec deltas stored in this repo
|
|
850
|
+
- Canonical specs stored in this repo
|
|
851
|
+
- Tasks and design stored in this repo
|
|
852
|
+
- No workspace concept surfaced
|
|
853
|
+
|
|
854
|
+
### Edge cases
|
|
855
|
+
|
|
856
|
+
- Multiple active changes in repo: prompt user to select one
|
|
857
|
+
- Missing spec directories: proceed if allowed by current schema behavior
|
|
858
|
+
- User runs from subdirectory: OpenSpec should either walk up or clearly tell them to run from repo root
|
|
859
|
+
|
|
860
|
+
---
|
|
861
|
+
|
|
862
|
+
## Journey 2: Monorepo, Small Team, One Obvious Scope
|
|
863
|
+
|
|
864
|
+
### Starting state
|
|
865
|
+
|
|
866
|
+
The user has:
|
|
867
|
+
|
|
868
|
+
```text
|
|
869
|
+
~/work/platform/
|
|
870
|
+
```
|
|
871
|
+
|
|
872
|
+
Inside:
|
|
873
|
+
|
|
874
|
+
```text
|
|
875
|
+
platform/
|
|
876
|
+
openspec/
|
|
877
|
+
apps/web/
|
|
878
|
+
services/api/
|
|
879
|
+
packages/ui/
|
|
880
|
+
```
|
|
881
|
+
|
|
882
|
+
The user enters the monorepo root and runs their agent there.
|
|
883
|
+
|
|
884
|
+
### Planning
|
|
885
|
+
|
|
886
|
+
The user types:
|
|
887
|
+
|
|
888
|
+
```text
|
|
889
|
+
/opsx:propose add-invoice-filtering
|
|
890
|
+
```
|
|
891
|
+
|
|
892
|
+
OpenSpec detects this is still one project root, but there are multiple candidate scopes.
|
|
893
|
+
|
|
894
|
+
If the user’s request clearly mentions one area, OpenSpec may infer:
|
|
895
|
+
|
|
896
|
+
- `apps/web`
|
|
897
|
+
|
|
898
|
+
Otherwise it asks:
|
|
899
|
+
|
|
900
|
+
```text
|
|
901
|
+
Which scope does this change affect?
|
|
902
|
+
- apps/web
|
|
903
|
+
- services/api
|
|
904
|
+
- packages/ui
|
|
905
|
+
- shared/contracts
|
|
906
|
+
```
|
|
907
|
+
|
|
908
|
+
The user picks `apps/web`.
|
|
909
|
+
|
|
910
|
+
### Expected behavior
|
|
911
|
+
|
|
912
|
+
OpenSpec should:
|
|
913
|
+
|
|
914
|
+
1. create a single monorepo-local change under `openspec/changes/add-invoice-filtering/`
|
|
915
|
+
2. tag that change with `apps/web`
|
|
916
|
+
3. read specs relevant to `apps/web`
|
|
917
|
+
4. avoid pulling unrelated monorepo areas into context
|
|
918
|
+
|
|
919
|
+
### Storage outcome
|
|
920
|
+
|
|
921
|
+
- One change in monorepo root
|
|
922
|
+
- Scope selection recorded in change metadata
|
|
923
|
+
- Delta specs only generated for the selected area
|
|
924
|
+
|
|
925
|
+
### Why this matters
|
|
926
|
+
|
|
927
|
+
The user should not feel like they are using a different product because they happen to be in a monorepo.
|
|
928
|
+
|
|
929
|
+
---
|
|
930
|
+
|
|
931
|
+
## Journey 3: Monorepo, Cross-Scope Change
|
|
932
|
+
|
|
933
|
+
### Starting state
|
|
934
|
+
|
|
935
|
+
Same monorepo:
|
|
936
|
+
|
|
937
|
+
```text
|
|
938
|
+
platform/
|
|
939
|
+
openspec/
|
|
940
|
+
apps/web/
|
|
941
|
+
services/api/
|
|
942
|
+
packages/contracts/
|
|
943
|
+
```
|
|
944
|
+
|
|
945
|
+
### Planning
|
|
946
|
+
|
|
947
|
+
The user types:
|
|
948
|
+
|
|
949
|
+
```text
|
|
950
|
+
/opsx:propose add-3ds-checkout
|
|
951
|
+
```
|
|
952
|
+
|
|
953
|
+
OpenSpec detects likely affected scopes:
|
|
954
|
+
|
|
955
|
+
- `packages/contracts`
|
|
956
|
+
- `services/api`
|
|
957
|
+
- `apps/web`
|
|
958
|
+
|
|
959
|
+
It asks:
|
|
960
|
+
|
|
961
|
+
```text
|
|
962
|
+
This appears to affect multiple scopes.
|
|
963
|
+
Which scopes should be included?
|
|
964
|
+
[x] packages/contracts
|
|
965
|
+
[x] services/api
|
|
966
|
+
[x] apps/web
|
|
967
|
+
[ ] apps/admin
|
|
968
|
+
[ ] packages/ui
|
|
969
|
+
```
|
|
970
|
+
|
|
971
|
+
### Expected behavior
|
|
972
|
+
|
|
973
|
+
OpenSpec creates:
|
|
974
|
+
|
|
975
|
+
```text
|
|
976
|
+
platform/openspec/changes/add-3ds-checkout/
|
|
977
|
+
```
|
|
978
|
+
|
|
979
|
+
The change includes scope metadata listing all three selected scopes.
|
|
980
|
+
|
|
981
|
+
OpenSpec reads:
|
|
982
|
+
|
|
983
|
+
- shared contract specs
|
|
984
|
+
- API specs for billing/checkout
|
|
985
|
+
- web checkout specs
|
|
986
|
+
|
|
987
|
+
OpenSpec ignores unrelated specs by default.
|
|
988
|
+
|
|
989
|
+
### Implementation
|
|
990
|
+
|
|
991
|
+
The user runs:
|
|
992
|
+
|
|
993
|
+
```text
|
|
994
|
+
/opsx:apply
|
|
995
|
+
```
|
|
996
|
+
|
|
997
|
+
OpenSpec should:
|
|
998
|
+
|
|
999
|
+
1. show that multiple scopes are affected
|
|
1000
|
+
2. sequence tasks accordingly
|
|
1001
|
+
3. update one shared task artifact if the monorepo is still treated as one owning root
|
|
1002
|
+
|
|
1003
|
+
### Storage outcome
|
|
1004
|
+
|
|
1005
|
+
- One change at monorepo root
|
|
1006
|
+
- Delta specs for multiple scope paths
|
|
1007
|
+
- All canonical specs remain inside the monorepo
|
|
1008
|
+
|
|
1009
|
+
### Important note
|
|
1010
|
+
|
|
1011
|
+
This is still not a coordination workspace case, because there is still one owning project root.
|
|
1012
|
+
|
|
1013
|
+
---
|
|
1014
|
+
|
|
1015
|
+
## Journey 4: Large Monorepo That Behaves Like Many Repos
|
|
1016
|
+
|
|
1017
|
+
### Why this journey exists
|
|
1018
|
+
|
|
1019
|
+
Some monorepos are operationally equivalent to multi-repo systems:
|
|
1020
|
+
|
|
1021
|
+
- different teams own different areas
|
|
1022
|
+
- different release cadences
|
|
1023
|
+
- many developers should not edit each other’s planning setup
|
|
1024
|
+
- cross-team work is exceptional
|
|
1025
|
+
|
|
1026
|
+
This means OpenSpec cannot assume:
|
|
1027
|
+
|
|
1028
|
+
- one monorepo root automatically equals one planning unit
|
|
1029
|
+
|
|
1030
|
+
### Starting state
|
|
1031
|
+
|
|
1032
|
+
```text
|
|
1033
|
+
platform/
|
|
1034
|
+
openspec/
|
|
1035
|
+
apps/web/
|
|
1036
|
+
apps/mobile/
|
|
1037
|
+
services/billing/
|
|
1038
|
+
services/orders/
|
|
1039
|
+
packages/contracts/
|
|
1040
|
+
```
|
|
1041
|
+
|
|
1042
|
+
Optional scope markers exist:
|
|
1043
|
+
|
|
1044
|
+
```text
|
|
1045
|
+
apps/web/openspec.scope.yaml
|
|
1046
|
+
apps/mobile/openspec.scope.yaml
|
|
1047
|
+
services/billing/openspec.scope.yaml
|
|
1048
|
+
packages/contracts/openspec.scope.yaml
|
|
1049
|
+
```
|
|
1050
|
+
|
|
1051
|
+
### Planning a local team change
|
|
1052
|
+
|
|
1053
|
+
The web team enters the monorepo root, or a repo-aware subtool enters the web area.
|
|
1054
|
+
|
|
1055
|
+
The user types:
|
|
1056
|
+
|
|
1057
|
+
```text
|
|
1058
|
+
/opsx:propose add-checkout-loading-state
|
|
1059
|
+
```
|
|
1060
|
+
|
|
1061
|
+
OpenSpec detects this is limited to `apps/web`.
|
|
1062
|
+
|
|
1063
|
+
The user should experience this exactly like a single-scope change.
|
|
1064
|
+
|
|
1065
|
+
### Planning a cross-team monorepo initiative
|
|
1066
|
+
|
|
1067
|
+
The user types:
|
|
1068
|
+
|
|
1069
|
+
```text
|
|
1070
|
+
/opsx:propose add-3ds
|
|
1071
|
+
```
|
|
1072
|
+
|
|
1073
|
+
OpenSpec detects:
|
|
1074
|
+
|
|
1075
|
+
- `packages/contracts`
|
|
1076
|
+
- `services/billing`
|
|
1077
|
+
- `apps/web`
|
|
1078
|
+
- possibly `apps/mobile`
|
|
1079
|
+
|
|
1080
|
+
At this point OpenSpec must make a product decision.
|
|
1081
|
+
|
|
1082
|
+
#### Recommended behavior
|
|
1083
|
+
|
|
1084
|
+
If all affected scopes live under one owning root and the user is comfortable with one monorepo-local change, keep using one root-level change.
|
|
1085
|
+
|
|
1086
|
+
If the monorepo is configured or inferred to behave like many owned sub-projects, offer to upgrade to a **coordination-style monorepo initiative**.
|
|
1087
|
+
|
|
1088
|
+
Prompt feel:
|
|
1089
|
+
|
|
1090
|
+
```text
|
|
1091
|
+
This monorepo has multiple independently owned scopes.
|
|
1092
|
+
|
|
1093
|
+
How would you like to plan this work?
|
|
1094
|
+
- One monorepo change
|
|
1095
|
+
- Coordination initiative with linked scope changes
|
|
1096
|
+
```
|
|
1097
|
+
|
|
1098
|
+
### Coordination-style monorepo initiative
|
|
1099
|
+
|
|
1100
|
+
If the user chooses the coordination flow, OpenSpec creates:
|
|
1101
|
+
|
|
1102
|
+
1. a neutral initiative workspace
|
|
1103
|
+
2. linked scope-local changes inside the monorepo root or scope-owned folders
|
|
1104
|
+
|
|
1105
|
+
This is the same conceptual flow as multi-repo, but all roots happen to be inside one VCS root.
|
|
1106
|
+
|
|
1107
|
+
### Why this matters
|
|
1108
|
+
|
|
1109
|
+
This prevents the UX from hardcoding "monorepo is always simpler."
|
|
1110
|
+
|
|
1111
|
+
That assumption fails for exactly the enterprise-style teams this feature is for.
|
|
1112
|
+
|
|
1113
|
+
---
|
|
1114
|
+
|
|
1115
|
+
## Journey 5: Multi-Repo Work Started From Inside One Repo
|
|
1116
|
+
|
|
1117
|
+
### Starting state
|
|
1118
|
+
|
|
1119
|
+
The user is in:
|
|
1120
|
+
|
|
1121
|
+
```text
|
|
1122
|
+
~/work/web-client
|
|
1123
|
+
```
|
|
1124
|
+
|
|
1125
|
+
They already use OpenSpec there.
|
|
1126
|
+
|
|
1127
|
+
They open Claude in `web-client` and type:
|
|
1128
|
+
|
|
1129
|
+
```text
|
|
1130
|
+
/opsx:propose add-3ds
|
|
1131
|
+
```
|
|
1132
|
+
|
|
1133
|
+
During exploration or proposal generation, it becomes clear that the work also affects:
|
|
1134
|
+
|
|
1135
|
+
- `contracts`
|
|
1136
|
+
- `billing-service`
|
|
1137
|
+
- `ios-client`
|
|
1138
|
+
|
|
1139
|
+
### Critical UX requirement
|
|
1140
|
+
|
|
1141
|
+
At this point OpenSpec should not silently create one cross-repo change inside `web-client`.
|
|
1142
|
+
|
|
1143
|
+
That would be misleading, because:
|
|
1144
|
+
|
|
1145
|
+
- the initiative is not owned by `web-client`
|
|
1146
|
+
- the agent does not yet have the other roots
|
|
1147
|
+
- canonical specs belong in other repos
|
|
1148
|
+
|
|
1149
|
+
### Expected OpenSpec behavior
|
|
1150
|
+
|
|
1151
|
+
OpenSpec interrupts the default single-repo flow and says:
|
|
1152
|
+
|
|
1153
|
+
```text
|
|
1154
|
+
This work spans multiple owning roots:
|
|
1155
|
+
- github.com/Fission-AI/contracts
|
|
1156
|
+
- github.com/Fission-AI/billing-service
|
|
1157
|
+
- github.com/Fission-AI/web-client
|
|
1158
|
+
- github.com/Fission-AI/ios-client
|
|
1159
|
+
|
|
1160
|
+
For cross-repo work, OpenSpec recommends creating a coordination workspace.
|
|
1161
|
+
|
|
1162
|
+
Suggested location:
|
|
1163
|
+
~/work/openspec-workspaces/add-3ds
|
|
1164
|
+
|
|
1165
|
+
Create it now?
|
|
1166
|
+
```
|
|
1167
|
+
|
|
1168
|
+
If the user agrees, OpenSpec creates the workspace.
|
|
1169
|
+
|
|
1170
|
+
If the user wants another location, they can choose it.
|
|
1171
|
+
|
|
1172
|
+
### Coordination workspace creation
|
|
1173
|
+
|
|
1174
|
+
Proposed CLI feel:
|
|
1175
|
+
|
|
1176
|
+
```bash
|
|
1177
|
+
openspec workspace create add-3ds --at ~/work/openspec-workspaces/add-3ds
|
|
1178
|
+
```
|
|
1179
|
+
|
|
1180
|
+
OpenSpec writes:
|
|
1181
|
+
|
|
1182
|
+
```text
|
|
1183
|
+
~/work/openspec-workspaces/add-3ds/
|
|
1184
|
+
.openspec-workspace/
|
|
1185
|
+
workspace.yaml
|
|
1186
|
+
initiative.md
|
|
1187
|
+
links.yaml
|
|
1188
|
+
agents/
|
|
1189
|
+
claude.md
|
|
1190
|
+
codex.md
|
|
1191
|
+
```
|
|
1192
|
+
|
|
1193
|
+
### Repo resolution
|
|
1194
|
+
|
|
1195
|
+
OpenSpec now resolves local paths for:
|
|
1196
|
+
|
|
1197
|
+
- `github.com/Fission-AI/contracts`
|
|
1198
|
+
- `github.com/Fission-AI/billing-service`
|
|
1199
|
+
- `github.com/Fission-AI/web-client`
|
|
1200
|
+
- `github.com/Fission-AI/ios-client`
|
|
1201
|
+
|
|
1202
|
+
Using:
|
|
1203
|
+
|
|
1204
|
+
1. known local registry
|
|
1205
|
+
2. git remote scanning
|
|
1206
|
+
3. user confirmation if needed
|
|
1207
|
+
|
|
1208
|
+
### Agent handoff
|
|
1209
|
+
|
|
1210
|
+
OpenSpec then tells the user:
|
|
1211
|
+
|
|
1212
|
+
```text
|
|
1213
|
+
Next step:
|
|
1214
|
+
1. Open your coding agent in ~/work/openspec-workspaces/add-3ds
|
|
1215
|
+
2. Attach these roots if your tool supports multi-root:
|
|
1216
|
+
- /Users/me/work/contracts
|
|
1217
|
+
- /Users/me/work/billing-service
|
|
1218
|
+
- /Users/me/work/web-client
|
|
1219
|
+
- /Users/me/work/ios-client
|
|
1220
|
+
|
|
1221
|
+
OpenSpec has generated workspace instructions at:
|
|
1222
|
+
.openspec-workspace/agents/claude.md
|
|
1223
|
+
```
|
|
1224
|
+
|
|
1225
|
+
### Planning from the workspace
|
|
1226
|
+
|
|
1227
|
+
The user now starts the agent in the coordination workspace and runs:
|
|
1228
|
+
|
|
1229
|
+
```text
|
|
1230
|
+
/opsx:propose add-3ds
|
|
1231
|
+
```
|
|
1232
|
+
|
|
1233
|
+
Or OpenSpec may have already scaffolded the initiative and tell the agent to continue it.
|
|
1234
|
+
|
|
1235
|
+
### Storage outcome
|
|
1236
|
+
|
|
1237
|
+
The coordination workspace stores the **initiative-level planning object**:
|
|
1238
|
+
|
|
1239
|
+
- proposal.md
|
|
1240
|
+
- design.md
|
|
1241
|
+
- initiative summary
|
|
1242
|
+
- cross-repo scope map
|
|
1243
|
+
- ownership, milestones, risks, and dependencies
|
|
1244
|
+
- links to repo-local changes
|
|
1245
|
+
- agent workspace instructions
|
|
1246
|
+
|
|
1247
|
+
Each repo stores its own execution change:
|
|
1248
|
+
|
|
1249
|
+
- `contracts/openspec/changes/add-3ds-contract/`
|
|
1250
|
+
- `billing-service/openspec/changes/add-3ds-billing/`
|
|
1251
|
+
- `web-client/openspec/changes/add-3ds-web/`
|
|
1252
|
+
- `ios-client/openspec/changes/add-3ds-ios/`
|
|
1253
|
+
|
|
1254
|
+
Those repo-local changes are where repo-specific tasks, delta specs, and local implementation state live.
|
|
1255
|
+
|
|
1256
|
+
### Why this matters
|
|
1257
|
+
|
|
1258
|
+
This gives the user a truthful answer to:
|
|
1259
|
+
|
|
1260
|
+
- Where should I stand?
|
|
1261
|
+
- Where does the change live?
|
|
1262
|
+
- How does the agent see the other repos?
|
|
1263
|
+
|
|
1264
|
+
The answer is:
|
|
1265
|
+
|
|
1266
|
+
- stand in the coordination workspace for cross-repo planning
|
|
1267
|
+
- keep canonical changes/specs in their owners
|
|
1268
|
+
|
|
1269
|
+
---
|
|
1270
|
+
|
|
1271
|
+
## Journey 6: Multi-Repo Work Started From a Neutral Place
|
|
1272
|
+
|
|
1273
|
+
### Starting state
|
|
1274
|
+
|
|
1275
|
+
The user already knows the work is cross-repo.
|
|
1276
|
+
|
|
1277
|
+
They start in a neutral directory:
|
|
1278
|
+
|
|
1279
|
+
```bash
|
|
1280
|
+
cd ~/work
|
|
1281
|
+
```
|
|
1282
|
+
|
|
1283
|
+
They run:
|
|
1284
|
+
|
|
1285
|
+
```bash
|
|
1286
|
+
openspec workspace create add-3ds --at ~/work/openspec-workspaces/add-3ds
|
|
1287
|
+
```
|
|
1288
|
+
|
|
1289
|
+
Or a future higher-level shortcut:
|
|
1290
|
+
|
|
1291
|
+
```bash
|
|
1292
|
+
openspec initiative new add-3ds
|
|
1293
|
+
```
|
|
1294
|
+
|
|
1295
|
+
### OpenSpec prompts
|
|
1296
|
+
|
|
1297
|
+
OpenSpec asks:
|
|
1298
|
+
|
|
1299
|
+
```text
|
|
1300
|
+
Which repos or scopes are involved?
|
|
1301
|
+
```
|
|
1302
|
+
|
|
1303
|
+
The user enters:
|
|
1304
|
+
|
|
1305
|
+
- `github.com/Fission-AI/contracts`
|
|
1306
|
+
- `github.com/Fission-AI/billing-service`
|
|
1307
|
+
- `github.com/Fission-AI/web-client`
|
|
1308
|
+
- `github.com/Fission-AI/ios-client`
|
|
1309
|
+
|
|
1310
|
+
OpenSpec resolves local clones and writes the workspace files.
|
|
1311
|
+
|
|
1312
|
+
### Agent setup
|
|
1313
|
+
|
|
1314
|
+
The user opens the coordination workspace in their agent.
|
|
1315
|
+
|
|
1316
|
+
OpenSpec-generated agent instructions contain:
|
|
1317
|
+
|
|
1318
|
+
- initiative summary
|
|
1319
|
+
- available roots
|
|
1320
|
+
- ownership map
|
|
1321
|
+
- guidance that canonical spec edits must be written back to owning roots
|
|
1322
|
+
|
|
1323
|
+
### Planning behavior
|
|
1324
|
+
|
|
1325
|
+
When the user runs:
|
|
1326
|
+
|
|
1327
|
+
```text
|
|
1328
|
+
/opsx:explore
|
|
1329
|
+
```
|
|
1330
|
+
|
|
1331
|
+
or
|
|
1332
|
+
|
|
1333
|
+
```text
|
|
1334
|
+
/opsx:propose add-3ds
|
|
1335
|
+
```
|
|
1336
|
+
|
|
1337
|
+
the agent reads:
|
|
1338
|
+
|
|
1339
|
+
- workspace initiative metadata
|
|
1340
|
+
- relevant specs from attached roots
|
|
1341
|
+
- only for selected repos/scopes
|
|
1342
|
+
|
|
1343
|
+
### Storage outcome
|
|
1344
|
+
|
|
1345
|
+
Same as Journey 5, but the user never had to start from one repo first.
|
|
1346
|
+
|
|
1347
|
+
### Why this journey matters
|
|
1348
|
+
|
|
1349
|
+
Some users will intentionally want the initiative to live outside any single repo from the start.
|
|
1350
|
+
|
|
1351
|
+
OpenSpec should support that directly.
|
|
1352
|
+
|
|
1353
|
+
---
|
|
1354
|
+
|
|
1355
|
+
## Journey 6A: Team-Shared Multi-Repo Initiative
|
|
1356
|
+
|
|
1357
|
+
### Starting state
|
|
1358
|
+
|
|
1359
|
+
A team knows the work spans multiple repos and will involve multiple people over several days or weeks.
|
|
1360
|
+
|
|
1361
|
+
They create or choose a shared coordination repo, for example:
|
|
1362
|
+
|
|
1363
|
+
```text
|
|
1364
|
+
~/work/openspec-initiatives/
|
|
1365
|
+
```
|
|
1366
|
+
|
|
1367
|
+
Or a team-owned repo such as:
|
|
1368
|
+
|
|
1369
|
+
```text
|
|
1370
|
+
github.com/Fission-AI/initiatives
|
|
1371
|
+
```
|
|
1372
|
+
|
|
1373
|
+
Inside it, OpenSpec creates:
|
|
1374
|
+
|
|
1375
|
+
```text
|
|
1376
|
+
initiatives/
|
|
1377
|
+
add-3ds/
|
|
1378
|
+
.openspec-workspace/
|
|
1379
|
+
workspace.yaml
|
|
1380
|
+
initiative.md
|
|
1381
|
+
links.yaml
|
|
1382
|
+
agents/
|
|
1383
|
+
claude.md
|
|
1384
|
+
codex.md
|
|
1385
|
+
```
|
|
1386
|
+
|
|
1387
|
+
### What gets committed
|
|
1388
|
+
|
|
1389
|
+
The team commits:
|
|
1390
|
+
|
|
1391
|
+
- initiative summary
|
|
1392
|
+
- stable project IDs
|
|
1393
|
+
- selected scopes
|
|
1394
|
+
- ownership decisions
|
|
1395
|
+
- linked repo-local change IDs
|
|
1396
|
+
- rollout and status notes
|
|
1397
|
+
|
|
1398
|
+
### What stays local
|
|
1399
|
+
|
|
1400
|
+
Each teammate keeps local path mappings outside the shared repo, for example in OpenSpec local config/data:
|
|
1401
|
+
|
|
1402
|
+
- `github.com/Fission-AI/contracts` -> `/Users/alice/src/contracts`
|
|
1403
|
+
- `github.com/Fission-AI/contracts` -> `/home/bob/work/contracts`
|
|
1404
|
+
|
|
1405
|
+
### Teammate workflow
|
|
1406
|
+
|
|
1407
|
+
Each teammate:
|
|
1408
|
+
|
|
1409
|
+
1. clones or pulls the shared coordination repo
|
|
1410
|
+
2. runs something like `openspec workspace doctor` or `openspec workspace sync`
|
|
1411
|
+
3. resolves any missing project IDs to local clones
|
|
1412
|
+
4. opens their agent from the shared coordination workspace
|
|
1413
|
+
|
|
1414
|
+
### Agent startup behavior
|
|
1415
|
+
|
|
1416
|
+
OpenSpec generates agent instructions using:
|
|
1417
|
+
|
|
1418
|
+
- committed shared manifest
|
|
1419
|
+
- local path overlay
|
|
1420
|
+
|
|
1421
|
+
This means every teammate sees the same initiative structure, but with their own valid filesystem paths.
|
|
1422
|
+
|
|
1423
|
+
### Why this matters
|
|
1424
|
+
|
|
1425
|
+
This is the team-scale version of "enter the coordination workspace."
|
|
1426
|
+
|
|
1427
|
+
Without this distinction, the phrase sounds cohesive for one person but falls apart for shared planning.
|
|
1428
|
+
|
|
1429
|
+
---
|
|
1430
|
+
|
|
1431
|
+
## Journey 6B: Cross-Team Initiative With Explicit Sponsor
|
|
1432
|
+
|
|
1433
|
+
### Starting state
|
|
1434
|
+
|
|
1435
|
+
The work spans:
|
|
1436
|
+
|
|
1437
|
+
- platform/shared contracts
|
|
1438
|
+
- backend services
|
|
1439
|
+
- multiple clients
|
|
1440
|
+
- multiple teams
|
|
1441
|
+
|
|
1442
|
+
### Expected setup
|
|
1443
|
+
|
|
1444
|
+
OpenSpec should support the initiative being created in a shared coordination repo owned by the sponsoring or driving team.
|
|
1445
|
+
|
|
1446
|
+
That sponsor is responsible for:
|
|
1447
|
+
|
|
1448
|
+
- opening the initiative
|
|
1449
|
+
- linking participating projects
|
|
1450
|
+
- tracking initiative status
|
|
1451
|
+
- keeping ownership decisions visible
|
|
1452
|
+
|
|
1453
|
+
But the sponsor does not automatically own:
|
|
1454
|
+
|
|
1455
|
+
- all specs
|
|
1456
|
+
- all implementation changes
|
|
1457
|
+
- the canonical shared contract
|
|
1458
|
+
|
|
1459
|
+
### Example
|
|
1460
|
+
|
|
1461
|
+
- Payments team sponsors `add-3ds`
|
|
1462
|
+
- Contracts repo owns canonical checkout contract
|
|
1463
|
+
- Web team owns web implementation change
|
|
1464
|
+
- iOS team owns iOS implementation change
|
|
1465
|
+
- Billing team owns backend implementation change
|
|
1466
|
+
|
|
1467
|
+
### User experience
|
|
1468
|
+
|
|
1469
|
+
When another team member opens the shared coordination workspace, OpenSpec should make this explicit:
|
|
1470
|
+
|
|
1471
|
+
```text
|
|
1472
|
+
Initiative sponsor:
|
|
1473
|
+
- payments-platform
|
|
1474
|
+
|
|
1475
|
+
Canonical shared contract owner:
|
|
1476
|
+
- contracts
|
|
1477
|
+
|
|
1478
|
+
Participating owners:
|
|
1479
|
+
- billing-service
|
|
1480
|
+
- web-client
|
|
1481
|
+
- ios-client
|
|
1482
|
+
```
|
|
1483
|
+
|
|
1484
|
+
### Why this matters
|
|
1485
|
+
|
|
1486
|
+
Without this, "shared ownership" becomes ambiguous and teams do not know whether they are reading:
|
|
1487
|
+
|
|
1488
|
+
- a sponsor-owned plan
|
|
1489
|
+
- a canonical contract
|
|
1490
|
+
- or just another team’s local interpretation
|
|
1491
|
+
|
|
1492
|
+
---
|
|
1493
|
+
|
|
1494
|
+
## Journey 7: Multi-Repo Planning When Only Some Repos Are Cloned
|
|
1495
|
+
|
|
1496
|
+
### Starting state
|
|
1497
|
+
|
|
1498
|
+
The user wants to plan work affecting:
|
|
1499
|
+
|
|
1500
|
+
- contracts
|
|
1501
|
+
- billing-service
|
|
1502
|
+
- web-client
|
|
1503
|
+
- ios-client
|
|
1504
|
+
|
|
1505
|
+
But only has these locally:
|
|
1506
|
+
|
|
1507
|
+
- contracts
|
|
1508
|
+
- web-client
|
|
1509
|
+
|
|
1510
|
+
### Expected behavior
|
|
1511
|
+
|
|
1512
|
+
OpenSpec should still allow planning.
|
|
1513
|
+
|
|
1514
|
+
It creates the coordination workspace and records:
|
|
1515
|
+
|
|
1516
|
+
- resolved roots for `contracts` and `web-client`
|
|
1517
|
+
- unresolved status for `billing-service` and `ios-client`
|
|
1518
|
+
|
|
1519
|
+
Prompt feel:
|
|
1520
|
+
|
|
1521
|
+
```text
|
|
1522
|
+
Resolved locally:
|
|
1523
|
+
- contracts
|
|
1524
|
+
- web-client
|
|
1525
|
+
|
|
1526
|
+
Not currently available locally:
|
|
1527
|
+
- billing-service
|
|
1528
|
+
- ios-client
|
|
1529
|
+
|
|
1530
|
+
Planning can continue with partial context.
|
|
1531
|
+
Implementation in unresolved roots will remain pending until linked.
|
|
1532
|
+
```
|
|
1533
|
+
|
|
1534
|
+
### Agent behavior
|
|
1535
|
+
|
|
1536
|
+
The agent should:
|
|
1537
|
+
|
|
1538
|
+
- use resolved repos for concrete planning
|
|
1539
|
+
- mention unresolved repos explicitly
|
|
1540
|
+
- avoid pretending it read their specs
|
|
1541
|
+
- generate pending placeholders in initiative tracking if needed
|
|
1542
|
+
|
|
1543
|
+
### Storage outcome
|
|
1544
|
+
|
|
1545
|
+
The coordination workspace may contain unresolved links such as:
|
|
1546
|
+
|
|
1547
|
+
```yaml
|
|
1548
|
+
projects:
|
|
1549
|
+
- id: github.com/Fission-AI/contracts
|
|
1550
|
+
path: /Users/me/work/contracts
|
|
1551
|
+
status: resolved
|
|
1552
|
+
- id: github.com/Fission-AI/billing-service
|
|
1553
|
+
status: unresolved
|
|
1554
|
+
- id: github.com/Fission-AI/web-client
|
|
1555
|
+
path: /Users/me/work/web-client
|
|
1556
|
+
status: resolved
|
|
1557
|
+
- id: github.com/Fission-AI/ios-client
|
|
1558
|
+
status: unresolved
|
|
1559
|
+
```
|
|
1560
|
+
|
|
1561
|
+
### Why this matters
|
|
1562
|
+
|
|
1563
|
+
This keeps planning useful even when the environment is incomplete.
|
|
1564
|
+
|
|
1565
|
+
Blocking planning here would make the feature brittle.
|
|
1566
|
+
|
|
1567
|
+
This also matters for large teams, because not every teammate will have every participating repo cloned or accessible.
|
|
1568
|
+
|
|
1569
|
+
---
|
|
1570
|
+
|
|
1571
|
+
## Journey 8: How Specs Are Read During Planning
|
|
1572
|
+
|
|
1573
|
+
This is one of the most important behavioral rules.
|
|
1574
|
+
|
|
1575
|
+
OpenSpec should never blindly read all specs from all roots.
|
|
1576
|
+
|
|
1577
|
+
### Single repo
|
|
1578
|
+
|
|
1579
|
+
Read:
|
|
1580
|
+
|
|
1581
|
+
- local project config
|
|
1582
|
+
- local specs relevant to the selected scope
|
|
1583
|
+
- local change history only if helpful
|
|
1584
|
+
|
|
1585
|
+
Do not read:
|
|
1586
|
+
|
|
1587
|
+
- unrelated local specs by default
|
|
1588
|
+
|
|
1589
|
+
### Monorepo
|
|
1590
|
+
|
|
1591
|
+
Read:
|
|
1592
|
+
|
|
1593
|
+
- root project config
|
|
1594
|
+
- specs for the selected scopes
|
|
1595
|
+
- shared contract specs if selected or referenced
|
|
1596
|
+
|
|
1597
|
+
Do not read:
|
|
1598
|
+
|
|
1599
|
+
- unrelated apps/services/packages
|
|
1600
|
+
|
|
1601
|
+
### Multi-repo
|
|
1602
|
+
|
|
1603
|
+
Read:
|
|
1604
|
+
|
|
1605
|
+
- initiative metadata from coordination workspace
|
|
1606
|
+
- specs in resolved attached roots
|
|
1607
|
+
- only the selected scopes within those roots
|
|
1608
|
+
- informational references if the user or agent explicitly chooses to open them
|
|
1609
|
+
|
|
1610
|
+
Do not read:
|
|
1611
|
+
|
|
1612
|
+
- specs from unresolved roots
|
|
1613
|
+
- every spec in every repo
|
|
1614
|
+
- referenced specs automatically if that would explode context
|
|
1615
|
+
|
|
1616
|
+
### Informational references
|
|
1617
|
+
|
|
1618
|
+
References should appear like:
|
|
1619
|
+
|
|
1620
|
+
```text
|
|
1621
|
+
Related references:
|
|
1622
|
+
- github.com/Fission-AI/contracts: openspec/specs/checkout/spec.md
|
|
1623
|
+
- github.com/Fission-AI/web-client: openspec/specs/checkout/web/spec.md
|
|
1624
|
+
```
|
|
1625
|
+
|
|
1626
|
+
The agent can use them as navigation hints.
|
|
1627
|
+
|
|
1628
|
+
They are not validation blockers.
|
|
1629
|
+
|
|
1630
|
+
### Shared contract read order
|
|
1631
|
+
|
|
1632
|
+
When a selected change involves a shared contract, OpenSpec should prefer this read order:
|
|
1633
|
+
|
|
1634
|
+
1. initiative metadata, if present
|
|
1635
|
+
2. canonical shared contract
|
|
1636
|
+
3. selected consumer/local specs
|
|
1637
|
+
4. repo-local change artifacts
|
|
1638
|
+
|
|
1639
|
+
This matters because the shared contract defines the boundary-level truths, while local specs describe how each consumer satisfies them.
|
|
1640
|
+
|
|
1641
|
+
---
|
|
1642
|
+
|
|
1643
|
+
## Journey 9: How Artifacts Are Stored
|
|
1644
|
+
|
|
1645
|
+
This must stay simple and deterministic.
|
|
1646
|
+
|
|
1647
|
+
### Rule 1: Canonical specs live with owners
|
|
1648
|
+
|
|
1649
|
+
Examples:
|
|
1650
|
+
|
|
1651
|
+
- Checkout contract spec lives in `contracts`
|
|
1652
|
+
- Web checkout behavior lives in `web-client`
|
|
1653
|
+
- iOS behavior lives in `ios-client`
|
|
1654
|
+
|
|
1655
|
+
### Rule 2: Repo-local changes live with repo owners
|
|
1656
|
+
|
|
1657
|
+
Examples:
|
|
1658
|
+
|
|
1659
|
+
- `contracts/openspec/changes/add-3ds-contract/`
|
|
1660
|
+
- `web-client/openspec/changes/add-3ds-web/`
|
|
1661
|
+
|
|
1662
|
+
These changes are the execution artifacts for each owning repo. They should carry repo-specific tasks, delta specs, and local implementation state.
|
|
1663
|
+
|
|
1664
|
+
### Rule 3: Initiative-level planning lives in the coordination workspace
|
|
1665
|
+
|
|
1666
|
+
Examples:
|
|
1667
|
+
|
|
1668
|
+
- proposal.md
|
|
1669
|
+
- design.md
|
|
1670
|
+
- initiative summary
|
|
1671
|
+
- rollout sequencing
|
|
1672
|
+
- cross-repo assumptions
|
|
1673
|
+
- ownership, milestones, risks, and dependencies
|
|
1674
|
+
- links between repo-local changes
|
|
1675
|
+
|
|
1676
|
+
### Rule 4: Workspace never becomes canonical spec storage
|
|
1677
|
+
|
|
1678
|
+
The coordination workspace may reference specs and summarize them.
|
|
1679
|
+
|
|
1680
|
+
It should not become a second spec source of truth.
|
|
1681
|
+
|
|
1682
|
+
### Rule 5: Shared contracts are canonical only after ownership is explicit
|
|
1683
|
+
|
|
1684
|
+
If a cross-boundary behavior has not yet been assigned a canonical owner, OpenSpec should store it as initiative-level draft material rather than pretending it is already a canonical spec.
|
|
1685
|
+
|
|
1686
|
+
### Rule 6: Shared coordination workspaces store stable collaboration data, not local machine state
|
|
1687
|
+
|
|
1688
|
+
If a coordination workspace is committed for team use, it should contain:
|
|
1689
|
+
|
|
1690
|
+
- stable project IDs
|
|
1691
|
+
- linked changes
|
|
1692
|
+
- ownership and initiative metadata
|
|
1693
|
+
|
|
1694
|
+
It should not contain:
|
|
1695
|
+
|
|
1696
|
+
- `/Users/...` paths
|
|
1697
|
+
- `C:\\...` paths
|
|
1698
|
+
- machine-specific attached-root state
|
|
1699
|
+
|
|
1700
|
+
That information belongs in local overlay data.
|
|
1701
|
+
|
|
1702
|
+
---
|
|
1703
|
+
|
|
1704
|
+
## Journey 10: `/opsx:apply` In Cross-Root Work
|
|
1705
|
+
|
|
1706
|
+
Implementation UX must remain honest about tool limits.
|
|
1707
|
+
|
|
1708
|
+
### Case A: Agent can work across roots
|
|
1709
|
+
|
|
1710
|
+
The user is in the coordination workspace.
|
|
1711
|
+
|
|
1712
|
+
They run:
|
|
1713
|
+
|
|
1714
|
+
```text
|
|
1715
|
+
/opsx:apply
|
|
1716
|
+
```
|
|
1717
|
+
|
|
1718
|
+
OpenSpec responds:
|
|
1719
|
+
|
|
1720
|
+
```text
|
|
1721
|
+
This initiative has linked changes in:
|
|
1722
|
+
- contracts
|
|
1723
|
+
- billing-service
|
|
1724
|
+
- web-client
|
|
1725
|
+
- ios-client
|
|
1726
|
+
|
|
1727
|
+
Choose apply mode:
|
|
1728
|
+
- Apply one linked change
|
|
1729
|
+
- Apply in suggested sequence
|
|
1730
|
+
```
|
|
1731
|
+
|
|
1732
|
+
Recommended default:
|
|
1733
|
+
|
|
1734
|
+
- apply one linked change at a time
|
|
1735
|
+
|
|
1736
|
+
This keeps task state and implementation context manageable.
|
|
1737
|
+
|
|
1738
|
+
### Case B: Agent is practically single-root
|
|
1739
|
+
|
|
1740
|
+
The user is in the coordination workspace and runs:
|
|
1741
|
+
|
|
1742
|
+
```text
|
|
1743
|
+
/opsx:apply
|
|
1744
|
+
```
|
|
1745
|
+
|
|
1746
|
+
OpenSpec should say:
|
|
1747
|
+
|
|
1748
|
+
```text
|
|
1749
|
+
This initiative spans multiple repos.
|
|
1750
|
+
Implementation must be run per repo in your current tool.
|
|
1751
|
+
|
|
1752
|
+
Next suggested step:
|
|
1753
|
+
- open /Users/me/work/contracts and run /opsx:apply add-3ds-contract
|
|
1754
|
+
```
|
|
1755
|
+
|
|
1756
|
+
### Why this matters
|
|
1757
|
+
|
|
1758
|
+
Cross-repo planning and cross-repo implementation are not the same capability.
|
|
1759
|
+
|
|
1760
|
+
The UX must not assume all agents can do both well.
|
|
1761
|
+
|
|
1762
|
+
---
|
|
1763
|
+
|
|
1764
|
+
## Journey 10A: Creating A Shared Contract In A Monorepo
|
|
1765
|
+
|
|
1766
|
+
### Starting state
|
|
1767
|
+
|
|
1768
|
+
The user is in a monorepo with:
|
|
1769
|
+
|
|
1770
|
+
```text
|
|
1771
|
+
platform/
|
|
1772
|
+
openspec/
|
|
1773
|
+
apps/web/
|
|
1774
|
+
apps/ios/
|
|
1775
|
+
apps/android/
|
|
1776
|
+
services/billing/
|
|
1777
|
+
```
|
|
1778
|
+
|
|
1779
|
+
There is no existing canonical `checkout` shared contract.
|
|
1780
|
+
|
|
1781
|
+
### User request
|
|
1782
|
+
|
|
1783
|
+
The user types:
|
|
1784
|
+
|
|
1785
|
+
```text
|
|
1786
|
+
/opsx:propose add-3ds-checkout
|
|
1787
|
+
```
|
|
1788
|
+
|
|
1789
|
+
The agent discovers the request spans:
|
|
1790
|
+
|
|
1791
|
+
- web
|
|
1792
|
+
- iOS
|
|
1793
|
+
- Android
|
|
1794
|
+
- billing backend
|
|
1795
|
+
|
|
1796
|
+
### Expected prompt
|
|
1797
|
+
|
|
1798
|
+
```text
|
|
1799
|
+
This looks like a cross-boundary behavior shared by multiple scopes.
|
|
1800
|
+
|
|
1801
|
+
Should OpenSpec treat this as:
|
|
1802
|
+
- A shared contract
|
|
1803
|
+
- Independent local changes only
|
|
1804
|
+
- An initiative note for now
|
|
1805
|
+
```
|
|
1806
|
+
|
|
1807
|
+
The user chooses shared contract.
|
|
1808
|
+
|
|
1809
|
+
OpenSpec then asks:
|
|
1810
|
+
|
|
1811
|
+
```text
|
|
1812
|
+
Where should the canonical shared contract live?
|
|
1813
|
+
- openspec/specs/contracts/checkout
|
|
1814
|
+
- openspec/specs/shared/checkout
|
|
1815
|
+
- keep it initiative-only for now
|
|
1816
|
+
```
|
|
1817
|
+
|
|
1818
|
+
### Expected storage result
|
|
1819
|
+
|
|
1820
|
+
OpenSpec creates:
|
|
1821
|
+
|
|
1822
|
+
- canonical shared contract in chosen shared scope
|
|
1823
|
+
- repo-local change under monorepo root
|
|
1824
|
+
- local delta specs for selected consumer scopes as needed
|
|
1825
|
+
|
|
1826
|
+
### Why this matters
|
|
1827
|
+
|
|
1828
|
+
This keeps one source of truth for the cross-boundary behavior, instead of smearing the same logic across web, iOS, Android, and backend specs.
|
|
1829
|
+
|
|
1830
|
+
---
|
|
1831
|
+
|
|
1832
|
+
## Journey 10B: Creating A Shared Contract In A Multi-Repo Environment
|
|
1833
|
+
|
|
1834
|
+
### Starting state
|
|
1835
|
+
|
|
1836
|
+
The user is planning a checkout initiative involving:
|
|
1837
|
+
|
|
1838
|
+
- `contracts`
|
|
1839
|
+
- `web-client`
|
|
1840
|
+
- `ios-client`
|
|
1841
|
+
- `android-client`
|
|
1842
|
+
- `billing-service`
|
|
1843
|
+
|
|
1844
|
+
There is no existing shared checkout contract.
|
|
1845
|
+
|
|
1846
|
+
### Planning flow
|
|
1847
|
+
|
|
1848
|
+
The user creates or enters a coordination workspace.
|
|
1849
|
+
|
|
1850
|
+
They run:
|
|
1851
|
+
|
|
1852
|
+
```text
|
|
1853
|
+
/opsx:propose add-3ds
|
|
1854
|
+
```
|
|
1855
|
+
|
|
1856
|
+
OpenSpec detects this likely requires a shared contract.
|
|
1857
|
+
|
|
1858
|
+
### Expected prompt
|
|
1859
|
+
|
|
1860
|
+
```text
|
|
1861
|
+
No canonical shared contract owner was found for this behavior.
|
|
1862
|
+
|
|
1863
|
+
Choose how to proceed:
|
|
1864
|
+
- Create the canonical contract in an existing contracts repo
|
|
1865
|
+
- Assign the contract to an existing domain owner repo
|
|
1866
|
+
- Keep it as initiative-only for now
|
|
1867
|
+
```
|
|
1868
|
+
|
|
1869
|
+
If the user selects an existing contracts repo, OpenSpec:
|
|
1870
|
+
|
|
1871
|
+
1. creates a repo-local change in that repo for the shared contract
|
|
1872
|
+
2. links consumer repo changes to it
|
|
1873
|
+
3. records references from consumers to the canonical contract
|
|
1874
|
+
|
|
1875
|
+
If the user keeps it initiative-only, OpenSpec:
|
|
1876
|
+
|
|
1877
|
+
1. stores the draft cross-boundary behavior in initiative notes
|
|
1878
|
+
2. marks it as non-canonical
|
|
1879
|
+
3. warns that long-term consumer behavior should not depend on this until promoted into an owned shared contract
|
|
1880
|
+
|
|
1881
|
+
### Why this matters
|
|
1882
|
+
|
|
1883
|
+
This avoids a bad default where whichever app team starts the change accidentally becomes the long-term owner of a cross-org contract.
|
|
1884
|
+
|
|
1885
|
+
---
|
|
1886
|
+
|
|
1887
|
+
## Journey 11: Archiving Cross-Root Work
|
|
1888
|
+
|
|
1889
|
+
### Single repo or simple monorepo
|
|
1890
|
+
|
|
1891
|
+
Same as today:
|
|
1892
|
+
|
|
1893
|
+
```text
|
|
1894
|
+
/opsx:archive
|
|
1895
|
+
```
|
|
1896
|
+
|
|
1897
|
+
### Multi-repo initiative
|
|
1898
|
+
|
|
1899
|
+
The user in the coordination workspace runs:
|
|
1900
|
+
|
|
1901
|
+
```text
|
|
1902
|
+
/opsx:archive
|
|
1903
|
+
```
|
|
1904
|
+
|
|
1905
|
+
OpenSpec checks linked repo changes:
|
|
1906
|
+
|
|
1907
|
+
- archived
|
|
1908
|
+
- ready to archive
|
|
1909
|
+
- still active
|
|
1910
|
+
- unresolved
|
|
1911
|
+
|
|
1912
|
+
Prompt feel:
|
|
1913
|
+
|
|
1914
|
+
```text
|
|
1915
|
+
Initiative: add-3ds
|
|
1916
|
+
|
|
1917
|
+
Linked change status:
|
|
1918
|
+
- contracts/add-3ds-contract: complete
|
|
1919
|
+
- billing-service/add-3ds-billing: complete
|
|
1920
|
+
- web-client/add-3ds-web: active
|
|
1921
|
+
- ios-client/add-3ds-ios: unresolved
|
|
1922
|
+
|
|
1923
|
+
Archive options:
|
|
1924
|
+
- Archive completed linked changes only
|
|
1925
|
+
- Mark initiative partially complete
|
|
1926
|
+
- Wait until all linked changes are done
|
|
1927
|
+
```
|
|
1928
|
+
|
|
1929
|
+
### Recommended behavior
|
|
1930
|
+
|
|
1931
|
+
Allow partial completion states.
|
|
1932
|
+
|
|
1933
|
+
Cross-repo work often lands asynchronously.
|
|
1934
|
+
|
|
1935
|
+
---
|
|
1936
|
+
|
|
1937
|
+
## Setup Journeys
|
|
1938
|
+
|
|
1939
|
+
The setup path needs to feel lightweight.
|
|
1940
|
+
|
|
1941
|
+
## Journey 12: Day-Zero Setup For A Single Repo User
|
|
1942
|
+
|
|
1943
|
+
### Steps
|
|
1944
|
+
|
|
1945
|
+
1. `cd repo`
|
|
1946
|
+
2. `openspec init`
|
|
1947
|
+
3. open agent in repo
|
|
1948
|
+
4. run `/opsx:propose`
|
|
1949
|
+
|
|
1950
|
+
No workspace concepts shown.
|
|
1951
|
+
|
|
1952
|
+
---
|
|
1953
|
+
|
|
1954
|
+
## Journey 13: Day-Zero Setup For A Monorepo Team
|
|
1955
|
+
|
|
1956
|
+
### Steps
|
|
1957
|
+
|
|
1958
|
+
1. `cd monorepo`
|
|
1959
|
+
2. `openspec init`
|
|
1960
|
+
3. optionally add scope markers for major owned areas
|
|
1961
|
+
4. run `openspec update`
|
|
1962
|
+
5. open agent in monorepo root
|
|
1963
|
+
|
|
1964
|
+
During planning, OpenSpec asks for scope selection when needed.
|
|
1965
|
+
|
|
1966
|
+
No separate workspace admin step is required.
|
|
1967
|
+
|
|
1968
|
+
---
|
|
1969
|
+
|
|
1970
|
+
## Journey 14: Day-Zero Setup For A Multi-Repo Team
|
|
1971
|
+
|
|
1972
|
+
### Steps
|
|
1973
|
+
|
|
1974
|
+
1. each repo independently runs `openspec init`
|
|
1975
|
+
2. user creates a coordination workspace only when cross-repo work arises
|
|
1976
|
+
3. user links repo IDs to local clones as needed
|
|
1977
|
+
4. user opens the agent in the coordination workspace for planning
|
|
1978
|
+
|
|
1979
|
+
This is important:
|
|
1980
|
+
|
|
1981
|
+
The system should not require a platform team to pre-register every repo before any real work can begin.
|
|
1982
|
+
|
|
1983
|
+
---
|
|
1984
|
+
|
|
1985
|
+
## Agent Instruction Requirements
|
|
1986
|
+
|
|
1987
|
+
When OpenSpec creates a coordination workspace, it should generate agent-facing files.
|
|
1988
|
+
|
|
1989
|
+
Minimum contents:
|
|
1990
|
+
|
|
1991
|
+
1. initiative summary
|
|
1992
|
+
2. selected scopes
|
|
1993
|
+
3. owning roots and resolved paths
|
|
1994
|
+
4. unresolved roots
|
|
1995
|
+
5. storage rules
|
|
1996
|
+
6. implementation limitations for the current tool if known
|
|
1997
|
+
|
|
1998
|
+
### Example `claude.md`
|
|
1999
|
+
|
|
2000
|
+
```md
|
|
2001
|
+
You are working on initiative `add-3ds`.
|
|
2002
|
+
|
|
2003
|
+
Resolved roots:
|
|
2004
|
+
- /Users/me/work/contracts
|
|
2005
|
+
- /Users/me/work/web-client
|
|
2006
|
+
|
|
2007
|
+
Unresolved roots:
|
|
2008
|
+
- github.com/Fission-AI/billing-service
|
|
2009
|
+
- github.com/Fission-AI/ios-client
|
|
2010
|
+
|
|
2011
|
+
Ownership:
|
|
2012
|
+
- contracts owns shared checkout contract
|
|
2013
|
+
- web-client owns web checkout behavior
|
|
2014
|
+
|
|
2015
|
+
Rules:
|
|
2016
|
+
- Canonical specs must be edited in owning roots
|
|
2017
|
+
- Initiative-level notes live in this coordination workspace
|
|
2018
|
+
- Cross-repo references are informational only
|
|
2019
|
+
```
|
|
2020
|
+
|
|
2021
|
+
This file should be generated for any supported agent integration that benefits from deterministic startup context.
|
|
2022
|
+
|
|
2023
|
+
---
|
|
2024
|
+
|
|
2025
|
+
## Scenarios Summary
|
|
2026
|
+
|
|
2027
|
+
### Happy paths
|
|
2028
|
+
|
|
2029
|
+
1. Single repo, one change
|
|
2030
|
+
2. Monorepo, one scope
|
|
2031
|
+
3. Monorepo, multiple scopes
|
|
2032
|
+
4. Large monorepo, coordination-style initiative
|
|
2033
|
+
5. Multi-repo, all roots locally available
|
|
2034
|
+
6. Multi-repo, partial local availability
|
|
2035
|
+
|
|
2036
|
+
### Important transitions
|
|
2037
|
+
|
|
2038
|
+
1. Single repo request escalates into multi-repo
|
|
2039
|
+
2. Monorepo request escalates into coordination-style planning
|
|
2040
|
+
3. Planning workspace hands off to repo-local implementation
|
|
2041
|
+
4. Partial cross-repo completion at archive time
|
|
2042
|
+
5. Initiative-only shared behavior gets promoted into a canonical shared contract
|
|
2043
|
+
|
|
2044
|
+
---
|
|
2045
|
+
|
|
2046
|
+
## Edge Cases
|
|
2047
|
+
|
|
2048
|
+
### 1. User starts in the "wrong" repo
|
|
2049
|
+
|
|
2050
|
+
Example:
|
|
2051
|
+
|
|
2052
|
+
- User starts in `web-client`
|
|
2053
|
+
- Work actually spans `contracts`, `web-client`, `ios-client`
|
|
2054
|
+
|
|
2055
|
+
Expected behavior:
|
|
2056
|
+
|
|
2057
|
+
- OpenSpec recommends creating a coordination workspace
|
|
2058
|
+
- It does not bury the whole initiative inside `web-client`
|
|
2059
|
+
|
|
2060
|
+
### 2. User wants the initiative stored elsewhere
|
|
2061
|
+
|
|
2062
|
+
Expected behavior:
|
|
2063
|
+
|
|
2064
|
+
- allow explicit path selection
|
|
2065
|
+
- remember recent workspace locations if useful
|
|
2066
|
+
|
|
2067
|
+
### 3. Two local clones match the same repo identifier
|
|
2068
|
+
|
|
2069
|
+
Expected behavior:
|
|
2070
|
+
|
|
2071
|
+
- prompt user to choose one
|
|
2072
|
+
- optionally save preferred mapping locally
|
|
2073
|
+
|
|
2074
|
+
### 4. Repo identifier cannot be resolved
|
|
2075
|
+
|
|
2076
|
+
Expected behavior:
|
|
2077
|
+
|
|
2078
|
+
- store as unresolved
|
|
2079
|
+
- allow planning to continue
|
|
2080
|
+
- block implementation for that root only
|
|
2081
|
+
|
|
2082
|
+
### 5. Monorepo has no explicit scope metadata
|
|
2083
|
+
|
|
2084
|
+
Expected behavior:
|
|
2085
|
+
|
|
2086
|
+
- infer likely scopes from structure and specs
|
|
2087
|
+
- let the user confirm
|
|
2088
|
+
- offer to save the selection model later
|
|
2089
|
+
|
|
2090
|
+
### 6. Scope selection is too broad
|
|
2091
|
+
|
|
2092
|
+
Expected behavior:
|
|
2093
|
+
|
|
2094
|
+
- warn user that many scopes will be pulled into planning
|
|
2095
|
+
- suggest narrowing
|
|
2096
|
+
|
|
2097
|
+
### 7. Shared contract ownership is ambiguous
|
|
2098
|
+
|
|
2099
|
+
Expected behavior:
|
|
2100
|
+
|
|
2101
|
+
- require one canonical owner
|
|
2102
|
+
- other scopes/repos can reference it, not co-own it implicitly
|
|
2103
|
+
|
|
2104
|
+
### 7A. No existing shared owner makes sense
|
|
2105
|
+
|
|
2106
|
+
Expected behavior:
|
|
2107
|
+
|
|
2108
|
+
- let the team keep the behavior as initiative-only temporarily
|
|
2109
|
+
- explicitly mark it as draft and non-canonical
|
|
2110
|
+
- prompt for promotion later if it starts behaving like a long-lived contract
|
|
2111
|
+
|
|
2112
|
+
### 8. Agent cannot truly work across roots
|
|
2113
|
+
|
|
2114
|
+
Expected behavior:
|
|
2115
|
+
|
|
2116
|
+
- use coordination workspace for planning only
|
|
2117
|
+
- guide user into per-root apply flows
|
|
2118
|
+
|
|
2119
|
+
### 9. Workspace goes stale
|
|
2120
|
+
|
|
2121
|
+
Examples:
|
|
2122
|
+
|
|
2123
|
+
- repo moved on disk
|
|
2124
|
+
- repo renamed
|
|
2125
|
+
- remote URL changed
|
|
2126
|
+
|
|
2127
|
+
Expected behavior:
|
|
2128
|
+
|
|
2129
|
+
- `openspec workspace doctor` or equivalent relinks roots
|
|
2130
|
+
- initiative metadata remains stable because identifiers are durable, paths are not
|
|
2131
|
+
|
|
2132
|
+
### 10. One repo is archived or intentionally deferred
|
|
2133
|
+
|
|
2134
|
+
Expected behavior:
|
|
2135
|
+
|
|
2136
|
+
- initiative can remain partially complete
|
|
2137
|
+
- not every linked root must land simultaneously
|
|
2138
|
+
|
|
2139
|
+
### 11. Users do not want admin-managed setup in giant monorepos
|
|
2140
|
+
|
|
2141
|
+
Expected behavior:
|
|
2142
|
+
|
|
2143
|
+
- scope discovery should be local and incremental
|
|
2144
|
+
- setup should not require one central team to define everything first
|
|
2145
|
+
|
|
2146
|
+
### 12. Users want ad hoc multi-repo work only once
|
|
2147
|
+
|
|
2148
|
+
Expected behavior:
|
|
2149
|
+
|
|
2150
|
+
- allow a one-off coordination workspace
|
|
2151
|
+
- do not force long-lived workspace management
|
|
2152
|
+
|
|
2153
|
+
### 13. Teams want to share a coordination workspace
|
|
2154
|
+
|
|
2155
|
+
Expected behavior:
|
|
2156
|
+
|
|
2157
|
+
- support a committed shared coordination repo or workspace
|
|
2158
|
+
- keep machine-specific resolution data local
|
|
2159
|
+
- let each teammate resolve project IDs independently
|
|
2160
|
+
|
|
2161
|
+
### 14. Cross-team initiatives need different ownership roles
|
|
2162
|
+
|
|
2163
|
+
Expected behavior:
|
|
2164
|
+
|
|
2165
|
+
- distinguish initiative sponsor from canonical shared contract owner
|
|
2166
|
+
- make both visible in workspace metadata and agent instructions
|
|
2167
|
+
|
|
2168
|
+
---
|
|
2169
|
+
|
|
2170
|
+
## Product Decisions This UX Implies
|
|
2171
|
+
|
|
2172
|
+
If OpenSpec adopts these journeys, several design conclusions follow.
|
|
2173
|
+
|
|
2174
|
+
### 1. Multi-repo planning needs a first-class coordination workspace
|
|
2175
|
+
|
|
2176
|
+
Without this, OpenSpec has no honest answer to where the user should stand or where the cross-repo initiative should live.
|
|
2177
|
+
|
|
2178
|
+
### 2. Repo-local changes and canonical specs should stay in owners
|
|
2179
|
+
|
|
2180
|
+
Without this, OpenSpec creates duplicate or misleading sources of truth.
|
|
2181
|
+
|
|
2182
|
+
### 3. Large monorepos cannot be treated as always-simple single roots
|
|
2183
|
+
|
|
2184
|
+
OpenSpec must support both:
|
|
2185
|
+
|
|
2186
|
+
- one-root monorepo changes
|
|
2187
|
+
- coordination-style monorepo initiatives
|
|
2188
|
+
|
|
2189
|
+
### 4. Discovery and resolution are different systems
|
|
2190
|
+
|
|
2191
|
+
OpenSpec must separately handle:
|
|
2192
|
+
|
|
2193
|
+
- identifying scopes
|
|
2194
|
+
- resolving local paths for durable project identifiers
|
|
2195
|
+
|
|
2196
|
+
### 5. Agent startup context needs explicit generation
|
|
2197
|
+
|
|
2198
|
+
Cross-root planning only works reliably if OpenSpec writes deterministic workspace context for the agent.
|
|
2199
|
+
|
|
2200
|
+
### 6. References should stay informational in v1
|
|
2201
|
+
|
|
2202
|
+
If OpenSpec validates cross-root references by default, it has effectively shipped a dependency graph system.
|
|
2203
|
+
|
|
2204
|
+
That should be a later, optional capability.
|
|
2205
|
+
|
|
2206
|
+
### 7. Shared contract creation needs a guided ownership flow
|
|
2207
|
+
|
|
2208
|
+
Without this, teams will either:
|
|
2209
|
+
|
|
2210
|
+
- duplicate shared behavior across repos
|
|
2211
|
+
- assign ownership accidentally
|
|
2212
|
+
- or avoid creating cross-boundary specs altogether
|
|
2213
|
+
|
|
2214
|
+
OpenSpec should help users choose among:
|
|
2215
|
+
|
|
2216
|
+
- existing shared owner
|
|
2217
|
+
- existing domain owner
|
|
2218
|
+
- new shared contract scope
|
|
2219
|
+
- initiative-only draft mode
|
|
2220
|
+
|
|
2221
|
+
### 8. Shared coordination needs a two-layer storage model
|
|
2222
|
+
|
|
2223
|
+
To support teams and orgs cleanly, OpenSpec should distinguish:
|
|
2224
|
+
|
|
2225
|
+
- committed shared initiative metadata
|
|
2226
|
+
- local machine-specific path resolution
|
|
2227
|
+
|
|
2228
|
+
Without that split, the UX will either:
|
|
2229
|
+
|
|
2230
|
+
- fail to scale beyond one user, or
|
|
2231
|
+
- leak machine-specific state into shared artifacts
|
|
2232
|
+
|
|
2233
|
+
---
|
|
2234
|
+
|
|
2235
|
+
## Open Questions
|
|
2236
|
+
|
|
2237
|
+
These journeys intentionally leave some implementation choices open.
|
|
2238
|
+
|
|
2239
|
+
1. Should a coordination workspace always be user-visible on disk, or may it optionally live in global OpenSpec data directories?
|
|
2240
|
+
2. Should monorepo coordination-style initiatives reuse the same workspace concept as multi-repo, or use a lighter in-repo variant?
|
|
2241
|
+
3. Should OpenSpec support nested `openspec/` roots, or keep one root and model scopes separately?
|
|
2242
|
+
4. What is the minimum metadata required to represent selected scopes and linked changes?
|
|
2243
|
+
5. What is the exact format split between committed shared workspace state and local overlay state?
|
|
2244
|
+
6. Which agents should receive generated workspace instructions, and in what format?
|
|
2245
|
+
7. What exact CLI surface should create and manage coordination workspaces?
|
|
2246
|
+
|
|
2247
|
+
---
|
|
2248
|
+
|
|
2249
|
+
## Recommended Next Step
|
|
2250
|
+
|
|
2251
|
+
Convert these journeys into a concrete design proposal covering:
|
|
2252
|
+
|
|
2253
|
+
1. coordination workspace file format
|
|
2254
|
+
2. scope metadata shape
|
|
2255
|
+
3. repo identifier and local resolution model
|
|
2256
|
+
4. linked change model
|
|
2257
|
+
5. shared manifest vs local overlay model
|
|
2258
|
+
6. CLI commands for create, attach, doctor, sync, and archive flows
|
|
2259
|
+
7. agent instruction generation for supported tools
|