openplanr 3.1.1 → 3.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/CHANGELOG.md +69 -0
- package/dist/cli/commands/groups/delivery.d.ts.map +1 -1
- package/dist/cli/commands/groups/delivery.js +2 -0
- package/dist/cli/commands/groups/delivery.js.map +1 -1
- package/dist/cli/commands/planning-artifacts.d.ts.map +1 -1
- package/dist/cli/commands/planning-artifacts.js +22 -12
- package/dist/cli/commands/planning-artifacts.js.map +1 -1
- package/dist/cli/commands/ship.d.ts +3 -0
- package/dist/cli/commands/ship.d.ts.map +1 -0
- package/dist/cli/commands/ship.js +65 -0
- package/dist/cli/commands/ship.js.map +1 -0
- package/dist/cli/commands/spec.d.ts +2 -1
- package/dist/cli/commands/spec.d.ts.map +1 -1
- package/dist/cli/commands/spec.js +45 -5
- package/dist/cli/commands/spec.js.map +1 -1
- package/dist/dashboard/.vite/manifest.json +1 -1
- package/dist/dashboard/assets/index-B_96uzCl.js +572 -0
- package/dist/dashboard/assets/index-B_96uzCl.js.map +1 -0
- package/dist/dashboard/dashboard-manifest.json +10 -10
- package/dist/dashboard/index.html +1 -1
- package/dist/models/schema.d.ts +39 -23
- package/dist/models/schema.d.ts.map +1 -1
- package/dist/models/schema.js +19 -12
- package/dist/models/schema.js.map +1 -1
- package/dist/models/types.d.ts +6 -0
- package/dist/models/types.d.ts.map +1 -1
- package/dist/services/claude-plugin-service.d.ts +5 -0
- package/dist/services/claude-plugin-service.d.ts.map +1 -1
- package/dist/services/claude-plugin-service.js +18 -2
- package/dist/services/claude-plugin-service.js.map +1 -1
- package/dist/services/codex-plugin-service.d.ts.map +1 -1
- package/dist/services/codex-plugin-service.js +11 -3
- package/dist/services/codex-plugin-service.js.map +1 -1
- package/dist/services/id-service.d.ts +1 -5
- package/dist/services/id-service.d.ts.map +1 -1
- package/dist/services/id-service.js +1 -34
- package/dist/services/id-service.js.map +1 -1
- package/dist/services/runtime-manager/codex-discovery.d.ts +1 -3
- package/dist/services/runtime-manager/codex-discovery.d.ts.map +1 -1
- package/dist/services/runtime-manager/codex-discovery.js +3 -16
- package/dist/services/runtime-manager/codex-discovery.js.map +1 -1
- package/dist/services/runtime-manager/doctor.d.ts +25 -0
- package/dist/services/runtime-manager/doctor.d.ts.map +1 -1
- package/dist/services/runtime-manager/doctor.js +480 -0
- package/dist/services/runtime-manager/doctor.js.map +1 -1
- package/dist/services/runtime-manager/errors.d.ts +12 -0
- package/dist/services/runtime-manager/errors.d.ts.map +1 -0
- package/dist/services/runtime-manager/errors.js +14 -0
- package/dist/services/runtime-manager/errors.js.map +1 -0
- package/dist/services/runtime-manager/global-state.d.ts +7 -0
- package/dist/services/runtime-manager/global-state.d.ts.map +1 -1
- package/dist/services/runtime-manager/global-state.js +116 -0
- package/dist/services/runtime-manager/global-state.js.map +1 -1
- package/dist/services/runtime-manager/host-version-probe.d.ts +8 -0
- package/dist/services/runtime-manager/host-version-probe.d.ts.map +1 -0
- package/dist/services/runtime-manager/host-version-probe.js +14 -0
- package/dist/services/runtime-manager/host-version-probe.js.map +1 -0
- package/dist/services/runtime-manager/install-plan.d.ts +25 -0
- package/dist/services/runtime-manager/install-plan.d.ts.map +1 -1
- package/dist/services/runtime-manager/install-plan.js +305 -0
- package/dist/services/runtime-manager/install-plan.js.map +1 -1
- package/dist/services/runtime-manager/inventory.d.ts +6 -0
- package/dist/services/runtime-manager/inventory.d.ts.map +1 -1
- package/dist/services/runtime-manager/inventory.js +16 -1
- package/dist/services/runtime-manager/inventory.js.map +1 -1
- package/dist/services/runtime-manager/legacy-adapters.d.ts +9 -0
- package/dist/services/runtime-manager/legacy-adapters.d.ts.map +1 -0
- package/dist/services/runtime-manager/legacy-adapters.js +187 -0
- package/dist/services/runtime-manager/legacy-adapters.js.map +1 -0
- package/dist/services/runtime-manager/paths.d.ts +18 -0
- package/dist/services/runtime-manager/paths.d.ts.map +1 -0
- package/dist/services/runtime-manager/paths.js +83 -0
- package/dist/services/runtime-manager/paths.js.map +1 -0
- package/dist/services/runtime-manager/runtime-package.d.ts +21 -0
- package/dist/services/runtime-manager/runtime-package.d.ts.map +1 -1
- package/dist/services/runtime-manager/runtime-package.js +77 -0
- package/dist/services/runtime-manager/runtime-package.js.map +1 -1
- package/dist/services/runtime-manager/storage.d.ts +47 -0
- package/dist/services/runtime-manager/storage.d.ts.map +1 -0
- package/dist/services/runtime-manager/storage.js +604 -0
- package/dist/services/runtime-manager/storage.js.map +1 -0
- package/dist/services/runtime-manager-service.d.ts +7 -17
- package/dist/services/runtime-manager-service.d.ts.map +1 -1
- package/dist/services/runtime-manager-service.js +32 -1695
- package/dist/services/runtime-manager-service.js.map +1 -1
- package/dist/services/ship-checks/changes.d.ts +24 -0
- package/dist/services/ship-checks/changes.d.ts.map +1 -0
- package/dist/services/ship-checks/changes.js +135 -0
- package/dist/services/ship-checks/changes.js.map +1 -0
- package/dist/services/ship-checks/contract.d.ts +93 -0
- package/dist/services/ship-checks/contract.d.ts.map +1 -0
- package/dist/services/ship-checks/contract.js +7 -0
- package/dist/services/ship-checks/contract.js.map +1 -0
- package/dist/services/ship-checks/coverage.d.ts +4 -0
- package/dist/services/ship-checks/coverage.d.ts.map +1 -0
- package/dist/services/ship-checks/coverage.js +113 -0
- package/dist/services/ship-checks/coverage.js.map +1 -0
- package/dist/services/ship-checks/discover.d.ts +10 -0
- package/dist/services/ship-checks/discover.d.ts.map +1 -0
- package/dist/services/ship-checks/discover.js +253 -0
- package/dist/services/ship-checks/discover.js.map +1 -0
- package/dist/services/ship-checks/glob.d.ts +5 -0
- package/dist/services/ship-checks/glob.d.ts.map +1 -0
- package/dist/services/ship-checks/glob.js +39 -0
- package/dist/services/ship-checks/glob.js.map +1 -0
- package/dist/services/ship-checks/hooks.d.ts +7 -0
- package/dist/services/ship-checks/hooks.d.ts.map +1 -0
- package/dist/services/ship-checks/hooks.js +65 -0
- package/dist/services/ship-checks/hooks.js.map +1 -0
- package/dist/services/ship-checks/packages.d.ts +29 -0
- package/dist/services/ship-checks/packages.d.ts.map +1 -0
- package/dist/services/ship-checks/packages.js +197 -0
- package/dist/services/ship-checks/packages.js.map +1 -0
- package/dist/services/ship-checks/related-tests.d.ts +13 -0
- package/dist/services/ship-checks/related-tests.d.ts.map +1 -0
- package/dist/services/ship-checks/related-tests.js +73 -0
- package/dist/services/ship-checks/related-tests.js.map +1 -0
- package/dist/services/ship-checks/scope.d.ts +8 -0
- package/dist/services/ship-checks/scope.d.ts.map +1 -0
- package/dist/services/ship-checks/scope.js +66 -0
- package/dist/services/ship-checks/scope.js.map +1 -0
- package/dist/services/ship-checks/task-requirements.d.ts +14 -0
- package/dist/services/ship-checks/task-requirements.d.ts.map +1 -0
- package/dist/services/ship-checks/task-requirements.js +145 -0
- package/dist/services/ship-checks/task-requirements.js.map +1 -0
- package/dist/services/ship-checks/workflows.d.ts +21 -0
- package/dist/services/ship-checks/workflows.d.ts.map +1 -0
- package/dist/services/ship-checks/workflows.js +208 -0
- package/dist/services/ship-checks/workflows.js.map +1 -0
- package/dist/services/spec-service.d.ts +18 -0
- package/dist/services/spec-service.d.ts.map +1 -1
- package/dist/services/spec-service.js +174 -9
- package/dist/services/spec-service.js.map +1 -1
- package/dist/services/template-service.d.ts +2 -0
- package/dist/services/template-service.d.ts.map +1 -1
- package/dist/services/template-service.js +4 -0
- package/dist/services/template-service.js.map +1 -1
- package/dist/templates/spec/spec-shaped.md.hbs +1 -1
- package/dist/templates/spec/spec.md.hbs +2 -2
- package/dist/utils/slugify.d.ts +1 -8
- package/dist/utils/slugify.d.ts.map +1 -1
- package/dist/utils/slugify.js +1 -25
- package/dist/utils/slugify.js.map +1 -1
- package/docs/CLI.md +96 -2
- package/lib/backlog-item.d.mts +49 -0
- package/lib/backlog-item.mjs +339 -0
- package/lib/host-packages/adapter-registry.json +5 -5
- package/lib/host-packages/capability-map.json +3 -3
- package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
- package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
- package/lib/host-packages/claude/openplanr/.openplanr-content.json +134 -94
- package/lib/host-packages/claude/openplanr/CONNECTORS.md +4 -6
- package/lib/host-packages/claude/openplanr/README.md +1 -1
- package/lib/host-packages/claude/openplanr/agents/planr-qa.md +5 -3
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-document.mjs +471 -80
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-handoff.mjs +2 -2
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +45 -4
- package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → claude/openplanr/runtime/design/scripts/design-runtime-support-25485dbf1cb2.mjs} +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +8 -5
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +138 -12
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/{design-shared-protocol-contracts-31a760fc.mjs → design-shared-protocol-contracts-b5f28f94.mjs} +413 -45
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design.mjs +482 -79
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +32 -32
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +322 -45
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +165 -276
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +119 -244
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +285 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2773 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2207 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1597 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +6 -2
- package/lib/host-packages/{openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0}/design-document.schema.json +207 -7
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0/design-review-bundle.schema.json +822 -0
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +324 -45
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +73 -12
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +6 -2
- package/lib/host-packages/claude/openplanr/skills/connect/references/connectors.md +4 -6
- package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +12 -0
- package/lib/host-packages/claude/openplanr/skills/design/references/craft.md +14 -3
- package/lib/host-packages/claude/openplanr/skills/design/references/design-system.md +48 -1
- package/lib/host-packages/claude/openplanr/skills/design/references/discovery.md +18 -4
- package/lib/host-packages/claude/openplanr/skills/design/references/generation.md +133 -2
- package/lib/host-packages/claude/openplanr/skills/design/references/hosted-canvas.md +62 -0
- package/lib/host-packages/claude/openplanr/skills/design/references/review.md +46 -1
- package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +17 -1
- package/lib/host-packages/claude/openplanr/skills/design/schemas/design-document.schema.json +207 -7
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/craft.md +14 -3
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/design-system.md +48 -1
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/discovery.md +18 -4
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/generation.md +133 -2
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/review.md +46 -1
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +17 -1
- package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-document.schema.json +207 -7
- package/lib/host-packages/claude/openplanr/skills/design-review/references/craft.md +14 -3
- package/lib/host-packages/claude/openplanr/skills/design-review/references/design-system.md +48 -1
- package/lib/host-packages/claude/openplanr/skills/design-review/references/discovery.md +18 -4
- package/lib/host-packages/claude/openplanr/skills/design-review/references/generation.md +133 -2
- package/lib/host-packages/claude/openplanr/skills/design-review/references/review.md +46 -1
- package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +17 -1
- package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-document.schema.json +207 -7
- package/lib/host-packages/claude/openplanr/skills/investigate/SKILL.md +11 -2
- package/lib/host-packages/claude/openplanr/skills/investigate/references/findings.md +92 -0
- package/lib/host-packages/claude/openplanr/skills/investigate/scripts/backlog-item.mjs +339 -0
- package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +24 -11
- package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-document.schema.json +207 -7
- package/lib/host-packages/claude/openplanr/skills/share/references/connectors.md +4 -6
- package/lib/host-packages/claude/openplanr/skills/ship/SKILL.md +46 -14
- package/lib/host-packages/claude/openplanr/skills/ship/references/findings.md +92 -0
- package/lib/host-packages/claude/openplanr/skills/ship/references/result-contract.md +3 -1
- package/lib/host-packages/claude/openplanr/skills/ship/scripts/backlog-item.mjs +339 -0
- package/lib/host-packages/claude/openplanr/skills/spec/SKILL.md +6 -0
- package/lib/host-packages/claude/openplanr/skills/spec/references/specification-contract.md +3 -1
- package/lib/host-packages/claude/openplanr/skills/sprint/references/connectors.md +4 -6
- package/lib/host-packages/claude/openplanr/skills/status/references/connectors.md +4 -6
- package/lib/host-packages/claude/openplanr/skills/sync/references/connectors.md +4 -6
- package/lib/host-packages/cursor/openplanr/.openplanr-content.json +132 -92
- package/lib/host-packages/cursor/openplanr/CONNECTORS.md +4 -6
- package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-connect/references/connectors.md +4 -6
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/craft.md +14 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/design-system.md +48 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/discovery.md +18 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/generation.md +133 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/hosted-canvas.md +62 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/review.md +46 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +17 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-document.schema.json +207 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/craft.md +14 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/design-system.md +48 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/discovery.md +18 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/generation.md +133 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/review.md +46 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +17 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-document.schema.json +207 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/craft.md +14 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/design-system.md +48 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/discovery.md +18 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/generation.md +133 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/review.md +46 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +17 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-document.schema.json +207 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +12 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-investigate/references/findings.md +92 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-investigate/scripts/backlog-item.mjs +339 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-investigate.mdc +11 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-document.schema.json +207 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +24 -11
- package/lib/host-packages/cursor/openplanr/rules/planr-share/references/connectors.md +4 -6
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/findings.md +92 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/result-contract.md +3 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/scripts/backlog-item.mjs +339 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ship.mdc +46 -14
- package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/specification-contract.md +3 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-spec.mdc +6 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/connectors.md +4 -6
- package/lib/host-packages/cursor/openplanr/rules/planr-status/references/connectors.md +4 -6
- package/lib/host-packages/cursor/openplanr/rules/planr-sync/references/connectors.md +4 -6
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-document.mjs +471 -80
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-handoff.mjs +2 -2
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +45 -4
- package/lib/host-packages/{openai/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → cursor/openplanr/runtime/design/scripts/design-runtime-support-25485dbf1cb2.mjs} +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +8 -5
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +138 -12
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
- package/lib/host-packages/{openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-31a760fc.mjs → cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs} +413 -45
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design.mjs +482 -79
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +32 -32
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +322 -45
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +165 -276
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +119 -244
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +285 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2773 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2207 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1597 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +6 -2
- package/lib/host-packages/{claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0}/design-document.schema.json +207 -7
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0/design-review-bundle.schema.json +822 -0
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +324 -45
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +73 -12
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +6 -2
- package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
- package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
- package/lib/host-packages/openai/openplanr/.openplanr-content.json +139 -99
- package/lib/host-packages/openai/openplanr/CONNECTORS.md +4 -6
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-document.mjs +471 -80
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-handoff.mjs +2 -2
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +45 -4
- package/lib/host-packages/{claude/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → openai/openplanr/runtime/design/scripts/design-runtime-support-25485dbf1cb2.mjs} +1 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +8 -5
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +138 -12
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
- package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-31a760fc.mjs → openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs} +413 -45
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design.mjs +482 -79
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +32 -32
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +322 -45
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +165 -276
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +119 -244
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +285 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2773 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2207 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1597 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +6 -2
- package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0}/design-document.schema.json +207 -7
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0/design-review-bundle.schema.json +822 -0
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +324 -45
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +73 -12
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +6 -2
- package/lib/host-packages/openai/openplanr/skills/connect/references/connectors.md +4 -6
- package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +12 -0
- package/lib/host-packages/openai/openplanr/skills/design/openplanr.skill.json +11 -0
- package/lib/host-packages/openai/openplanr/skills/design/references/craft.md +14 -3
- package/lib/host-packages/openai/openplanr/skills/design/references/design-system.md +48 -1
- package/lib/host-packages/openai/openplanr/skills/design/references/discovery.md +18 -4
- package/lib/host-packages/openai/openplanr/skills/design/references/generation.md +133 -2
- package/lib/host-packages/openai/openplanr/skills/design/references/hosted-canvas.md +62 -0
- package/lib/host-packages/openai/openplanr/skills/design/references/review.md +46 -1
- package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +17 -1
- package/lib/host-packages/openai/openplanr/skills/design/schemas/design-document.schema.json +207 -7
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/craft.md +14 -3
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/design-system.md +48 -1
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/discovery.md +18 -4
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/generation.md +133 -2
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/review.md +46 -1
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +17 -1
- package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-document.schema.json +207 -7
- package/lib/host-packages/openai/openplanr/skills/design-review/references/craft.md +14 -3
- package/lib/host-packages/openai/openplanr/skills/design-review/references/design-system.md +48 -1
- package/lib/host-packages/openai/openplanr/skills/design-review/references/discovery.md +18 -4
- package/lib/host-packages/openai/openplanr/skills/design-review/references/generation.md +133 -2
- package/lib/host-packages/openai/openplanr/skills/design-review/references/review.md +46 -1
- package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +17 -1
- package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-document.schema.json +207 -7
- package/lib/host-packages/openai/openplanr/skills/investigate/SKILL.md +11 -2
- package/lib/host-packages/openai/openplanr/skills/investigate/agents/openai.yaml +1 -1
- package/lib/host-packages/openai/openplanr/skills/investigate/openplanr.skill.json +23 -1
- package/lib/host-packages/openai/openplanr/skills/investigate/references/findings.md +92 -0
- package/lib/host-packages/openai/openplanr/skills/investigate/scripts/backlog-item.mjs +339 -0
- package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +24 -11
- package/lib/host-packages/openai/openplanr/skills/plan/openplanr.skill.json +1 -1
- package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-document.schema.json +207 -7
- package/lib/host-packages/openai/openplanr/skills/share/references/connectors.md +4 -6
- package/lib/host-packages/openai/openplanr/skills/ship/SKILL.md +46 -14
- package/lib/host-packages/openai/openplanr/skills/ship/agents/openai.yaml +1 -1
- package/lib/host-packages/openai/openplanr/skills/ship/openplanr.skill.json +23 -1
- package/lib/host-packages/openai/openplanr/skills/ship/references/findings.md +92 -0
- package/lib/host-packages/openai/openplanr/skills/ship/references/result-contract.md +3 -1
- package/lib/host-packages/openai/openplanr/skills/ship/scripts/backlog-item.mjs +339 -0
- package/lib/host-packages/openai/openplanr/skills/spec/SKILL.md +6 -0
- package/lib/host-packages/openai/openplanr/skills/spec/openplanr.skill.json +1 -1
- package/lib/host-packages/openai/openplanr/skills/spec/references/specification-contract.md +3 -1
- package/lib/host-packages/openai/openplanr/skills/sprint/references/connectors.md +4 -6
- package/lib/host-packages/openai/openplanr/skills/status/references/connectors.md +4 -6
- package/lib/host-packages/openai/openplanr/skills/sync/references/connectors.md +4 -6
- package/lib/json-schema.mjs +4 -0
- package/package.json +13 -13
- package/dist/dashboard/assets/index-G7ygVDGg.js +0 -572
- package/dist/dashboard/assets/index-G7ygVDGg.js.map +0 -1
- package/dist/templates/backlog/backlog-item.md.hbs +0 -40
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// @ts-check
|
|
3
|
+
// The one backlog item writer: the CLI imports it, and skills run it when no CLI is installed.
|
|
4
|
+
|
|
5
|
+
import { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
|
|
6
|
+
import { join, relative, resolve, sep } from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
|
|
9
|
+
/** Holds one empty file per issued ID, so the ID of a removed artifact is never issued again. */
|
|
10
|
+
const ISSUED_IDS_DIR = '.issued-ids';
|
|
11
|
+
const CLOSED_STATUSES = new Set(['closed', 'done']);
|
|
12
|
+
|
|
13
|
+
/** @type {typeof import('./backlog-item.d.mts').CLI_INSTALL_COMMAND} */
|
|
14
|
+
export const CLI_INSTALL_COMMAND = 'npm install -g openplanr';
|
|
15
|
+
/** @type {typeof import('./backlog-item.d.mts').CLI_HINT} */
|
|
16
|
+
export const CLI_HINT = `Install the OpenPlanr CLI to manage these items: ${CLI_INSTALL_COMMAND}`;
|
|
17
|
+
|
|
18
|
+
/** @type {typeof import('./backlog-item.d.mts').reserveNextId} */
|
|
19
|
+
export async function reserveNextId(dir, prefix) {
|
|
20
|
+
const issuedDir = join(dir, ISSUED_IDS_DIR);
|
|
21
|
+
await mkdir(issuedDir, { recursive: true });
|
|
22
|
+
const pattern = new RegExp(`^${prefix.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&')}-(\\d{3,})`, 'u');
|
|
23
|
+
let next = 1;
|
|
24
|
+
for (const directory of [dir, issuedDir]) {
|
|
25
|
+
for (const entry of await readdir(directory, { withFileTypes: true })) {
|
|
26
|
+
const match = entry.isDirectory() ? null : pattern.exec(entry.name);
|
|
27
|
+
if (match) next = Math.max(next, Number.parseInt(match[1], 10) + 1);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
for (; ; next++) {
|
|
31
|
+
const id = `${prefix}-${String(next).padStart(3, '0')}`;
|
|
32
|
+
try {
|
|
33
|
+
await writeFile(join(issuedDir, id), '', { flag: 'wx' });
|
|
34
|
+
return id;
|
|
35
|
+
} catch (error) {
|
|
36
|
+
if (/** @type {NodeJS.ErrnoException} */ (error).code !== 'EEXIST') throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** @type {typeof import('./backlog-item.d.mts').slugify} */
|
|
42
|
+
export function slugify(text, maxLength = 80) {
|
|
43
|
+
let slug = text
|
|
44
|
+
.toLowerCase()
|
|
45
|
+
.trim()
|
|
46
|
+
.replace(/[^\w\s-]/g, '')
|
|
47
|
+
.replace(/[\s_]+/g, '-')
|
|
48
|
+
.replace(/-+/g, '-')
|
|
49
|
+
.replace(/^-+|-+$/g, '');
|
|
50
|
+
if (slug.length > maxLength) {
|
|
51
|
+
slug = slug.slice(0, maxLength);
|
|
52
|
+
// Trim at the last whole-word boundary to avoid cut-off words.
|
|
53
|
+
const lastDash = slug.lastIndexOf('-');
|
|
54
|
+
if (lastDash > 0) slug = slug.slice(0, lastDash);
|
|
55
|
+
}
|
|
56
|
+
return slug;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** @param {unknown} value */
|
|
60
|
+
function strings(value) {
|
|
61
|
+
if (Array.isArray(value)) return value.map(String).filter(Boolean);
|
|
62
|
+
if (typeof value === 'string')
|
|
63
|
+
return value
|
|
64
|
+
.split(',')
|
|
65
|
+
.map((item) => item.trim())
|
|
66
|
+
.filter(Boolean);
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** @param {unknown} value */
|
|
71
|
+
function optionalText(value) {
|
|
72
|
+
return value === undefined || value === null || value === '' ? undefined : value;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const PRIORITIES = Object.freeze(['critical', 'high', 'medium', 'low']);
|
|
76
|
+
|
|
77
|
+
/** Bad backlog input; the code lets the CLI report it as an input error, not a crash. */
|
|
78
|
+
class BacklogInputError extends Error {
|
|
79
|
+
/** @param {string} message */
|
|
80
|
+
constructor(message) {
|
|
81
|
+
super(message);
|
|
82
|
+
this.name = 'BacklogInputError';
|
|
83
|
+
this.code = 'E_BACKLOG_INVALID';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** @type {typeof import('./backlog-item.d.mts').backlogFields} */
|
|
88
|
+
export function backlogFields(input) {
|
|
89
|
+
const title = String(input.title ?? input.name ?? '').trim();
|
|
90
|
+
if (!title) throw new BacklogInputError('A backlog item needs a non-empty title.');
|
|
91
|
+
const priority = String(input.priority ?? 'medium');
|
|
92
|
+
if (!PRIORITIES.includes(priority))
|
|
93
|
+
throw new BacklogInputError(
|
|
94
|
+
`Backlog priority ${JSON.stringify(priority)} is not valid; use one of ${PRIORITIES.join(', ')}.`,
|
|
95
|
+
);
|
|
96
|
+
const criteria = optionalText(input.acceptanceCriteria);
|
|
97
|
+
const notes = optionalText(input.notes);
|
|
98
|
+
const epicId = optionalText(input.epicId);
|
|
99
|
+
return {
|
|
100
|
+
title,
|
|
101
|
+
priority,
|
|
102
|
+
tags: strings(input.tags),
|
|
103
|
+
description: String(input.description ?? title),
|
|
104
|
+
...(criteria === undefined
|
|
105
|
+
? {}
|
|
106
|
+
: { acceptanceCriteria: Array.isArray(criteria) ? criteria.map(String) : String(criteria) }),
|
|
107
|
+
...(notes === undefined ? {} : { notes: String(notes) }),
|
|
108
|
+
...(epicId === undefined ? {} : { epicId: String(epicId) }),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** @type {typeof import('./backlog-item.d.mts').renderBacklogItem} */
|
|
113
|
+
export function renderBacklogItem(id, fields, date) {
|
|
114
|
+
const quote = JSON.stringify;
|
|
115
|
+
const lines = [
|
|
116
|
+
'---',
|
|
117
|
+
`id: ${quote(id)}`,
|
|
118
|
+
`title: ${quote(fields.title)}`,
|
|
119
|
+
`priority: ${quote(fields.priority)}`,
|
|
120
|
+
`tags: [${fields.tags.map((tag) => quote(tag)).join(', ')}]`,
|
|
121
|
+
'status: "open"',
|
|
122
|
+
`created: ${quote(date)}`,
|
|
123
|
+
`updated: ${quote(date)}`,
|
|
124
|
+
...(fields.epicId ? [`epicId: ${quote(fields.epicId)}`] : []),
|
|
125
|
+
'---',
|
|
126
|
+
'',
|
|
127
|
+
`# ${id}: ${fields.title}`,
|
|
128
|
+
'',
|
|
129
|
+
];
|
|
130
|
+
/** @param {string} heading @param {string} body @param {boolean} [spaced] */
|
|
131
|
+
const section = (heading, body, spaced = false) =>
|
|
132
|
+
lines.push(`## ${heading}`, ...(spaced ? [''] : []), body, '');
|
|
133
|
+
if (fields.tags.length > 0)
|
|
134
|
+
section('Tags', fields.tags.map((tag) => `- ${tag}`).join('\n'), true);
|
|
135
|
+
// A description with its own sections stands alone instead of nesting under another heading.
|
|
136
|
+
if (/^## /u.test(fields.description)) lines.push(fields.description, '');
|
|
137
|
+
else if (fields.description !== fields.title) section('Description', fields.description);
|
|
138
|
+
if (fields.acceptanceCriteria !== undefined && fields.acceptanceCriteria.length > 0)
|
|
139
|
+
section(
|
|
140
|
+
'Acceptance Criteria',
|
|
141
|
+
Array.isArray(fields.acceptanceCriteria)
|
|
142
|
+
? fields.acceptanceCriteria.map((criterion) => `- ${criterion}`).join('\n')
|
|
143
|
+
: fields.acceptanceCriteria,
|
|
144
|
+
);
|
|
145
|
+
if (fields.notes) section('Notes', fields.notes);
|
|
146
|
+
lines.push('---', `_Close when done: \`openplanr backlog update ${id} --status closed\`_`, '');
|
|
147
|
+
return lines.join('\n');
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** @type {typeof import('./backlog-item.d.mts').writeBacklogItem} */
|
|
151
|
+
export async function writeBacklogItem(backlogDir, prefix, fields, date) {
|
|
152
|
+
await mkdir(backlogDir, { recursive: true });
|
|
153
|
+
const id = await reserveNextId(backlogDir, prefix);
|
|
154
|
+
const filePath = join(backlogDir, `${id}-${slugify(fields.title)}.md`);
|
|
155
|
+
await writeFile(filePath, renderBacklogItem(id, fields, date));
|
|
156
|
+
return { id, filePath };
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** @param {string} projectDir */
|
|
160
|
+
async function projectConfig(projectDir) {
|
|
161
|
+
const configPath = join(projectDir, '.planr', 'config.json');
|
|
162
|
+
let raw;
|
|
163
|
+
try {
|
|
164
|
+
raw = await readFile(configPath, 'utf8');
|
|
165
|
+
} catch (error) {
|
|
166
|
+
if (/** @type {NodeJS.ErrnoException} */ (error).code === 'ENOENT')
|
|
167
|
+
throw new Error(
|
|
168
|
+
`No OpenPlanr project at ${projectDir}: ${configPath} is missing. Run \`openplanr init\` or pass the project root.`,
|
|
169
|
+
);
|
|
170
|
+
throw error;
|
|
171
|
+
}
|
|
172
|
+
let config;
|
|
173
|
+
try {
|
|
174
|
+
config = JSON.parse(raw);
|
|
175
|
+
} catch (error) {
|
|
176
|
+
throw new Error(`${configPath} is not valid JSON: ${/** @type {Error} */ (error).message}`);
|
|
177
|
+
}
|
|
178
|
+
return { configPath, raw, config };
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/** @param {string} projectDir */
|
|
182
|
+
async function projectBacklog(projectDir) {
|
|
183
|
+
const { config } = await projectConfig(projectDir);
|
|
184
|
+
const agile = String(config.outputPaths?.agile ?? '.planr').replaceAll('\\', '/');
|
|
185
|
+
return {
|
|
186
|
+
backlogDir: resolve(projectDir, agile, 'backlog'),
|
|
187
|
+
prefix: String(config.idPrefix?.backlog ?? 'BL'),
|
|
188
|
+
templateOverrides:
|
|
189
|
+
typeof config.templateOverrides === 'string' ? config.templateOverrides : undefined,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/** @param {string} projectDir @param {string} filePath */
|
|
194
|
+
const relativePath = (projectDir, filePath) => relative(projectDir, filePath).split(sep).join('/');
|
|
195
|
+
|
|
196
|
+
/** @type {typeof import('./backlog-item.d.mts').createBacklogItem} */
|
|
197
|
+
export async function createBacklogItem(
|
|
198
|
+
projectDir,
|
|
199
|
+
input,
|
|
200
|
+
date = new Date().toISOString().split('T')[0],
|
|
201
|
+
) {
|
|
202
|
+
const { backlogDir, prefix } = await projectBacklog(projectDir);
|
|
203
|
+
const fields = backlogFields(input);
|
|
204
|
+
const { id, filePath } = await writeBacklogItem(backlogDir, prefix, fields, date);
|
|
205
|
+
return { id, title: fields.title, artifactPath: relativePath(projectDir, filePath) };
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Top-level scalar frontmatter fields; double-quoted values are read as JSON strings.
|
|
210
|
+
* @param {string} text
|
|
211
|
+
* @param {string} filePath
|
|
212
|
+
*/
|
|
213
|
+
function frontmatter(text, filePath) {
|
|
214
|
+
const block = /^---\n([\s\S]*?)\n---/u.exec(text.replace(/\r\n/gu, '\n'))?.[1] ?? '';
|
|
215
|
+
/** @type {Record<string, string>} */
|
|
216
|
+
const fields = {};
|
|
217
|
+
for (const line of block.split('\n')) {
|
|
218
|
+
const match = /^(\w+):\s*(.*)$/u.exec(line);
|
|
219
|
+
if (!match) continue;
|
|
220
|
+
const value = match[2].trim();
|
|
221
|
+
if (!value.startsWith('"')) {
|
|
222
|
+
fields[match[1]] = value.replace(/^'(.*)'$/u, '$1');
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
try {
|
|
226
|
+
fields[match[1]] = String(JSON.parse(value));
|
|
227
|
+
} catch (error) {
|
|
228
|
+
throw new Error(
|
|
229
|
+
`${filePath}: frontmatter field "${match[1]}" is not a valid quoted string: ${/** @type {Error} */ (error).message}`,
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return fields;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/** @type {typeof import('./backlog-item.d.mts').listOpenBacklog} */
|
|
237
|
+
export async function listOpenBacklog(projectDir) {
|
|
238
|
+
const { backlogDir } = await projectBacklog(projectDir);
|
|
239
|
+
let names;
|
|
240
|
+
try {
|
|
241
|
+
names = await readdir(backlogDir);
|
|
242
|
+
} catch (error) {
|
|
243
|
+
if (/** @type {NodeJS.ErrnoException} */ (error).code === 'ENOENT') return [];
|
|
244
|
+
throw error;
|
|
245
|
+
}
|
|
246
|
+
const items = [];
|
|
247
|
+
for (const name of names.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))) {
|
|
248
|
+
const match = /^([A-Z]+-\d{3,})-.+\.md$/u.exec(name);
|
|
249
|
+
if (!match) continue;
|
|
250
|
+
const filePath = join(backlogDir, name);
|
|
251
|
+
const fields = frontmatter(await readFile(filePath, 'utf8'), filePath);
|
|
252
|
+
const status = fields.status ?? 'open';
|
|
253
|
+
if (CLOSED_STATUSES.has(status)) continue;
|
|
254
|
+
items.push({
|
|
255
|
+
id: fields.id ?? match[1],
|
|
256
|
+
title: fields.title ?? name.slice(match[1].length + 1, -3).replace(/-/g, ' '),
|
|
257
|
+
status,
|
|
258
|
+
path: relativePath(projectDir, filePath),
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
return items;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/** @type {typeof import('./backlog-item.d.mts').takeCliHint} */
|
|
265
|
+
export async function takeCliHint(projectDir) {
|
|
266
|
+
const { configPath, raw, config } = await projectConfig(projectDir);
|
|
267
|
+
if (config.findings?.cliHintShown === true) return null;
|
|
268
|
+
const next = { ...config, findings: { ...config.findings, cliHintShown: true } };
|
|
269
|
+
const indent = /\n(\t| +)"/u.exec(raw)?.[1] ?? ' ';
|
|
270
|
+
await writeFile(configPath, `${JSON.stringify(next, null, indent)}\n`);
|
|
271
|
+
return CLI_HINT;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/** @param {string} source */
|
|
275
|
+
async function readInput(source) {
|
|
276
|
+
const text =
|
|
277
|
+
source === '-'
|
|
278
|
+
? await new Promise((done, fail) => {
|
|
279
|
+
let value = '';
|
|
280
|
+
process.stdin.setEncoding('utf8');
|
|
281
|
+
process.stdin.on('data', (chunk) => {
|
|
282
|
+
value += chunk;
|
|
283
|
+
});
|
|
284
|
+
process.stdin.on('end', () => done(value));
|
|
285
|
+
process.stdin.on('error', fail);
|
|
286
|
+
})
|
|
287
|
+
: await readFile(resolve(source), 'utf8');
|
|
288
|
+
const parsed = JSON.parse(String(text));
|
|
289
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
290
|
+
throw new Error('Backlog input must be one JSON object with at least a title.');
|
|
291
|
+
return parsed;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
const USAGE =
|
|
295
|
+
'Usage: backlog-item.mjs add --project <dir> --data <file|->\n backlog-item.mjs list --project <dir> --open\n';
|
|
296
|
+
|
|
297
|
+
/** @param {string[]} argv */
|
|
298
|
+
async function main(argv) {
|
|
299
|
+
const [command, ...rest] = argv;
|
|
300
|
+
/** @type {Record<string, string | boolean>} */
|
|
301
|
+
const options = {};
|
|
302
|
+
for (let index = 0; index < rest.length; index += 1) {
|
|
303
|
+
const flag = rest[index];
|
|
304
|
+
if (flag === '--open') options.open = true;
|
|
305
|
+
else if (flag === '--project' || flag === '--data')
|
|
306
|
+
options[flag.slice(2)] = rest[++index] ?? '';
|
|
307
|
+
else throw new Error(`Unknown argument: ${flag}\n${USAGE}`);
|
|
308
|
+
}
|
|
309
|
+
const projectDir = resolve(String(options.project ?? '.'));
|
|
310
|
+
if (command === 'add') {
|
|
311
|
+
if (typeof options.data !== 'string' || !options.data)
|
|
312
|
+
throw new Error(`add needs --data.\n${USAGE}`);
|
|
313
|
+
const { templateOverrides } = await projectBacklog(projectDir);
|
|
314
|
+
const result = await createBacklogItem(projectDir, await readInput(options.data));
|
|
315
|
+
const cliHint = await takeCliHint(projectDir);
|
|
316
|
+
process.stdout.write(
|
|
317
|
+
`${JSON.stringify({
|
|
318
|
+
ok: true,
|
|
319
|
+
action: 'backlog.created',
|
|
320
|
+
...result,
|
|
321
|
+
...(templateOverrides ? { templateOverrideIgnored: true } : {}),
|
|
322
|
+
...(cliHint ? { cliHint } : {}),
|
|
323
|
+
})}\n`,
|
|
324
|
+
);
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
if (command === 'list' && options.open) {
|
|
328
|
+
process.stdout.write(`${JSON.stringify({ items: await listOpenBacklog(projectDir) })}\n`);
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
throw new Error(USAGE);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
335
|
+
main(process.argv.slice(2)).catch((error) => {
|
|
336
|
+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
337
|
+
process.exit(1);
|
|
338
|
+
});
|
|
339
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Diagnose a bug, regression, error, or unexplained behavior and optionally implement a bounded fix. Use for root-cause investigation, not planned feature delivery."
|
|
2
|
+
description: "Diagnose a bug, regression, error, or unexplained behavior and optionally implement a bounded fix. Use for root-cause investigation, including before any fix, not planned feature delivery."
|
|
3
3
|
alwaysApply: false
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -23,6 +23,14 @@ When the user asked for a fix, implement the smallest coherent correction within
|
|
|
23
23
|
repository and run focused regression checks. Preserve unrelated work. Ask only when a missing
|
|
24
24
|
product decision or an irreversible external action genuinely blocks progress.
|
|
25
25
|
|
|
26
|
+
## Findings outside the cause
|
|
27
|
+
|
|
28
|
+
Report other defects you notice as [findings](planr-investigate/references/findings.md), and never
|
|
29
|
+
fix them in this change unless they block the requested fix. The established cause
|
|
30
|
+
is never a finding. The packaged [backlog helper](planr-investigate/scripts/backlog-item.mjs) lists
|
|
31
|
+
and files backlog items when no CLI is installed; resolve it relative to this
|
|
32
|
+
`SKILL.md`.
|
|
33
|
+
|
|
26
34
|
## Return
|
|
27
35
|
|
|
28
36
|
Lead with the established cause or clearly labeled remaining hypothesis. Link
|
|
@@ -34,7 +42,8 @@ existing report rather than returning raw tool transcripts.
|
|
|
34
42
|
- **Cause:** established root cause, or the strongest remaining hypotheses.
|
|
35
43
|
- **Change:** files and behavior changed, or none for diagnosis-only work.
|
|
36
44
|
- **Checks:** commands and results.
|
|
37
|
-
- **Issues:** unresolved uncertainty or blocker, or none
|
|
45
|
+
- **Issues:** unresolved uncertainty or blocker, or none; then findings outside
|
|
46
|
+
the cause, each with its disposition.
|
|
38
47
|
|
|
39
48
|
Omit empty sections in the human summary. Different wording does not justify
|
|
40
49
|
another experiment or corrective run.
|
package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-document.schema.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://openplanr.dev/schemas/v1.
|
|
3
|
+
"$id": "https://openplanr.dev/schemas/v1.22.0/design-document.schema.json",
|
|
4
4
|
"x-openplanr-contract": {
|
|
5
5
|
"id": "design-document",
|
|
6
|
-
"version": "1.
|
|
6
|
+
"version": "1.22.0"
|
|
7
7
|
},
|
|
8
8
|
"title": "OpenPlanr authored design document",
|
|
9
9
|
"type": "object",
|
|
@@ -26,7 +26,10 @@
|
|
|
26
26
|
"const": "openplanr-design-document"
|
|
27
27
|
},
|
|
28
28
|
"schemaVersion": {
|
|
29
|
-
"
|
|
29
|
+
"enum": [
|
|
30
|
+
"1.0.0",
|
|
31
|
+
"1.1.0"
|
|
32
|
+
]
|
|
30
33
|
},
|
|
31
34
|
"id": {
|
|
32
35
|
"$ref": "#/$defs/id"
|
|
@@ -118,9 +121,16 @@
|
|
|
118
121
|
"maximum": 16384
|
|
119
122
|
},
|
|
120
123
|
"height": {
|
|
121
|
-
"
|
|
122
|
-
|
|
123
|
-
|
|
124
|
+
"anyOf": [
|
|
125
|
+
{
|
|
126
|
+
"type": "integer",
|
|
127
|
+
"minimum": 1,
|
|
128
|
+
"maximum": 16384
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"const": "auto"
|
|
132
|
+
}
|
|
133
|
+
]
|
|
124
134
|
}
|
|
125
135
|
}
|
|
126
136
|
}
|
|
@@ -151,6 +161,66 @@
|
|
|
151
161
|
},
|
|
152
162
|
"anchors": {
|
|
153
163
|
"$ref": "#/$defs/ids"
|
|
164
|
+
},
|
|
165
|
+
"props": {
|
|
166
|
+
"type": "object",
|
|
167
|
+
"propertyNames": {
|
|
168
|
+
"type": "string",
|
|
169
|
+
"minLength": 1,
|
|
170
|
+
"maxLength": 128,
|
|
171
|
+
"pattern": "^[a-z][a-z0-9-]*(?![\\s\\S])"
|
|
172
|
+
},
|
|
173
|
+
"additionalProperties": {
|
|
174
|
+
"oneOf": [
|
|
175
|
+
{
|
|
176
|
+
"type": "object",
|
|
177
|
+
"additionalProperties": false,
|
|
178
|
+
"required": [
|
|
179
|
+
"type",
|
|
180
|
+
"options",
|
|
181
|
+
"default"
|
|
182
|
+
],
|
|
183
|
+
"properties": {
|
|
184
|
+
"type": {
|
|
185
|
+
"const": "enum"
|
|
186
|
+
},
|
|
187
|
+
"options": {
|
|
188
|
+
"type": "array",
|
|
189
|
+
"minItems": 1,
|
|
190
|
+
"uniqueItems": true,
|
|
191
|
+
"items": {
|
|
192
|
+
"type": "string",
|
|
193
|
+
"minLength": 1,
|
|
194
|
+
"maxLength": 128,
|
|
195
|
+
"pattern": "^[a-z][a-z0-9-]*(?![\\s\\S])"
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
"default": {
|
|
199
|
+
"type": "string",
|
|
200
|
+
"minLength": 1,
|
|
201
|
+
"maxLength": 128,
|
|
202
|
+
"pattern": "^[a-z][a-z0-9-]*(?![\\s\\S])"
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"type": "object",
|
|
208
|
+
"additionalProperties": false,
|
|
209
|
+
"required": [
|
|
210
|
+
"type",
|
|
211
|
+
"default"
|
|
212
|
+
],
|
|
213
|
+
"properties": {
|
|
214
|
+
"type": {
|
|
215
|
+
"const": "boolean"
|
|
216
|
+
},
|
|
217
|
+
"default": {
|
|
218
|
+
"type": "boolean"
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
]
|
|
223
|
+
}
|
|
154
224
|
}
|
|
155
225
|
}
|
|
156
226
|
}
|
|
@@ -225,6 +295,34 @@
|
|
|
225
295
|
"additionalProperties": {
|
|
226
296
|
"$ref": "#/$defs/source"
|
|
227
297
|
}
|
|
298
|
+
},
|
|
299
|
+
"props": {
|
|
300
|
+
"type": "object",
|
|
301
|
+
"propertyNames": {
|
|
302
|
+
"$ref": "#/$defs/id"
|
|
303
|
+
},
|
|
304
|
+
"additionalProperties": {
|
|
305
|
+
"type": "object",
|
|
306
|
+
"propertyNames": {
|
|
307
|
+
"type": "string",
|
|
308
|
+
"minLength": 1,
|
|
309
|
+
"maxLength": 128,
|
|
310
|
+
"pattern": "^[a-z][a-z0-9-]*(?![\\s\\S])"
|
|
311
|
+
},
|
|
312
|
+
"additionalProperties": {
|
|
313
|
+
"anyOf": [
|
|
314
|
+
{
|
|
315
|
+
"type": "string",
|
|
316
|
+
"minLength": 1,
|
|
317
|
+
"maxLength": 128,
|
|
318
|
+
"pattern": "^[a-z][a-z0-9-]*(?![\\s\\S])"
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"type": "boolean"
|
|
322
|
+
}
|
|
323
|
+
]
|
|
324
|
+
}
|
|
325
|
+
}
|
|
228
326
|
}
|
|
229
327
|
},
|
|
230
328
|
"if": {
|
|
@@ -250,6 +348,67 @@
|
|
|
250
348
|
"prototype",
|
|
251
349
|
"walkthrough"
|
|
252
350
|
]
|
|
351
|
+
},
|
|
352
|
+
"layout": {
|
|
353
|
+
"type": "object",
|
|
354
|
+
"additionalProperties": false,
|
|
355
|
+
"properties": {
|
|
356
|
+
"boards": {
|
|
357
|
+
"type": "object",
|
|
358
|
+
"description": "Keys are screenId, screenId/frameId or screenId/frameId/variantId; each ID must exist in the document.",
|
|
359
|
+
"additionalProperties": {
|
|
360
|
+
"type": "object",
|
|
361
|
+
"additionalProperties": false,
|
|
362
|
+
"required": [
|
|
363
|
+
"x",
|
|
364
|
+
"y"
|
|
365
|
+
],
|
|
366
|
+
"properties": {
|
|
367
|
+
"x": {
|
|
368
|
+
"$ref": "#/$defs/coordinate"
|
|
369
|
+
},
|
|
370
|
+
"y": {
|
|
371
|
+
"$ref": "#/$defs/coordinate"
|
|
372
|
+
},
|
|
373
|
+
"title": {
|
|
374
|
+
"$ref": "#/$defs/text"
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
"sections": {
|
|
380
|
+
"type": "array",
|
|
381
|
+
"items": {
|
|
382
|
+
"type": "object",
|
|
383
|
+
"additionalProperties": false,
|
|
384
|
+
"required": [
|
|
385
|
+
"id",
|
|
386
|
+
"x",
|
|
387
|
+
"y",
|
|
388
|
+
"text"
|
|
389
|
+
],
|
|
390
|
+
"properties": {
|
|
391
|
+
"id": {
|
|
392
|
+
"$ref": "#/$defs/id"
|
|
393
|
+
},
|
|
394
|
+
"x": {
|
|
395
|
+
"$ref": "#/$defs/coordinate"
|
|
396
|
+
},
|
|
397
|
+
"y": {
|
|
398
|
+
"$ref": "#/$defs/coordinate"
|
|
399
|
+
},
|
|
400
|
+
"text": {
|
|
401
|
+
"$ref": "#/$defs/text"
|
|
402
|
+
},
|
|
403
|
+
"maxW": {
|
|
404
|
+
"type": "integer",
|
|
405
|
+
"minimum": 1,
|
|
406
|
+
"maximum": 16384
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
253
412
|
}
|
|
254
413
|
},
|
|
255
414
|
"$defs": {
|
|
@@ -301,6 +460,47 @@
|
|
|
301
460
|
"$ref": "#/$defs/paths"
|
|
302
461
|
}
|
|
303
462
|
}
|
|
463
|
+
},
|
|
464
|
+
"coordinate": {
|
|
465
|
+
"type": "number",
|
|
466
|
+
"minimum": -10000000,
|
|
467
|
+
"maximum": 10000000
|
|
468
|
+
}
|
|
469
|
+
},
|
|
470
|
+
"allOf": [
|
|
471
|
+
{
|
|
472
|
+
"if": {
|
|
473
|
+
"properties": {
|
|
474
|
+
"schemaVersion": {
|
|
475
|
+
"const": "1.1.0"
|
|
476
|
+
}
|
|
477
|
+
},
|
|
478
|
+
"required": [
|
|
479
|
+
"schemaVersion"
|
|
480
|
+
]
|
|
481
|
+
},
|
|
482
|
+
"else": {
|
|
483
|
+
"properties": {
|
|
484
|
+
"screens": {
|
|
485
|
+
"items": {
|
|
486
|
+
"not": {
|
|
487
|
+
"required": [
|
|
488
|
+
"props"
|
|
489
|
+
]
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
},
|
|
493
|
+
"variants": {
|
|
494
|
+
"items": {
|
|
495
|
+
"not": {
|
|
496
|
+
"required": [
|
|
497
|
+
"props"
|
|
498
|
+
]
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
}
|
|
304
504
|
}
|
|
305
|
-
|
|
505
|
+
]
|
|
306
506
|
}
|
|
@@ -6,9 +6,9 @@ alwaysApply: false
|
|
|
6
6
|
# OpenPlanr Plan
|
|
7
7
|
|
|
8
8
|
Turn a decision-complete specification or clear product request into
|
|
9
|
-
implementation-ready stories and tasks
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
implementation-ready stories and tasks in this active coding session. Do not
|
|
10
|
+
delegate semantic planning to a command-line or model subprocess. Plan ends with a
|
|
11
|
+
Ship handoff; it never starts implementation
|
|
12
12
|
automatically.
|
|
13
13
|
|
|
14
14
|
## Resolve context directly
|
|
@@ -34,6 +34,9 @@ For a studio-backed design, read its `.design/studio-state.json`: the recorded
|
|
|
34
34
|
specification describe that same direction before decomposing UI work. If they
|
|
35
35
|
disagree, synchronize the design handoff using the settled choice or report the
|
|
36
36
|
specific unsynced inputs; do not silently plan the original preview direction.
|
|
37
|
+
A hosted design canvas handoff has no `design-document.json` or studio state:
|
|
38
|
+
its `design-spec.md` names the canvas URL and the local board sources, which are
|
|
39
|
+
the design inputs; read the boards rather than the hosted canvas.
|
|
37
40
|
Use stable screen IDs, component recipes, responsive frames, and interaction
|
|
38
41
|
flows as UI-task context. Read the current render's verification result and
|
|
39
42
|
unresolved feedback; carry relevant gaps into explicit task checks. Preserve
|
|
@@ -60,14 +63,24 @@ host has no structured question interface, ask one concise chat question.
|
|
|
60
63
|
|
|
61
64
|
## Apply PO lenses in-session
|
|
62
65
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
66
|
+
The main session owns the plan, decisions, and integration. Keep small coherent
|
|
67
|
+
planning work in this session. Delegate only a self-contained outcome that
|
|
68
|
+
benefits from context isolation, a distinct capability boundary, or independent
|
|
69
|
+
parallel work; agent availability alone is not a reason to dispatch.
|
|
70
|
+
|
|
71
|
+
Use specification for a distinct planning assignment or completeness review,
|
|
72
|
+
designer for a separate design deliverable or critique, and database only for
|
|
73
|
+
authorized read-only live introspection when repository schemas are insufficient.
|
|
74
|
+
Do not have two planners decompose the same request. Entity scaffolding remains
|
|
75
|
+
manual, on explicit request.
|
|
76
|
+
|
|
77
|
+
Select the exact registered identity from the host's roster; Claude plugin
|
|
78
|
+
agents use names such as `planr:planr-specification`. Give each worker its outcome,
|
|
79
|
+
authoritative paths, relevant decisions, file ownership, verification requirements,
|
|
80
|
+
and concise return expectations. Parallel workers need disjoint writes or an
|
|
81
|
+
agreed interface. Explain the delegation's purpose briefly in commentary.
|
|
82
|
+
When the host lacks the native role, perform the work sequentially in this session
|
|
83
|
+
and disclose capability limitations; never claim an unavailable specialist ran.
|
|
71
84
|
|
|
72
85
|
## Author the decomposition
|
|
73
86
|
|