openplanr 2.2640.9 → 2.2641.1
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 +19 -0
- package/README.md +14 -14
- package/bin/openplanr.js +13 -0
- package/bin/planr.js +5 -11
- package/dist/cli/commands/artifact.d.ts.map +1 -1
- package/dist/cli/commands/artifact.js +5 -4
- package/dist/cli/commands/artifact.js.map +1 -1
- package/dist/cli/commands/checklist.d.ts.map +1 -1
- package/dist/cli/commands/checklist.js +4 -3
- package/dist/cli/commands/checklist.js.map +1 -1
- package/dist/cli/commands/company.d.ts.map +1 -1
- package/dist/cli/commands/company.js +3 -2
- package/dist/cli/commands/company.js.map +1 -1
- package/dist/cli/commands/context.d.ts +1 -1
- package/dist/cli/commands/context.js +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +11 -5
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/export.d.ts +1 -1
- package/dist/cli/commands/export.js +1 -1
- package/dist/cli/commands/github.d.ts +1 -1
- package/dist/cli/commands/github.d.ts.map +1 -1
- package/dist/cli/commands/github.js +9 -8
- package/dist/cli/commands/github.js.map +1 -1
- package/dist/cli/commands/init-deterministic.d.ts.map +1 -1
- package/dist/cli/commands/init-deterministic.js +2 -1
- package/dist/cli/commands/init-deterministic.js.map +1 -1
- package/dist/cli/commands/linear.d.ts +2 -2
- package/dist/cli/commands/linear.d.ts.map +1 -1
- package/dist/cli/commands/linear.js +28 -27
- package/dist/cli/commands/linear.js.map +1 -1
- package/dist/cli/commands/operate/registrars/index.d.ts +1 -1
- package/dist/cli/commands/operate/registrars/index.d.ts.map +1 -1
- package/dist/cli/commands/operate/registrars/index.js +1 -1
- package/dist/cli/commands/operate/registrars/index.js.map +1 -1
- package/dist/cli/commands/operate/render.d.ts.map +1 -1
- package/dist/cli/commands/operate/render.js +2 -1
- package/dist/cli/commands/operate/render.js.map +1 -1
- package/dist/cli/commands/operate.d.ts.map +1 -1
- package/dist/cli/commands/operate.js +2 -1
- package/dist/cli/commands/operate.js.map +1 -1
- package/dist/cli/commands/planning-artifacts.d.ts.map +1 -1
- package/dist/cli/commands/planning-artifacts.js +2 -1
- package/dist/cli/commands/planning-artifacts.js.map +1 -1
- package/dist/cli/commands/quick/interaction.d.ts +1 -1
- package/dist/cli/commands/quick/interaction.d.ts.map +1 -1
- package/dist/cli/commands/quick/interaction.js +1 -1
- package/dist/cli/commands/quick/interaction.js.map +1 -1
- package/dist/cli/commands/quick/project.d.ts +1 -1
- package/dist/cli/commands/quick/project.d.ts.map +1 -1
- package/dist/cli/commands/quick/project.js +1 -1
- package/dist/cli/commands/quick/project.js.map +1 -1
- package/dist/cli/commands/report-linter.d.ts +1 -1
- package/dist/cli/commands/report-linter.js +1 -1
- package/dist/cli/commands/report.d.ts +1 -1
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +5 -4
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +5 -4
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/spec.d.ts +11 -11
- package/dist/cli/commands/spec.d.ts.map +1 -1
- package/dist/cli/commands/spec.js +34 -33
- package/dist/cli/commands/spec.js.map +1 -1
- package/dist/cli/commands/sprint-refinement.d.ts.map +1 -1
- package/dist/cli/commands/sprint-refinement.js +2 -1
- package/dist/cli/commands/sprint-refinement.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +2 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/story/interaction.d.ts +1 -1
- package/dist/cli/commands/story/interaction.d.ts.map +1 -1
- package/dist/cli/commands/story/interaction.js +1 -1
- package/dist/cli/commands/story/interaction.js.map +1 -1
- package/dist/cli/commands/story/project.d.ts +1 -1
- package/dist/cli/commands/story/project.d.ts.map +1 -1
- package/dist/cli/commands/story/project.js +1 -1
- package/dist/cli/commands/story/project.js.map +1 -1
- package/dist/cli/commands/sync.d.ts +1 -1
- package/dist/cli/commands/sync.d.ts.map +1 -1
- package/dist/cli/commands/sync.js +3 -2
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/template.d.ts +1 -1
- package/dist/cli/commands/template.js +10 -10
- package/dist/cli/commands/template.js.map +1 -1
- package/dist/cli/commands/update.d.ts +1 -1
- package/dist/cli/commands/update.js +1 -1
- package/dist/cli/commands/upgrade.d.ts +1 -1
- package/dist/cli/commands/upgrade.d.ts.map +1 -1
- package/dist/cli/commands/upgrade.js +3 -2
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/voice.d.ts +1 -1
- package/dist/cli/commands/voice.js +1 -1
- package/dist/cli/index.js +6 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/dashboard/.vite/manifest.json +1 -1
- package/dist/dashboard/assets/{index-D7R6tnlX.js → index-DGyC7RDz.js} +115 -115
- package/dist/dashboard/assets/index-DGyC7RDz.js.map +1 -0
- package/dist/dashboard/dashboard-manifest.json +10 -10
- package/dist/dashboard/index.html +1 -1
- package/dist/generators/cursor-generator.js +1 -1
- package/dist/generators/cursor-generator.js.map +1 -1
- package/dist/models/schema.d.ts.map +1 -1
- package/dist/models/schema.js +2 -1
- package/dist/models/schema.js.map +1 -1
- package/dist/models/types.d.ts +12 -12
- package/dist/models/types.d.ts.map +1 -1
- package/dist/services/artifact-service.d.ts +1 -1
- package/dist/services/artifact-service.js +2 -2
- package/dist/services/artifact-service.js.map +1 -1
- package/dist/services/audit-log-service.d.ts.map +1 -1
- package/dist/services/audit-log-service.js +2 -1
- package/dist/services/audit-log-service.js.map +1 -1
- package/dist/services/claude-plugin-service.d.ts +3 -1
- package/dist/services/claude-plugin-service.d.ts.map +1 -1
- package/dist/services/claude-plugin-service.js +9 -5
- 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 +3 -2
- package/dist/services/codex-plugin-service.js.map +1 -1
- package/dist/services/company-auth-service.d.ts.map +1 -1
- package/dist/services/company-auth-service.js +2 -1
- package/dist/services/company-auth-service.js.map +1 -1
- package/dist/services/company-sync-service.d.ts.map +1 -1
- package/dist/services/company-sync-service.js +9 -8
- package/dist/services/company-sync-service.js.map +1 -1
- package/dist/services/config-service.d.ts +6 -1
- package/dist/services/config-service.d.ts.map +1 -1
- package/dist/services/config-service.js +19 -4
- package/dist/services/config-service.js.map +1 -1
- package/dist/services/connectors/checkpoint-custody.d.ts.map +1 -1
- package/dist/services/connectors/checkpoint-custody.js +4 -1
- package/dist/services/connectors/checkpoint-custody.js.map +1 -1
- package/dist/services/credentials-service.js +1 -1
- package/dist/services/credentials-service.js.map +1 -1
- package/dist/services/delivery-status-service.d.ts +1 -1
- package/dist/services/delivery-status-service.d.ts.map +1 -1
- package/dist/services/delivery-status-service.js +3 -2
- package/dist/services/delivery-status-service.js.map +1 -1
- package/dist/services/diagram-authoring-service.d.ts.map +1 -1
- package/dist/services/diagram-authoring-service.js +2 -1
- package/dist/services/diagram-authoring-service.js.map +1 -1
- package/dist/services/diagram-pipeline-service.d.ts.map +1 -1
- package/dist/services/diagram-pipeline-service.js +6 -5
- package/dist/services/diagram-pipeline-service.js.map +1 -1
- package/dist/services/distribution-service.d.ts.map +1 -1
- package/dist/services/distribution-service.js +4 -3
- package/dist/services/distribution-service.js.map +1 -1
- package/dist/services/github-service.d.ts +1 -1
- package/dist/services/github-service.d.ts.map +1 -1
- package/dist/services/github-service.js +7 -6
- package/dist/services/github-service.js.map +1 -1
- package/dist/services/graph-integrity.d.ts +1 -1
- package/dist/services/graph-integrity.js +1 -1
- package/dist/services/landing/landing-service.d.ts.map +1 -1
- package/dist/services/landing/landing-service.js +4 -1
- package/dist/services/landing/landing-service.js.map +1 -1
- package/dist/services/landing/receipt-custody.d.ts.map +1 -1
- package/dist/services/landing/receipt-custody.js +3 -2
- package/dist/services/landing/receipt-custody.js.map +1 -1
- package/dist/services/linear/errors.d.ts.map +1 -1
- package/dist/services/linear/errors.js +2 -1
- package/dist/services/linear/errors.js.map +1 -1
- package/dist/services/linear/plan-builders.d.ts +3 -3
- package/dist/services/linear/plan-builders.d.ts.map +1 -1
- package/dist/services/linear/plan-builders.js +2 -2
- package/dist/services/linear/strategy-context.d.ts.map +1 -1
- package/dist/services/linear/strategy-context.js +6 -5
- package/dist/services/linear/strategy-context.js.map +1 -1
- package/dist/services/linear-mapping-service.d.ts +1 -1
- package/dist/services/linear-mapping-service.d.ts.map +1 -1
- package/dist/services/linear-mapping-service.js +3 -2
- package/dist/services/linear-mapping-service.js.map +1 -1
- package/dist/services/linear-pull-service.d.ts +1 -1
- package/dist/services/linear-pull-service.d.ts.map +1 -1
- package/dist/services/linear-pull-service.js +10 -9
- package/dist/services/linear-pull-service.js.map +1 -1
- package/dist/services/linear-push-service.d.ts +2 -2
- package/dist/services/linear-push-service.d.ts.map +1 -1
- package/dist/services/linear-push-service.js +17 -16
- package/dist/services/linear-push-service.js.map +1 -1
- package/dist/services/linear-service.d.ts +2 -2
- package/dist/services/linear-service.js +2 -2
- package/dist/services/linear-team-service.d.ts.map +1 -1
- package/dist/services/linear-team-service.js +2 -1
- package/dist/services/linear-team-service.js.map +1 -1
- package/dist/services/operate/assignment-packet-service.d.ts.map +1 -1
- package/dist/services/operate/assignment-packet-service.js +2 -1
- package/dist/services/operate/assignment-packet-service.js.map +1 -1
- package/dist/services/operate/delivery-evidence.d.ts.map +1 -1
- package/dist/services/operate/delivery-evidence.js +2 -1
- package/dist/services/operate/delivery-evidence.js.map +1 -1
- package/dist/services/operate/measurement-schedule-service.d.ts.map +1 -1
- package/dist/services/operate/measurement-schedule-service.js +2 -1
- package/dist/services/operate/measurement-schedule-service.js.map +1 -1
- package/dist/services/operate/path-custody.d.ts.map +1 -1
- package/dist/services/operate/path-custody.js +2 -1
- package/dist/services/operate/path-custody.js.map +1 -1
- package/dist/services/operate/pinned-legacy-replay-runner.d.ts.map +1 -1
- package/dist/services/operate/pinned-legacy-replay-runner.js +3 -2
- package/dist/services/operate/pinned-legacy-replay-runner.js.map +1 -1
- package/dist/services/operate/planning-handoff-service.d.ts.map +1 -1
- package/dist/services/operate/planning-handoff-service.js +3 -2
- package/dist/services/operate/planning-handoff-service.js.map +1 -1
- package/dist/services/operate/project-transaction-lock.d.ts.map +1 -1
- package/dist/services/operate/project-transaction-lock.js +2 -1
- package/dist/services/operate/project-transaction-lock.js.map +1 -1
- package/dist/services/operate/repository-read-service.d.ts.map +1 -1
- package/dist/services/operate/repository-read-service.js +5 -4
- package/dist/services/operate/repository-read-service.js.map +1 -1
- package/dist/services/operate/screened-evidence-service.d.ts.map +1 -1
- package/dist/services/operate/screened-evidence-service.js +5 -4
- package/dist/services/operate/screened-evidence-service.js.map +1 -1
- package/dist/services/operate/storage-layout.d.ts.map +1 -1
- package/dist/services/operate/storage-layout.js +8 -7
- package/dist/services/operate/storage-layout.js.map +1 -1
- package/dist/services/operate/store.d.ts.map +1 -1
- package/dist/services/operate/store.js +7 -6
- package/dist/services/operate/store.js.map +1 -1
- package/dist/services/pipeline-package-service.js +1 -1
- package/dist/services/pipeline-package-service.js.map +1 -1
- package/dist/services/provenance-service.d.ts.map +1 -1
- package/dist/services/provenance-service.js +2 -1
- package/dist/services/provenance-service.js.map +1 -1
- package/dist/services/report-linter-service.js +1 -1
- package/dist/services/report-linter-service.js.map +1 -1
- package/dist/services/revise-cache-service.d.ts.map +1 -1
- package/dist/services/revise-cache-service.js +2 -1
- package/dist/services/revise-cache-service.js.map +1 -1
- package/dist/services/runtime-manager/doctor.d.ts +13 -0
- package/dist/services/runtime-manager/doctor.d.ts.map +1 -1
- package/dist/services/runtime-manager/doctor.js +50 -3
- package/dist/services/runtime-manager/doctor.js.map +1 -1
- package/dist/services/runtime-manager/inventory.d.ts +1 -0
- package/dist/services/runtime-manager/inventory.d.ts.map +1 -1
- package/dist/services/runtime-manager/inventory.js +3 -1
- package/dist/services/runtime-manager/inventory.js.map +1 -1
- package/dist/services/runtime-manager-service.d.ts +4 -2
- package/dist/services/runtime-manager-service.d.ts.map +1 -1
- package/dist/services/runtime-manager-service.js +52 -33
- package/dist/services/runtime-manager-service.js.map +1 -1
- package/dist/services/server-lifecycle-service.d.ts.map +1 -1
- package/dist/services/server-lifecycle-service.js +14 -9
- package/dist/services/server-lifecycle-service.js.map +1 -1
- package/dist/services/spec-service.d.ts +4 -4
- package/dist/services/spec-service.d.ts.map +1 -1
- package/dist/services/spec-service.js +9 -8
- package/dist/services/spec-service.js.map +1 -1
- package/dist/services/sprint-refinement-service.d.ts +6 -6
- package/dist/services/sprint-refinement-service.d.ts.map +1 -1
- package/dist/services/sprint-refinement-service.js +16 -16
- package/dist/services/sprint-refinement-service.js.map +1 -1
- package/dist/services/template-service.d.ts.map +1 -1
- package/dist/services/template-service.js +3 -1
- package/dist/services/template-service.js.map +1 -1
- package/dist/services/upgrade-offer-service.d.ts +2 -2
- package/dist/services/upgrade-offer-service.d.ts.map +1 -1
- package/dist/services/upgrade-offer-service.js +4 -3
- package/dist/services/upgrade-offer-service.js.map +1 -1
- package/dist/services/upgrade-report.d.ts +1 -1
- package/dist/services/upgrade-report.d.ts.map +1 -1
- package/dist/services/upgrade-report.js +5 -4
- package/dist/services/upgrade-report.js.map +1 -1
- package/dist/services/upgrade-service.d.ts +5 -5
- package/dist/services/upgrade-service.d.ts.map +1 -1
- package/dist/services/upgrade-service.js +14 -13
- package/dist/services/upgrade-service.js.map +1 -1
- package/dist/templates/backlog/backlog-item.md.hbs +1 -1
- package/dist/templates/checklists/agile-checklist.md.hbs +6 -6
- package/dist/templates/epics/epic.md.hbs +1 -1
- package/dist/templates/export/planning-report.html.hbs +1 -1
- package/dist/templates/export/planning-report.md.hbs +1 -1
- package/dist/templates/features/feature.md.hbs +1 -1
- package/dist/templates/guides/estimation.md.hbs +3 -12
- package/dist/templates/quick/quick-task.md.hbs +1 -1
- package/dist/templates/rules/cursor/create-epic.mdc.hbs +1 -1
- package/dist/templates/rules/cursor/create-features.mdc.hbs +1 -1
- package/dist/templates/rules/cursor/create-user-story.mdc.hbs +1 -1
- package/dist/templates/rules/cursor/openplanr.mdc.hbs +1 -1
- package/dist/templates/rules/shared/host-native-guidance.md.hbs +1 -1
- package/dist/templates/spec/spec-shaped.md.hbs +1 -1
- package/dist/templates/spec/spec.md.hbs +1 -1
- package/dist/templates/sprints/sprint-tasks.md.hbs +1 -1
- package/dist/templates/sprints/sprint.md.hbs +1 -1
- package/dist/templates/stories/user-story.md.hbs +1 -1
- package/dist/utils/constants.d.ts +8 -4
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +10 -4
- package/dist/utils/constants.js.map +1 -1
- package/docs/ARTIFACT_REVIEW.md +13 -13
- package/docs/CLI.md +249 -249
- package/docs/CROSS_RUNTIME_SETUP.md +33 -33
- package/docs/TROUBLESHOOTING.md +28 -28
- package/install.ps1 +2 -2
- package/install.sh +3 -3
- package/lib/host-packages/adapter-registry.json +5 -5
- package/lib/host-packages/capability-map.json +2 -2
- 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 +49 -45
- package/lib/host-packages/claude/openplanr/README.md +7 -7
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/designer.md +2 -2
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +81 -46
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +9 -4
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/lib/artifact/ui/studio-shell.css +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +3 -3
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +10 -3
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
- package/lib/host-packages/claude/openplanr/skills/artifact/SKILL.md +12 -12
- package/lib/host-packages/claude/openplanr/skills/artifact/references/company-review.md +9 -9
- package/lib/host-packages/claude/openplanr/skills/artifact/references/design-sharing.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/artifact/references/diagram-sharing.md +3 -3
- package/lib/host-packages/claude/openplanr/skills/dashboard/SKILL.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/delegate/references/operator-guide.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/design/references/team-review.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +4 -4
- package/lib/host-packages/claude/openplanr/skills/design-loop/SKILL.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/team-review.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +4 -4
- package/lib/host-packages/claude/openplanr/skills/design-review/SKILL.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/design-review/references/team-review.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +4 -4
- package/lib/host-packages/claude/openplanr/skills/diagram/SKILL.md +15 -15
- package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-document.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-intent-to-ir.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-sharing.md +3 -3
- package/lib/host-packages/claude/openplanr/skills/doctor/SKILL.md +9 -9
- package/lib/host-packages/claude/openplanr/skills/doctor/references/upgrade.md +18 -16
- package/lib/host-packages/claude/openplanr/skills/land/SKILL.md +2 -2
- package/lib/host-packages/claude/openplanr/skills/plan/references/artifact-contract.md +5 -0
- package/lib/host-packages/claude/openplanr/skills/spec/references/specification-contract.md +5 -0
- package/lib/host-packages/claude/openplanr/skills/sprint/SKILL.md +12 -12
- package/lib/host-packages/claude/openplanr/skills/sprint/references/refinement-contract.md +5 -5
- package/lib/host-packages/claude/openplanr/skills/sprint/references/sprint-formats.md +8 -8
- package/lib/host-packages/claude/openplanr/skills/sprint/schemas/refinement.schema.json +3 -3
- package/lib/host-packages/claude/openplanr/skills/status/SKILL.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/sync/SKILL.md +6 -6
- package/lib/host-packages/claude/openplanr/skills/sync/scripts/names.mjs +8 -0
- package/lib/host-packages/claude/openplanr/skills/sync/scripts/sync.mjs +3 -2
- package/lib/host-packages/cursor/openplanr/.openplanr-content.json +47 -43
- package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/company-review.md +9 -9
- package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/design-sharing.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/diagram-sharing.md +3 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-artifact.mdc +12 -12
- package/lib/host-packages/cursor/openplanr/rules/planr-dashboard.mdc +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/operator-guide.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/team-review.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +4 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/team-review.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +4 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop.mdc +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/team-review.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +4 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review.mdc +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-document.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-intent-to-ir.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-sharing.md +3 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram.mdc +15 -15
- package/lib/host-packages/cursor/openplanr/rules/planr-doctor/references/upgrade.md +18 -16
- package/lib/host-packages/cursor/openplanr/rules/planr-doctor.mdc +9 -9
- package/lib/host-packages/cursor/openplanr/rules/planr-land.mdc +2 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/references/artifact-contract.md +5 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/specification-contract.md +5 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/refinement-contract.md +5 -5
- package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/sprint-formats.md +8 -8
- package/lib/host-packages/cursor/openplanr/rules/planr-sprint/schemas/refinement.schema.json +3 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-sprint.mdc +12 -12
- package/lib/host-packages/cursor/openplanr/rules/planr-status.mdc +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/names.mjs +8 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/sync.mjs +3 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-sync.mdc +6 -6
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +81 -46
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +9 -4
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/lib/artifact/ui/studio-shell.css +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +3 -3
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +10 -3
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
- 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 +48 -44
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +81 -46
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +9 -4
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/lib/artifact/ui/studio-shell.css +1 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +3 -3
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +10 -3
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
- package/lib/host-packages/openai/openplanr/skills/artifact/SKILL.md +12 -12
- package/lib/host-packages/openai/openplanr/skills/artifact/references/company-review.md +9 -9
- package/lib/host-packages/openai/openplanr/skills/artifact/references/design-sharing.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/artifact/references/diagram-sharing.md +3 -3
- package/lib/host-packages/openai/openplanr/skills/dashboard/SKILL.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/delegate/references/operator-guide.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/design/references/team-review.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +4 -4
- package/lib/host-packages/openai/openplanr/skills/design-loop/SKILL.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/team-review.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +4 -4
- package/lib/host-packages/openai/openplanr/skills/design-review/SKILL.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/design-review/references/team-review.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +4 -4
- package/lib/host-packages/openai/openplanr/skills/diagram/SKILL.md +15 -15
- package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-document.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-intent-to-ir.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-sharing.md +3 -3
- package/lib/host-packages/openai/openplanr/skills/doctor/SKILL.md +9 -9
- package/lib/host-packages/openai/openplanr/skills/doctor/references/upgrade.md +18 -16
- package/lib/host-packages/openai/openplanr/skills/land/SKILL.md +2 -2
- package/lib/host-packages/openai/openplanr/skills/plan/references/artifact-contract.md +5 -0
- package/lib/host-packages/openai/openplanr/skills/spec/references/specification-contract.md +5 -0
- package/lib/host-packages/openai/openplanr/skills/sprint/SKILL.md +12 -12
- package/lib/host-packages/openai/openplanr/skills/sprint/references/refinement-contract.md +5 -5
- package/lib/host-packages/openai/openplanr/skills/sprint/references/sprint-formats.md +8 -8
- package/lib/host-packages/openai/openplanr/skills/sprint/schemas/refinement.schema.json +3 -3
- package/lib/host-packages/openai/openplanr/skills/status/SKILL.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/sync/SKILL.md +6 -6
- package/lib/host-packages/openai/openplanr/skills/sync/openplanr.skill.json +11 -0
- package/lib/host-packages/openai/openplanr/skills/sync/scripts/names.mjs +8 -0
- package/lib/host-packages/openai/openplanr/skills/sync/scripts/sync.mjs +3 -2
- package/lib/integrations.mjs +3 -2
- package/lib/names.d.mts +4 -0
- package/lib/names.mjs +8 -0
- package/lib/planning-folder.d.mts +14 -0
- package/lib/planning-folder.mjs +40 -0
- package/package.json +5 -5
- package/dist/dashboard/assets/index-D7R6tnlX.js.map +0 -1
- package/dist/templates/voice/standup.md.hbs +0 -20
- /package/lib/host-packages/claude/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
- /package/lib/host-packages/cursor/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
- /package/lib/host-packages/openai/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
|
@@ -11,7 +11,7 @@ item in full and judges it against the default branch and the calendar.
|
|
|
11
11
|
**Select** fits the surviving items to the stated capacity and the next release
|
|
12
12
|
cut, refutes the picks with three independent lenses, and writes the sprint.
|
|
13
13
|
Perform the reasoning in this session; never delegate it to a model subprocess.
|
|
14
|
-
The CLI (`
|
|
14
|
+
The CLI (`openplanr sprint …`) stores what this skill decides. It is optional: when
|
|
15
15
|
it is unavailable, write the same files by hand in the shapes given in
|
|
16
16
|
[sprint formats](references/sprint-formats.md).
|
|
17
17
|
|
|
@@ -34,7 +34,7 @@ capability; it never blocks the run. Name every degraded input in `Issues`.
|
|
|
34
34
|
| Git history and the code paths items cite | Evidence lens: stale, already fixed, premise false | Buckets rest on the items' own dates; say "not verified against code" |
|
|
35
35
|
| Release profile (`.release/profile.md`: cut date, cadence, freezes) | Size the In-progress bucket to the cut; the sprint gets `releaseCut` | Ask once for a horizon; default to a two-week sprint from today |
|
|
36
36
|
| Capacity (engineers × working days) | Fit the list and name the overflow | Ask once; default 1 engineer × 10 days, stated in the return |
|
|
37
|
-
| Previous sprint or refinement note (`.planr/sprints/SPRINT-NNN/refinement.json`) | Carry `leftovers`; `
|
|
37
|
+
| Previous sprint or refinement note (`.planr/sprints/SPRINT-NNN/refinement.json`) | Carry `leftovers`; `openplanr sprint diff` is possible | First run, no diff |
|
|
38
38
|
| Last Operate cycle | Rank its unfinished actions alongside | Skipped silently |
|
|
39
39
|
| Linear or GitHub connector | Push statuses on approval, read PR state | Local files only; report the external step as not run |
|
|
40
40
|
|
|
@@ -90,7 +90,7 @@ the cheapest refutations.
|
|
|
90
90
|
|
|
91
91
|
Carry the previous Operate cycle's unfinished actions explicitly. Include the
|
|
92
92
|
release cut itself as work; when it has no artifact yet, file it with
|
|
93
|
-
`
|
|
93
|
+
`openplanr quick create "Release cut <date>"` so the sprint contains only artifact
|
|
94
94
|
ids.
|
|
95
95
|
|
|
96
96
|
## Step 4: Refute the In-progress bucket
|
|
@@ -114,9 +114,9 @@ Write the three durable outputs (formats in
|
|
|
114
114
|
them.
|
|
115
115
|
|
|
116
116
|
```bash
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
openplanr sprint create --data sprint.json --json # name, releaseCut, capacityDays, startDate
|
|
118
|
+
openplanr sprint refinement SPRINT-NNN --data refinement.json --json # validates, stores the note and JSON, fills the sprint body
|
|
119
|
+
openplanr sprint diff SPRINT-MMM SPRINT-NNN # when a previous run exists
|
|
120
120
|
```
|
|
121
121
|
|
|
122
122
|
`refinement.json` must satisfy [the schema](schemas/refinement.schema.json); the
|
|
@@ -131,16 +131,16 @@ write-back, or leave the proposal as written.
|
|
|
131
131
|
## Step 6: On approval, apply
|
|
132
132
|
|
|
133
133
|
```bash
|
|
134
|
-
|
|
135
|
-
|
|
134
|
+
openplanr sprint apply SPRINT-NNN --dry-run # show the status and priority changes
|
|
135
|
+
openplanr sprint apply SPRINT-NNN --yes --commit # one commit: chore(planr): refine backlog for SPRINT-NNN
|
|
136
136
|
```
|
|
137
137
|
|
|
138
138
|
Where a connector is configured, push each changed item afterwards
|
|
139
|
-
(`
|
|
139
|
+
(`openplanr linear push <id>`, `openplanr github push <id>`) and report the ones that
|
|
140
140
|
were not pushed. When the CLI is unavailable, apply the same status changes with
|
|
141
141
|
the repository's own vocabulary and commit them with the same message.
|
|
142
142
|
|
|
143
|
-
Close a finished sprint with `
|
|
143
|
+
Close a finished sprint with `openplanr sprint close SPRINT-NNN`; it records the
|
|
144
144
|
leftovers the next run carries.
|
|
145
145
|
|
|
146
146
|
## Rules from production use
|
|
@@ -152,7 +152,7 @@ leftovers the next run carries.
|
|
|
152
152
|
the question that unblocks them.
|
|
153
153
|
- The list must fit the stated capacity; if it does not, say what was cut.
|
|
154
154
|
- No new migration in a hand deploy unless the sprint says so explicitly.
|
|
155
|
-
- Use the repository's own status vocabulary (`
|
|
155
|
+
- Use the repository's own status vocabulary (`openplanr update --help` lists it);
|
|
156
156
|
never introduce a second one.
|
|
157
157
|
- The note and the JSON are the durable output; the chat return is a view of
|
|
158
158
|
them. That is what keeps the third run from re-arguing the first two.
|
|
@@ -179,7 +179,7 @@ and identify incomplete evidence or blocked inputs with their recovery action.
|
|
|
179
179
|
The note and JSON remain complete and unchanged in shape. Omit empty chat sections;
|
|
180
180
|
different summary wording never causes another sprint creation or write-back.
|
|
181
181
|
|
|
182
|
-
`
|
|
182
|
+
`openplanr status` shows the active sprint with its cut and progress; the dashboard
|
|
183
183
|
(`planr-dashboard`) renders the sprint from the same frontmatter and checkboxes.
|
|
184
184
|
|
|
185
185
|
## Reference files
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
The refinement document is the durable record of one run: what was read, how
|
|
4
4
|
each item was judged, what was selected and what the refuters changed. The CLI
|
|
5
|
-
validates it (`
|
|
5
|
+
validates it (`openplanr sprint refinement <id> --data`), stores it as
|
|
6
6
|
`.planr/sprints/SPRINT-NNN/refinement.json`, renders `refinement.md` from it
|
|
7
|
-
and fills the sprint body from its batches. `
|
|
8
|
-
close` and `
|
|
7
|
+
and fills the sprint body from its batches. `openplanr sprint diff`, `openplanr sprint
|
|
8
|
+
close` and `openplanr sprint apply` read it back.
|
|
9
9
|
|
|
10
10
|
## Item record
|
|
11
11
|
|
|
@@ -26,7 +26,7 @@ One entry per open item, whether or not it is selected.
|
|
|
26
26
|
| `bucket` | `inProgress`, `planNext`, `blocked` or `closeOrDemote`. |
|
|
27
27
|
| `reason` | One clause: why the item sits in that bucket. |
|
|
28
28
|
| `evidence` | For close-or-demote rows: `file:line`, PR number or date. |
|
|
29
|
-
| `targetStatus` / `targetPriority` | What `
|
|
29
|
+
| `targetStatus` / `targetPriority` | What `openplanr sprint apply` writes, in the repository's own vocabulary (`openplanr update --help`). Priority applies to backlog items only. |
|
|
30
30
|
|
|
31
31
|
## Scoring
|
|
32
32
|
|
|
@@ -149,6 +149,6 @@ A pick that fails a lens moves or drops, and the correction is recorded in
|
|
|
149
149
|
|
|
150
150
|
`inputs.sources` names what was read; `inputs.defaulted` names every value
|
|
151
151
|
taken from a default instead of the repository or the user. The CLI adds
|
|
152
|
-
`leftovers[]` on `
|
|
152
|
+
`leftovers[]` on `openplanr sprint close` and `applied` on `openplanr sprint apply`;
|
|
153
153
|
never write those yourself. Unknown fields are rejected, so keep notes in
|
|
154
154
|
`inputs.notes` or in the item's `reason`.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Three durable outputs and one chat return. The CLI writes the first three from
|
|
4
4
|
the two JSON inputs below; when it is unavailable, write the same files by hand.
|
|
5
5
|
|
|
6
|
-
## `sprint.json` (input to `
|
|
6
|
+
## `sprint.json` (input to `openplanr sprint create --data`)
|
|
7
7
|
|
|
8
8
|
```json
|
|
9
9
|
{
|
|
@@ -17,7 +17,7 @@ the two JSON inputs below; when it is unavailable, write the same files by hand.
|
|
|
17
17
|
|
|
18
18
|
`endDate` defaults to `releaseCut`, or to `startDate` plus the duration when no
|
|
19
19
|
cut is known. `status` may be `planned` or `active` (default). Omit `taskIds`
|
|
20
|
-
and `batches`; `
|
|
20
|
+
and `batches`; `openplanr sprint refinement` fills them from the refinement
|
|
21
21
|
document.
|
|
22
22
|
|
|
23
23
|
## Sprint artifact
|
|
@@ -64,11 +64,11 @@ refinedAt: "2026-09-17"
|
|
|
64
64
|
- [ ] **QT-194** Release cut 25 Sep · hours · [view](../quick/QT-194-release-cut-25-sep.md)
|
|
65
65
|
|
|
66
66
|
## Retrospective
|
|
67
|
-
_Complete this section when closing the sprint with `
|
|
67
|
+
_Complete this section when closing the sprint with `openplanr sprint close SPRINT-004`._
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
Each task line is `- [ ] **ID** title · effort · [view](relative path)`.
|
|
71
|
-
`
|
|
71
|
+
`openplanr status`, `openplanr sprint close` and the dashboard read these lines; tick a
|
|
72
72
|
box when the item ships. `releaseCut` is absent when no release profile exists;
|
|
73
73
|
`capacityDays` and `refinedAt` are absent until a refinement is recorded.
|
|
74
74
|
|
|
@@ -84,20 +84,20 @@ run can diff against it:
|
|
|
84
84
|
- **Refuter verdicts**: every correction verbatim, with its lens.
|
|
85
85
|
- **In progress** by batch, then **Plan next**, **Blocked** and **Close or
|
|
86
86
|
demote** in full, since only In progress goes into the sprint.
|
|
87
|
-
- **Leftovers** (after `
|
|
88
|
-
`
|
|
87
|
+
- **Leftovers** (after `openplanr sprint close`) and **Applied** (after
|
|
88
|
+
`openplanr sprint apply`).
|
|
89
89
|
|
|
90
90
|
## Machine-readable copy
|
|
91
91
|
|
|
92
92
|
`.planr/sprints/SPRINT-NNN/refinement.json`: the document described in
|
|
93
93
|
[the refinement contract](refinement-contract.md), validated against the JSON
|
|
94
94
|
Schema packaged as `schemas/refinement.schema.json` (linked from the skill
|
|
95
|
-
entrypoint). The dashboard, `
|
|
95
|
+
entrypoint). The dashboard, `openplanr sprint diff` and `openplanr sprint apply` consume
|
|
96
96
|
it.
|
|
97
97
|
|
|
98
98
|
## Status write-back
|
|
99
99
|
|
|
100
|
-
Only on approval through the structured question. `
|
|
100
|
+
Only on approval through the structured question. `openplanr sprint apply
|
|
101
101
|
SPRINT-NNN --yes --commit` writes each close, demote or blocked row's
|
|
102
102
|
`targetStatus`, `targetPriority` and `blockedBy` to the artifacts and commits the
|
|
103
103
|
sprint, the note, the JSON and the changed artifacts as one commit:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://openplanr.dev/schemas/skills/planr-sprint/refinement.schema.json",
|
|
4
4
|
"title": "OpenPlanr sprint refinement document",
|
|
5
|
-
"description": "One backlog refinement run: inputs, every open item's judgement, the four buckets, the in-progress batches and the refuter corrections. Written by the planr-sprint skill and validated by
|
|
5
|
+
"description": "One backlog refinement run: inputs, every open item's judgement, the four buckets, the in-progress batches and the refuter corrections. Written by the planr-sprint skill and validated by openplanr sprint refinement.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"required": ["schemaVersion", "sprintId", "refinedAt", "inputs", "items", "buckets"],
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
}
|
|
103
103
|
},
|
|
104
104
|
"leftovers": {
|
|
105
|
-
"description": "Written by
|
|
105
|
+
"description": "Written by openplanr sprint close.",
|
|
106
106
|
"type": "array",
|
|
107
107
|
"items": {
|
|
108
108
|
"type": "object",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
}
|
|
116
116
|
},
|
|
117
117
|
"applied": {
|
|
118
|
-
"description": "Written by
|
|
118
|
+
"description": "Written by openplanr sprint apply.",
|
|
119
119
|
"type": "object",
|
|
120
120
|
"additionalProperties": false,
|
|
121
121
|
"required": ["at", "updates"],
|
|
@@ -8,7 +8,7 @@ license: MIT
|
|
|
8
8
|
|
|
9
9
|
Inspect delivery state read-only in the active session. Read the repository's
|
|
10
10
|
planning artifacts, task statuses, dependency graph, current branch, and relevant
|
|
11
|
-
runtime markers directly. Use the optional deterministic `
|
|
11
|
+
runtime markers directly. Use the optional deterministic `openplanr status --json`
|
|
12
12
|
utility when available, but do not require it or a semantic subprocess.
|
|
13
13
|
|
|
14
14
|
Add GitHub or Linear lookups only when the user requests live remote state. Keep
|
|
@@ -15,17 +15,17 @@ Resolution order:
|
|
|
15
15
|
|
|
16
16
|
1. use a host-native GitHub or Linear connector when available;
|
|
17
17
|
2. otherwise, for GitHub, use the packaged deterministic helper;
|
|
18
|
-
3. otherwise, for Linear, use the `
|
|
19
|
-
installed it; `
|
|
18
|
+
3. otherwise, for Linear, use the `openplanr linear` terminal utility when the user has
|
|
19
|
+
installed it; `openplanr github` and `openplanr sync` are optional equivalents for the rest.
|
|
20
20
|
|
|
21
21
|
Linear through the CLI:
|
|
22
22
|
|
|
23
|
-
- the user runs `
|
|
23
|
+
- the user runs `openplanr linear init` in a terminal once; it prompts for a personal
|
|
24
24
|
access token, which the CLI stores;
|
|
25
|
-
- audit with `
|
|
26
|
-
- before a real `
|
|
25
|
+
- audit with `openplanr linear sync --dry-run`, which reads Linear without writing;
|
|
26
|
+
- before a real `openplanr linear sync`, ask how conflicts should resolve and pass
|
|
27
27
|
`--on-conflict local` or `--on-conflict linear`; without a prompt it favors Linear;
|
|
28
|
-
- `
|
|
28
|
+
- `openplanr linear push <artifact-id>` creates or updates Linear issues; preview with
|
|
29
29
|
`--dry-run`. Quick tasks and backlog items need `linear.standaloneProjectId` in the
|
|
30
30
|
project config when no terminal prompt is available.
|
|
31
31
|
|
|
@@ -24,6 +24,17 @@
|
|
|
24
24
|
],
|
|
25
25
|
"executable": true
|
|
26
26
|
},
|
|
27
|
+
{
|
|
28
|
+
"path": "scripts/names.mjs",
|
|
29
|
+
"kind": "script",
|
|
30
|
+
"hosts": [
|
|
31
|
+
"claude-code",
|
|
32
|
+
"codex",
|
|
33
|
+
"chatgpt",
|
|
34
|
+
"cursor"
|
|
35
|
+
],
|
|
36
|
+
"executable": false
|
|
37
|
+
},
|
|
27
38
|
{
|
|
28
39
|
"path": "agents/openai.yaml",
|
|
29
40
|
"kind": "agent-metadata",
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
// The planning folder and command names that every package and generated copy reads.
|
|
3
|
+
|
|
4
|
+
/** @type {typeof import('./names.d.mts').PLANNING_FOLDER} */
|
|
5
|
+
export const PLANNING_FOLDER = '.planr';
|
|
6
|
+
|
|
7
|
+
/** @type {typeof import('./names.d.mts').CLI_COMMAND} */
|
|
8
|
+
export const CLI_COMMAND = 'openplanr';
|
|
@@ -5,6 +5,7 @@ import { access, readFile } from 'node:fs/promises';
|
|
|
5
5
|
import { resolve } from 'node:path';
|
|
6
6
|
import { fileURLToPath } from 'node:url';
|
|
7
7
|
import { promisify } from 'node:util';
|
|
8
|
+
import { CLI_COMMAND, PLANNING_FOLDER } from './names.mjs';
|
|
8
9
|
|
|
9
10
|
const execFileAsync = promisify(execFile);
|
|
10
11
|
const LINEAR_UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;
|
|
@@ -109,7 +110,7 @@ async function readJsonInput(value, stdin) {
|
|
|
109
110
|
}
|
|
110
111
|
|
|
111
112
|
async function inspectLocal(cwd) {
|
|
112
|
-
const candidates = [
|
|
113
|
+
const candidates = [`${PLANNING_FOLDER}/config.json`, '.openplanr/config.json'];
|
|
113
114
|
const roots = [];
|
|
114
115
|
for (const candidate of candidates) {
|
|
115
116
|
try {
|
|
@@ -146,7 +147,7 @@ export async function runPortableSync(
|
|
|
146
147
|
} else if (args.provider === 'linear') {
|
|
147
148
|
throw new IntegrationError(
|
|
148
149
|
'E_SYNC_USAGE',
|
|
149
|
-
|
|
150
|
+
`Linear synchronization runs through a Linear connector or the ${CLI_COMMAND} CLI (${CLI_COMMAND} linear push, ${CLI_COMMAND} linear sync).`,
|
|
150
151
|
);
|
|
151
152
|
} else {
|
|
152
153
|
throw new IntegrationError(
|
package/lib/integrations.mjs
CHANGED
|
@@ -5,6 +5,7 @@ import { access, readFile } from 'node:fs/promises';
|
|
|
5
5
|
import { resolve } from 'node:path';
|
|
6
6
|
import { fileURLToPath } from 'node:url';
|
|
7
7
|
import { promisify } from 'node:util';
|
|
8
|
+
import { CLI_COMMAND, PLANNING_FOLDER } from './names.mjs';
|
|
8
9
|
|
|
9
10
|
const execFileAsync = promisify(execFile);
|
|
10
11
|
const LINEAR_UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;
|
|
@@ -109,7 +110,7 @@ async function readJsonInput(value, stdin) {
|
|
|
109
110
|
}
|
|
110
111
|
|
|
111
112
|
async function inspectLocal(cwd) {
|
|
112
|
-
const candidates = [
|
|
113
|
+
const candidates = [`${PLANNING_FOLDER}/config.json`, '.openplanr/config.json'];
|
|
113
114
|
const roots = [];
|
|
114
115
|
for (const candidate of candidates) {
|
|
115
116
|
try {
|
|
@@ -146,7 +147,7 @@ export async function runPortableSync(
|
|
|
146
147
|
} else if (args.provider === 'linear') {
|
|
147
148
|
throw new IntegrationError(
|
|
148
149
|
'E_SYNC_USAGE',
|
|
149
|
-
|
|
150
|
+
`Linear synchronization runs through a Linear connector or the ${CLI_COMMAND} CLI (${CLI_COMMAND} linear push, ${CLI_COMMAND} linear sync).`,
|
|
150
151
|
);
|
|
151
152
|
} else {
|
|
152
153
|
throw new IntegrationError(
|
package/lib/names.d.mts
ADDED
package/lib/names.mjs
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
// The planning folder and command names that every package and generated copy reads.
|
|
3
|
+
|
|
4
|
+
/** @type {typeof import('./names.d.mts').PLANNING_FOLDER} */
|
|
5
|
+
export const PLANNING_FOLDER = '.planr';
|
|
6
|
+
|
|
7
|
+
/** @type {typeof import('./names.d.mts').CLI_COMMAND} */
|
|
8
|
+
export const CLI_COMMAND = 'openplanr';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { PLANNING_FOLDER } from './names.mjs';
|
|
2
|
+
|
|
3
|
+
/** Why OpenPlanr refuses to write into a project's planning folder. */
|
|
4
|
+
export interface PlanningFolderConflict {
|
|
5
|
+
readonly code: 'E_PLANNING_FOLDER_FOREIGN';
|
|
6
|
+
readonly problem: string;
|
|
7
|
+
readonly fix: string;
|
|
8
|
+
readonly signs: readonly string[];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** Signs that `<projectRoot>/.planr`, which lacks OpenPlanr's config.json, is a folder OpenPlanr didn't create; empty when OpenPlanr may write there. */
|
|
12
|
+
export declare function foreignPlanningFolderSigns(projectRoot: string): string[];
|
|
13
|
+
/** The refusal for writing into a planning folder OpenPlanr didn't create, or null when OpenPlanr may write there. */
|
|
14
|
+
export declare function planningFolderConflict(projectRoot: string): PlanningFolderConflict | null;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
// Recognizes a planning folder OpenPlanr didn't create, so OpenPlanr never writes into it.
|
|
3
|
+
import { existsSync, readdirSync, statSync } from 'node:fs';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { CLI_COMMAND, PLANNING_FOLDER } from './names.mjs';
|
|
6
|
+
|
|
7
|
+
export { PLANNING_FOLDER };
|
|
8
|
+
|
|
9
|
+
const FOREIGN_FILES = Object.freeze(['planr.config.json', 'board.html']);
|
|
10
|
+
const GOAL_DIRECTORIES = Object.freeze(['tasks', 'plans']);
|
|
11
|
+
|
|
12
|
+
const isDirectory = (path) => existsSync(path) && statSync(path).isDirectory();
|
|
13
|
+
|
|
14
|
+
/** @type {typeof import('./planning-folder.d.mts').foreignPlanningFolderSigns} */
|
|
15
|
+
export function foreignPlanningFolderSigns(projectRoot) {
|
|
16
|
+
const folder = join(projectRoot, PLANNING_FOLDER);
|
|
17
|
+
if (!isDirectory(folder) || existsSync(join(folder, 'config.json'))) return [];
|
|
18
|
+
const signs = FOREIGN_FILES.filter((name) => existsSync(join(folder, name)));
|
|
19
|
+
for (const name of GOAL_DIRECTORIES) {
|
|
20
|
+
const directory = join(folder, name);
|
|
21
|
+
if (
|
|
22
|
+
isDirectory(directory) &&
|
|
23
|
+
readdirSync(directory).some((entry) => entry.endsWith('-goal.md'))
|
|
24
|
+
)
|
|
25
|
+
signs.push(`*-goal.md files in ${name}`);
|
|
26
|
+
}
|
|
27
|
+
return signs;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** @type {typeof import('./planning-folder.d.mts').planningFolderConflict} */
|
|
31
|
+
export function planningFolderConflict(projectRoot) {
|
|
32
|
+
const signs = foreignPlanningFolderSigns(projectRoot);
|
|
33
|
+
if (signs.length === 0) return null;
|
|
34
|
+
return Object.freeze({
|
|
35
|
+
code: 'E_PLANNING_FOLDER_FOREIGN',
|
|
36
|
+
problem: `The ${PLANNING_FOLDER} folder in this project wasn't created by OpenPlanr: it has ${signs.join(', ')} and no OpenPlanr config.json. OpenPlanr wrote nothing there.`,
|
|
37
|
+
fix: `Move or rename that folder, or use ${CLI_COMMAND} in a project without it, then retry.`,
|
|
38
|
+
signs: Object.freeze(signs),
|
|
39
|
+
});
|
|
40
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openplanr",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2641.1",
|
|
4
4
|
"description": "Deterministic OpenPlanr utilities for planning storage, validation, rendering, setup, diagnostics, and GitHub/Linear synchronization",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cli/index.js",
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
"bin": {
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
22
|
+
"openplanr": "./bin/openplanr.js",
|
|
23
|
+
"opr": "./bin/openplanr.js",
|
|
24
|
+
"planr": "./bin/planr.js"
|
|
25
25
|
},
|
|
26
26
|
"publishConfig": {
|
|
27
27
|
"access": "public",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"zod": "^4.3.6"
|
|
116
116
|
},
|
|
117
117
|
"optionalDependencies": {
|
|
118
|
-
"planr-pipeline": "0.
|
|
118
|
+
"planr-pipeline": "0.56.0"
|
|
119
119
|
},
|
|
120
120
|
"devDependencies": {
|
|
121
121
|
"@biomejs/biome": "^2.4.9",
|