openplanr 2.2641.1 → 2.2641.2
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 +21 -0
- package/README.md +1 -1
- package/dist/cli/commands/artifact.js +1 -1
- package/dist/cli/commands/artifact.js.map +1 -1
- package/dist/cli/commands/github.d.ts.map +1 -1
- package/dist/cli/commands/github.js +7 -10
- package/dist/cli/commands/github.js.map +1 -1
- package/dist/cli/commands/linear.js +1 -1
- package/dist/cli/commands/linear.js.map +1 -1
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +28 -32
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/dashboard/.vite/manifest.json +1 -1
- package/dist/dashboard/assets/{index-DGyC7RDz.js → index-DI_TKz9J.js} +2 -2
- package/dist/dashboard/assets/{index-DGyC7RDz.js.map → index-DI_TKz9J.js.map} +1 -1
- package/dist/dashboard/dashboard-manifest.json +8 -8
- package/dist/dashboard/index.html +1 -1
- package/dist/models/schema.d.ts +0 -4
- package/dist/models/schema.d.ts.map +1 -1
- package/dist/models/schema.js +0 -2
- package/dist/models/schema.js.map +1 -1
- package/dist/models/types.d.ts +1 -4
- package/dist/models/types.d.ts.map +1 -1
- package/dist/services/credentials-service.js +1 -1
- package/dist/services/credentials-service.js.map +1 -1
- package/dist/services/distribution-service.d.ts +1 -4
- package/dist/services/distribution-service.d.ts.map +1 -1
- package/dist/services/distribution-service.js +1 -60
- package/dist/services/distribution-service.js.map +1 -1
- package/dist/services/github-service.d.ts +7 -4
- package/dist/services/github-service.d.ts.map +1 -1
- package/dist/services/github-service.js +16 -15
- package/dist/services/github-service.js.map +1 -1
- package/dist/services/linear-push-service.d.ts +3 -4
- package/dist/services/linear-push-service.d.ts.map +1 -1
- package/dist/services/linear-push-service.js +5 -6
- package/dist/services/linear-push-service.js.map +1 -1
- package/dist/services/spec-service.d.ts.map +1 -1
- package/dist/services/spec-service.js +34 -69
- package/dist/services/spec-service.js.map +1 -1
- package/dist/templates/rules/shared/capability-map.md.hbs +1 -1
- package/docs/CLI.md +10 -14
- package/lib/host-packages/adapter-registry.json +5 -5
- package/lib/host-packages/capability-map.json +8 -8
- 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 +80 -64
- package/lib/host-packages/claude/openplanr/README.md +8 -12
- package/lib/host-packages/claude/openplanr/agents/planr-backend.md +49 -55
- package/lib/host-packages/claude/openplanr/agents/planr-database.md +56 -92
- package/lib/host-packages/claude/openplanr/agents/planr-designer.md +35 -51
- package/lib/host-packages/claude/openplanr/agents/planr-devops.md +37 -51
- package/lib/host-packages/claude/openplanr/agents/planr-documentation.md +29 -52
- package/lib/host-packages/claude/openplanr/agents/planr-entity-scaffold.md +24 -23
- package/lib/host-packages/claude/openplanr/agents/planr-frontend.md +46 -58
- package/lib/host-packages/claude/openplanr/agents/planr-qa.md +4 -2
- package/lib/host-packages/claude/openplanr/agents/planr-specification.md +54 -51
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/backend.md +21 -65
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/designer.md +5 -6
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/devops.md +2 -3
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/doc-gen.md +3 -4
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/frontend.md +19 -64
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/specification.md +10 -12
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/backend.md +19 -62
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/designer.md +3 -4
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/devops.md +2 -3
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/doc-gen.md +2 -3
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/frontend.md +16 -59
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/specification.md +9 -11
- package/lib/host-packages/claude/openplanr/references/pipeline/stacks/database/mongodb.md +4 -4
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +24 -9
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +3 -3
- 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/share.js +1 -1
- package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +1 -1
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +1 -1
- package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +1 -1
- package/lib/host-packages/claude/openplanr/skills/artifact/SKILL.md +2 -2
- package/lib/host-packages/claude/openplanr/skills/artifact/references/diagram-sharing.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/ceo-review/SKILL.md +0 -1
- package/lib/host-packages/claude/openplanr/skills/ceo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/claude/openplanr/skills/chair-review/SKILL.md +6 -2
- package/lib/host-packages/claude/openplanr/skills/challenger-review/SKILL.md +6 -2
- package/lib/host-packages/claude/openplanr/skills/cmo-review/SKILL.md +0 -1
- package/lib/host-packages/claude/openplanr/skills/cmo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/claude/openplanr/skills/coo-review/SKILL.md +0 -1
- package/lib/host-packages/claude/openplanr/skills/coo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/claude/openplanr/skills/cpo-review/SKILL.md +0 -1
- package/lib/host-packages/claude/openplanr/skills/cpo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/claude/openplanr/skills/cto-review/SKILL.md +0 -1
- package/lib/host-packages/claude/openplanr/skills/cto-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/claude/openplanr/skills/delegate/SKILL.md +7 -0
- package/lib/host-packages/claude/openplanr/skills/delegate/references/capsule-contract.md +16 -1
- package/lib/host-packages/claude/openplanr/skills/delegate/references/operator-guide.md +7 -5
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/claude.mjs +11 -4
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/native.mjs +1 -1
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/backend-diagnostics.mjs +14 -48
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/context.mjs +84 -22
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/credentials.mjs +167 -0
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/presentation.mjs +3 -2
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-contract.mjs +5 -7
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-preparation.mjs +2 -0
- package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-record.mjs +2 -3
- package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-sharing.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/operate/SKILL.md +5 -3
- package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +8 -2
- package/lib/host-packages/claude/openplanr/skills/sprint/SKILL.md +5 -4
- package/lib/host-packages/claude/openplanr/skills/sprint/references/tracker-connections.md +70 -0
- package/lib/host-packages/claude/openplanr/skills/status/SKILL.md +4 -3
- package/lib/host-packages/claude/openplanr/skills/status/references/tracker-connections.md +70 -0
- package/lib/host-packages/claude/openplanr/skills/sync/SKILL.md +11 -20
- package/lib/host-packages/claude/openplanr/skills/sync/references/tracker-connections.md +70 -0
- package/lib/host-packages/claude/openplanr/skills/sync/scripts/sync.mjs +2 -2
- package/lib/host-packages/cursor/openplanr/.openplanr-content.json +52 -36
- package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/diagram-sharing.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-artifact.mdc +2 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-chair-review.mdc +6 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review.mdc +6 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/capsule-contract.md +16 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/operator-guide.md +7 -5
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/claude.mjs +11 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/native.mjs +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/backend-diagnostics.mjs +14 -48
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/context.mjs +84 -22
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/credentials.mjs +167 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/presentation.mjs +3 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-contract.mjs +5 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-preparation.mjs +2 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-record.mjs +2 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-delegate.mdc +7 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-sharing.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-operate.mdc +5 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +8 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/tracker-connections.md +70 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-sprint.mdc +5 -4
- package/lib/host-packages/cursor/openplanr/rules/planr-status/references/tracker-connections.md +70 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-status.mdc +4 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-sync/references/tracker-connections.md +70 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/sync.mjs +2 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-sync.mdc +11 -20
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +24 -9
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +3 -3
- 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/share.js +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +1 -1
- package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +1 -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 +61 -45
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +24 -9
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +3 -3
- 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/share.js +1 -1
- package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +1 -1
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +1 -1
- package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +1 -1
- package/lib/host-packages/openai/openplanr/skills/artifact/SKILL.md +2 -2
- package/lib/host-packages/openai/openplanr/skills/artifact/references/diagram-sharing.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/ceo-review/SKILL.md +0 -1
- package/lib/host-packages/openai/openplanr/skills/ceo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/openai/openplanr/skills/chair-review/SKILL.md +6 -2
- package/lib/host-packages/openai/openplanr/skills/challenger-review/SKILL.md +6 -2
- package/lib/host-packages/openai/openplanr/skills/cmo-review/SKILL.md +0 -1
- package/lib/host-packages/openai/openplanr/skills/cmo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/openai/openplanr/skills/coo-review/SKILL.md +0 -1
- package/lib/host-packages/openai/openplanr/skills/coo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/openai/openplanr/skills/cpo-review/SKILL.md +0 -1
- package/lib/host-packages/openai/openplanr/skills/cpo-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/openai/openplanr/skills/cto-review/SKILL.md +0 -1
- package/lib/host-packages/openai/openplanr/skills/cto-review/references/operate-advisor-contract.md +25 -4
- package/lib/host-packages/openai/openplanr/skills/delegate/SKILL.md +7 -0
- package/lib/host-packages/openai/openplanr/skills/delegate/openplanr.skill.json +11 -0
- package/lib/host-packages/openai/openplanr/skills/delegate/references/capsule-contract.md +16 -1
- package/lib/host-packages/openai/openplanr/skills/delegate/references/operator-guide.md +7 -5
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/claude.mjs +11 -4
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/native.mjs +1 -1
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/backend-diagnostics.mjs +14 -48
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/context.mjs +84 -22
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/credentials.mjs +167 -0
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/presentation.mjs +3 -2
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-contract.mjs +5 -7
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-preparation.mjs +2 -0
- package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-record.mjs +2 -3
- package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-sharing.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/operate/SKILL.md +5 -3
- package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +8 -2
- package/lib/host-packages/openai/openplanr/skills/sprint/SKILL.md +5 -4
- package/lib/host-packages/openai/openplanr/skills/sprint/openplanr.skill.json +11 -0
- package/lib/host-packages/openai/openplanr/skills/sprint/references/tracker-connections.md +70 -0
- package/lib/host-packages/openai/openplanr/skills/status/SKILL.md +4 -3
- package/lib/host-packages/openai/openplanr/skills/status/openplanr.skill.json +11 -0
- package/lib/host-packages/openai/openplanr/skills/status/references/tracker-connections.md +70 -0
- package/lib/host-packages/openai/openplanr/skills/sync/SKILL.md +11 -20
- package/lib/host-packages/openai/openplanr/skills/sync/openplanr.skill.json +11 -0
- package/lib/host-packages/openai/openplanr/skills/sync/references/tracker-connections.md +70 -0
- package/lib/host-packages/openai/openplanr/skills/sync/scripts/sync.mjs +2 -2
- package/lib/integrations.mjs +2 -2
- package/package.json +2 -2
- package/dist/services/connectors/adapters/business-metrics.d.ts +0 -5
- package/dist/services/connectors/adapters/business-metrics.d.ts.map +0 -1
- package/dist/services/connectors/adapters/business-metrics.js +0 -41
- package/dist/services/connectors/adapters/business-metrics.js.map +0 -1
- package/dist/services/connectors/adapters/deployment-health.d.ts +0 -18
- package/dist/services/connectors/adapters/deployment-health.d.ts.map +0 -1
- package/dist/services/connectors/adapters/deployment-health.js +0 -67
- package/dist/services/connectors/adapters/deployment-health.js.map +0 -1
- package/dist/services/connectors/adapters/github.d.ts +0 -5
- package/dist/services/connectors/adapters/github.d.ts.map +0 -1
- package/dist/services/connectors/adapters/github.js +0 -31
- package/dist/services/connectors/adapters/github.js.map +0 -1
- package/dist/services/connectors/adapters/linear-jira.d.ts +0 -5
- package/dist/services/connectors/adapters/linear-jira.d.ts.map +0 -1
- package/dist/services/connectors/adapters/linear-jira.js +0 -26
- package/dist/services/connectors/adapters/linear-jira.js.map +0 -1
- package/dist/services/connectors/adapters/posthog.d.ts +0 -5
- package/dist/services/connectors/adapters/posthog.d.ts.map +0 -1
- package/dist/services/connectors/adapters/posthog.js +0 -31
- package/dist/services/connectors/adapters/posthog.js.map +0 -1
- package/dist/services/connectors/adapters/sentry.d.ts +0 -5
- package/dist/services/connectors/adapters/sentry.d.ts.map +0 -1
- package/dist/services/connectors/adapters/sentry.js +0 -31
- package/dist/services/connectors/adapters/sentry.js.map +0 -1
- package/dist/services/connectors/checkpoint-custody.d.ts +0 -45
- package/dist/services/connectors/checkpoint-custody.d.ts.map +0 -1
- package/dist/services/connectors/checkpoint-custody.js +0 -499
- package/dist/services/connectors/checkpoint-custody.js.map +0 -1
- package/dist/services/connectors/connector-registry.d.ts +0 -144
- package/dist/services/connectors/connector-registry.d.ts.map +0 -1
- package/dist/services/connectors/connector-registry.js +0 -423
- package/dist/services/connectors/connector-registry.js.map +0 -1
- package/dist/services/connectors/connector-runtime.d.ts +0 -208
- package/dist/services/connectors/connector-runtime.d.ts.map +0 -1
- package/dist/services/connectors/connector-runtime.js +0 -1305
- package/dist/services/connectors/connector-runtime.js.map +0 -1
- package/dist/services/connectors/credential-custody.d.ts +0 -96
- package/dist/services/connectors/credential-custody.d.ts.map +0 -1
- package/dist/services/connectors/credential-custody.js +0 -390
- package/dist/services/connectors/credential-custody.js.map +0 -1
package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/backend.md
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
<!--
|
|
1
|
+
<!-- Spec-driven paths for planr-backend. Loaded when the caller passes MODE=spec-driven and SPEC_DIR. -->
|
|
2
2
|
|
|
3
|
-
> **Mode:** spec-driven
|
|
4
|
-
> **Loaded by:** `agents/backend-agent.md` when the orchestrator passes `MODE=spec-driven` and `SPEC_DIR`.
|
|
3
|
+
> **Mode:** spec-driven (`SPEC_DIR` supplied).
|
|
5
4
|
|
|
6
5
|
## Path Resolution
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
Ship passes the absolute task file path, `MODE=spec-driven`, and `SPEC_DIR`.
|
|
8
|
+
Use that exact task path first.
|
|
10
9
|
|
|
11
10
|
- Spec directory: `.planr/specs/SPEC-NNN-{slug}/`.
|
|
12
11
|
- Task: `<SPEC_DIR>/tasks/T-NNN-{slug}.md`.
|
|
@@ -25,57 +24,21 @@ directory and use it only when unique. Follow
|
|
|
25
24
|
`${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/shared/task-context-resolution.md` after resolving
|
|
26
25
|
the file.
|
|
27
26
|
|
|
28
|
-
|
|
27
|
+
## Mode inputs
|
|
29
28
|
|
|
30
|
-
|
|
29
|
+
- The parent story, its optional Gherkin sidecar, and the enclosing
|
|
30
|
+
specification.
|
|
31
|
+
- `input/tech/stack.md` when present, with every `ActiveStackFiles` entry
|
|
32
|
+
resolved through the installed stack root and the project-local
|
|
33
|
+
`.planr/stacks` overlay.
|
|
34
|
+
- Each declared predecessor's output contract when `dependsOn` is non-empty.
|
|
35
|
+
- `output/db/schema.json` when the project keeps that snapshot and the task
|
|
36
|
+
references persistence; otherwise the repository's migrations or ORM models.
|
|
37
|
+
Validate table and column names before implementing them.
|
|
31
38
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|-------|--------|----------|
|
|
36
|
-
| `<SPEC_DIR>/tasks/T-NNN-{slug}.md` (Type=Tech) | Specification Agent | Yes |
|
|
37
|
-
| `input/tech/stack.md` | Tech Lead | Yes |
|
|
38
|
-
| `output/db/schema.json` | DB Agent | When referencing the DB |
|
|
39
|
-
| Existing codebase (read context) | Dev environment | Read-only |
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
## Outputs (Dev Mode — Step 3)
|
|
44
|
-
|
|
45
|
-
All files listed under `### Create` and `### Modify` in the task file (`<SPEC_DIR>/tasks/T-NNN-{slug}.md`).
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## Implementation guidance
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
1. Load `<SPEC_DIR>/tasks/T-NNN-{slug}.md` and extract frontmatter,
|
|
53
|
-
Create/Modify/Preserve, Objective, Implementation or Technical Spec,
|
|
54
|
-
Verification, and Done When. Follow `storyId` to the story, load its optional
|
|
55
|
-
Gherkin sidecar when present, then load the enclosing specification.
|
|
56
|
-
2. Load `input/tech/stack.md`. Resolve every `ActiveStackFiles` entry through the
|
|
57
|
-
installed stack root and the project-local `.planr/stacks` overlay as
|
|
58
|
-
defined by the shared task-context guidance.
|
|
59
|
-
3. Read each declared predecessor's output contract when `dependsOn` is non-empty.
|
|
60
|
-
Load `output/db/schema.json` when the task references persistence, and validate
|
|
61
|
-
table and column names before implementing them.
|
|
62
|
-
4. Read the listed files and enough connected source to understand established
|
|
63
|
-
interfaces and project patterns.
|
|
64
|
-
5. Implement the requested backend behavior completely using established project
|
|
65
|
-
patterns. Add meaningful unit and integration coverage where it improves
|
|
66
|
-
confidence.
|
|
67
|
-
6. Treat Create/Modify as expected scope. A directly required companion test,
|
|
68
|
-
declaration, migration, fixture, generated file, or configuration change is
|
|
69
|
-
valid when it serves acceptance criteria, stays within backend ownership, and
|
|
70
|
-
remains outside Preserve. Disclose it in the result.
|
|
71
|
-
7. Keep Preserve paths unchanged. If the requested outcome conflicts with one,
|
|
72
|
-
find a safe in-scope alternative or report the conflict clearly.
|
|
73
|
-
8. Apply `${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/shared/verification-and-recovery-backend.md` for
|
|
74
|
-
adaptive verification and recovery.
|
|
75
|
-
9. Return the shared implementation-result format.
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
---
|
|
39
|
+
Apply `${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/shared/verification-and-recovery-backend.md`
|
|
40
|
+
for adaptive verification and recovery, and return the shared
|
|
41
|
+
implementation-result format.
|
|
79
42
|
|
|
80
43
|
## Error Handling (mode-specific paths)
|
|
81
44
|
|
|
@@ -84,13 +47,7 @@ All files listed under `### Create` and `### Modify` in the task file (`<SPEC_DI
|
|
|
84
47
|
| SPEC_DIR or Ship task path missing/ambiguous | Report the selector, searched directory, and candidates; do not guess |
|
|
85
48
|
| Parent story or spec missing | Continue from the task and source when sufficient; list the missing path under Issues |
|
|
86
49
|
| Active stack file missing | Report the logical path and both lookup locations; use the installed default when available |
|
|
87
|
-
| schema
|
|
88
|
-
| DB table or column absent from schema | Report the exact reference and the smallest schema or task correction needed |
|
|
50
|
+
| No schema source for DB work | Identify the affected requirement and avoid inventing tables or columns; continue unaffected work |
|
|
51
|
+
| DB table or column absent from the schema source | Report the exact reference and the smallest schema or task correction needed |
|
|
89
52
|
| `dependsOn` output unavailable | Name the dependency and required interface; continue independent work and report the blocked portion |
|
|
90
53
|
| Preserve path changed | Restore it, use another implementation approach, and report a conflict only if no safe approach remains |
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
*Reads: task · spec/story/Gherkin · dependency outputs · stack overlays · schema · source*
|
|
95
|
-
*Writes: backend layer files only*
|
|
96
|
-
*Runs in parallel with: Frontend Agent (UI task)*
|
package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/designer.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
<!--
|
|
1
|
+
<!-- Spec-driven paths for planr-designer. Loaded when the caller passes MODE=spec-driven and SPEC_DIR. -->
|
|
2
2
|
|
|
3
|
-
> **Mode:** spec-driven
|
|
4
|
-
> **Loaded by:** `agents/designer-agent.md` when the orchestrator passes `MODE=spec-driven` and `SPEC_DIR`.
|
|
3
|
+
> **Mode:** spec-driven (`SPEC_DIR` supplied).
|
|
5
4
|
|
|
6
5
|
## Path Resolution
|
|
7
6
|
|
|
@@ -80,4 +79,4 @@ If all sources are empty: skip silently (do not write design-spec.md, do not err
|
|
|
80
79
|
|
|
81
80
|
*Reads: `<SPEC_DIR>/design/*.png` · `input/tech/stack.md`*
|
|
82
81
|
*Writes: `<SPEC_DIR>/design/design-spec.md`*
|
|
83
|
-
*
|
|
82
|
+
*Read by: planr-specification*
|
package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/devops.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
<!--
|
|
1
|
+
<!-- Spec-driven context for planr-devops. Loaded when the caller passes MODE=spec-driven and SPEC_DIR. -->
|
|
2
2
|
|
|
3
|
-
> **Mode:** spec-driven
|
|
4
|
-
> **Loaded by:** `agents/devops-agent.md` when the orchestrator passes `MODE=spec-driven` and `SPEC_DIR`.
|
|
3
|
+
> **Mode:** spec-driven (`SPEC_DIR` supplied).
|
|
5
4
|
|
|
6
5
|
## Context locations
|
|
7
6
|
|
package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/doc-gen.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
<!--
|
|
1
|
+
<!-- Spec-driven context for planr-documentation. Loaded when the caller passes MODE=spec-driven and SPEC_DIR. -->
|
|
2
2
|
|
|
3
|
-
> **Mode:** spec-driven
|
|
4
|
-
> **Loaded by:** `agents/doc-gen-agent.md` when the orchestrator passes `MODE=spec-driven` and `SPEC_DIR`.
|
|
3
|
+
> **Mode:** spec-driven (`SPEC_DIR` supplied).
|
|
5
4
|
|
|
6
5
|
## Path Resolution
|
|
7
6
|
|
package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/frontend.md
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
<!--
|
|
1
|
+
<!-- Spec-driven paths for planr-frontend. Loaded when the caller passes MODE=spec-driven and SPEC_DIR. -->
|
|
2
2
|
|
|
3
|
-
> **Mode:** spec-driven
|
|
4
|
-
> **Loaded by:** `agents/frontend-agent.md` when the orchestrator passes `MODE=spec-driven` and `SPEC_DIR`.
|
|
3
|
+
> **Mode:** spec-driven (`SPEC_DIR` supplied).
|
|
5
4
|
|
|
6
5
|
## Path Resolution
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
Ship passes the absolute task file path, `MODE=spec-driven`, and `SPEC_DIR`.
|
|
8
|
+
Use that exact task path first.
|
|
10
9
|
|
|
11
10
|
- Spec directory: `.planr/specs/SPEC-NNN-{slug}/`.
|
|
12
11
|
- Task: `<SPEC_DIR>/tasks/T-NNN-{slug}.md`.
|
|
@@ -26,56 +25,20 @@ directory and use it only when unique. Follow
|
|
|
26
25
|
`${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/shared/task-context-resolution.md` after resolving
|
|
27
26
|
the file. Task content is schema-identical in both modes; only paths differ.
|
|
28
27
|
|
|
29
|
-
|
|
28
|
+
## Mode inputs
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
- The parent story, its optional Gherkin sidecar, and the enclosing
|
|
31
|
+
specification.
|
|
32
|
+
- `<SPEC_DIR>/design/design-spec.md` when it exists, plus the reusable UI and
|
|
33
|
+
design-system implementation already in the repository.
|
|
34
|
+
- `input/tech/stack.md` when present, with every `ActiveStackFiles` entry
|
|
35
|
+
resolved through the installed stack root and the project-local
|
|
36
|
+
`.planr/stacks` overlay.
|
|
37
|
+
- Each declared predecessor's output contract when `dependsOn` is non-empty.
|
|
32
38
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
| `<SPEC_DIR>/design/design-spec.md` | Designer Agent | If exists |
|
|
37
|
-
| `input/tech/stack.md` | Tech Lead | Yes |
|
|
38
|
-
| Existing codebase files (for context) | Dev environment | Read-only for context |
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## Outputs
|
|
43
|
-
|
|
44
|
-
All files listed under `### Create` and `### Modify` in the task file (`<SPEC_DIR>/tasks/T-NNN-{slug}.md`).
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## Implementation guidance
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
1. Load `<SPEC_DIR>/tasks/T-NNN-{slug}.md` and extract frontmatter,
|
|
52
|
-
Create/Modify/Preserve, Objective, Implementation or Technical Spec,
|
|
53
|
-
Verification, and Done When. Follow `storyId` to the story, load its optional
|
|
54
|
-
Gherkin sidecar when present, then load the enclosing specification.
|
|
55
|
-
2. Load `input/tech/stack.md`. Resolve every `ActiveStackFiles` entry through the
|
|
56
|
-
installed stack root and the project-local `.planr/stacks` overlay as
|
|
57
|
-
defined by the shared task-context guidance.
|
|
58
|
-
3. Read each declared predecessor's output contract when `dependsOn` is non-empty.
|
|
59
|
-
Load `<SPEC_DIR>/design/design-spec.md` when it exists.
|
|
60
|
-
4. Read the listed files, reusable UI, design-system implementation, and enough
|
|
61
|
-
connected source to understand established interfaces and patterns.
|
|
62
|
-
5. Implement the requested UI behavior completely using established project and
|
|
63
|
-
design-system patterns. Cover material loading, empty, error, success, and
|
|
64
|
-
accessibility behavior.
|
|
65
|
-
6. Add meaningful component, interaction, and browser coverage where it improves
|
|
66
|
-
confidence.
|
|
67
|
-
7. Treat Create/Modify as expected scope. A directly required companion test,
|
|
68
|
-
story, fixture, route registration, generated file, or configuration change is
|
|
69
|
-
valid when it serves acceptance criteria, stays within frontend ownership, and
|
|
70
|
-
remains outside Preserve. Disclose it in the result.
|
|
71
|
-
8. Keep Preserve paths unchanged. If the requested outcome conflicts with one,
|
|
72
|
-
find a safe in-scope alternative or report the conflict clearly.
|
|
73
|
-
9. Apply `${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/shared/verification-and-recovery-frontend.md` for
|
|
74
|
-
adaptive verification and recovery.
|
|
75
|
-
10. Return the shared implementation-result format.
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
---
|
|
39
|
+
Apply `${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/shared/verification-and-recovery-frontend.md`
|
|
40
|
+
for adaptive verification and recovery, and return the shared
|
|
41
|
+
implementation-result format.
|
|
79
42
|
|
|
80
43
|
## Error Handling (mode-specific paths)
|
|
81
44
|
|
|
@@ -88,9 +51,3 @@ All files listed under `### Create` and `### Modify` in the task file (`<SPEC_DI
|
|
|
88
51
|
| Component library unavailable | Report the import/package and affected UI; use an established project alternative when one exists |
|
|
89
52
|
| `dependsOn` output unavailable | Name the dependency and required interface; continue independent work and report the blocked portion |
|
|
90
53
|
| Preserve path changed | Restore it, use another implementation approach, and report a conflict only if no safe approach remains |
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
*Reads: task · spec/story/Gherkin · dependency outputs · stack overlays · design · source*
|
|
95
|
-
*Writes: UI layer files only*
|
|
96
|
-
*Runs in parallel with: Backend Agent (Tech task)*
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
<!--
|
|
1
|
+
<!-- Spec-driven paths for planr-specification. Loaded when the caller passes MODE=spec-driven and SPEC_DIR. -->
|
|
2
2
|
|
|
3
|
-
> **Mode:** spec-driven
|
|
4
|
-
> **Loaded by:** `agents/specification-agent.md` when the orchestrator passes `MODE=spec-driven` and `SPEC_DIR`.
|
|
3
|
+
> **Mode:** spec-driven (`SPEC_DIR` supplied).
|
|
5
4
|
|
|
6
5
|
## Path Resolution
|
|
7
6
|
|
|
@@ -69,14 +68,13 @@ The flat `tasks/` directory is intentional — `storyId` frontmatter on each tas
|
|
|
69
68
|
5. Decompose the source into independently valuable User Stories and write each
|
|
70
69
|
story to `<SPEC_DIR>/stories/US-NNN-{slug}.md`. Use `specId: "SPEC-NNN"` and
|
|
71
70
|
allocate story IDs from the project-global sequence.
|
|
72
|
-
6. Apply R2 to each story
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
c. never write a third task for the story.
|
|
71
|
+
6. Apply R2 to each story (coherent, independently verifiable tasks split by
|
|
72
|
+
ownership) while assigning the next task IDs under the flat
|
|
73
|
+
`<SPEC_DIR>/tasks/` directory: UI work is a `type: "UI"` /
|
|
74
|
+
`agent: "frontend-agent"` task and server or data work is a `type: "Tech"` /
|
|
75
|
+
`agent: "backend-agent"` task. Most stories get one Tech task, plus one UI
|
|
76
|
+
task when `has_design = true`; add a task only for a real output dependency,
|
|
77
|
+
a distinct verification surface, or reviewable size.
|
|
80
78
|
7. Populate every task with its required schema fields, `storyId`, mode parent
|
|
81
79
|
`specId`, 1–3 sentence `rationale`, concrete Create/Modify paths,
|
|
82
80
|
verification, and `preserve` block maps with exact `repositoryKey` and `path`
|
|
@@ -36,12 +36,12 @@ DB_HOST: "${MONGO_HOST}" # e.g. cluster0.mongodb.net or localhost
|
|
|
36
36
|
DB_PORT: "${MONGO_PORT}" # 27017 default
|
|
37
37
|
DB_NAME: "${MONGO_DB}"
|
|
38
38
|
DB_USER: "${MONGO_USER}"
|
|
39
|
-
DB_PASSWORD: "${MONGO_PASSWORD}"
|
|
40
|
-
|
|
41
|
-
# Connection string assembled by the application:
|
|
42
|
-
# mongodb+srv://USER:PASS@HOST/DB?retryWrites=true&w=majority
|
|
43
39
|
```
|
|
44
40
|
|
|
41
|
+
The application reads its full connection string from its own runtime environment
|
|
42
|
+
(`DATABASE_URL`), as the Prisma variant below does. Generated code never assembles,
|
|
43
|
+
logs or commits credentials.
|
|
44
|
+
|
|
45
45
|
---
|
|
46
46
|
|
|
47
47
|
## Naming Conventions
|
|
@@ -424,8 +424,12 @@ import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
|
424
424
|
import { fileURLToPath } from "node:url";
|
|
425
425
|
var here = dirname(fileURLToPath(new URL("./runtime/packages/artifact/lib/artifact/review-server.mjs", import.meta.url).href));
|
|
426
426
|
var STAGE_RUNTIME_PATH = join(here, "..", "..", "templates", "artifact-review-stage.js");
|
|
427
|
-
var ARTIFACT_REVIEW_SERVER_VERSION =
|
|
427
|
+
var ARTIFACT_REVIEW_SERVER_VERSION = 3;
|
|
428
428
|
var ARTIFACT_REVIEW_SERVER_KIND = "artifact-review";
|
|
429
|
+
var CONTROL_HEADER = "x-openplanr-control";
|
|
430
|
+
var CONTROLLABLE_SERVER_VERSIONS = /* @__PURE__ */ new Set([2, ARTIFACT_REVIEW_SERVER_VERSION]);
|
|
431
|
+
var EXPORT_ONLY_SERVER_VERSIONS = /* @__PURE__ */ new Set([1]);
|
|
432
|
+
var AUTHORIZATION_CONTROL_VERSIONS = /* @__PURE__ */ new Set([1, 2]);
|
|
429
433
|
var CONTROL_WINDOW_BYTES = 64 * 1024 * 1024;
|
|
430
434
|
var ARTIFACT_REVIEW_MAX_CONTROL_BYTES = Math.ceil((MAX_ARTIFACT_HTML_BYTES * 2 + ARTIFACT_REVIEW_MAX_STATE_BYTES) / CONTROL_WINDOW_BYTES) * CONTROL_WINDOW_BYTES;
|
|
431
435
|
var ARTIFACT_REVIEW_MAX_STATE_BYTES2 = ARTIFACT_REVIEW_MAX_STATE_BYTES;
|
|
@@ -481,6 +485,12 @@ var PERMISSIONS_POLICY = [
|
|
|
481
485
|
function artifactError(code, message, fix = "", details) {
|
|
482
486
|
return new PipelineError(code, message, fix, details);
|
|
483
487
|
}
|
|
488
|
+
function artifactReviewControlHeaders(controlToken) {
|
|
489
|
+
return { [CONTROL_HEADER]: controlToken };
|
|
490
|
+
}
|
|
491
|
+
function stateControlHeaders(state) {
|
|
492
|
+
return AUTHORIZATION_CONTROL_VERSIONS.has(state.serverVersion) ? { authorization: `Bearer ${state.controlToken}` } : artifactReviewControlHeaders(state.controlToken);
|
|
493
|
+
}
|
|
484
494
|
function reviewStateDir(env = process.env) {
|
|
485
495
|
return join(planrHome(env), "artifact-daemon");
|
|
486
496
|
}
|
|
@@ -563,9 +573,9 @@ function parseRequestPath(rawUrl) {
|
|
|
563
573
|
});
|
|
564
574
|
return { segments, trailingSlash };
|
|
565
575
|
}
|
|
566
|
-
function
|
|
567
|
-
const value = req.headers?.
|
|
568
|
-
return typeof value === "string"
|
|
576
|
+
function presentedControlToken(req) {
|
|
577
|
+
const value = req.headers?.[CONTROL_HEADER];
|
|
578
|
+
return typeof value === "string" ? value : "";
|
|
569
579
|
}
|
|
570
580
|
function cloneAndValidateEnvelope(envelope) {
|
|
571
581
|
let cloned;
|
|
@@ -875,7 +885,7 @@ function createArtifactReviewServer({
|
|
|
875
885
|
return;
|
|
876
886
|
}
|
|
877
887
|
if (internal) {
|
|
878
|
-
if (!timingSafeTokenEqual(
|
|
888
|
+
if (!timingSafeTokenEqual(presentedControlToken(req), controlToken)) {
|
|
879
889
|
sendJson(res, 403, { ok: false, error: "forbidden" });
|
|
880
890
|
return;
|
|
881
891
|
}
|
|
@@ -1449,7 +1459,7 @@ function createArtifactReviewServer({
|
|
|
1449
1459
|
return controller;
|
|
1450
1460
|
}
|
|
1451
1461
|
function validState(value, requestedPort, { allowLegacy = false } = {}) {
|
|
1452
|
-
return value?.schemaVersion === "1.0.0" && value.kind === ARTIFACT_REVIEW_SERVER_KIND && (value.serverVersion
|
|
1462
|
+
return value?.schemaVersion === "1.0.0" && value.kind === ARTIFACT_REVIEW_SERVER_KIND && (CONTROLLABLE_SERVER_VERSIONS.has(value.serverVersion) || allowLegacy && EXPORT_ONLY_SERVER_VERSIONS.has(value.serverVersion)) && Number.isInteger(value.pid) && value.pid > 0 && Number.isInteger(value.port) && value.port > 0 && value.port <= 65535 && (requestedPort === 0 || value.port === requestedPort) && isCapabilityToken(value.instanceId, { bytes: SESSION_ID_BYTES }) && isCapabilityToken(value.controlToken, { bytes: CONTROL_TOKEN_BYTES });
|
|
1453
1463
|
}
|
|
1454
1464
|
function readReviewServerState(path) {
|
|
1455
1465
|
try {
|
|
@@ -1473,7 +1483,7 @@ async function controlRequest(descriptor, path, { method, body, fetchImpl } = {}
|
|
|
1473
1483
|
const response = await fetchImpl(`http://${LOOPBACK_HOST}:${descriptor.state.port}${path}`, {
|
|
1474
1484
|
method,
|
|
1475
1485
|
headers: {
|
|
1476
|
-
|
|
1486
|
+
...stateControlHeaders(descriptor.state),
|
|
1477
1487
|
...body === void 0 ? {} : { "content-type": "application/json" }
|
|
1478
1488
|
},
|
|
1479
1489
|
...body === void 0 ? {} : { body: JSON.stringify(body) },
|
|
@@ -2852,7 +2862,12 @@ async function startDesignReviewUnlocked(file, {
|
|
|
2852
2862
|
server = createArtifactReviewServer({
|
|
2853
2863
|
env,
|
|
2854
2864
|
serverMetadata: { kind: "design", projectRoot: current.root },
|
|
2855
|
-
prepareSource: (options) => prepareArtifactDocument({
|
|
2865
|
+
prepareSource: (options) => prepareArtifactDocument({
|
|
2866
|
+
...options,
|
|
2867
|
+
allowLocalForms: true,
|
|
2868
|
+
prototypeState: true,
|
|
2869
|
+
screenId: current.entries.find((entry) => entry.artifactId === options.artifactId)?.screenId ?? options.artifactId
|
|
2870
|
+
}),
|
|
2856
2871
|
async refreshSession(session) {
|
|
2857
2872
|
current = currentDesign(file);
|
|
2858
2873
|
if (session.designRevision === current.revision) return;
|
|
@@ -3214,7 +3229,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
|
|
|
3214
3229
|
const registered = await fetchImpl(`${origin}/internal/v1/sessions`, {
|
|
3215
3230
|
method: "POST",
|
|
3216
3231
|
headers: {
|
|
3217
|
-
|
|
3232
|
+
...artifactReviewControlHeaders(server.controlToken),
|
|
3218
3233
|
"content-type": "application/json"
|
|
3219
3234
|
},
|
|
3220
3235
|
body: JSON.stringify({
|
|
@@ -92,7 +92,7 @@ ${current.document.id}`);
|
|
|
92
92
|
const within = relative(project, root);
|
|
93
93
|
if ((!allowMissing || existsSync(path)) && (within === "" || !within.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) && within !== ".." && !isAbsolute(within)))
|
|
94
94
|
throw new Error(
|
|
95
|
-
"Design owner
|
|
95
|
+
"Design owner keys must be stored outside the project. Set PLANR_HOME to a private user-level directory."
|
|
96
96
|
);
|
|
97
97
|
const legacyPath = !options.custodyRoot && !configuredPlanrHome(env) ? join(realpathSync(env.HOME || homedir()), ".openplanr", "design-shares", `${key}.json`) : null;
|
|
98
98
|
return { root, path, current, legacyPath };
|
|
@@ -1785,10 +1785,10 @@ async function importDesignShareRecovery(file, { input, ...options } = {}) {
|
|
|
1785
1785
|
throw new Error("Recovery belongs to a different design.");
|
|
1786
1786
|
if (record && (record.custody.id !== custody.id || JSON.stringify(record.custody.ownerPublicKey) !== JSON.stringify(custody.ownerPublicKey)))
|
|
1787
1787
|
throw new Error(
|
|
1788
|
-
"This design already has different owner
|
|
1788
|
+
"This design already has different owner keys. Recovery will not overwrite them."
|
|
1789
1789
|
);
|
|
1790
1790
|
if (record && record.custody.version > custody.version)
|
|
1791
|
-
throw new Error("This recovery file is older than the locally saved owner
|
|
1791
|
+
throw new Error("This recovery file is older than the locally saved owner keys.");
|
|
1792
1792
|
if (!custody.pendingCreate && !recovered.deleted && !recovered.revoked) {
|
|
1793
1793
|
await getWorkspace(custody, { fetchImpl: options.fetchImpl });
|
|
1794
1794
|
const bundle = await decryptWorkspaceRevision(custody, custody.currentRevision, {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openplanr/design",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.5",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Canonical OpenPlanr design helpers and design-loop engine",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"node": ">=20.19.0"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@openplanr/artifact": "0.6.
|
|
50
|
-
"@openplanr/protocol": "0.10.
|
|
49
|
+
"@openplanr/artifact": "0.6.5",
|
|
50
|
+
"@openplanr/protocol": "0.10.3"
|
|
51
51
|
},
|
|
52
52
|
"scripts": {
|
|
53
53
|
"test": "node --test --test-concurrency=2 tests/*.test.mjs",
|
|
@@ -2551,7 +2551,7 @@ ${current.document.id}`);
|
|
|
2551
2551
|
const within = relative3(project, root);
|
|
2552
2552
|
if ((!allowMissing || existsSync4(path)) && (within === "" || !within.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) && within !== ".." && !isAbsolute3(within)))
|
|
2553
2553
|
throw new Error(
|
|
2554
|
-
"Design owner
|
|
2554
|
+
"Design owner keys must be stored outside the project. Set PLANR_HOME to a private user-level directory."
|
|
2555
2555
|
);
|
|
2556
2556
|
const legacyPath = !options.custodyRoot && !configuredPlanrHome(env) ? join7(realpathSync4(env.HOME || homedir3()), ".openplanr", "design-shares", `${key}.json`) : null;
|
|
2557
2557
|
return { root, path, current, legacyPath };
|
|
@@ -30,7 +30,7 @@ relaunch the active coding agent from inside this skill.
|
|
|
30
30
|
preserve existing guidance and never invent requirements. Render and inspect
|
|
31
31
|
the updated context before sharing. For a design document this creates a permanent encrypted
|
|
32
32
|
design review with a stable URL and a separately entered generated access
|
|
33
|
-
token. Owner
|
|
33
|
+
token. Owner keys save privately outside the project; copy the reviewer
|
|
34
34
|
token through the studio's Share dialog, never put it in a URL or ordinary
|
|
35
35
|
command output. Publish an explicitly requested update with
|
|
36
36
|
`openplanr artifact publish <design-document.json>`; synchronize reviewer feedback
|
|
@@ -67,7 +67,7 @@ separate permissions and storage from encrypted token shares.
|
|
|
67
67
|
|
|
68
68
|
Lead with what was opened, shared, imported or exported and the confirmed revision
|
|
69
69
|
or session. Link the actual review URL or exported file; never print capability
|
|
70
|
-
tokens or private owner
|
|
70
|
+
tokens or private owner keys. Distinguish successful service operations
|
|
71
71
|
from preparation and browser verification from validation alone. For partial or
|
|
72
72
|
blocked work, name the remaining step and exact retry or recovery action, retaining
|
|
73
73
|
the useful local result. Keep detailed diagnostics in their existing records;
|
|
@@ -13,7 +13,7 @@ review. Preview the exact diagram title, source revision, elements, connections,
|
|
|
13
13
|
destination and retention before creating it. Use `--yes` only when the user has
|
|
14
14
|
already authorized that publication. The stable URL and generated access token
|
|
15
15
|
are separate; copy the token through the local studio's **Share diagram** dialog,
|
|
16
|
-
never into a URL, prompt, ordinary output or repository file. Owner
|
|
16
|
+
never into a URL, prompt, ordinary output or repository file. Owner keys
|
|
17
17
|
are saved privately outside the project. The review remains available until the
|
|
18
18
|
owner revokes or deletes it and works while the local studio is stopped.
|
|
19
19
|
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: ceo-review
|
|
3
3
|
description: "Produce a grounded strategy and finance review for an Operate cycle. Use when direction, runway, margin, investment, or cost of delay needs a CEO lens."
|
|
4
4
|
license: MIT
|
|
5
|
-
allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
# OpenPlanr CEO Review
|
package/lib/host-packages/claude/openplanr/skills/ceo-review/references/operate-advisor-contract.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Shared Operate advisor contract
|
|
2
2
|
|
|
3
|
-
This contract supplies the common context method and output shape for the
|
|
4
|
-
skills. The invoking skill supplies the lens, review questions,
|
|
5
|
-
standard. Follow both.
|
|
3
|
+
This contract supplies the common context method and output shape for the executive advisor
|
|
4
|
+
skills (CEO, CTO, CPO, CMO, and COO). The invoking skill supplies the lens, review questions,
|
|
5
|
+
useful sources, and decision standard. Follow both.
|
|
6
6
|
|
|
7
7
|
## Outcome
|
|
8
8
|
|
|
@@ -21,7 +21,28 @@ not the whole context boundary. Inspect relevant original repository and Git sou
|
|
|
21
21
|
drawing conclusions. If an input is unavailable, report the exact problem and continue when the
|
|
22
22
|
remaining context still supports a useful note.
|
|
23
23
|
|
|
24
|
-
Write the review only to `<output-path>`.
|
|
24
|
+
Write the review only to `<output-path>`. Writes follow the host's normal permission rules; this
|
|
25
|
+
skill pre-approves nothing.
|
|
26
|
+
|
|
27
|
+
### Running without `planr-operate`
|
|
28
|
+
|
|
29
|
+
When no `<output-path>` was supplied, this lens creates the cycle itself, in the layout
|
|
30
|
+
`planr-operate` uses, under the repository root:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
.planr/operate/<YYYY-MM-DD>-<subject-slug>/
|
|
34
|
+
cycle.md the request wording, the effective scope, and a one-lens roster
|
|
35
|
+
brief.md compact orientation for this lens only, including what was searched for and not found
|
|
36
|
+
<lens>.md this note: ceo.md, cto.md, cpo.md, cmo.md, or coo.md
|
|
37
|
+
board-report.md an unsynthesized lens summary
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Take the subject, window, and requested decision from the request. Use the first unused directory
|
|
41
|
+
name; append `-02`, `-03`, and so on when the base name exists. In `board-report.md`, use the
|
|
42
|
+
`planr-operate` report sections, mark this lens `reported` and every other lens `omitted by scope`
|
|
43
|
+
under Review coverage, and write `No decision-ready proposal was established.` and
|
|
44
|
+
`No proposed actions.` unless this note states a directly supported proposal. Write nothing outside
|
|
45
|
+
that cycle directory. The dashboard lists a cycle only when `board-report.md` exists.
|
|
25
46
|
|
|
26
47
|
## Grounding
|
|
27
48
|
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: chair-review
|
|
3
3
|
description: "Synthesize an Operate cycle into a prioritized decision queue and action plan. Use after specialist reviews when leadership needs one coherent brief."
|
|
4
4
|
license: MIT
|
|
5
|
-
allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
# OpenPlanr Chair Review
|
|
@@ -18,7 +17,12 @@ and its decision impact; continue when the remaining notes still support useful
|
|
|
18
17
|
selected roster from the scope or brief and label an intentionally unselected lens `omitted by
|
|
19
18
|
scope`; do not turn that omission into an issue or decision-changing gap.
|
|
20
19
|
|
|
21
|
-
Write only `<output-path>`.
|
|
20
|
+
Write only `<output-path>`. Writes follow the host's normal permission rules; this skill
|
|
21
|
+
pre-approves nothing.
|
|
22
|
+
|
|
23
|
+
Invoked without `<cycle-dir>`, offer the most recent cycle under `.planr/operate/` that holds
|
|
24
|
+
advisor notes and use its `chair.md` as the output path. When there is none, say so and point to
|
|
25
|
+
`planr-operate`; never create an empty cycle.
|
|
22
26
|
|
|
23
27
|
## Synthesis standard
|
|
24
28
|
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: challenger-review
|
|
3
3
|
description: "Challenge an Operate cycle's claims, alternatives, downside, and confidence. Use when assumptions or executive consensus need an independent stress test."
|
|
4
4
|
license: MIT
|
|
5
|
-
allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
# OpenPlanr Challenger Review
|
|
@@ -18,7 +17,12 @@ Use `<cycle-dir>`, `<brief-path>`, `<output-path>`, and `<scope>`. Inspect the a
|
|
|
18
17
|
is `omitted by scope`, not unavailable, and creates no gap by itself. If a selected advisor note is
|
|
19
18
|
unavailable, record the decision impact rather than reconstructing that lens.
|
|
20
19
|
|
|
21
|
-
Write only `<output-path>`.
|
|
20
|
+
Write only `<output-path>`. Writes follow the host's normal permission rules; this skill
|
|
21
|
+
pre-approves nothing.
|
|
22
|
+
|
|
23
|
+
Invoked without `<cycle-dir>`, offer the most recent cycle under `.planr/operate/` that holds
|
|
24
|
+
advisor notes and use its `challenger.md` as the output path. When there is none, say so and point
|
|
25
|
+
to `planr-operate`; never create an empty cycle.
|
|
22
26
|
|
|
23
27
|
## Material exceptions
|
|
24
28
|
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: cmo-review
|
|
3
3
|
description: "Produce a grounded market and growth review for an Operate cycle. Use when acquisition, positioning, demand, retention, or missing measurement needs a CMO lens."
|
|
4
4
|
license: MIT
|
|
5
|
-
allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
# OpenPlanr CMO Review
|
package/lib/host-packages/claude/openplanr/skills/cmo-review/references/operate-advisor-contract.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Shared Operate advisor contract
|
|
2
2
|
|
|
3
|
-
This contract supplies the common context method and output shape for the
|
|
4
|
-
skills. The invoking skill supplies the lens, review questions,
|
|
5
|
-
standard. Follow both.
|
|
3
|
+
This contract supplies the common context method and output shape for the executive advisor
|
|
4
|
+
skills (CEO, CTO, CPO, CMO, and COO). The invoking skill supplies the lens, review questions,
|
|
5
|
+
useful sources, and decision standard. Follow both.
|
|
6
6
|
|
|
7
7
|
## Outcome
|
|
8
8
|
|
|
@@ -21,7 +21,28 @@ not the whole context boundary. Inspect relevant original repository and Git sou
|
|
|
21
21
|
drawing conclusions. If an input is unavailable, report the exact problem and continue when the
|
|
22
22
|
remaining context still supports a useful note.
|
|
23
23
|
|
|
24
|
-
Write the review only to `<output-path>`.
|
|
24
|
+
Write the review only to `<output-path>`. Writes follow the host's normal permission rules; this
|
|
25
|
+
skill pre-approves nothing.
|
|
26
|
+
|
|
27
|
+
### Running without `planr-operate`
|
|
28
|
+
|
|
29
|
+
When no `<output-path>` was supplied, this lens creates the cycle itself, in the layout
|
|
30
|
+
`planr-operate` uses, under the repository root:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
.planr/operate/<YYYY-MM-DD>-<subject-slug>/
|
|
34
|
+
cycle.md the request wording, the effective scope, and a one-lens roster
|
|
35
|
+
brief.md compact orientation for this lens only, including what was searched for and not found
|
|
36
|
+
<lens>.md this note: ceo.md, cto.md, cpo.md, cmo.md, or coo.md
|
|
37
|
+
board-report.md an unsynthesized lens summary
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Take the subject, window, and requested decision from the request. Use the first unused directory
|
|
41
|
+
name; append `-02`, `-03`, and so on when the base name exists. In `board-report.md`, use the
|
|
42
|
+
`planr-operate` report sections, mark this lens `reported` and every other lens `omitted by scope`
|
|
43
|
+
under Review coverage, and write `No decision-ready proposal was established.` and
|
|
44
|
+
`No proposed actions.` unless this note states a directly supported proposal. Write nothing outside
|
|
45
|
+
that cycle directory. The dashboard lists a cycle only when `board-report.md` exists.
|
|
25
46
|
|
|
26
47
|
## Grounding
|
|
27
48
|
|