@openplanr/protocol 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +82 -0
- package/lib/dashboard/closed-json-contract.mjs +141 -0
- package/lib/dashboard/generated/operate-experience-surface-schema-data.mjs +67 -0
- package/lib/dashboard/generated/operate-review-schema-data.mjs +35 -0
- package/lib/dashboard/generated/operate-schema-token-codec.mjs +127 -0
- package/lib/dashboard/operate-experience-audit-display-contract.d.mts +196 -0
- package/lib/dashboard/operate-experience-audit-display-contract.mjs +700 -0
- package/lib/dashboard/operate-experience-display-contract.d.mts +572 -0
- package/lib/dashboard/operate-experience-display-contract.mjs +1007 -0
- package/lib/dashboard/operate-experience-surface-contract.d.mts +157 -0
- package/lib/dashboard/operate-experience-surface-contract.mjs +91 -0
- package/lib/dashboard/operate-review-contract.d.mts +34 -0
- package/lib/dashboard/operate-review-contract.mjs +175 -0
- package/lib/dashboard/operate-review-display-workspace-contract.d.mts +54 -0
- package/lib/dashboard/operate-review-display-workspace-contract.mjs +258 -0
- package/lib/dashboard/operate-review-payload-safety.d.mts +7 -0
- package/lib/dashboard/operate-review-payload-safety.mjs +42 -0
- package/lib/dashboard/operate-review-workspace-projection-v2.d.mts +218 -0
- package/lib/protocol/index.d.ts +2638 -0
- package/package.json +115 -0
- package/registries/commands.json +1952 -0
- package/registries/diagram-grammars.json +2407 -0
- package/registries/diagram-semantic-patterns.json +111 -0
- package/registries/output-paths.json +40 -0
- package/registries/outputs.json +864 -0
- package/registries/roles.json +661 -0
- package/registries/rules.json +261 -0
- package/registries/skill-host-profiles.json +247 -0
- package/registries/skill-modules.json +1112 -0
- package/registries/skill-routing.json +389 -0
- package/registries/skills.json +1545 -0
- package/registries/task-kinds.json +220 -0
- package/registry/adapters.json +110 -0
- package/registry/artifact-theme.json +60 -0
- package/registry/evaluation-graders.json +303 -0
- package/registry/evaluation-host-profiles.json +131 -0
- package/registry/frozen-commands.json +15 -0
- package/registry/landing-operations.json +20 -0
- package/registry/landing-workflows.json +70 -0
- package/registry/live-evidence-providers.json +1 -0
- package/registry/operate-v2-contracts.json +5965 -0
- package/registry/professional-skills.json +115 -0
- package/registry/roles.json +14 -0
- package/registry/ship-review-specialists.json +42 -0
- package/schemas/v1.0.0/design-approved.schema.json +35 -0
- package/schemas/v1.0.0/design-feedback.schema.json +169 -0
- package/schemas/v1.0.0/design-manifest.schema.json +90 -0
- package/schemas/v1.0.0/design-session.schema.json +73 -0
- package/schemas/v1.0.0/graph.schema.json +100 -0
- package/schemas/v1.0.0/pipeline-shipped.schema.json +154 -0
- package/schemas/v1.0.0/run-manifest.schema.json +81 -0
- package/schemas/v1.0.0/spec.schema.json +120 -0
- package/schemas/v1.0.0/stack.schema.json +184 -0
- package/schemas/v1.0.0/story.schema.json +95 -0
- package/schemas/v1.0.0/task.schema.json +171 -0
- package/schemas/v1.0.0/taste-profile.schema.json +96 -0
- package/schemas/v1.1.0/adapter-registry.schema.json +72 -0
- package/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
- package/schemas/v1.1.0/artifact-paste.schema.json +49 -0
- package/schemas/v1.1.0/artifact-review.schema.json +97 -0
- package/schemas/v1.1.0/artifact-room-descriptor.schema.json +39 -0
- package/schemas/v1.1.0/artifact-room-event.schema.json +184 -0
- package/schemas/v1.1.0/artifact-room-signed-event.schema.json +58 -0
- package/schemas/v1.1.0/artifact-theme.schema.json +139 -0
- package/schemas/v1.1.0/browser-qa-gate.schema.json +21 -0
- package/schemas/v1.1.0/browser-qa-result.schema.json +24 -0
- package/schemas/v1.1.0/browser-qa-session.schema.json +12 -0
- package/schemas/v1.1.0/ecosystem-manifest.schema.json +46 -0
- package/schemas/v1.1.0/investigation-diagnosis.schema.json +12 -0
- package/schemas/v1.1.0/investigation-event.schema.json +15 -0
- package/schemas/v1.1.0/investigation-experiment.schema.json +17 -0
- package/schemas/v1.1.0/investigation-fix.schema.json +11 -0
- package/schemas/v1.1.0/investigation-hypothesis.schema.json +6 -0
- package/schemas/v1.1.0/investigation-observation.schema.json +10 -0
- package/schemas/v1.1.0/investigation-receipt.schema.json +7 -0
- package/schemas/v1.1.0/investigation-record.schema.json +7 -0
- package/schemas/v1.1.0/investigation-request.schema.json +34 -0
- package/schemas/v1.1.0/planning-review-event.schema.json +64 -0
- package/schemas/v1.1.0/planning-review-receipt.schema.json +19 -0
- package/schemas/v1.1.0/planning-review-record.schema.json +176 -0
- package/schemas/v1.1.0/planning-review-state.schema.json +19 -0
- package/schemas/v1.1.0/professional-skills.schema.json +105 -0
- package/schemas/v1.1.0/professional-specification.schema.json +111 -0
- package/schemas/v1.1.0/provenance-event.schema.json +82 -0
- package/schemas/v1.1.0/role-registry.schema.json +28 -0
- package/schemas/v1.1.0/runtime-lock.schema.json +39 -0
- package/schemas/v1.1.0/ship-closure.schema.json +353 -0
- package/schemas/v1.1.0/ship-review-specialist-registry.schema.json +29 -0
- package/schemas/v1.1.0/ship-risk-classification.schema.json +48 -0
- package/schemas/v1.1.0/specialist-review-result.schema.json +19 -0
- package/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
- package/schemas/v1.10.0/design-review-context.schema.json +191 -0
- package/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
- package/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
- package/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
- package/schemas/v1.12.0/enterprise-access-context.schema.json +217 -0
- package/schemas/v1.12.0/enterprise-agent-handoff.schema.json +508 -0
- package/schemas/v1.12.0/enterprise-artifact-revision.schema.json +87 -0
- package/schemas/v1.12.0/enterprise-change-proposal.schema.json +359 -0
- package/schemas/v1.12.0/enterprise-evidence-reference.schema.json +147 -0
- package/schemas/v1.12.0/enterprise-review-thread.schema.json +278 -0
- package/schemas/v1.12.0/enterprise-sync-state.schema.json +169 -0
- package/schemas/v1.2.0/adapter-registry.schema.json +83 -0
- package/schemas/v1.2.0/dashboard-bootstrap.schema.json +219 -0
- package/schemas/v1.2.0/ecosystem-release-operation.schema.json +90 -0
- package/schemas/v1.2.0/ecosystem-saga.schema.json +54 -0
- package/schemas/v1.2.0/evidence-diagnostic.schema.json +77 -0
- package/schemas/v1.2.0/guided-answer-envelope.schema.json +73 -0
- package/schemas/v1.2.0/guided-confirmation.schema.json +128 -0
- package/schemas/v1.2.0/guided-question.schema.json +242 -0
- package/schemas/v1.2.0/guided-questionnaire.schema.json +278 -0
- package/schemas/v1.2.0/guided-session.schema.json +141 -0
- package/schemas/v1.2.0/landing-confirmation.schema.json +17 -0
- package/schemas/v1.2.0/landing-event.schema.json +12 -0
- package/schemas/v1.2.0/landing-operation-registry.schema.json +16 -0
- package/schemas/v1.2.0/landing-phase-receipt.schema.json +19 -0
- package/schemas/v1.2.0/landing-plan.schema.json +36 -0
- package/schemas/v1.2.0/landing-receipt.schema.json +12 -0
- package/schemas/v1.2.0/landing-workflow-catalog.schema.json +143 -0
- package/schemas/v1.2.0/operate-action-display-workspace.schema.json +119 -0
- package/schemas/v1.2.0/operate-cycle-display-workspace.schema.json +109 -0
- package/schemas/v1.2.0/operate-executive-board-display-surface.schema.json +72 -0
- package/schemas/v1.2.0/operate-experience-audit-display-surface.schema.json +328 -0
- package/schemas/v1.2.0/operate-experience-display-surface.schema.json +46 -0
- package/schemas/v1.2.0/operate-experience-surface.schema.json +590 -0
- package/schemas/v1.2.0/operate-recovery-display-surface.schema.json +85 -0
- package/schemas/v1.2.0/structured-action.schema.json +91 -0
- package/schemas/v1.3.0/adapter-registry.schema.json +84 -0
- package/schemas/v1.3.0/ecosystem-manifest.schema.json +120 -0
- package/schemas/v1.3.0/release-compatibility-claim.schema.json +46 -0
- package/schemas/v1.3.0/release-ledger-receipt.schema.json +45 -0
- package/schemas/v1.3.0/release-ledger.schema.json +60 -0
- package/schemas/v1.4.0/adapter-registry.schema.json +62 -0
- package/schemas/v1.4.0/evaluation-aggregate-report.schema.json +166 -0
- package/schemas/v1.4.0/evaluation-budget.schema.json +49 -0
- package/schemas/v1.4.0/evaluation-corpus.schema.json +93 -0
- package/schemas/v1.4.0/evaluation-fixture.schema.json +64 -0
- package/schemas/v1.4.0/evaluation-gate-policy.schema.json +33 -0
- package/schemas/v1.4.0/evaluation-grader-registration.schema.json +141 -0
- package/schemas/v1.4.0/evaluation-grader-registry.schema.json +20 -0
- package/schemas/v1.4.0/evaluation-host-profile-registry.schema.json +20 -0
- package/schemas/v1.4.0/evaluation-host-profile.schema.json +73 -0
- package/schemas/v1.4.0/evaluation-observation.schema.json +76 -0
- package/schemas/v1.4.0/evaluation-run-result.schema.json +84 -0
- package/schemas/v1.4.0/evaluation-scenario.schema.json +231 -0
- package/schemas/v1.4.0/evaluation-waiver.schema.json +65 -0
- package/schemas/v1.4.0/skill-certification-receipt.schema.json +103 -0
- package/schemas/v1.5.0/command-catalog.schema.json +296 -0
- package/schemas/v1.5.0/common.schema.json +261 -0
- package/schemas/v1.5.0/generated-asset-manifest.schema.json +313 -0
- package/schemas/v1.5.0/implementation-result.schema.json +152 -0
- package/schemas/v1.5.0/migration-preservation-manifest.schema.json +749 -0
- package/schemas/v1.5.0/output-catalog.schema.json +210 -0
- package/schemas/v1.5.0/output-path-catalog.schema.json +81 -0
- package/schemas/v1.5.0/role-registry.schema.json +261 -0
- package/schemas/v1.5.0/rule-catalog.schema.json +130 -0
- package/schemas/v1.5.0/skill-catalog.schema.json +303 -0
- package/schemas/v1.5.0/task-kind-registry.schema.json +167 -0
- package/schemas/v1.5.0/task-manifest.schema.json +373 -0
- package/schemas/v1.5.0/task-output-manifest.schema.json +462 -0
- package/schemas/v1.6.0/common.schema.json +462 -0
- package/schemas/v1.6.0/diagram-consumer-reference.schema.json +167 -0
- package/schemas/v1.6.0/diagram-document.schema.json +699 -0
- package/schemas/v1.6.0/diagram-fidelity-report.schema.json +137 -0
- package/schemas/v1.6.0/diagram-manifest.schema.json +162 -0
- package/schemas/v1.6.0/diagram-quality-report.schema.json +148 -0
- package/schemas/v1.6.0/diagram-review-binding.schema.json +132 -0
- package/schemas/v1.6.0/diagram-semantic-pattern-registry.schema.json +90 -0
- package/schemas/v1.6.0/diagram-type-registry.schema.json +373 -0
- package/schemas/v1.6.0/generated-asset-manifest.schema.json +103 -0
- package/schemas/v1.6.0/skill-catalog.schema.json +84 -0
- package/schemas/v1.6.0/skill-completion-receipt.schema.json +72 -0
- package/schemas/v1.6.0/skill-consent-record.schema.json +74 -0
- package/schemas/v1.6.0/skill-host-profile-registry.schema.json +526 -0
- package/schemas/v1.6.0/skill-learning-record.schema.json +116 -0
- package/schemas/v1.6.0/skill-module-registry.schema.json +108 -0
- package/schemas/v1.6.0/skill-routing-registry.schema.json +93 -0
- package/schemas/v1.6.0/skill-session.schema.json +73 -0
- package/schemas/v1.6.0/skill-source.schema.json +169 -0
- package/schemas/v1.7.0/common.schema.json +464 -0
- package/schemas/v1.7.0/generated-asset-manifest.schema.json +103 -0
- package/schemas/v1.7.0/planning-id-sequence.schema.json +50 -0
- package/schemas/v1.7.0/request-authority.schema.json +71 -0
- package/schemas/v1.7.0/skill-catalog.schema.json +84 -0
- package/schemas/v1.7.0/skill-completion-receipt.schema.json +72 -0
- package/schemas/v1.7.0/skill-consent-record.schema.json +74 -0
- package/schemas/v1.7.0/skill-host-profile-registry.schema.json +526 -0
- package/schemas/v1.7.0/skill-learning-record.schema.json +116 -0
- package/schemas/v1.7.0/skill-module-registry.schema.json +108 -0
- package/schemas/v1.7.0/skill-routing-registry.schema.json +93 -0
- package/schemas/v1.7.0/skill-session.schema.json +73 -0
- package/schemas/v1.7.0/skill-source.schema.json +169 -0
- package/schemas/v1.7.0/spec.schema.json +117 -0
- package/schemas/v1.7.0/story.schema.json +107 -0
- package/schemas/v1.7.0/task.schema.json +217 -0
- package/schemas/v1.8.0/common.schema.json +96 -0
- package/schemas/v1.8.0/skill-package.schema.json +63 -0
- package/schemas/v1.8.0/utility-command-catalog.schema.json +82 -0
- package/schemas/v1.9.0/design-document.schema.json +306 -0
- package/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
- package/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
- package/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
- package/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
- package/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
- package/schemas/v2.0.0/agent-runtime-manifest.schema.json +59 -0
- package/schemas/v2.0.0/business-operating-snapshot-projection.schema.json +14 -0
- package/schemas/v2.0.0/operate-allowed-action.schema.json +181 -0
- package/schemas/v2.0.0/operate-api-envelope.schema.json +225 -0
- package/schemas/v2.0.0/operate-capability-provider-registration.schema.json +30 -0
- package/schemas/v2.0.0/operate-domain-registration.schema.json +284 -0
- package/schemas/v2.0.0/operate-evidence-provider-registration.schema.json +55 -0
- package/schemas/v2.0.0/operate-evidence-resolver-registration.schema.json +46 -0
- package/schemas/v2.0.0/operate-executor-registration.schema.json +27 -0
- package/schemas/v2.0.0/operate-experience-live-patch.schema.json +47 -0
- package/schemas/v2.0.0/operate-experience-preview.schema.json +51 -0
- package/schemas/v2.0.0/operate-experience-view.schema.json +281 -0
- package/schemas/v2.0.0/operate-live-evidence-provider-registration.schema.json +48 -0
- package/schemas/v2.0.0/operate-live-evidence-provider-registry.schema.json +17 -0
- package/schemas/v2.0.0/operate-metric-provider-registration.schema.json +12 -0
- package/schemas/v2.0.0/operate-policy-provider-registration.schema.json +33 -0
- package/schemas/v2.0.0/operate-review-bound-submission.schema.json +29 -0
- package/schemas/v2.0.0/operate-review-display-workspace.schema.json +390 -0
- package/schemas/v2.0.0/operate-snapshot-provider-registration.schema.json +16 -0
- package/schemas/v2.0.0/operate-tool-call.schema.json +172 -0
- package/schemas/v2.0.0/operate-verification-provider-registration.schema.json +12 -0
- package/schemas/v2.0.0/operating-action-policy.schema.json +31 -0
- package/schemas/v2.0.0/operating-action-verification-plan.schema.json +13 -0
- package/schemas/v2.0.0/operating-action.schema.json +86 -0
- package/schemas/v2.0.0/operating-advisor-result.schema.json +394 -0
- package/schemas/v2.0.0/operating-approval-record.schema.json +23 -0
- package/schemas/v2.0.0/operating-approval-requirement.schema.json +31 -0
- package/schemas/v2.0.0/operating-artifact.schema.json +52 -0
- package/schemas/v2.0.0/operating-assignment.schema.json +437 -0
- package/schemas/v2.0.0/operating-assumption.schema.json +16 -0
- package/schemas/v2.0.0/operating-capability-availability.schema.json +15 -0
- package/schemas/v2.0.0/operating-capability-grant.schema.json +14 -0
- package/schemas/v2.0.0/operating-challenger-review.schema.json +204 -0
- package/schemas/v2.0.0/operating-checkpoint.schema.json +43 -0
- package/schemas/v2.0.0/operating-claim.schema.json +17 -0
- package/schemas/v2.0.0/operating-connector-checkpoint.schema.json +28 -0
- package/schemas/v2.0.0/operating-context-capture.schema.json +74 -0
- package/schemas/v2.0.0/operating-cycle-input-binding.schema.json +30 -0
- package/schemas/v2.0.0/operating-cycle.schema.json +42 -0
- package/schemas/v2.0.0/operating-decision-ledger.schema.json +237 -0
- package/schemas/v2.0.0/operating-decision.schema.json +137 -0
- package/schemas/v2.0.0/operating-delivery-evidence.schema.json +46 -0
- package/schemas/v2.0.0/operating-delivery-route.schema.json +43 -0
- package/schemas/v2.0.0/operating-delta.schema.json +13 -0
- package/schemas/v2.0.0/operating-domain-projection.schema.json +15 -0
- package/schemas/v2.0.0/operating-event-trigger.schema.json +11 -0
- package/schemas/v2.0.0/operating-event.schema.json +505 -0
- package/schemas/v2.0.0/operating-evidence-candidate.schema.json +88 -0
- package/schemas/v2.0.0/operating-evidence-edge.schema.json +39 -0
- package/schemas/v2.0.0/operating-evidence-graph.schema.json +25 -0
- package/schemas/v2.0.0/operating-evidence-observation.schema.json +48 -0
- package/schemas/v2.0.0/operating-evidence-ref.schema.json +51 -0
- package/schemas/v2.0.0/operating-evidence-resolution.schema.json +54 -0
- package/schemas/v2.0.0/operating-execution-result.schema.json +23 -0
- package/schemas/v2.0.0/operating-executive-board.schema.json +78 -0
- package/schemas/v2.0.0/operating-finding.schema.json +116 -0
- package/schemas/v2.0.0/operating-governed-operation.schema.json +54 -0
- package/schemas/v2.0.0/operating-intelligence-input-bundle.schema.json +128 -0
- package/schemas/v2.0.0/operating-intelligence-plan.schema.json +302 -0
- package/schemas/v2.0.0/operating-learning-receipt.schema.json +31 -0
- package/schemas/v2.0.0/operating-learning.schema.json +13 -0
- package/schemas/v2.0.0/operating-live-evidence-consent-record.schema.json +42 -0
- package/schemas/v2.0.0/operating-live-evidence-ingestion.schema.json +31 -0
- package/schemas/v2.0.0/operating-measurement-plan.schema.json +18 -0
- package/schemas/v2.0.0/operating-measurement-schedule-receipt.schema.json +7 -0
- package/schemas/v2.0.0/operating-measurement-schedule.schema.json +16 -0
- package/schemas/v2.0.0/operating-metric-observation.schema.json +15 -0
- package/schemas/v2.0.0/operating-metric.schema.json +18 -0
- package/schemas/v2.0.0/operating-model-state.schema.json +36 -0
- package/schemas/v2.0.0/operating-objective.schema.json +21 -0
- package/schemas/v2.0.0/operating-origin.schema.json +31 -0
- package/schemas/v2.0.0/operating-outcome-evaluation.schema.json +46 -0
- package/schemas/v2.0.0/operating-outcome.schema.json +13 -0
- package/schemas/v2.0.0/operating-planning-proposal.schema.json +45 -0
- package/schemas/v2.0.0/operating-policy-evaluation.schema.json +28 -0
- package/schemas/v2.0.0/operating-review-read.schema.json +217 -0
- package/schemas/v2.0.0/operating-review-receipt.schema.json +64 -0
- package/schemas/v2.0.0/operating-review.schema.json +47 -0
- package/schemas/v2.0.0/operating-risk.schema.json +96 -0
- package/schemas/v2.0.0/operating-rollback-plan.schema.json +10 -0
- package/schemas/v2.0.0/operating-rollback-result.schema.json +20 -0
- package/schemas/v2.0.0/operating-runtime-state.schema.json +289 -0
- package/schemas/v2.0.0/operating-scenario.schema.json +13 -0
- package/schemas/v2.0.0/operating-snapshot.schema.json +38 -0
- package/schemas/v2.0.0/operating-submission.schema.json +34 -0
- package/schemas/v2.0.0/operating-trace-matrix.schema.json +176 -0
- package/schemas/v2.0.0/operating-work-change-set.schema.json +89 -0
- package/schemas/v2.0.0/operating-work-ledger.schema.json +40 -0
- package/schemas/v2.0.0/software-operating-snapshot-projection.schema.json +14 -0
- package/src/browser-contracts.d.mts +5 -0
- package/src/browser-contracts.mjs +40 -0
- package/src/canonical-json.d.mts +5 -0
- package/src/canonical-json.mjs +142 -0
- package/src/compat/live-evidence-v2.mjs +1019 -0
- package/src/compat/operate-experience-live-patch.mjs +66 -0
- package/src/compat/operating-planning-contracts.mjs +114 -0
- package/src/contracts.d.mts +42 -0
- package/src/contracts.mjs +990 -0
- package/src/design-contracts.d.mts +62 -0
- package/src/design-contracts.mjs +186 -0
- package/src/design-publication-contracts.d.mts +4 -0
- package/src/design-publication-contracts.mjs +85 -0
- package/src/diagram-contracts.d.mts +19 -0
- package/src/diagram-contracts.mjs +28 -0
- package/src/enterprise-contracts.d.mts +107 -0
- package/src/enterprise-contracts.mjs +463 -0
- package/src/errors.d.mts +11 -0
- package/src/errors.mjs +109 -0
- package/src/generated/canonical-registries.mjs +5554 -0
- package/src/generated/contract-catalog-v2.mjs +7076 -0
- package/src/generated/diagram-registries.mjs +2529 -0
- package/src/index.d.mts +10 -0
- package/src/index.mjs +40 -0
- package/src/json-schema.d.mts +7 -0
- package/src/json-schema.mjs +283 -0
- package/src/planning-contracts.d.mts +10 -0
- package/src/planning-contracts.mjs +53 -0
- package/src/registries.d.mts +40 -0
- package/src/registries.mjs +261 -0
- package/src/review-experience-contracts.d.mts +11 -0
- package/src/review-experience-contracts.mjs +103 -0
- package/src/semver.d.mts +2 -0
- package/src/semver.mjs +7 -0
- package/src/skill-source-contracts.d.mts +25 -0
- package/src/skill-source-contracts.mjs +105 -0
- package/src/task-contracts.d.mts +7 -0
- package/src/task-contracts.mjs +130 -0
- package/src/workspace-contracts.d.mts +26 -0
- package/src/workspace-contracts.mjs +83 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openplanr.dev/schemas/v1.0.0/graph.schema.json",
|
|
4
|
+
"title": "OpenPlanr dashboard project Graph (v1.0.0)",
|
|
5
|
+
"description": "The typed project graph the dashboard renders. Built from .planr/ artifacts either by delegating to the planr CLI (planr graph --json / planr status --json) or by the native frontmatter reader; both paths must validate against this schema (SPEC-016 / US-002). A Graph is { nodes: Node[], edges: Edge[] }. A Node is one artifact (epic, feature, story, task, spec, backlog item, quick task, sprint, or ADR) with a classified status mirroring /planr-pipeline:status A.2. An Edge is either a `contains` hierarchy link (from a frontmatter parent id) or a `depends_on` link (from a dependsOn entry). Definitions are inlined (no $ref) to match the conformance validator subset.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["nodes", "edges"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"nodes": {
|
|
11
|
+
"type": "array",
|
|
12
|
+
"description": "Every recognized .planr/ artifact as a typed node.",
|
|
13
|
+
"items": {
|
|
14
|
+
"type": "object",
|
|
15
|
+
"additionalProperties": false,
|
|
16
|
+
"required": ["id", "type", "title", "status", "frontmatter"],
|
|
17
|
+
"properties": {
|
|
18
|
+
"id": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"minLength": 1,
|
|
21
|
+
"description": "Artifact identifier, taken from frontmatter `id` (e.g. SPEC-016, US-002, T-007, EPIC-001, FEAT-003, ADR-004). Unique within the graph."
|
|
22
|
+
},
|
|
23
|
+
"type": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"enum": [
|
|
26
|
+
"epic",
|
|
27
|
+
"feature",
|
|
28
|
+
"story",
|
|
29
|
+
"task",
|
|
30
|
+
"spec",
|
|
31
|
+
"backlog",
|
|
32
|
+
"quick",
|
|
33
|
+
"sprint",
|
|
34
|
+
"adr"
|
|
35
|
+
],
|
|
36
|
+
"description": "Artifact kind, inferred from the file's path pattern and id prefix. Covers both the agile model (epic/feature/story/task) and the spec model (spec/story/task)."
|
|
37
|
+
},
|
|
38
|
+
"title": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"description": "Human-readable title from frontmatter `title`, or the artifact id when no title is present."
|
|
41
|
+
},
|
|
42
|
+
"status": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"enum": [
|
|
45
|
+
"done",
|
|
46
|
+
"in-progress",
|
|
47
|
+
"blocked",
|
|
48
|
+
"outstanding",
|
|
49
|
+
"addressed"
|
|
50
|
+
],
|
|
51
|
+
"description": "Classified status, mirroring /planr-pipeline:status A.2: done (done|closed|completed|shipped|released), addressed (promoted|superseded), blocked, in-progress, otherwise outstanding. Never an invented status."
|
|
52
|
+
},
|
|
53
|
+
"frontmatter": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"additionalProperties": true,
|
|
56
|
+
"description": "The artifact's raw parsed YAML frontmatter, preserved for the inspector. Includes githubIssue / linearIssueIdentifier when present."
|
|
57
|
+
},
|
|
58
|
+
"githubIssue": {
|
|
59
|
+
"type": ["string", "integer"],
|
|
60
|
+
"description": "GitHub issue/PR reference from frontmatter `githubIssue`, hoisted onto the node for cross-reference. Present only when the frontmatter carries it."
|
|
61
|
+
},
|
|
62
|
+
"linearIssueIdentifier": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"description": "Linear identifier from frontmatter `linearIssueIdentifier` (e.g. ENG-99), hoisted onto the node. Present only when the frontmatter carries it."
|
|
65
|
+
},
|
|
66
|
+
"body": {
|
|
67
|
+
"type": "string",
|
|
68
|
+
"description": "The artifact's markdown body below the frontmatter. Optional; included by getNode for the detail view."
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"edges": {
|
|
74
|
+
"type": "array",
|
|
75
|
+
"description": "Hierarchy (`contains`) and dependency (`depends_on`) links between nodes.",
|
|
76
|
+
"items": {
|
|
77
|
+
"type": "object",
|
|
78
|
+
"additionalProperties": false,
|
|
79
|
+
"required": ["from", "to", "kind"],
|
|
80
|
+
"properties": {
|
|
81
|
+
"from": {
|
|
82
|
+
"type": "string",
|
|
83
|
+
"minLength": 1,
|
|
84
|
+
"description": "Source node id. For `contains` this is the parent (e.g. the story id from a task's storyId). For `depends_on` this is the dependent node."
|
|
85
|
+
},
|
|
86
|
+
"to": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"minLength": 1,
|
|
89
|
+
"description": "Target node id. For `contains` this is the child. For `depends_on` this is the prerequisite (e.g. an entry from dependsOn)."
|
|
90
|
+
},
|
|
91
|
+
"kind": {
|
|
92
|
+
"type": "string",
|
|
93
|
+
"enum": ["contains", "depends_on"],
|
|
94
|
+
"description": "`contains` = hierarchy edge derived from a frontmatter parent id (epicId/featureId/specId/storyId). `depends_on` = dependency edge derived from a dependsOn array entry."
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openplanr.dev/schemas/v1.0.0/pipeline-shipped.schema.json",
|
|
4
|
+
"title": "OpenPlanr .pipeline-shipped marker (v1.0.0)",
|
|
5
|
+
"description": "JSON Schema for the YAML completion marker written by SHIP at the end of every successful (or partially-successful) run. Path: output/feats/feat-{name}/.pipeline-shipped (default mode) or .planr/specs/SPEC-NNN-{slug}/.pipeline-shipped (spec-driven mode). Note: this artifact uses `pipeline_version` (the planr-pipeline plugin semver) rather than a `schemaVersion` field; the schema-version of the marker is encoded in the file path itself (schemas/v1.0.0/...).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"allOf": [
|
|
9
|
+
{
|
|
10
|
+
"if": { "required": ["operating_origin"] },
|
|
11
|
+
"then": { "required": ["delivery_status", "run_id", "manifest_hash", "manifest_start_line", "manifest_end_line"] }
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"if": { "required": ["closure_receipt_hash"] },
|
|
15
|
+
"then": { "required": ["candidate_hash", "gate_evidence_hash", "run_id", "manifest_hash", "manifest_start_line", "manifest_end_line"] }
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"required": [
|
|
19
|
+
"shipped_at",
|
|
20
|
+
"pipeline_version",
|
|
21
|
+
"runtime",
|
|
22
|
+
"mode",
|
|
23
|
+
"feature",
|
|
24
|
+
"tasks_executed",
|
|
25
|
+
"tasks_failed",
|
|
26
|
+
"qa_gate_status",
|
|
27
|
+
"duration_seconds",
|
|
28
|
+
"agents_invoked",
|
|
29
|
+
"devops_status",
|
|
30
|
+
"docs_status",
|
|
31
|
+
"snapshot_status",
|
|
32
|
+
"error_reports"
|
|
33
|
+
],
|
|
34
|
+
"properties": {
|
|
35
|
+
"shipped_at": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"format": "date-time",
|
|
38
|
+
"description": "ISO 8601 UTC timestamp at which SHIP completed."
|
|
39
|
+
},
|
|
40
|
+
"pipeline_version": {
|
|
41
|
+
"type": "string",
|
|
42
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+(?:-[A-Za-z0-9.-]+)?(?:\\+[A-Za-z0-9.-]+)?$",
|
|
43
|
+
"description": "Semver of the planr-pipeline plugin that produced the marker (e.g. 0.24.9)."
|
|
44
|
+
},
|
|
45
|
+
"runtime": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"enum": ["claude-code", "cursor", "codex", "unknown"],
|
|
48
|
+
"description": "Runtime adapter that executed this turn (NEW in v1.0.0). `unknown` is the Step 1.7 fail-safe value when no adapter matched — it still ships per-task and writes a marker, so the enum admits it."
|
|
49
|
+
},
|
|
50
|
+
"mode": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"enum": ["default", "spec-driven"],
|
|
53
|
+
"description": "Pipeline execution mode."
|
|
54
|
+
},
|
|
55
|
+
"feature": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"minLength": 1,
|
|
58
|
+
"description": "Feature name (default mode) or spec slug (spec-driven mode)."
|
|
59
|
+
},
|
|
60
|
+
"tasks_executed": {
|
|
61
|
+
"type": "integer",
|
|
62
|
+
"minimum": 0,
|
|
63
|
+
"description": "Number of tasks executed during this SHIP run."
|
|
64
|
+
},
|
|
65
|
+
"tasks_failed": {
|
|
66
|
+
"type": "integer",
|
|
67
|
+
"minimum": 0,
|
|
68
|
+
"description": "Number of tasks that failed (after the 3-iteration correction loop)."
|
|
69
|
+
},
|
|
70
|
+
"qa_gate_status": {
|
|
71
|
+
"type": "string",
|
|
72
|
+
"enum": ["passed", "failed", "skipped"],
|
|
73
|
+
"description": "Outcome of the qa-agent gate."
|
|
74
|
+
},
|
|
75
|
+
"delivery_status": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"enum": ["succeeded", "blocked", "failed"],
|
|
78
|
+
"description": "Terminal delivery classification derived by the pipeline from task and QA custody."
|
|
79
|
+
},
|
|
80
|
+
"duration_seconds": {
|
|
81
|
+
"type": "integer",
|
|
82
|
+
"minimum": 0,
|
|
83
|
+
"description": "Wall-clock duration of the SHIP run in whole seconds."
|
|
84
|
+
},
|
|
85
|
+
"agents_invoked": {
|
|
86
|
+
"type": "array",
|
|
87
|
+
"description": "List of role names that actually ran during this SHIP turn. Order is informational.",
|
|
88
|
+
"items": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"enum": [
|
|
91
|
+
"designer-agent",
|
|
92
|
+
"specification-agent",
|
|
93
|
+
"frontend-agent",
|
|
94
|
+
"backend-agent",
|
|
95
|
+
"db-agent",
|
|
96
|
+
"qa-agent",
|
|
97
|
+
"devops-agent",
|
|
98
|
+
"doc-gen-agent"
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
"uniqueItems": true
|
|
102
|
+
},
|
|
103
|
+
"devops_status": {
|
|
104
|
+
"type": "string",
|
|
105
|
+
"enum": ["generated", "skipped"],
|
|
106
|
+
"description": "Whether devops-agent produced artifacts this turn."
|
|
107
|
+
},
|
|
108
|
+
"docs_status": {
|
|
109
|
+
"type": "string",
|
|
110
|
+
"enum": ["generated", "skipped"],
|
|
111
|
+
"description": "Whether doc-gen-agent produced artifacts this turn."
|
|
112
|
+
},
|
|
113
|
+
"snapshot_status": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"enum": ["refreshed", "skipped"],
|
|
116
|
+
"description": "Whether the codebase snapshot was refreshed this turn."
|
|
117
|
+
},
|
|
118
|
+
"error_reports": {
|
|
119
|
+
"type": "array",
|
|
120
|
+
"description": "Relative or absolute repo paths for any **`T-<NNN>-error-report.md`** handoffs produced after R6 caps. Legacy singleton `tasks/error-report.md` is forbidden.",
|
|
121
|
+
"items": {
|
|
122
|
+
"type": "string"
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"dispatch_style": {
|
|
126
|
+
"type": "string",
|
|
127
|
+
"enum": ["native", "workflow"],
|
|
128
|
+
"description": "How the multi-task fan-out was scheduled (NEW, optional): `native` = orchestrator emitted the Agent calls directly; `workflow` = the host Workflow tool scheduled the dependsOn DAG. Omitted on per-task runtimes (cursor/codex), single-task runs, and markers written before this field existed."
|
|
129
|
+
},
|
|
130
|
+
"run_id": { "type": "string", "minLength": 1 },
|
|
131
|
+
"manifest_hash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
|
|
132
|
+
"manifest_start_line": { "type": "integer", "minimum": 1 },
|
|
133
|
+
"manifest_end_line": { "type": "integer", "minimum": 1 },
|
|
134
|
+
"closure_receipt_hash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
|
|
135
|
+
"candidate_hash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
|
|
136
|
+
"gate_evidence_hash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
|
|
137
|
+
"operating_origin": {
|
|
138
|
+
"$ref": "#/$defs/operatingOrigin"
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
"$defs": {
|
|
142
|
+
"operatingOrigin": {
|
|
143
|
+
"type": "object", "additionalProperties": false,
|
|
144
|
+
"required": ["correlation_id", "proposal_id", "proposal_hash", "transaction_id", "receipt_hash"],
|
|
145
|
+
"properties": {
|
|
146
|
+
"correlation_id": { "type": "string", "minLength": 1, "maxLength": 128 },
|
|
147
|
+
"proposal_id": { "type": "string", "pattern": "^oprop_[a-f0-9]{32}$" },
|
|
148
|
+
"proposal_hash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
|
|
149
|
+
"transaction_id": { "type": "string", "pattern": "^txn_[a-f0-9]{32}$" },
|
|
150
|
+
"receipt_hash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" }
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openplanr.dev/schemas/v1.0.0/run-manifest.schema.json",
|
|
4
|
+
"title": "OpenPlanr .run-manifest.jsonl line object (v1.0.0)",
|
|
5
|
+
"description": "Single JSON Lines record appended to SPEC_DIR/.run-manifest.jsonl (spec-driven) or output/feats/feat-{slug}/.run-manifest.jsonl (default). Append-only lifecycle — never truncate the manifest file wholesale.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"stage",
|
|
10
|
+
"agent",
|
|
11
|
+
"started_at",
|
|
12
|
+
"ended_at",
|
|
13
|
+
"files_written",
|
|
14
|
+
"files_modified",
|
|
15
|
+
"exit_status",
|
|
16
|
+
"error_summary"
|
|
17
|
+
],
|
|
18
|
+
"properties": {
|
|
19
|
+
"stage": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"minLength": 1,
|
|
22
|
+
"description": "Orchestration boundary label (e.g. ship.bootstrap, ship.inputs-done, ship.task:T-003, qa-gate)."
|
|
23
|
+
},
|
|
24
|
+
"agent": {
|
|
25
|
+
"description": "Subagent slug or null when no agent (orchestration-only milestone).",
|
|
26
|
+
"type": ["string", "null"]
|
|
27
|
+
},
|
|
28
|
+
"started_at": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"format": "date-time",
|
|
31
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$"
|
|
32
|
+
},
|
|
33
|
+
"ended_at": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"format": "date-time",
|
|
36
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$"
|
|
37
|
+
},
|
|
38
|
+
"files_written": {
|
|
39
|
+
"type": "array",
|
|
40
|
+
"description": "Repo-relative POSIX paths newly created.",
|
|
41
|
+
"items": { "type": "string", "minLength": 1 },
|
|
42
|
+
"default": []
|
|
43
|
+
},
|
|
44
|
+
"files_modified": {
|
|
45
|
+
"type": "array",
|
|
46
|
+
"description": "Repo-relative POSIX paths of files edited in place.",
|
|
47
|
+
"items": { "type": "string", "minLength": 1 },
|
|
48
|
+
"default": []
|
|
49
|
+
},
|
|
50
|
+
"exit_status": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"enum": ["success", "failure", "skipped"],
|
|
53
|
+
"description": "Outcome of this stage boundary."
|
|
54
|
+
},
|
|
55
|
+
"error_summary": {
|
|
56
|
+
"description": "null when exit_status !== failure; otherwise one concise line.",
|
|
57
|
+
"type": ["string", "null"]
|
|
58
|
+
},
|
|
59
|
+
"cost_hint": {
|
|
60
|
+
"description": "Optional non-binding cue surfaced in status when present.",
|
|
61
|
+
"type": ["string", "null"],
|
|
62
|
+
"default": null
|
|
63
|
+
},
|
|
64
|
+
"operating_origin": {
|
|
65
|
+
"$ref": "#/$defs/operatingOrigin"
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"$defs": {
|
|
69
|
+
"operatingOrigin": {
|
|
70
|
+
"type": "object", "additionalProperties": false,
|
|
71
|
+
"required": ["correlation_id", "proposal_id", "proposal_hash", "transaction_id", "receipt_hash"],
|
|
72
|
+
"properties": {
|
|
73
|
+
"correlation_id": { "type": "string", "minLength": 1, "maxLength": 128 },
|
|
74
|
+
"proposal_id": { "type": "string", "pattern": "^oprop_[a-f0-9]{32}$" },
|
|
75
|
+
"proposal_hash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
|
|
76
|
+
"transaction_id": { "type": "string", "pattern": "^txn_[a-f0-9]{32}$" },
|
|
77
|
+
"receipt_hash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" }
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openplanr.dev/schemas/v1.0.0/spec.schema.json",
|
|
4
|
+
"title": "OpenPlanr SPEC frontmatter (v1.0.0)",
|
|
5
|
+
"description": "JSON Schema for the YAML frontmatter of a SPEC-NNN-{slug}.md artifact in spec-driven mode. Validates the canonical shape produced by `planr spec shape` / `planr spec decompose` and the planr-pipeline specification-agent.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"id",
|
|
10
|
+
"title",
|
|
11
|
+
"slug",
|
|
12
|
+
"schemaVersion",
|
|
13
|
+
"status",
|
|
14
|
+
"priority",
|
|
15
|
+
"created",
|
|
16
|
+
"updated",
|
|
17
|
+
"ui_files",
|
|
18
|
+
"tech_dependencies"
|
|
19
|
+
],
|
|
20
|
+
"properties": {
|
|
21
|
+
"id": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"pattern": "^(SPEC|FEAT)-\\d{3}$",
|
|
24
|
+
"description": "Feature/Spec identifier. SPEC-NNN in spec-driven mode (e.g. SPEC-001), FEAT-NNN in default mode (e.g. FEAT-001). Scoped to the parent project."
|
|
25
|
+
},
|
|
26
|
+
"title": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"minLength": 1,
|
|
29
|
+
"description": "Human-readable spec title."
|
|
30
|
+
},
|
|
31
|
+
"slug": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
34
|
+
"minLength": 1,
|
|
35
|
+
"description": "URL-safe lowercase slug used in the spec directory path."
|
|
36
|
+
},
|
|
37
|
+
"schemaVersion": {
|
|
38
|
+
"const": "1.0.0",
|
|
39
|
+
"description": "Pinned to the OpenPlanr Protocol reader version."
|
|
40
|
+
},
|
|
41
|
+
"status": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"enum": [
|
|
44
|
+
"pending",
|
|
45
|
+
"shaping",
|
|
46
|
+
"shaped",
|
|
47
|
+
"decomposing",
|
|
48
|
+
"decomposed",
|
|
49
|
+
"ready-for-pipeline",
|
|
50
|
+
"in-pipeline",
|
|
51
|
+
"done"
|
|
52
|
+
],
|
|
53
|
+
"description": "Current lifecycle state of the spec."
|
|
54
|
+
},
|
|
55
|
+
"priority": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"enum": ["P0", "P1", "P2", "P3"],
|
|
58
|
+
"description": "Priority tier."
|
|
59
|
+
},
|
|
60
|
+
"milestone": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"description": "Optional milestone label (e.g. v1.0)."
|
|
63
|
+
},
|
|
64
|
+
"po": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"description": "Optional spec owner identifier (typically an email)."
|
|
67
|
+
},
|
|
68
|
+
"created": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"format": "date",
|
|
71
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
72
|
+
"description": "ISO date (YYYY-MM-DD) of spec creation."
|
|
73
|
+
},
|
|
74
|
+
"updated": {
|
|
75
|
+
"type": "string",
|
|
76
|
+
"format": "date",
|
|
77
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
78
|
+
"description": "ISO date (YYYY-MM-DD) bumped on every edit."
|
|
79
|
+
},
|
|
80
|
+
"ui_files": {
|
|
81
|
+
"type": "array",
|
|
82
|
+
"description": "Array of PNG paths under design/ for UI-bearing specs. Empty array when the spec has no UI surface.",
|
|
83
|
+
"items": {
|
|
84
|
+
"type": "string"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"tech_dependencies": {
|
|
88
|
+
"type": "array",
|
|
89
|
+
"description": "Informational list of upstream technical dependencies. Empty array when none.",
|
|
90
|
+
"items": {
|
|
91
|
+
"type": "string"
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"specificationContract": {
|
|
95
|
+
"const": "professional-specification@1.0.0",
|
|
96
|
+
"description": "Optional marker for a decision-complete professional specification. Legacy specifications omit it and remain readable."
|
|
97
|
+
},
|
|
98
|
+
"review_specialists": {
|
|
99
|
+
"type": "array",
|
|
100
|
+
"maxItems": 5,
|
|
101
|
+
"uniqueItems": true,
|
|
102
|
+
"items": {
|
|
103
|
+
"type": "string",
|
|
104
|
+
"enum": ["security-reviewer", "performance-reviewer", "migration-reviewer", "api-contract-reviewer", "data-integrity-reviewer"]
|
|
105
|
+
},
|
|
106
|
+
"description": "Optional explicitly declared planning-review specialists in canonical registry order."
|
|
107
|
+
},
|
|
108
|
+
"kanbanosId": {
|
|
109
|
+
"type": "string",
|
|
110
|
+
"minLength": 8,
|
|
111
|
+
"pattern": "^[A-Za-z0-9_-]{8,128}$",
|
|
112
|
+
"description": "Optional opaque entity id on the kanbanos hosted board, written back by the sync tool after a successful push (the linearId precedent from the OpenPlanr CLI Linear integration). Sync-tool-owned: humans and planning agents never author or edit it by hand. Absent until the artifact is first pushed. See ADR-012."
|
|
113
|
+
},
|
|
114
|
+
"contentHash": {
|
|
115
|
+
"type": "string",
|
|
116
|
+
"pattern": "^sha256:[a-f0-9]{64}$",
|
|
117
|
+
"description": "Optional digest of the artifact content at the last successful board sync, written back by the sync tool alongside kanbanosId so drift between file and board is detectable. Same sha256:<hex> shape as operating-evidence-index-item@1.3.0. Sync-tool-owned: humans and planning agents never author or edit it by hand. See ADR-012."
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openplanr.dev/schemas/v1.0.0/stack.schema.json",
|
|
4
|
+
"title": "OpenPlanr stack.md required keys (v1.0.0)",
|
|
5
|
+
"description": "JSON Schema for the canonical key set extracted from input/tech/stack.md. The stack file is YAML-in-markdown; consumers extract the keys into a single flat object before validation. BuildCommand, TestCommand, Language, Framework, and ORM are required (ORM may be empty string for stacks without a database).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"schemaVersion",
|
|
10
|
+
"BuildCommand",
|
|
11
|
+
"TestCommand",
|
|
12
|
+
"Language",
|
|
13
|
+
"Framework",
|
|
14
|
+
"ORM"
|
|
15
|
+
],
|
|
16
|
+
"properties": {
|
|
17
|
+
"schemaVersion": {
|
|
18
|
+
"const": "1.0.0",
|
|
19
|
+
"description": "Pinned to the OpenPlanr Protocol reader version."
|
|
20
|
+
},
|
|
21
|
+
"AppName": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "Project name."
|
|
24
|
+
},
|
|
25
|
+
"Version": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "Project version."
|
|
28
|
+
},
|
|
29
|
+
"Description": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"description": "Short project description."
|
|
32
|
+
},
|
|
33
|
+
"Repository": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"description": "Source repository URL."
|
|
36
|
+
},
|
|
37
|
+
"Language": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"description": "Primary backend language (e.g. TypeScript, Python, JavaScript (Node ESM)). May be empty for non-applicable stacks."
|
|
40
|
+
},
|
|
41
|
+
"Framework": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"description": "Backend framework or runtime (e.g. NestJS, Next.js, Claude Code plugin). May be empty when not applicable."
|
|
44
|
+
},
|
|
45
|
+
"RuntimeVersion": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"description": "Runtime/engine version requirement (e.g. Node 20+)."
|
|
48
|
+
},
|
|
49
|
+
"AuthStrategy": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"description": "Authentication strategy (e.g. JWT, OAuth, NextAuth)."
|
|
52
|
+
},
|
|
53
|
+
"APIStyle": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"description": "API style (e.g. REST, GraphQL, RPC)."
|
|
56
|
+
},
|
|
57
|
+
"TestFramework": {
|
|
58
|
+
"type": "string",
|
|
59
|
+
"description": "Backend test framework (e.g. Vitest, Jest, pytest, node:test)."
|
|
60
|
+
},
|
|
61
|
+
"DatabaseType": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"description": "Database engine (e.g. postgres, mysql, sqlite). Empty when no DB."
|
|
64
|
+
},
|
|
65
|
+
"DatabaseHost": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"description": "Database host."
|
|
68
|
+
},
|
|
69
|
+
"DatabasePort": {
|
|
70
|
+
"type": ["string", "integer"],
|
|
71
|
+
"description": "Database port (string or integer)."
|
|
72
|
+
},
|
|
73
|
+
"DatabaseName": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"description": "Database name."
|
|
76
|
+
},
|
|
77
|
+
"DatabaseUser": {
|
|
78
|
+
"type": "string",
|
|
79
|
+
"description": "Database user."
|
|
80
|
+
},
|
|
81
|
+
"DatabasePassword": {
|
|
82
|
+
"type": "string",
|
|
83
|
+
"description": "Database password (typically a secret reference, not a literal)."
|
|
84
|
+
},
|
|
85
|
+
"ORM": {
|
|
86
|
+
"type": "string",
|
|
87
|
+
"description": "ORM (e.g. Prisma, TypeORM, Drizzle, EF Core, SQLAlchemy). Empty string is valid when the project has no DB."
|
|
88
|
+
},
|
|
89
|
+
"MigrationTool": {
|
|
90
|
+
"type": "string",
|
|
91
|
+
"description": "Migration tool (e.g. prisma migrate, alembic, knex)."
|
|
92
|
+
},
|
|
93
|
+
"UIFramework": {
|
|
94
|
+
"type": "string",
|
|
95
|
+
"description": "Frontend UI framework (e.g. React, Vue, SolidJS)."
|
|
96
|
+
},
|
|
97
|
+
"CSSStrategy": {
|
|
98
|
+
"type": "string",
|
|
99
|
+
"description": "CSS approach (e.g. Tailwind, CSS Modules, styled-components)."
|
|
100
|
+
},
|
|
101
|
+
"ComponentLibrary": {
|
|
102
|
+
"type": "string",
|
|
103
|
+
"description": "Component library (e.g. shadcn/ui, MUI, Radix)."
|
|
104
|
+
},
|
|
105
|
+
"StateManagement": {
|
|
106
|
+
"type": "string",
|
|
107
|
+
"description": "State management library (e.g. Zustand, Redux Toolkit, TanStack Query)."
|
|
108
|
+
},
|
|
109
|
+
"FormLibrary": {
|
|
110
|
+
"type": "string",
|
|
111
|
+
"description": "Form library (e.g. React Hook Form, Formik)."
|
|
112
|
+
},
|
|
113
|
+
"HTTPClient": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"description": "HTTP client (e.g. fetch, axios, ky)."
|
|
116
|
+
},
|
|
117
|
+
"ContainerRuntime": {
|
|
118
|
+
"type": "string",
|
|
119
|
+
"description": "Container runtime (e.g. Docker, Podman)."
|
|
120
|
+
},
|
|
121
|
+
"Orchestration": {
|
|
122
|
+
"type": "string",
|
|
123
|
+
"description": "Orchestrator (e.g. Kubernetes, Docker Compose, Fly.io)."
|
|
124
|
+
},
|
|
125
|
+
"CIProvider": {
|
|
126
|
+
"type": "string",
|
|
127
|
+
"description": "CI provider (e.g. GitHub Actions, GitLab CI, CircleCI)."
|
|
128
|
+
},
|
|
129
|
+
"CloudProvider": {
|
|
130
|
+
"type": "string",
|
|
131
|
+
"description": "Cloud provider (e.g. AWS, GCP, Azure, Vercel, Fly.io)."
|
|
132
|
+
},
|
|
133
|
+
"SecretManagement": {
|
|
134
|
+
"type": "string",
|
|
135
|
+
"description": "Secret manager (e.g. AWS Secrets Manager, Vault, .env)."
|
|
136
|
+
},
|
|
137
|
+
"NamingConvention": {
|
|
138
|
+
"type": "object",
|
|
139
|
+
"description": "Code naming conventions across files, components, functions, constants, and database identifiers.",
|
|
140
|
+
"additionalProperties": true
|
|
141
|
+
},
|
|
142
|
+
"FolderStructure": {
|
|
143
|
+
"type": "string",
|
|
144
|
+
"description": "Folder structure style (e.g. domain-based, feature-based, type-based)."
|
|
145
|
+
},
|
|
146
|
+
"TestCoverage": {
|
|
147
|
+
"type": "string",
|
|
148
|
+
"description": "Coverage policy summary."
|
|
149
|
+
},
|
|
150
|
+
"BuildCommand": {
|
|
151
|
+
"type": "string",
|
|
152
|
+
"minLength": 1,
|
|
153
|
+
"description": "Shell command DEV agents run during the correction loop. Must exit 0 for a clean build."
|
|
154
|
+
},
|
|
155
|
+
"TestCommand": {
|
|
156
|
+
"type": "string",
|
|
157
|
+
"minLength": 1,
|
|
158
|
+
"description": "Shell command DEV agents run during the correction loop. Must exit 0 for a clean test pass."
|
|
159
|
+
},
|
|
160
|
+
"LintCommand": {
|
|
161
|
+
"type": "string",
|
|
162
|
+
"description": "Optional lint command. When non-empty, must exit 0."
|
|
163
|
+
},
|
|
164
|
+
"TypeCheckCommand": {
|
|
165
|
+
"type": "string",
|
|
166
|
+
"description": "Optional type-check command. When non-empty, must exit 0."
|
|
167
|
+
},
|
|
168
|
+
"ActiveStackFiles": {
|
|
169
|
+
"type": "array",
|
|
170
|
+
"description": "Resolved paths to active stack overlay files (e.g. backend/nestjs.md, database/prisma.md). Empty array when none.",
|
|
171
|
+
"items": { "type": "string" }
|
|
172
|
+
},
|
|
173
|
+
"DoNotUse": {
|
|
174
|
+
"type": "array",
|
|
175
|
+
"description": "Hard exclusions agents must respect.",
|
|
176
|
+
"items": { "type": "string" }
|
|
177
|
+
},
|
|
178
|
+
"MustPreserve": {
|
|
179
|
+
"type": "array",
|
|
180
|
+
"description": "Files or invariants agents must never modify.",
|
|
181
|
+
"items": { "type": "string" }
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|